Research Format Skill
Composes the canonical Markdown report for claim_pipeline_v1.
This skill is a report composer, not a researcher and not a publisher. It writes
output/report.md from compact structured research state. HTML, PDF, and QMD
outputs are generated later by the publishing phase from output/report.md.
Required Inputs
When invoked by research, use only:
| Input |
Path |
Purpose |
| Output preferences |
manifest.json |
depth, audience, tone, render targets |
| Section briefs |
synthesis/section_briefs/<section_id>.json |
section title, summary, required claim IDs, boundaries |
| Claim slices |
synthesis/claim_slices/<section_id>.json |
compact required claims, optional claim briefs, and source records available to a section |
| Graph hints |
synthesis/section_graph_hints.json |
advisory per-section relationships only |
The formatter must not read these files in the main path:
synthesis/raw_research.md (deprecated; not a formatter input)
synthesis/claim_bank.json
collect/inventory.json
- full Graphify outputs
collect/graphify-out/GRAPH_REPORT.md
Missing claim slices are fatal. Do not fall back to claim_bank.json.
Required Outputs
output/assembly_plan.json
output/sections/<section_id>.md
output/sections/<section_id>.meta.json
output/report.md
output/formatter_audit.json
Do not write output/report.qmd, output/report.html, or output/report.pdf.
Those belong to publishing.
Citation Contract
All citations use one global format:
[Source Title](url)
Numeric citations such as [1](url) or [1] are disallowed. Mixed citation
styles fail the formatter audit.
Composition Flow
Build the assembly plan:
python3 ~/.claude/skills/research-format/scripts/report_composer.py \
build-plan --run-dir "$run_dir"
For each assembly-plan section, read only:
section_brief_path,
claim_slice_path,
- graph hints matching the same
section_id,
- format preferences.
Compose output/sections/<section_id>.md.
- Start with
## <Section Title>.
- Open with a short summary.
- Include every
must_include_claim_id from required_claims.
- Include optional claims only when useful for the selected depth.
- Preserve missing-evidence notes and contradictions.
- Use graph hints only for central entities, cross-links, and relationship language inside the existing planned section.
- Do not let graph hints create, remove, or reorder sections.
Emit output/sections/<section_id>.meta.json.
claim_ids_used must include all required claims used in prose, tables, or diagrams.
source_ids_used must be a subset of the section source_records.
cross_links must reference existing planned section IDs only.
warnings should record skipped optional claims, weak evidence, or unresolved overlap.
Assemble the canonical report:
python3 ~/.claude/skills/research-format/scripts/report_composer.py \
assemble --run-dir "$run_dir"
Run the audit:
python3 ~/.claude/skills/research-format/scripts/report_composer.py \
audit --run-dir "$run_dir"
Formatting is not complete until formatter_audit.json has no errors.
Writing Rules
- The report must be useful as Markdown without any rendered format.
- Every factual sentence must be grounded in claims from the active section slice.
- The formatter may omit low-salience optional claims unless depth is comprehensive or audit-oriented.
- Do not invent claims, URLs, source titles, statistics, or graph relationships.
- Tables are preferred for comparisons of three or more comparable items.
- Mermaid diagrams are allowed only when they clarify a process or relationship.
- Paragraphs longer than five sentences should be split into bullets, tables, or subheadings.
Assembler Rules
The assembler may:
- concatenate sections in approved order,
- normalize heading levels,
- build the table of contents,
- generate a source list from actually used source IDs,
- remove duplicate intros,
- fix light transitions,
- flag or lightly merge obvious overlaps.
The assembler may not:
- reread evidence,
- reinterpret claims,
- rewrite whole sections,
- add uncited factual content,
- silently drop unique claims.
Legacy Raw-Research Mode
density_scan.py, coverage_audit.py, raw_research.md, and
claim_index.json are legacy compatibility mechanisms. They are not used for
new claim_pipeline_v1 runs.
1---2name: research-format3description: Claim-sliced report composer for research Phase 6. Writes canonical output/report.md from section briefs and claim slices; publishing renders optional formats later.4---56# Research Format Skill78Composes the canonical Markdown report for `claim_pipeline_v1`.910This skill is a report composer, not a researcher and not a publisher. It writes11`output/report.md` from compact structured research state. HTML, PDF, and QMD12outputs are generated later by the publishing phase from `output/report.md`.1314## Required Inputs1516When invoked by `research`, use only:1718| Input | Path | Purpose |19|---|---|---|20| Output preferences | `manifest.json` | depth, audience, tone, render targets |21| Section briefs | `synthesis/section_briefs/<section_id>.json` | section title, summary, required claim IDs, boundaries |22| Claim slices | `synthesis/claim_slices/<section_id>.json` | compact required claims, optional claim briefs, and source records available to a section |23| Graph hints | `synthesis/section_graph_hints.json` | advisory per-section relationships only |2425The formatter must not read these files in the main path:2627- `synthesis/raw_research.md` (deprecated; not a formatter input)28- `synthesis/claim_bank.json`29- `collect/inventory.json`30- full Graphify outputs31- `collect/graphify-out/GRAPH_REPORT.md`3233Missing claim slices are fatal. Do not fall back to `claim_bank.json`.3435## Required Outputs3637- `output/assembly_plan.json`38- `output/sections/<section_id>.md`39- `output/sections/<section_id>.meta.json`40- `output/report.md`41- `output/formatter_audit.json`4243Do not write `output/report.qmd`, `output/report.html`, or `output/report.pdf`.44Those belong to publishing.4546## Citation Contract4748All citations use one global format:4950```markdown51[Source Title](url)52```5354Numeric citations such as `[1](url)` or `[1]` are disallowed. Mixed citation55styles fail the formatter audit.5657## Composition Flow58591. Build the assembly plan:6061 ```bash62 python3 ~/.claude/skills/research-format/scripts/report_composer.py \63 build-plan --run-dir "$run_dir"64 ```65662. For each assembly-plan section, read only:67 - `section_brief_path`,68 - `claim_slice_path`,69 - graph hints matching the same `section_id`,70 - format preferences.71723. Compose `output/sections/<section_id>.md`.73 - Start with `## <Section Title>`.74 - Open with a short summary.75 - Include every `must_include_claim_id` from `required_claims`.76 - Include optional claims only when useful for the selected depth.77 - Preserve missing-evidence notes and contradictions.78 - Use graph hints only for central entities, cross-links, and relationship language inside the existing planned section.79 - Do not let graph hints create, remove, or reorder sections.80814. Emit `output/sections/<section_id>.meta.json`.82 - `claim_ids_used` must include all required claims used in prose, tables, or diagrams.83 - `source_ids_used` must be a subset of the section `source_records`.84 - `cross_links` must reference existing planned section IDs only.85 - `warnings` should record skipped optional claims, weak evidence, or unresolved overlap.86875. Assemble the canonical report:8889 ```bash90 python3 ~/.claude/skills/research-format/scripts/report_composer.py \91 assemble --run-dir "$run_dir"92 ```93946. Run the audit:9596 ```bash97 python3 ~/.claude/skills/research-format/scripts/report_composer.py \98 audit --run-dir "$run_dir"99 ```100101 Formatting is not complete until `formatter_audit.json` has no errors.102103## Writing Rules104105- The report must be useful as Markdown without any rendered format.106- Every factual sentence must be grounded in claims from the active section slice.107- The formatter may omit low-salience optional claims unless depth is comprehensive or audit-oriented.108- Do not invent claims, URLs, source titles, statistics, or graph relationships.109- Tables are preferred for comparisons of three or more comparable items.110- Mermaid diagrams are allowed only when they clarify a process or relationship.111- Paragraphs longer than five sentences should be split into bullets, tables, or subheadings.112113## Assembler Rules114115The assembler may:116117- concatenate sections in approved order,118- normalize heading levels,119- build the table of contents,120- generate a source list from actually used source IDs,121- remove duplicate intros,122- fix light transitions,123- flag or lightly merge obvious overlaps.124125The assembler may not:126127- reread evidence,128- reinterpret claims,129- rewrite whole sections,130- add uncited factual content,131- silently drop unique claims.132133## Legacy Raw-Research Mode134135`density_scan.py`, `coverage_audit.py`, `raw_research.md`, and136`claim_index.json` are legacy compatibility mechanisms. They are not used for137new `claim_pipeline_v1` runs.