feat(resume): check bullet cadence variety, warn-only
An audit of all 18 packages in output/ (368 bullets) found one rhythm
running through every document: 45% of bullets used the same "X, Y and
Z" triple, and the SBB package reached 85% - 11 of 13 bullets, every
Swisscom and Bosch line - plus two adjacent bullets both opening
"Build and...".
This is a style finding, not a truth finding. Every bullet was accurate.
The corpus is clean on the axes that actually signal generated text: no
AI vocabulary (0 hits for leverage/spearheaded/robust/passionate and 56
others across 35 documents), prose em-dashes at 0.08/bullet, and PDF
metadata carrying nothing but MiKTeX pdfTeX with empty Author/Title
(0 AI tokens and 0 generator-term leaks across 69 PDFs). What is left is
cadence: ten bullets sharing one three-beat rhythm read as machine-made
even when nothing in them is false.
Guarded deliberately so it cannot do harm. cadence_checks() emits WARN
and never ERROR, the critique deduction caps at 1 point, and both the
reference and the docstring state that no claim, scope or hedged verb
may be bent to satisfy rhythm. An anti-monotony rule with teeth would be
worse than the problem - it would pressure a future run into loosening a
scoped claim to vary a sentence.
Thresholds are calibrated on the corpus, not guessed. Position length
spreads are bimodal (1-9 words, then 15-17), so the check flags a spread
of <=4, the tight tail at ~28% of positions; the first draft used <=6
and flagged the median. Also fixed the opening-verb extractor, which
read \textbf{Owned ...} as the word "textbf" and produced six false
positives on one document. Per-package warnings now run 0-3.
Docs: resume_reference.md 7a + verification step, critical_rules.md 7a,
critique_framework.md mechanics row, CLAUDE.md corrections log.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
This commit is contained in:
@@ -96,6 +96,36 @@ Natural one-, two- and three-line bullets may be mixed. There are no target char
|
||||
|
||||
Use metrics only when verified. Company size, customer names, generic industry volumes and market economics are context, not personal impact.
|
||||
|
||||
### 7a. Cadence variety (anti-monotony)
|
||||
|
||||
Individually honest bullets can still read as machine-written when they all share one
|
||||
rhythm. Measured across the 18 packages in `output/` (368 bullets): **45 % used the same
|
||||
"X, Y and Z" triple**, and the SBB package reached **85 % — 11 of 13 bullets, every
|
||||
Swisscom and Bosch line**. Nothing in it was false; it simply had one cadence.
|
||||
|
||||
This is a *style* problem, never a truth problem. Never trade accuracy, scope discipline
|
||||
or a hedged verb to fix cadence — an accurate monotonous bullet beats a varied inaccurate
|
||||
one. Fix it by reshaping sentences, not by changing what is claimed.
|
||||
|
||||
Per document, aim for:
|
||||
|
||||
- **At most about half the bullets carrying a three-part list.** The triple is normal resume
|
||||
grammar and humans use it too; the tell is using little else.
|
||||
- **At least two or three bullets in a different shape** — a short declarative with a single
|
||||
object; a bullet with one object rather than three; a bullet whose scope clause comes first.
|
||||
- **No two consecutive bullets opening with the same verb** (the SBB resume had "Build and
|
||||
model…" directly followed by "Build and operate…").
|
||||
- **Visible length variation inside each position**, not just across the document. Five bullets
|
||||
at 25–30 words read as generated even when the document's overall range looks fine.
|
||||
|
||||
`validate_resume_system.py --document <file.tex>` measures all three and reports them as
|
||||
**WARN**, never ERROR — cadence can never fail a document. The length threshold is calibrated
|
||||
on the 50 multi-bullet positions in `output/`, whose spreads are bimodal (1–9 words, then
|
||||
15–17): it flags a spread of 4 words or less, the tight tail, not the median.
|
||||
|
||||
Diagnostic only — like character counts, these are checks, never targets, and no bullet
|
||||
should be padded or trimmed to hit them.
|
||||
|
||||
## 8. Titles and Seniority
|
||||
|
||||
- Preserve official titles when recognizable.
|
||||
@@ -113,6 +143,8 @@ After generation:
|
||||
4. Extract text with `pdftotext` and confirm employer/title/date order.
|
||||
5. Inspect the rendered PDF: no clipping, overlap, tiny text, isolated headings or awkward page break.
|
||||
6. Check that experience begins comfortably on page 1 and certifications are not duplicated.
|
||||
7. Act on any cadence WARN from step 1 (§7a). These never fail the document; reshape the
|
||||
offending sentences, never the claims behind them.
|
||||
|
||||
Do not add content merely to reduce bottom whitespace.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user