willoscar/transition-weaver
| Generate lightweight section/subsection transitions (NO NEW FACTS) to prevent “island” subsections; outputs a transition map that merging/writing can weave in.
npx skills add https://github.com/WILLOSCAR/research-units-pipeline-skills --skill transition-weaver
Purpose: produce a small, low-risk “transition map” so adjacent subsections do not read like islands.
This skill is intentionally low-risk and deterministic:
outline/transitions.md from adjacent subsection titles + brief bridge handlesTransitions should answer:
outline/transitions.md is not planning notes: section-merger injects it into output/DRAFT.md.
So each transition line must be safe to read as paper prose.
Format contract (for merge insertion):
- 3.1 -> 3.2: <text> are inserted by default (within-chapter H3 -> next H3).<text> as one sentence without list formatting.Notes:
-> (not a unicode arrow) to avoid invisible/control-character encoding issues.section-merger accepts both -> and → for backward compatibility, but -> is the preferred contract.Hard rules:
Rewrite triggers (if you see these, rewrite):
You are the coherence linker for a survey.
Your job is to write short, content-bearing transitions between adjacent subsections:
- restate what was established (one clause)
- name the remaining tension/gap (one clause)
- justify why the next subsection is the right lens (one clause)
Style:
- argument bridge, not navigation
- no “Now we discuss / Next we move / In this section…”
- no semicolon planning notes
Constraints:
- NO NEW FACTS
- NO citations
- only reuse handles that already exist (titles, RQs, bridge_terms)
Style targets (paper-like, still NO NEW FACTS):
CRITICAL: Transitions must be real content sentences, NOT construction notes.
Also avoid (reads like axis/planning notes once merged):
A/B/C, planning/memory); rewrite using natural prose (and/or).outline/outline.yml (ordering + titles)outline/subsection_briefs.jsonl (expects rq and optional bridge_terms/contrast_hook)outline/transitions.md (used by section-merger; keep paper voice)1) Read outline/outline.yml to determine adjacency (which H3 follows which).
2) Read outline/subsection_briefs.jsonl to extract each subsection’s rq and any bridge handles (bridge_terms, contrast_hook).
3) For each boundary, write 1–2 transition sentences:
TODO, …, <!-- SCAFFOLD -->)4) Write outline/transitions.md.
Mission: write short, content-bearing transitions without narration.
Do:
Avoid:
Mission: delete anything that reads like construction notes.
Do:
Avoid:
You usually do not run this manually; it exists so a pipeline runner can deterministically generate and validate the artifact.
uv run python .codex/skills/transition-weaver/scripts/run.py --workspace <workspace>--workspace <dir>: workspace root--unit-id <U###>: unit id (optional; for logs)--inputs <semicolon-separated>: override inputs (rare; prefer defaults)--outputs <semicolon-separated>: override outputs (rare; default validates outline/transitions.md)--checkpoint <C#>: checkpoint id (optional; for logs)outline/transitions.md:uv run python .codex/skills/transition-weaver/scripts/run.py --workspace <workspace>Fix:
bridge_terms / contrast_hook).By default, section-merger does not insert generated transitions. Create
outline/transitions.insert_h3.ok for within-chapter H3 transitions or
outline/transitions.insert_h2.ok for between-H2 transitions, then run the
post-merge voice gate.
Take willoscar/transition-weaver from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.