v0.4.7 fix: teach the tailor how to write a strong resume bullet (#65)#67
Merged
Merged
Conversation
The TAILOR_PROMPT had heavy guardrails (anchoring, no fabrication, no
identity changes) but never taught the craft of writing a strong bullet.
Cautious models read the silence on craft as "stay close to source" and
produced under-edited output — Sonnet 4.6 leaked 3 forbidden openings
("Performed", "Assisted with", "participated in") through 13 bullets on
a deliberately-weak fixture.
Reported by @guiqvlaixi2164-max in #65: their tailored resume came out
3 pages because resumasher "didn't summarize them."
Adds three new craft sections to scripts/prompts.py, sourced from a
literature review across Harvard / MIT / Stanford / Bock / Indeed /
Jobscan / Teal / Notch:
- Bullet craft: [verb][scope][outcome][method] formula, 7 hard rules,
12-item forbidden-openings list, "do not invent percentages — use
scope/frequency/selectivity/recognition substitutes", 7 curated
weak->strong examples spanning SWE/ops/HR/marketing/leadership/finance
- Summary craft: trailer-shape (identity + 1-2 evidence + optional ask),
FORBIDDEN list covering generic adjectives, first-person, meta-claims
("directly matching X's mandate", "perfect fit for")
- Skills section craft: explicit "skills are claims about the
candidate" rule with WRONG/RIGHT example showing why a JD's BigQuery
requirement doesn't justify adding BigQuery to skills when the
source has only Snowflake
Empirical validation: six iterative claude -p runs across Sonnet 4.6
and Haiku 4.5. Final results vs OLD prompt + Sonnet:
Forbidden-opening violations: 3 -> 0 (even on weaker Haiku)
Fabricated metrics: 0 -> 0 (preserved)
Keyword-stuffing ("demand-planning" added to a bullet): YES -> NO
Meta-summary statements: YES -> NO
Skills-section fabrication ("BigQuery" added): N/A -> NO
First-person pronouns: 0 -> 0
Concrete WRONG/RIGHT worked examples turned out to be load-bearing
across all three iterations — the model literally pattern-matched
onto the example text in subsequent runs, replacing the failing
output with the prompt's stated correct version.
No breaking changes; students on v0.4.6 upgrade in-place. No schema
or variable changes, so existing test_prompts.py schema-literal
preservation assertions still pass. 459 deterministic tests still
green (5:32 sandbox run).
Consciously deferred: typography-side compression (smaller font /
tighter leading / page-overflow auto-shrink) — if real-world testing
on long source resumes shows the prompt-side fix isn't enough, a
renderer-side fallback is the natural follow-up. Also deferred:
explicit per-role bullet count caps (literature suggests 3-5 for
recent / 1-3 for older), since the existing Length and Recency
section already covers overall length.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
TAILOR_PROMPT(Bullet craft, Summary craft, Skills section craft) — the prompt previously had strong anti-fabrication guardrails but no positive teaching on how to actually write a strong resume bullet, so cautious models were producing under-edited source bullets rather than transformed ones.Empirical validation
Six iterative
claude -pruns across Sonnet 4.6 and Haiku 4.5 against a deliberately-weak fixture resume (forbidden openings, generic summary, real and missing metrics mixed, oversized skills list).Three iterations converged the prompt: v1 got the wins above, v2 fixed bullet keyword-stuffing + meta-summary statements after they leaked through, v3 closed a skills-section fabrication gap (model padding skills with
BigQuerybecause the JD listed it though the candidate had only Snowflake). Concrete WRONG/RIGHT worked examples in the prompt were load-bearing — the model pattern-matched onto example text in subsequent runs.Test plan
tests/test_prompts.py— 46 passing (no schema or variable changes; existing assertions hold)/resumasherend-to-end on a real resume to confirm the new prompt produces sensible output across the full pipeline (Eduardo)Consciously deferred
🤖 Generated with Claude Code