# Post Merge Voice Gate

> Post-merge paper-voice gate: inspect the reader-facing draft for planner-talk and axis-label artifacts, then route fixes to the actual source.

- Skill: `willoscar/post-merge-voice-gate` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add willoscar/post-merge-voice-gate`
- Raw SKILL.md: https://api.skillmd.com/api/skills/willoscar/post-merge-voice-gate/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: WILLOSCAR (https://skillmd.com/u/willoscar)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/willoscar/post-merge-voice-gate

---


# Post-merge Voice Gate

## Triggers & routing

- **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.


Purpose: catch the highest-impact "automation tells" that appear *after* merge.

Why this exists:
- Merge can expose planner-talk in section prose or explicitly enabled transitions.
- 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*: normally the owning
  section, or `outline/transitions.md` only when insertion was enabled.

This skill is a gate:
- It writes a report (`output/POST_MERGE_VOICE_REPORT.md`).
- If FAIL, it also appends to `output/QUALITY_GATE.md` so 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 in the merged draft:
- 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`

`outline/transitions.md` is an optional planning artifact by default. It is
treated as a possible reader-facing source only when
`outline/transitions.insert_h3.ok` or `outline/transitions.insert_h2.ok` exists.


## 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 reader-facing draft prose (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 transition insertion is enabled and the offending phrase appears in `outline/transitions.md`:
  - Fix: rerun `transition-weaver` (or hand-edit `outline/transitions.md`), then rerun `section-merger`.
- Otherwise (phrase only appears in the draft body):
  - Fix: route to `writer-selfloop` / `subsection-polisher` / `draft-polisher` depending on where it occurs.

## 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

- `uv run python .codex/skills/post-merge-voice-gate/scripts/run.py --workspace <workspace>`

### 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):
  - `uv run python .codex/skills/post-merge-voice-gate/scripts/run.py --workspace <workspace>`

### Notes

- The script is analysis-only; it never edits content.
- On FAIL it writes `output/POST_MERGE_VOICE_REPORT.md` and appends a short record to `output/QUALITY_GATE.md`.

