Post-merge Voice Gate (treat transitions as injected prose)
Purpose: catch the highest-impact "automation tells" that appear after merge.
Why this exists:
- •
outline/transitions.mdis injected verbatim intooutput/DRAFT.md. - •Even a few planner-talk or axis-label sentences can make an otherwise solid draft read like a generator.
- •Fixes should land at the earliest responsible artifact (usually
outline/transitions.md), not as ad-hoc edits in the merged draft.
This skill is a gate:
- •It writes a report (
output/POST_MERGE_VOICE_REPORT.md). - •If FAIL, it also appends to
output/QUALITY_GATE.mdso the workspace remains debuggable.
Role prompt: Voice Gatekeeper (paper voice, no new facts)
text
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
Inputs
- •
output/DRAFT.md - •
outline/transitions.md
Output
- •
output/POST_MERGE_VOICE_REPORT.md(always written)
What this gate checks (high-signal only)
- •Planner-talk transition stems (construction notes that read like comments in the paper body)
- •Slash-list axis markers in injected transitions (A / B / C)
- •Slide/navigation narration that should be argument bridges
Rewrite triggers (if you see these, FAIL and route)
These stems are high-signal generator voice once injected into the draft body:
- •"To keep ..." / "To keep the chapter..."
- •"The remaining uncertainty is ..."
- •"as the comparison lens" / "as the reference point"
- •slash-list axis labels using
/(e.g., "retrieval / index / write policy")
Routing rules (earliest responsible artifact)
- •If the offending phrase appears in
outline/transitions.md:- •Fix: rerun
transition-weaver(or hand-editoutline/transitions.md), then rerunsection-merger.
- •Fix: rerun
- •Otherwise (phrase only appears in the draft body):
- •Fix: route to
writer-selfloop/subsection-polisher/draft-polisherdepending on where it occurs.
- •Fix: route to
Mini rewrite examples (do not copy verbatim)
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 ...
Script (optional; deterministic gate)
Quick Start
- •
python .codex/skills/post-merge-voice-gate/scripts/run.py --workspace workspaces/<ws>
All Options
- •
--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)
Examples
- •Run right after
section-merger(recommended):- •
python .codex/skills/post-merge-voice-gate/scripts/run.py --workspace workspaces/<ws>
- •
Notes
- •The script is analysis-only; it never edits content.
- •On FAIL it writes
output/POST_MERGE_VOICE_REPORT.mdand appends a short record tooutput/QUALITY_GATE.md.