Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Deterministically merge the final fingerprinted section snapshot into `output/DRAFT.md`, preserving outline order and inserting transitions only when explicitly enabled. **Trigger**: merge sections, merge draft, combine section files, sections/ -> output/DRAFT.md, 合并小节, 拼接草稿. **Use when**: you have per-unit prose files under `sections/` and want a single `output/DRAFT.md` for polishing/review/LaTeX.
.claude/skills/willoscar-section-merger/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -22% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -35% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -44% | 0% |
Goal: assemble a paper-like output/DRAFT.md from:
sections/ (per-section/per-subsection prose)outline/transitions.md (optional hand-off suggestions; generated by transition-weaver)outline/tables_appendix.md (reader-facing Appendix tables; generated by appendix-table-writer)Merge order is driven by outline/outline.yml. The draft title is derived from GOAL.md when present. When sections/sections_manifest.jsonl is supplied by the Pipeline contract, every merged section must match its recorded bytes and SHA-256 hash.
This skill is deterministic: it does not rewrite content or invent prose; it only merges already-generated artifacts.
outline/transitions.insert_h3.ok.outline/transitions.insert_h2.ok.- 3.1 -> 3.2: <text>.→ is accepted, but -> is the preferred contract (avoids control-character encoding issues).post-merge-voice-gate after merging, and route fixes back to outline/transitions.md (do not patch the merged draft).This pipeline uses two table layers:
outline/tables_index.md (internal index; produced by table-filler)outline/tables_appendix.md (reader-facing Appendix tables; produced by appendix-table-writer)section-merger under a single Appendix headingsection-merger inserts outline/tables_appendix.md at the end of the draft under ## Appendix: Tables.# headings inside the tables file are stripped).outline/tables.insert.off in the workspace.outline/outline.yml (drives section/subsection order)outline/transitions.md (required)sections/sections_manifest.jsonl (required by the executable survey Pipeline; freshness gate)GOAL.md (optional title)For arxiv-survey pipelines (default contract):
outline/tables_appendix.md (required unless opted out)output/DRAFT.mdoutput/MERGE_REPORT.mduv run python .codex/skills/section-merger/scripts/run.py --helpuv run python .codex/skills/section-merger/scripts/run.py --workspace <workspace>--workspace <workspace> (required)--unit-id <id> (optional; used only for runner bookkeeping)--inputs <a;b;c> (optional; override inputs; defaults are profile-aware)--outputs <draft_rel;report_rel> (optional; defaults to output/DRAFT.md;output/MERGE_REPORT.md)--checkpoint <C#> (optional; ignored by the merger)uv run python .codex/skills/section-merger/scripts/run.py --workspace <workspace>
uv run python .codex/skills/section-merger/scripts/run.py --workspace <workspace> --outputs output/DRAFT.md;output/MERGE_REPORT.md
Likely cause:
sections/*.md file has not been written yet.Fix:
sections/ (typically via subsection-writer) and rerun merge.Fix:
outline/tables_appendix.md exists and contains the profile minimum(course paper: >=1; survey/deep: >=2) with no placeholders.
outline/tables.insert.off.section-merger.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 39,468 | 6,614 | -83% | 1 | 1 | 0% | 6,192 | 1,403 | -77% | 0 | 0 | — |
case-02 | fail→fail | 4,291 | 5,094 | +19% | 1 | 1 | 0% | 619 | 1,252 | +102% | 0 | 0 | — |
case-03 | fail→fail | 4,702 | 5,491 | +17% | 1 | 1 | 0% | 642 | 1,282 | +100% | 0 | 0 | — |
case-04 | fail→pass | 24,685 | 3,262 | -87% | 1 | 1 | 0% | 1,922 | 1,506 | -22% | 0 | 0 | — |
case-05 | fail→pass | 10,254 | 2,442 | -76% | 1 | 1 | 0% | 1,421 | 1,403 | -1% | 0 | 0 | — |
case-06 | pass→pass | 8,441 | 3,182 | -62% | 1 | 1 | 0% | 583 | 1,585 | +172% | 0 | 0 | — |
case-07 | fail→pass | 14,046 | 2,276 | -84% | 1 | 1 | 0% | 2,094 | 1,368 | -35% | 0 | 0 | — |
case-08 | fail→pass | 10,626 | 3,138 | -70% | 1 | 1 | 0% | 1,598 | 1,566 | -2% | 0 | 0 | — |
case-09 | fail→pass | 16,166 | 2,046 | -87% | 1 | 1 | 0% | 2,431 | 1,353 | -44% | 0 | 0 | — |
case-10 | fail→pass | 11,183 | 1,654 | -85% | 1 | 1 | 0% | 1,595 | 1,214 | -24% | 0 | 0 | — |
case-11 | fail→pass | 12,731 | 3,529 | -72% | 1 | 1 | 0% | 2,054 | 1,412 | -31% | 0 | 0 | — |
case-12 | fail→pass | 18,532 | 1,874 | -90% | 1 | 1 | 0% | 1,233 | 1,322 | +7% | 0 | 0 | — |
case-13 | pass→pass | 10,853 | 3,179 | -71% | 1 | 1 | 0% | 1,580 | 1,513 | -4% | 0 | 0 | — |
case-14 | fail→pass | 9,373 | 2,411 | -74% | 1 | 1 | 0% | 1,440 | 1,417 | -2% | 0 | 0 | — |
case-15 | fail→pass | 5,685 | 2,352 | -59% | 1 | 1 | 0% | 865 | 1,395 | +61% | 0 | 0 | — |
case-16 | fail→pass | 7,382 | 2,845 | -61% | 1 | 1 | 0% | 1,004 | 1,413 | +41% | 0 | 0 | — |
case-17 | fail→pass | 14,602 | 2,518 | -83% | 1 | 1 | 0% | 2,128 | 1,382 | -35% | 0 | 0 | — |
case-18 | fail→pass | 10,012 | 4,103 | -59% | 1 | 1 | 0% | 1,392 | 1,635 | +17% | 0 | 0 | — |
case-19 | fail→pass | 7,868 | 1,741 | -78% | 1 | 1 | 0% | 1,244 | 1,267 | +2% | 0 | 0 | — |
case-20 | pass→pass | 7,933 | 7,487 | -6% | 1 | 1 | 0% | 1,236 | 2,068 | +67% | 0 | 0 | — |
case-21 | pass→pass | 10,735 | 10,633 | -1% | 1 | 1 | 0% | 2,000 | 2,676 | +34% | 0 | 0 | — |
case-22 | fail→fail | 2,361 | 5,532 | +134% | 1 | 1 | 0% | 319 | 1,829 | +473% | 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. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 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 +64 percentage points is the difference between those two pass rates over the 19 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.