commit c11fa8884f5ddc7e733f9fc4ef34e77d06762801
parent 9d38f625e5cf7b01a99cdba857b74aa52927477e
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Mon, 5 Oct 2026 02:10:45 -0400
plans: report sites — the citation system is the core (one model, inline syntax, shared components, back-links, round trip)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/plans/report-sites.md b/plans/report-sites.md
@@ -55,6 +55,26 @@ on existing full sites) need configuration, not code.
stills exist; at compose time every video quote is checked against its cue window (fail loudly on drift; a
platform with two ids must say which).
+## The citation system (operator steer, 2026-10-05: "a well-integrated citation system that can be useful on any type of report")
+
+Citations are the core; reports are one consumer.
+
+- **One model** — `common/lib/citations/` (reports import it): kinds `video` (span), `audio` (span; podcasts),
+ `post` (optional thread), `source` (a document's sentence: still + the source's archive links), `page` (url +
+ archived url); a versioned discriminated union, extensible. Every citation: verbatim `quote`, optional `speaker`,
+ `date`, `label`, `note`, and a COMPUTED `verification` block (quote score against the cues, voice check, when,
+ method) filled at compose, never typed by hand.
+- **One inline syntax** in any report markdown: `[label](cite:id)`; per-report numbering by first appearance;
+ stable anchors `#c-<id>`.
+- **Shared components** (`common/components/citations/`), used by the export site, editor previews and umtool's
+ report preview: inline marker with a hover/tap preview card (quote, speaker, date, thumbnail or post shot, play
+ for spans), citation card, numbered reference list per section/report, verification badge.
+- **Moment pages show back-links** — "Cited in": every report/claim on the site that cites the moment (a pure
+ index built at compose).
+- **Round trip** — converters bring `/sweep` markdown, `/ask` answers and umtool manifests into the model; a report
+ can emit a report-to-video manifest (the video and the page share one source); the report page offers its
+ citations as JSON and CSV; MCP may later serve `get_report` / citations.
+
## New `site.json` keys
| Key | Default | Notes |
@@ -126,13 +146,13 @@ on existing full sites) need configuration, not code.
| Slice | What | Size | Needs |
|---|---|---|---|
-| R0 | `common/lib/report/`: zod schema, types, validation, moment keys, shared verdict vocab; `REPORT.md` generated | M | — |
+| R0 | `common/lib/citations/` + `common/lib/report/`: schemas, validation, inline-cite extraction + numbering, moment keys, back-link index, shared verdict vocab; `CITATIONS.md` + `REPORT.md` generated | M | — |
| R1 | site keys `publish` / `reports` + site form control | S | — |
| R2 | evidence media: cutter port to common, `reports prepare` CLI + job kind, cited-capture copier + guard amendment | L | R0 |
| R3 | compose: reports stage, cited prune, allowlist audit, always-emit site/corpus, llms/sitemap variants | L | R0, R2 interface |
-| R4 | export app: routes, Reports header link, cited shell, placeholder params | L | R0 (fixture JSON) |
+| R4 | export app: routes, shared citation components (inline marker + preview, cards, reference list, verification badge), Reports header link, cited shell, placeholder params | L | R0 (fixture JSON) |
| R5 | consumers: corpusSpec 5, reader tolerance, hub/homepage exclusion, builtExport audit hook | M | R0 |
-| R6 | converters: manifest → report, sweep md → report, shoot-page items | M | R0 |
+| R6 | converters: manifest ↔ report (both ways), sweep md → report, /ask answer → report, shoot-page items; citations JSON/CSV export | M | R0 |
| R7 | editor Reports tab: list, problems, Prepare media, private build | M | R1, R2 |
| R8 | e2e: a cited fixture site (own playwright config), compose + audit unit tests | M | R3, R4 |