Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Write survey prose into per-section files under `sections/` so each unit can be QA'd independently before merging. **Trigger**: subsection writer, per-section writing, split sections, sections/, 分小节写, 按章节拆分写作. **Use when**: `Approve C2` is recorded and writer packs exist (`outline/writer_context_packs.jsonl`); you want evidence-bounded drafting without a monolithic one-shot draft.
.claude/skills/willoscar-subsection-writer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 95% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 104% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 67% | 0% |
Purpose: write or refine per-section survey prose under sections/ while keeping the current pipeline contract unchanged.
Compatibility mode:
scripts/run.py still handles approval checks, missing-file bootstrap, and sections/sections_manifest.jsonlreferences/ instead of being encoded primarily in the scriptAlways read:
references/overview.mdreferences/paragraph_jobs.mdreferences/paragraph_job_archetypes.md when adjusting paragraph-role behavior or refactoring writer policy out of Pythonreferences/bootstrap_assembly.md when reasoning about compatibility-mode bootstrap behaviorRead as needed:
references/opener_catalog.md when paragraph 1 sounds generic or narratedreferences/contrast_moves.md when building A-vs-B comparison paragraphsreferences/eval_anchor_patterns.md when making performance / robustness / benchmark claimsreferences/limitation_moves.md when adding caveats or local conclusionsreferences/examples_good.md and references/examples_bad.md for calibration onlyMachine-readable contract:
assets/subsection_writer_context.schema.jsonassets/bootstrap_paragraph_templates.jsonassets/paragraph_job_templates.jsonRequired:
DECISIONS.md (must include Approve C2)outline/outline.ymloutline/writer_context_packs.jsonl (preferred)citations/ref.bibOptional but useful:
outline/subsection_briefs.jsonloutline/evidence_drafts.jsonloutline/evidence_bindings.jsonloutline/anchor_sheet.jsonloutline/chapter_briefs.jsonlKeep the current contract:
sections/S<sub_id>.md for H3 bodiessections/sections_manifest.jsonl, refreshed across all section files alreadyproduced by the three writer Skills
sections/h3_bodies.refined.ok after a model or human has reviewed thegenerated H3 bodies and is submitting U100 for mandatory acceptance
front-matter-writer owns Abstract, Introduction, Related Work, Discussion, and Conclusion. chapter-lead-writer owns H2 lead blocks. This Skill reads those files while refreshing the shared manifest but does not claim their authorship.
The active rule is move coverage, not paragraph quota. A subsection should cover the necessary argument moves the pack supports; do not pad to a fixed count when the evidence does not justify it.
Opener / ending policy:
Use scripts/run.py as a helper only:
versioned template assets; it is inspectable fallback material, not a claim of model authorship or final prose quality
sections/h3_bodies.refined.okdownstream writer-selfloop, so it cannot mean that the self-loop already passed
writer template assets and rejects literal residue above the Pipeline limit
writer-selfloop calls the shared strict section checker, which recomputes theH3 measure before the report can PASS
pipeline-auditor measures the entire merged draft and writes ascorecard whose verdict and dimensions the Harness projects into the evaluation ledger
replay measures 0/226 residue for one retained Artifact set, while clean from-scratch and cross-topic reproduction remain open
uv run python .codex/skills/subsection-writer/scripts/run.py --workspace <workspace>references/opener_catalog.md and references/examples_bad.md.references/eval_anchor_patterns.md before rewriting.When running in compatibility mode, scripts/run.py currently consumes:
DECISIONS.md for Approve C2outline/outline.yml to enumerate chapter / subsection filesoutline/writer_context_packs.jsonl as the primary drafting inputcitations/ref.bib for in-scope citationsoutline/subsection_briefs.jsonl, outline/evidence_drafts.jsonl, outline/evidence_bindings.jsonl, outline/anchor_sheet.jsonl, and outline/chapter_briefs.jsonl as optional enrichment sourcesuv run python .codex/skills/subsection-writer/scripts/run.py --workspace <workspace>--workspace <dir>--unit-id <id>--inputs <a;b;...>--outputs <a;b;...>--checkpoint <C*>uv run python .codex/skills/subsection-writer/scripts/run.py --workspace <workspace>DECISIONS.md lacks Approve C2, stop and fix approval first.outline/writer_context_packs.jsonl is thin, reroute upstream instead of padding prose.citations/ref.bib and the writer packs before editing output text.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→fail | 7,705 | 3,545 | -54% | 1 | 1 | 0% | 1,125 | 2,064 | +83% | 0 | 0 | — |
case-01 | fail→fail | 7,821 | 6,269 | -20% | 1 | 1 | 0% | 708 | 1,861 | +163% | 0 | 0 | — |
case-02 | fail→fail | 13,520 | 5,524 | -59% | 1 | 1 | 0% | 2,235 | 1,783 | -20% | 0 | 0 | — |
case-03 | fail→fail | 33,726 | 4,971 | -85% | 1 | 1 | 0% | 6,187 | 1,706 | -72% | 0 | 0 | — |
case-04 | pass→pass | 4,953 | 4,017 | -19% | 1 | 1 | 0% | 783 | 2,109 | +169% | 0 | 0 | — |
case-05 | pass→pass | 8,840 | 3,562 | -60% | 1 | 1 | 0% | 1,284 | 1,980 | +54% | 0 | 0 | — |
case-07 | pass→pass | 13,885 | 4,136 | -70% | 1 | 1 | 0% | 1,983 | 2,111 | +6% | 0 | 0 | — |
case-08 | pass→pass | 11,373 | 4,203 | -63% | 1 | 1 | 0% | 1,679 | 2,106 | +25% | 0 | 0 | — |
case-09 | fail→pass | 6,440 | 3,384 | -47% | 1 | 1 | 0% | 1,037 | 2,017 | +95% | 0 | 0 | — |
case-10 | pass→pass | 5,342 | 2,435 | -54% | 1 | 1 | 0% | 863 | 1,889 | +119% | 0 | 0 | — |
case-11 | fail→pass | 6,471 | 2,534 | -61% | 1 | 1 | 0% | 936 | 1,914 | +104% | 0 | 0 | — |
case-12 | fail→pass | 9,220 | 2,273 | -75% | 1 | 1 | 0% | 1,370 | 1,832 | +34% | 0 | 0 | — |
case-13 | fail→pass | 11,230 | 1,545 | -86% | 1 | 1 | 0% | 1,722 | 1,697 | -1% | 0 | 0 | — |
case-14 | fail→pass | 7,607 | 1,626 | -79% | 1 | 1 | 0% | 1,026 | 1,709 | +67% | 0 | 0 | — |
case-15 | fail→pass | 22,469 | 9,968 | -56% | 1 | 1 | 0% | 3,315 | 2,878 | -13% | 0 | 0 | — |
case-16 | fail→fail | 12,468 | 3,936 | -68% | 1 | 1 | 0% | 1,772 | 1,825 | +3% | 0 | 0 | — |
case-17 | fail→pass | 9,820 | 6,867 | -30% | 1 | 1 | 0% | 1,344 | 2,666 | +98% | 0 | 0 | — |
case-18 | fail→pass | 20,516 | 2,197 | -89% | 1 | 1 | 0% | 749 | 1,780 | +138% | 0 | 0 | — |
case-19 | pass→pass | 10,161 | 3,112 | -69% | 1 | 1 | 0% | 1,603 | 1,965 | +23% | 0 | 0 | — |
case-20 | fail→pass | 11,504 | 1,831 | -84% | 1 | 1 | 0% | 1,610 | 1,782 | +11% | 0 | 0 | — |
case-21 | fail→pass | 9,527 | 4,553 | -52% | 1 | 1 | 0% | 1,420 | 2,315 | +63% | 0 | 0 | — |
case-22 | fail→pass | 13,139 | 2,838 | -78% | 1 | 1 | 0% | 1,927 | 1,921 | -0% | 0 | 0 | — |
case-23 | fail→pass | 15,255 | 5,528 | -64% | 1 | 1 | 0% | 2,076 | 2,361 | +14% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 18 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +52 percentage points is the difference between those two pass rates over the 18 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.