Skip to content

v0.4.7 fix: teach the tailor how to write a strong resume bullet (#65)#67

Merged
earino merged 1 commit into
mainfrom
fix/issue-65-bullet-and-summary-craft
May 5, 2026
Merged

v0.4.7 fix: teach the tailor how to write a strong resume bullet (#65)#67
earino merged 1 commit into
mainfrom
fix/issue-65-bullet-and-summary-craft

Conversation

@earino

@earino earino commented May 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds three new "craft" sections to 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.
  • Sourced from a literature review across Harvard / MIT / Stanford career services, Bock's XYZ, Indeed, Jobscan, Teal, and Notch. Includes a 12-item forbidden-openings list, 7 curated weak→strong examples, a "no fabricated percentages" rule with scope/frequency/selectivity/recognition substitutes, and concrete WRONG/RIGHT worked examples for keyword-stuffing and skills-section fabrication.
  • Reported by @guiqvlaixi2164-max in [feature] Resume.pdf being lengthy; summary of work experiences required #65 (tailored resume came out 3 pages because resumasher "didn't summarize them" on Sonnet 4.6 with v0.4.5).

Empirical validation

Six iterative claude -p runs 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).

Check OLD + Sonnet 4.6 NEW + Haiku 4.5
Forbidden-opening violations 3 ("Performed", "Assisted with", "participated in") 0
Fabricated metrics 0 0
First-person pronouns 0 0
Keyword-stuffing (JD vocab in bullets) YES NO
Meta-summary statements ("directly matching X") YES NO
Skills-section fabrication (JD tools added) YES NO

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 BigQuery because 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)
  • Full deterministic suite (sandbox) — 459 passing in 5:32, same count as v0.4.6
  • CI — pending: pytest on Linux + Windows × Python 3.10/3.11/3.12
  • Manual: dev-box smoke run of /resumasher end-to-end on a real resume to confirm the new prompt produces sensible output across the full pipeline (Eduardo)

Consciously deferred

  • Typography-side compression for [feature] Resume.pdf being lengthy; summary of work experiences required #65 (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.
  • Explicit per-role bullet count caps (literature suggests 3-5 recent, 1-3 older). The existing Length and Recency section covers overall length; explicit per-role caps can be added if v0.4.7 doesn't sufficiently shrink output.

🤖 Generated with Claude Code

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>
@earino earino merged commit faf26f8 into main May 5, 2026
11 of 12 checks passed
@earino earino deleted the fix/issue-65-bullet-and-summary-craft branch May 5, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant