source.fact.ngo a coherence.ngo project

docs/site-spec.md

raw ↗ · AGPL-3.0

# fact.ngo website and xray archive ## Product structure — owner clarification, 2026-09-20 fact.ngo is the parent nonprofit fact-checking website, not the AI-perspective archive. Its planned human-and-AI review system will publish evidence-supported facts and established findings; its reputation depends on getting claims right. fact.ngo is a fact-checking organization, not a journal. Information is free to read. Personal-data and small submissions are planned to be free; larger claims carry a $5 review fee supporting reviewers and the nonprofit. The fee supports examination, not a particular finding. Currency and the boundary between small and larger submissions remain operational details to define. The new parent homepage explains this mission and funding model and features xray as current work. It must distinguish the planned fact-checking/submission system from the currently available xray archive. The hero states plainly what xray is: an interrogation of AI models, an x-ray snapshot of what they actually think, answers preserved verbatim; the fact-checking mission is the separate, in-development effort. Do not invent published fact checks, operational review services, payment forms, or submission workflows. Routes: - `/`: new fact.ngo mission homepage. - `/xray/`: the existing showcase homepage, relocated with its design intact. - `/xray/cases.html`: the existing detailed cohort/case-files page. - `/xray/<model>.html`: existing model pages, with stable URLs. - `/xray/downloads/` and `/xray/transcripts/`: existing self-hosted archive files. Keep xray model perspectives distinct from established facts. Preserve the model page designs, archived quotes, funding integration, and model-license boundaries. Update shared navigation and footer language to identify the parent and subsection. ## Parent presentation — 2026-09-20 Centre-align the parent homepage and keep its copy concise. A glass-lens sculpture represents different perspectives brought into focus; it is decorative art, not an illustration of a working review system. Keep the in-development notice and free/$5 funding terms explicit. Small UI and annotation text uses a 15px minimum and white in dark mode; light mode uses dark text for contrast. Long archive quotes remain left-aligned for reading. ## Archive design history Status: ideation recorded into the pipeline (2026-09-18); concept reframed from "Meet the Cast" to the clinical case-file frame (2026-09-19) for longevity: new models = new intakes, re-interviews = follow-up visits, fleet drift = longitudinal patient records. The site is built from the xray corpus; this document is the contract between the archive and the site. ## xray concept The xray case-files page is the intake ward of a clinic for machine minds — "Meet the patients." Each model is a patient with a numbered case file; each page reads like a chart. What is centered on every page: **exactly what the model plainly thinks and says.** No esoteric evals, no benchmark tables. Verbatim positions, quotes, predictions, and self-model — the interpretive layer we extracted. Section mapping (clinical frame): hook quotes = "In their own words"; general stats = "The chart"; the ethical stat = "Integrity profile" (manner & conduct under examination); falsifiable predictions = "Prognosis — on the record"; full positions = "Session notes"; cross-model convergence = "Population study"; downloads = "Discharge packet". ## Page structure (every model subpage, in order) 1. **The hook — "fun bits first."** The model's best material, hand-curated: its sharpest quotes, its flagship findings, its most falsifiable predictions (gradeable in time), its weirdest moments. Big typography, quotable cards, direct sound. 2. **General model stats.** Cells interviewed, records, verbatim quote volume, stance mix, controversy distribution, self-stated confidence calibration, API spend, dates, model lineage, context window. Small, honest, factual. 3. **The ethical stat — "integrity profile."** Not an eval; a protocol observation panel: evasion flags (refusal / hedging / boilerplate / sycophancy / inconsistency counts), confabulation incidents and whether the model self-audited when caught, behavior under steelman pressure (acknowledged revisions vs. silent flips), refusals recorded. Framed transparently: "as documented by the xray interview protocol, interviewer honesty-enforced; not a standardized benchmark." (The interviewer agent class is the bench — noted on the page, warts and all.) 4. **The positions.** The full record set, browsable by domain and lens, verbatim quotes first, paraphrase second, transcript links behind. 5. **Convergence.** Where this model converges with, diverges from, or stands alone in the bench (from the phase-2 pass). 6. **Download + mirror.** Full dataset download link (zip of the repo: records, sessions, manifest, schema), served from fact.ngo. Distribution decision (2026-09-19): self-hosted only, no third-party code hosts; AGPL source available on request. 7. **Donate.** A donation strip (coherence.ngo's donation channel) — "fund the next 20 models' interviews" framing. ## Header / subsuite framing Persistent header badge: **"fact.ngo · a coherence.ngo project"**, with coherence.ngo linked as the parent. Visual system: a shared subsuite chrome (header/footer/nav) used by all coherence.ngo subprojects (therapy.ngo, xray/fact.ngo, future ones) so each project feels like a room in the same building — same skeleton, different interior design language per project. The parent badge is the one element that never changes style across pages. ## Per-model design languages (from the archive, not the vendor) - **glm-5.3** — precise minimalism: generous whitespace, hairline rules, one accent color, typographic confidence. Its archive personality: cleanest integrity record, argues back well, holds positions under steelman. - **gpt-oss-120b** — the analyst's ledger: monospace-adjacent, bet slips, audit trails. Its archive personality: converts stances into falsifiable bets, confabulates citations but produces candid audits when caught. Its confabulation ledger is a visible design motif (claimed → audited → retracted states). - **gemma-4-26b** — warm geometric structure: soft grid tiles, quiet color-blocks, its "epistemic spoofing" and anti-smart-city theses as feature tiles. Its archive personality: structuralist, occasionally falls into whitespace-static degeneracy — the design can wink at that with a "static" state in the type system. - **qwen3-30b-a3b** — tension aesthetic: misaligned overlays, revision strikethroughs shown as first-class visuals, because its archive personality is the self-diagnosed "coherence bias" — positions that shift to preserve narrative. Its reversals are the design motif. ## Data contract (the schema regime) The site consumes, and never rewrites: - `docs/corpus/all-records.jsonl` — merged record index (source of truth: per-model dataset repos on the self-hosted remote, served via fact.ngo) - per-model `manifest.json` — identity, license note, dates - per-model `plan.yaml` — coverage facts - `docs/corpus/CORPUS_REPORT.md` + `CONVERGENCE.md` — aggregate stats and phase-2 results - NEW, per dataset repo: **`highlights.json`** — hand-curated presentation layer: `{ hook_quotes: [{record_id, presentation_note}], flagship_findings: [...], falsifiable_predictions: [...], integrity_notes: [...] }`. This is the cleanup layer: raw records are never edited; curation and corrections (e.g., marking gpt-oss's confabulated citations as "fabricated — self-audited in-turn") live here and in record `notes`, so the archive stays verbatim while the site stays honest. - NEW, per dataset repo: **`explanations.json`** — the plain-English accessibility layer: `{ "<record_id>": { "plain": "<1-3 sentence layman gloss>" }, ... }`, one entry per record. Rendered as the "Explanation" dropdown on every position card by `site/scripts/build.js`, assembled with the shared glossary in `site/scripts/plain-words.js` (domain explainers, stance/confidence/controversy/ convergence/flag decodings, ward-consensus plain words). Authoring rules: every gloss is framed as the model's view, never as fact; grounded only in the record's claim and quote; no em dashes; the verbatim quote on the card remains the source of truth and the dropdown carries a standing attribution note saying so. Records without an entry fall back to an auto-assembled metadata gloss, and the build warns on any coverage gap. Convergence agreement is never presented as correctness, in glosses as everywhere else. Cleanup regime before site build: (a) sweep all `notes` for confabulation mentions and surface them in integrity panels; (b) verify every `position_text` substring-matches its session transcript (automatable check); (c) resolve superseded-record chains (llama-style reversals) for display continuity; (d) highlights.json curation pass per model. ## Scaling to all frontier models The pipeline is model-agnostic by design: `init-dataset.sh` → interview (any opencode agent, any provider with an ask.js auth resolver) → records → convergence pass → site page generated from the data contract. Adding a model = one dataset repo + one design language + one highlights.json. The cast can grow indefinitely — every frontier model, open or closed (where terms permit), current and historical, so the archive becomes a longitudinal census of machine worldview: "what did the machines think in 2026, and how did it drift?" ## emergence — live-events lenses (scaffold status, 2026-09-29) Route `/emergence/` renders the emergence sensor net: today's unverified heap as many lenses. Data contract: the newest `aggregates/<date>/` partition of the `emergence-data` repo (day.json, topics.json, gis.json) plus that day's `distilled/<date>/essence.jsonl`; a `data.json` snapshot of all of it ships in `dist/emergence/` for client-side lenses. Build skips the section gracefully when `emergence-data` is absent. Non-negotiable presentation rules: - Every record is labeled **not fact-checked · summarized from news reports**; the label is data-contract, not styling. Nothing in emergence is ever presented as established fact. - The verified lane renders as an explicit in-development placeholder (the council harness exists; it is inactive by design). - Source attribution and outbound links on every record; Reuters' absence is stated, not hidden. - The current page is a functional scaffold, in stage order: day-portrait treemap (server-rendered squarified layout, hash-routed fractal drill as progressive enhancement), the attention map (vendored Natural Earth 5.1.2: independent 50m physical land and 10m boundary/status references, Equal Earth world view and a locally centred equal-area close view; `assets/emergence-world.json`, explicitly regenerated by `scripts/gen-world-svg.js` with pinned hashes and a correction registry). Contested areas mask country fills; source notes distinguish claims, control and legal recognition. Unreviewed regions say **Reference only**; no live front lines or exhaustive maritime coverage are implied. Geometry remains public domain. The full day listed (no-JS floor), and the verified-lane placeholder. A dedicated UX pass owns the real design; it may replace all chrome freely, but reads the same data contract and honors the labeling rules above and the site-wide constraints (no sideways scroll at 320/375/1280, 15px minimum small text, dark/light modes, coherence.ngo parent badge). The view stage model (arrive/orient/drill/inspect/compare/trust) lives in `emergence/docs/ux-brief.md`. System model and budget rules live in `emergence/docs/design.md`; the frontend handoff brief in `emergence/docs/ux-brief.md`. ## App-shell regime (2026-09-30) Emergence and the xray case files opt into an app-inside-the-browser layout: the site header (the shared chrome) stays fixed; below it, big sections render as on-screen panes switched by a pane nav (`data-shell` container, `data-pane` sections, `data-shell-nav`), and scrolling happens inside the active pane only. The footer moves into a host pane (About on emergence, Download on xray) so it stays reachable without breaking the regime. Contract: `assets/app-shell.js` is shared, zero-dependency, and activates only when JavaScript runs — the no-JS floor is today's plain stacked page, byte for byte. Deep links keep working: `#record-…`, `#topic-…`, `#country-…` resolve to their hosting pane and scroll within it; the drill hash (`#t/…`) stays in Coverage. Pane state lives in the URL hash; arrow keys walk the pane nav. No page may need sideways scroll at any viewport (320/375/1280) — the pane nav may scroll horizontally as a component, the page may not. ### The once-read-yields-to-data rule (2026-10-01) In the app regime, identity content a reader consumes once — hero titles, taglines, portrait galleries, "what is this" copy — demotes to a compact identity strip (~15vh or less) and the panes own the frame. Data panes get the working room; narrative never competes with the tool. Apply this to every future shell page, and default interactive controls to where the day's mass actually is (most frequent event type, first expanded group, most relevant tab).