Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit ddedd92b1d30571a3117d9c4cd126e9b4bfde0db
parent 87faf968051cbf825a36d7ba407a5efebfaa888c
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon,  5 Oct 2026 12:24:05 -0400

docs: the search switch and serve-out in PUBLISH.md, the report-sites ruling, changelogs

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Diffstat:
MPUBLISH.md | 16+++++++++-------
Meditor/CHANGELOG.md | 1+
Mexport/CHANGELOG.md | 1+
Mplans/report-sites.md | 7++++++-
4 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/PUBLISH.md b/PUBLISH.md @@ -89,7 +89,8 @@ site or a post the site may not carry, a missing record, still or post, a quote longer cites. `--allow-missing-media` (on `compose site` and `build site`) lets the last two through; their pages render without a clip. -A **cited** site (`publish: "cited"`) publishes its reports and nothing else. Its +A **cited** (report-only) site is one with search off (`site.json` `search: false`; +a legacy `publish: "cited"` reads the same): it publishes its reports and nothing else. Its compose removes every corpus-shaped file the shared `export/public` holds — summaries, stats, transcripts, subs, posts, digests, archives, the duplicates, tags, aliases and chart files, the service worker — writes `site.json` with no channels and `corpus.json` @@ -97,8 +98,8 @@ with `site.scope: "cited"` (spec 5), and an `llms.txt` and sitemap listing the r and moment pages. After `next build`, the built `out/` is audited: a cited build that holds anything but `_next/`, the reports, the moment pages, the cited media, the shell's own pages and files, or a file over 25 MiB, or more than 20,000 files, fails -the build, and every deploy path refuses it. A site switched to cited is refused at -deploy until it is built again. +the build, and every deploy path refuses it. A site switched to search off is refused at +deploy until it is built again. With no published reports it is an empty report index. A cited site is not a searchable archive, so the family never lists it, whatever `listed` says (`isListedSite`): it is no hub member, has no homepage card, counts in @@ -113,10 +114,11 @@ fact-check citing every kind, its moments and their media) in a stage project at repo root, `.e2e-report-site/` — never in `export/`, whose `public/` and `out/` are the checkout's — audits its `out/` as above and reads it in a browser. `pnpm --filter export run build:report-fixture` builds and audits it without the -browser. The suite serves the build with `export/e2e-report/serve.mjs`, not `serve`: -`serve` (export's `start`, the container's `site` service) takes a video or audio -moment's directory name, `<start>-<end>` in seconds with decimals, for a file with an -extension, and lists the directory instead of serving its page. +browser. The suite, and export's `start` (`pnpm start:export`), serve the build with +`export/scripts/serve-out.mjs`, not `serve`: `serve` (still the container's `site` +service) takes a video or audio moment's directory name, `<start>-<end>` in seconds +with decimals, for a file with an extension, and lists the directory instead of +serving its page. Deploy-only ships whatever is in `export/out`, which the basic build composes one site at a time into a single shared directory — so it **refuses, before starting a diff --git a/editor/CHANGELOG.md b/editor/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [Unreleased] +- **A site with search off is a report-only site.** `site.json` `search` (default on; only `false` is written) replaces `publish`: a site with search off publishes only its reports and the moments they cite. The site form's **Publish** select is a **Search** checkbox, and the Reports tab says which the site is. A `publish: "cited"` already on disk reads as search off and is saved as `search: false`. - **A report video's cue lookup names a site that publishes only its reports.** Pointing a report-to-video manifest at such a site (`corpus.json` `site.scope: "cited"`) used to fail with "channel … is not in corpus.json"; it now says the site publishes no transcripts and to use a full archive or a local corpus. The site form's **Publish** hint says a cited-only site is never listed on the homepage or the hub. - **A site's build composes its reports, and a site that publishes only its reports ships nothing else.** Every site's compose now writes the reports its `site.json` publishes: each report's page and its citations as `citations.json` and `citations.csv` under `/reports/<id>/`, its cited stills, a page per cited moment with the record, the transcript lines around the span and every report that cites it, and the clips and post captures `archilyzer reports prepare` made for it, only the cited ones. Each quote is checked against the record as it is composed (a span's against its cues within 5 s either side, read from `en-orig` when the `en` track has no cues; a post's against its text) and the score, time and method are written into the citation, replacing any typed by hand. The build stops with the list of every problem before anything is written: an invalid report, a citation of a channel outside the site or of a post the site may not carry, a missing record, still or post, a quote that matches less than 60 % of what the record says, and a citation without prepared media or with media cut for another span (`--allow-missing-media` on `archilyzer compose site` and `build site` lets those two through, without a clip). A site with `publish: "cited"` removes everything corpus-shaped from `export/public` before it writes its reports, and its built `out/` is checked against what a cited site may hold: anything else, a file over 25 MiB or more than 20,000 files fails the build, and every deploy path (the Publish tab, `deploy site`, Build & deploy, Build & deploy all, the container build) refuses it, as it refuses a site set to cited whose last build was a full one. The hub's compose removes a report site's files too. - **A site has a Reports tab.** `/sites/<site>/reports` lists every report under the site's `reports/` directory — the published ones in their order, then the drafts — with its kind, dates, sections, claims, citations by kind and, for a fact-check, how many claims carry each verdict. Each report's problems, from the same checker the prepare step and the build use, open under it. A draft with no problems can be published, and a published report moved up or down or unpublished; each writes only the site's `reports` list, applied to the list as it is on disk at that moment, so it never overwrites another change to the site. "Prepare evidence media" queues the `reports-prepare` job, and beside it the tab shows the last prepared media (moments by kind, total size, problems by kind) and links the last prepare job. What the site publishes (full or cited) is shown with a link to Settings, where it is changed. diff --git a/export/CHANGELOG.md b/export/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [Unreleased] +- **`pnpm start:export` serves a built site's moment pages.** It used `serve`, which listed a video or audio moment's directory (`3126.00-3151.00`) instead of serving its page; it now runs `export/scripts/serve-out.mjs`, which serves directories as Cloudflare Pages does, on `EXPORT_DEV_PORT` (3000). - **MCP: a site's reports can be read, and a site that publishes only reports says so instead of looking empty.** Two new tools: `list_reports` lists the reports a site publishes (id, title, kind, claim and citation counts, a fact-check's verdict tally, its page), and `get_report` reads one — its tally, then each section's claims with their verdicts and findings and, for every citation, the verbatim quote, the original (the platform at the cited second, the post, the document) and the site's moment page; `section` reads one section. On a site that publishes only its reports, `list_channels`, `list_sources` and `resolve_source` say "cited-only site: N report(s)" where they said "No channels found"; on a site with reports as well, `list_sources` and `resolve_source` say how many. The archive readers (local, remote) read `corpus.json` spec 5: a cited site is an empty corpus without an error, and a local copy of one is never read from a stale `transcripts/` folder. A hub has no reports of its own; `list_reports` says to name a member site. - **The hub leaves out a site that publishes only its reports.** A site with `publish: "cited"` is not a searchable archive, so it is no hub member (not in federated search, the hub's `corpus.json` or `llms.txt`) and no other site's footer links to it, whatever its **List on the Archilyzer homepage and hub** setting says. A site with reports that publishes its full corpus is a member as before. Needs a hub rebuild and deploy once such a site exists. - **`corpus.json` is spec 5: it names a site's reports, and a site that publishes only reports says so.** A site with reports adds `reports` to its `corpus.json` (`index`: `/reports/index.json`, the count, and how to read a report's page, its citations and its moment pages) and a Reports section to `llms.txt`; its sitemap lists the report and moment pages. A site that publishes only its reports has `"scope": "cited"` and its audience under `site`, no channels and zero totals, an `llms.txt` that lists its reports and how their citations and moment pages are read, and a `site.json` with no channels. A reader that does not know spec 5 sees an empty corpus there. Needs a rebuild and deploy of each site. diff --git a/plans/report-sites.md b/plans/report-sites.md @@ -1,6 +1,6 @@ # Report sites — a site built around cited reports -Status: BUILT — R0–R8 merged 2026-10-05 (plus R4b page size); first private report site built locally. Follow-ups: a static server for moment dirs (serve lists them), cited corpus.json still describes shards, voice checks recorded in citations, saveSiteAction onto patchSite. +Status: BUILT — R0–R8 merged 2026-10-05 (plus R4b page size); first private report site built locally. 2026-10-05: `publish` replaced by a per-site `search` switch; report-only is derived (search off); export's `start` serves moment dirs (`scripts/serve-out.mjs`). Follow-ups: cited corpus.json still describes shards, voice checks recorded in citations, saveSiteAction onto patchSite. ## What it is @@ -82,6 +82,11 @@ Citations are the core; reports are one consumer. | `publish` | `"full"` | `"cited"` publishes only reports + their moments. Only the non-default is written. | | `reports` | `[]` | Ordered report ids under `reports/`. | +Ruling 2026-10-05: `publish` is replaced by `search` (boolean, default `true`; only `false` is written). A +site with search off is report-only — what `publish: "cited"` was. A legacy `publish: "cited"` reads as +`search: false` and is rewritten as such on save. The editor form's Publish select is a Search checkbox. +`corpus.json` keeps `site.scope: "cited"`. + `channels` keeps its meaning (the pool a site's citations may resolve against). Docs in `SITE_FIELD_DOCS`, `SITE.md` regenerated; the editor's site form gets the publish control; a new **Reports** tab under `/sites/<id>/` lists reports, their validation problems, and "Prepare evidence media".