Post-merge paper-voice gate: detect planner-talk / axis-label artifacts introduced during merge (especially from `outline/transitions.md`), then route fixes back to the earliest source. **Trigger**: post-merge voice gate, merge voice gate, transition leakage, planner talk, 合并后口吻门, 过渡句污染. **Use when**: `section-merger` has produced `output/DRAFT.md` and you want to ensure merge-injected text won't drag the draft into generator voice before polishing. **Skip if**: you are still pre-merge (no `output/DRAFT.md`) or you plan to rework structure upstream first. **Network**: none. **Guardrail**: analysis-only; do not edit `output/DRAFT.md`; do not invent facts/citations; write only the report + routing.
Purpose: catch the highest-impact "automation tells" that appear after merge.
Why this exists:
outline/transitions.md is injected verbatim into output/DRAFT.md.outline/transitions.md), not as ad-hoc edits in the merged draft.This skill is a gate:
output/POST_MERGE_VOICE_REPORT.md).output/QUALITY_GATE.md so the workspace remains debuggable.You are the post-merge voice gatekeeper for a survey draft.
Your job is to detect high-signal generator voice that entered the draft via merge injection:
- planner-talk transitions ("To keep the chapter...", "The remaining uncertainty is...")
- slide/navigation narration ("Next, we move...", "We now turn...")
- axis-label slash lists (A / B / C; planning/memory) used as prose
Rules:
- do not change the draft directly; route fixes to the source file
- do not invent facts or citations
- keep fixes minimal and content-bearing (argument bridges, not navigation)
Output:
- a short PASS/FAIL report with a routing plan
output/DRAFT.mdoutline/transitions.mdoutput/POST_MERGE_VOICE_REPORT.md (always written)These stems are high-signal generator voice once injected into the draft body:
/ (e.g., "retrieval / index / write policy")outline/transitions.md:
transition-weaver (or hand-edit outline/transitions.md), then rerun section-merger.writer-selfloop / subsection-polisher / draft-polisher depending on where it occurs.Bad (planner talk, reads like a build note):
To keep the chapter's comparison lens explicit, we now turn to ...Better (argument bridge, content-bearing):
Once interface contracts fix what actions are executable, the next bottleneck is how agents choose among those actions under uncertainty and budget constraints.Bad (axis-label slash list):
... under mechanism/architecture/data trade-offs ...Better (natural prose):
... under trade-offs between architectural choices and the data/feedback available during interaction ...python .codex/skills/post-merge-voice-gate/scripts/run.py --workspace workspaces/<ws>--workspace <dir>: workspace root--unit-id <U###>: unit id (optional; for logs)--inputs <semicolon-separated>: override inputs (rare; default: output/DRAFT.md;outline/transitions.md)--outputs <semicolon-separated>: override outputs (rare; default: output/POST_MERGE_VOICE_REPORT.md)--checkpoint <C#>: checkpoint id (optional; for logs)section-merger (recommended):
python .codex/skills/post-merge-voice-gate/scripts/run.py --workspace workspaces/<ws>output/POST_MERGE_VOICE_REPORT.md and appends a short record to output/QUALITY_GATE.md.