fix(F18-F19): get evidence onto page one earlier, measured not asserted
F18 - page-one weighting - Across four compiled packages the first employment entry began at 45-55% of page one. A reader reaching the middle of the page had seen a profile and a skills block, and no evidence. - The old skills rule counted `\skillline` MACROS, which does not control density: six categories with long value lists wrap to twelve or more rendered lines. Replaced with a rendered-line budget verified in the compiled PDF, plus the rule that a skills line repeating what three bullets below already prove is spending the first screen to say it twice. - Employer chronology stays reverse-chronological; the ordering freedom is WITHIN a position, where the bullet closest to the target role leads. - New helper `page_metrics.py` measures page-one geometry from the PDF via pdftotext -bbox. F19 - education and phrasing - Degree + focus + institution crammed into one cell with a right-aligned date produced visible word spacing and mid-word breaks in SBB, NVIDIA and Aker BP. Split the entry, as RUAG_AI_Engineer_C5I already did. Template carries the rule. - Grades and thesis stay only where concretely relevant. claims.json grade_output_rule already keeps grades off by default; the M.Eng. thesis earns its place on condition-monitoring or sensor-data roles and otherwise does not. Validated by measurement rather than assertion - page_metrics.py first reproduced the review's own figures (NVIDIA 55.4%, SBB 50.6%, RUAG 50.3%). That is what makes the after-figure meaningful. - The NVIDIA CV was rebuilt FROM A COPY with the guidance applied: experience moved 55.4% -> 44.0% of page one, page-one text lines 47 -> 39, still two pages, zero overfull boxes, validator PASS. - The submitted package itself was not modified. F17 classifies archives as evidence, not as drafts. The percentage is a diagnostic, not a target: no pixel goal and no rule that page two must be filled. All 19 review findings are now complete. 37/37 tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
This commit is contained in:
1 parent
eecdbdade6
commit
b8c5141279
4 files changed
+137
-7
No files matched your search
@@ -159,3 +159,61 @@ Classify every JD requirement as:
|
||||
- **Gap:** no reliable evidence.
|
||||
|
||||
Never turn Adjacent into Direct by vocabulary substitution. A required, title-defining Gap is an application-fit problem, not a resume-writing problem.
|
||||
|
||||
---
|
||||
|
||||
## Page-one weighting and rendered density (review findings F18/F19, 2026-09-11)
|
||||
|
||||
**The problem, measured:** across four compiled packages the first real employment entry began
|
||||
at **45-55% of page one** (NVIDIA 55.4%, SBB 50.6%, RUAG 50.3%, Aker BP 45.4%). A reader
|
||||
reaching the middle of the page has seen a profile and a skills block, and no evidence yet.
|
||||
Measure with `helpers/page_metrics.py <pdf>` rather than estimating.
|
||||
|
||||
These are **diagnostics, not targets.** There is no pixel goal and no rule that page two must
|
||||
be filled. A package that reads well at 50% is fine; a skills block that pushed evidence there
|
||||
is not.
|
||||
|
||||
### Skills: budget RENDERED lines, not source macros
|
||||
|
||||
The old rule counted `\skillline` macros, which does not control density: six categories with
|
||||
long value lists wrap to **twelve or more rendered lines**. The NVIDIA package is the worked
|
||||
example - six `\skillline` calls, one of them 240 characters.
|
||||
|
||||
- **Aim for roughly 4-8 rendered lines of skills**, verified in the compiled PDF.
|
||||
- **Cut anything the experience bullets already prove.** A skills line repeating "Kubernetes,
|
||||
Docker, GitLab CI/CD" when three bullets below say the same thing spends page-one space to
|
||||
say it twice.
|
||||
- **Keep what the JD actually gates on** plus the ATS literals that are genuinely evidenced.
|
||||
Drop adjacent nice-to-haves; they read as padding and cost the reader's first screen.
|
||||
- Certifications belong on one line, at the end, not spread across categories.
|
||||
|
||||
**Worked example, measured 2026-09-11.** The submitted NVIDIA CV was rebuilt from a copy with
|
||||
this guidance applied - six skill lines cut to four by removing what the experience bullets
|
||||
already prove, and the education entries split per F19. Result: the experience section moved
|
||||
from **55.4% to 44.0%** of page one, page-one text lines from 47 to 39, still two pages, zero
|
||||
overfull boxes, validator PASS. The submitted document itself was NOT modified (F17: archives
|
||||
are evidence).
|
||||
|
||||
### Order: employer chronology stays, evidence order inside a position does not
|
||||
|
||||
- **Keep reverse-chronological employers.** Swiss and German readers expect it and breaking it
|
||||
looks evasive.
|
||||
- **Within a position, lead with the bullet closest to the target role**, not with the one that
|
||||
happens to be most senior or most recent. The chronology is between employers, not inside one.
|
||||
- After the short profile, the next thing should be **either the experience section or a very
|
||||
compact competence block**. Not both at full length.
|
||||
|
||||
### Education (F19)
|
||||
|
||||
Long single-cell entries - degree, focus, institution, right-aligned date - produce visible
|
||||
word-spacing and mid-word breaks. Seen in SBB, NVIDIA and Aker BP.
|
||||
|
||||
- **Split the entry**: degree on the entry line, institution (and focus) on the line below.
|
||||
`RUAG_AI_Engineer_C5I` is the model that already does this well.
|
||||
- **Grades and thesis stay only where they carry concrete relevance.** For an experienced
|
||||
industry profile they usually do not; `claims.json` `grade_output_rule` already says grades
|
||||
are off by default. The M.Eng. thesis is worth naming when the role touches condition
|
||||
monitoring, diagnostics or industrial sensor data - as the SBB asset-management req did -
|
||||
and otherwise not.
|
||||
- Do not let an immutable template line force education detail into a document that does not
|
||||
need it.
|
||||
Reference in new issue
Block a user