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
18 lines
1.3 KiB
Markdown
18 lines
1.3 KiB
Markdown
# Critical Rules — Generation Preflight
|
|
|
|
1. Read `resume_builder/canonical/claims.json`; it overrides every narrative source.
|
|
2. Run `python resume_builder/helpers/validate_resume_system.py` before generation.
|
|
3. Never use an `output/` resume or cover letter as source material.
|
|
4. Choose International Tech by default; use Swiss/DACH only for an appropriate employer.
|
|
5. Put employer, formal title and dates before any narrative framing.
|
|
6. Use an optional 2--3 line summary, 4--6 skills lines and normally 11--14 evidence-led bullets.
|
|
7. Mix natural bullet lengths. There is no character target and no page-fill quota.
|
|
7a. Vary bullet cadence: keep "X, Y and Z" triples under about half the bullets, avoid two
|
|
adjacent bullets opening with the same verb, and vary length *within* each position.
|
|
Style only — never bend a claim, a scope or a hedged verb to fix rhythm (see §7a).
|
|
8. Do not list unverified skills, metrics, customers, scale or causal impact.
|
|
9. Scope Swisscom migration and Data Mesh claims to Dennis's domains, components and products.
|
|
10. Security Champion means the 2025/2026 team role only; omit by default.
|
|
11. LLM evidence is configuration/integration level; no LangChain, fine-tuning, formal evaluation or production LLM ownership.
|
|
12. Run the canonical document validator, compile, inspect and test extracted text before presenting.
|