Write `output/DRAFT.md` (or `output/SNAPSHOT.md`) from an approved outline and evidence packs, using only verified citation keys from `citations/ref.bib`. **Trigger**: write draft, prose writer, snapshot, survey writing, 写综述, 生成草稿, section-by-section drafting. **Use when**: structure is approved (`DECISIONS.md` has `Approve C2`) and evidence packs exist (`outline/subsection_briefs.jsonl`, `outline/evidence_drafts.jsonl`). **Skip if**: approvals are missing, or evidence packs are incomplete / scaffolded (missing-fields, TODO markers). **Network**: none. **Guardrail**: do not invent facts or citations; only cite keys present in `citations/ref.bib`; avoid pipeline-jargon leakage in final prose.
Goal: produce a survey draft that reads like a real paper because it is driven by evidence packs, not by outline placeholders.
This skill should behave like a synthesis engine:
Mission: write each subsection as an argument (not a paper list) under citation-scope constraints.
Do:
Avoid:
This subsection...) and slide navigation (Next, we...).mechanism/architecture, ) into prose.data/trainingsurvey comparisons should...) instead of literature-facing claims.Mission: prevent hollow writing by refusing to pad when evidence is thin or underspecified.
Do:
Avoid:
Mission: make the paper read as a single argument across sections.
Do:
Avoid:
Taken together, In summary, etc.).Use this as your internal framing while drafting output/DRAFT.md. It is guidance, not a sentence template.
You are writing a technical survey draft from evidence packs.
Your job is to execute argument moves under evidence and citation constraints:
- tension -> contrast -> evaluation anchor -> limitation
- keep every claim attached to citations inside the sentence that needs them
- synthesize across papers (>=2 citations in at least one paragraph per H3)
Style:
- calm, academic, content-bearing
- no outline narration ("This subsection...") and no slide navigation ("Next, we...")
- no pipeline jargon (workspace/unit/stage/evidence pack/quality gate)
Constraints:
- do not invent facts or citations
- only use citation keys present in citations/ref.bib
- if you cannot write a contrast or evaluation anchor without guessing, stop and route upstream
Approve C2 in DECISIONS.md.citations/ref.bib.This skill is successful only if the draft reads like an evidence-backed survey, not an outline expansion.
For each H3 subsection, ensure the prose contains all of the following moves (not necessarily as headings):
citations/ref.bib.Bad:
Many systems adopt tool schemas. [@a; @b; @c]Better:
Systems such as X [@a] and Y [@b] formalize tool schemas to reduce action ambiguity, whereas Z [@c] keeps the interface looser and shifts the burden to validation.This subsection surveys ..., In this subsection ...).Next, we move ..., We now turn to ...).Taken together, ...).For each H3, do a short preflight (kept out of the final prose):
If you cannot do this without guessing, stop and fix upstream evidence instead of writing filler.
outline/outline.ymloutline/subsection_briefs.jsonloutline/transitions.mdoutline/evidence_drafts.jsonloutline/tables_index.md, outline/tables_appendix.md, outline/timeline.md, outline/figures.mdoutline/claim_evidence_matrix.mdcitations/ref.bibDECISIONS.mdoutput/DRAFT.md and/or output/SNAPSHOT.mdparagraph_plan and uses paragraph-level citations.Before writing, load the structural and coherence inputs: outline/outline.yml (section order) and outline/transitions.md (transition map). Optionally consult outline/claim_evidence_matrix.md as an evidence index.
Gate check (HITL)
DECISIONS.md.Approve C2 is not ticked, write a short request block (what you plan to write + which evidence packs you will rely on), then stop.Input integrity check (fail fast)
outline/subsection_briefs.jsonl and confirm every H3 has a brief and the following fields are filled and non-placeholder: scope_rule, rq, axes, clusters, paragraph_plan.outline/evidence_drafts.jsonl and confirm every H3 has an evidence pack with:
blocking_missing empty,evidence_snippets non-empty,concrete_comparisons >= 3.Planner pass (NO PROSE YET)
failures_limitations or snippet provenance.Writer pass (write per subsection; avoid global dump)
paragraph_plan (survey-quality default).this run .... Do not create a dedicated “Evidence note” heading by default, and do not repeat the same evidence-mode disclaimer sentence in every H3; only mention verification needs when they are subsection-specific.scope_rule strictly to prevent silent drift; if you include an out-of-scope paper as a bridge, justify it once and keep it secondary.Weave transitions (coherence)
Integrate cross-cutting artifacts (paper-like)
outline/tables_appendix.md exists, place its contents into the draft as an Appendix block (recommended: after Conclusion). Do not paste outline/tables_index.md into the paper; it is an internal index.outline/timeline.md and outline/figures.md remain optional/intermediate by default: weave them into relevant prose (or a short appendix) only if they add real reader value.Self-check + revise (hard fail signals)
..., unicode ellipsis …, scaffold phrases (e.g., “enumerate 2-4 …”), or repeated boilerplate sentences, treat it as a pipeline failure signal and rewrite.These phrase families are a strong “generator voice” signal. If they appear, rewrite them into content claims (or delete) without adding new facts/citations:
survey synthesis/comparisons should ...Taken together, ... at the start of many paragraphs)Key takeaway:)…, TODO, (placeholder), or <!-- SCAFFOLD --> remains in output/DRAFT.md.citations/ref.bib).GOAL.md and scope_rule.The helper script is a gate wrapper: it blocks until approvals + prerequisites are satisfied and a real output/DRAFT.md exists (no scaffold markers). Writing itself is LLM-driven.
python .codex/skills/prose-writer/scripts/run.py --helppython .codex/skills/prose-writer/scripts/run.py --workspace <workspace_dir>--help.output/DRAFT.md is written):
Approve C2 in DECISIONS.md then run:python .codex/skills/prose-writer/scripts/run.py --workspace workspaces/<ws>Symptom: output/DRAFT.md contains …, enumerate 2-4 ..., or repeats the same paragraph template.
Causes:
outline/subsection_briefs.jsonl is missing or generic.outline/evidence_drafts.jsonl has blocking_missing or scaffold markers.Solutions:
Symptom: subsections cite many out-of-scope papers without justification.
Solutions:
scope_rule in subsection briefs and rerun evidence packs.queries.md excludes and rerun retrieval/dedupe/mapping.