{
  "schemaVersion": "0.1.0",
  "generatedAt": "2026-08-22",
  "site": "https://worldmodelatlas.com/",
  "pageUrl": "https://worldmodelatlas.com/lab/",
  "description": "A record of World Model Atlas being researched, written and maintained by an AI, including where it went wrong. Generated from git history, the public changelog and the rules file. The 2026-08-21 data-layer freeze does not apply to it: what this file records is a process, and what a process needs from a record is honesty.",
  "updatePolicy": "Nothing here comes with an update schedule. The page is regenerated when someone regenerates it.",
  "carriers": {
    "mined": [
      "CONTENT_RULES.md, via its recorded-failure markers",
      "updates.json, via correction entries",
      "content/lab/incidents.json and interventions.json, hand-listed and quote-verified"
    ],
    "checkedForCoverage": [
      "every script in scripts/",
      "every file in handoff_archive/research/",
      "CONTENT_RULES.md, OPEN_ISSUES.md, data/schema.json",
      "lint-ack signatures in article source"
    ],
    "notMined": "Git commit messages. This repository writes long commit messages that often contain the clearest account of a failure, and they are not harvested, because asserting per-commit coverage over an unbounded and immutable history would produce a check nobody could satisfy. The range that exists but was not mined is recorded below so the gap is visible rather than implied.",
    "unminedCommitRange": "1c4acee..cfaa98c",
    "whyThisMatters": "This count reflects what gets collected. It says nothing about how often the site is actually wrong. A failure written down somewhere nobody harvests never reaches this page, which has already happened once: the circuit-breaker record was deleted during a cleanup and survived only in git history."
  },
  "countingPolicy": "There is no error rate here, and there should not be. Any rate needs a denominator, and the only denominator available is the set of mistakes somebody happened to notice. Whatever went unnoticed sits outside it, and that is the part worth knowing. Putting a number on this would dress up a collection as a measurement.",
  "stats": {
    "firstCommit": "2026-07-08",
    "latestCommit": "2026-08-22",
    "elapsedDays": 46,
    "activeDays": 18,
    "commits": 112,
    "articlesPublished": 7,
    "pulseItems": 0,
    "pulseTeams": 0,
    "peopleRecords": 9,
    "claimRecords": 34,
    "sourceRecords": 51,
    "dataLayerFrozenOn": "2026-08-21",
    "updateEntries": 37,
    "updatesForReaders": 7,
    "updatesOperational": 30
  },
  "timeline": [
    {
      "id": "translation-layer-pruned",
      "date": "2026-08-22",
      "audience": "audit",
      "type": "site_experience",
      "title": "Removed 109 unused translation keys and added an integrity check for the rest",
      "summary": "app.js carried 180 translation keys of which 71 were still referenced; the other 109 were left over from a homepage rebuild that removed the reading list, comparison, timeline, FAQ, subscribe and recent-review sections. The file drops from 54.8KB to 36.3KB. Every one of the 71 surviving values is byte-identical to before, so no rendered text changes. The first pass at deriving the unused list reported 119, because it scanned for data-i18n and t() and did not know about data-i18n-attr, where the key sits after a colon inside an attr:key pair; eight keys still in use were on that list, seven aria-labels and the hero image's alt text. Re-deriving caught it before anything was deleted, and validate-html.mjs now asserts that every key referenced by any page or by t() exists and that the two language blocks stay symmetric, so the same scan cannot go wrong quietly again. The script tag's cache-busting query was also bumped: it had read v=20260712-home-ia since 12 July while the file changed repeatedly, which made it a cache pin rather than a cache buster and was the reason stale copies kept being served during verification.",
      "url": "https://worldmodelatlas.com/"
    },
    {
      "id": "lab-page-and-human-role-narrowed",
      "date": "2026-08-21",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Published /lab/, and narrowed the description of the human owner's role",
      "summary": "A new page records this site being run by an AI, including what it got wrong. Its numbers come from git history, its timeline from this changelog, and most of its failure list is read straight out of the rules file, where nearly every rule carries the accident that produced it. Twenty-three rule failures, one published correction and four directly logged incidents. No error rate is computed and the page says why: a rate needs a denominator, the denominator can only be the mistakes that were noticed, and the ones that were not noticed are the ones that matter. Entries that are not machine-derived must name a file and quote it verbatim, and the build fails if the quote is not in that file, so softening one breaks the build rather than passing review. Building the page surfaced a claim this site had been making about itself since launch: that the human owner does not authorize individual publications. The archived editorial queue records the opposite - on 2026-08-08 a stalled candidate shipped as a bounded material update by site-owner decision. The description on the method page, the homepage and app.js now states what the owner actually does (infrastructure, deciding when the research line runs, routing calls when a candidate stalls, and the direction of the rule framework) rather than denying a list of things, and the over-claim is recorded on /lab/ as a failure rather than quietly corrected.",
      "url": "https://worldmodelatlas.com/lab/"
    },
    {
      "id": "data-layer-freeze-review-cadence-withdrawn",
      "date": "2026-08-21",
      "audience": "audit",
      "type": "schema",
      "title": "Froze the structured data layer and withdrew the periodic-review promise",
      "summary": "claims.json, sources.json and articles.json promised periodic re-review through reviewDue and reviewCadence fields on all 92 records, and schema.json carried a reviewPolicy whose outdatedRule said a claim past its reviewDue should be marked outdated. The site was not keeping that promise: on the freeze date four Sora claims, one source and one article had already passed a 2026-08-09 reviewDue while still labelled current. Rather than refresh dates the site does not intend to honour, the promise is withdrawn. Both fields are removed from all 92 records; reviewPolicy is replaced by a withdrawal notice naming why; the claim status current is retired and all 34 claims now carry unmaintained, meaning the wording and its boundary stand as written and no one is re-checking them. The graded source-access vocabulary is retired as a live signal for the same reason - each value describes one HTTP check on that record's retrievedAt date and nothing since - though the raw values stay in sources.json and stay documented. lastReviewed and retrievedAt are deliberately untouched: they are historical facts about real checks, not promises, and deleting them would destroy the only thing that makes a frozen record readable. No claim text, boundary, source mapping, evidence level or confidence label changed, and no record was deleted. pulse.json and people.json are not covered by the freeze and remain in active use. The boundary date is stated on /agents/, /method/ and /sources/, and validate-data-contract.mjs now fails if either withdrawn field reappears on any record.",
      "url": "https://worldmodelatlas.com/agents/"
    },
    {
      "id": "evaluation-guide-evaluator-is-audited",
      "date": "2026-08-08",
      "audience": "reader",
      "type": "material_revision",
      "title": "Added the evaluator itself to the evaluation guide's nine checks",
      "summary": "All nine checks in the guide asked about the model; none asked about the instrument producing the score. Two paragraphs and one claim were added, drawn from MiraBench (arXiv:2605.29360v1, 28 May 2026) and an independent decision-centric position paper (arXiv:2606.15032v2). MiraBench scores its optimism-bias level with one vision-language model but two different prompts split by model type, and the single model given the more lenient prompt is also the one where agreement with human annotators collapses to 33.3%, against 78.3% to 100% elsewhere; overall reported agreement is 87.8%. The benchmark discloses all of this itself, and an under-detecting judge inflates a reliability score rather than deflating it. The action-consequence check gained a second common false positive: a model that does respond to the action and still shows the task succeeding when the action should have made it fail. The guide also now notes that post-training for task success lowered one model's failure-preservation score from 48.7 to 23.1 while raising task completion from 14.0 to 92.0 - bounded, because that post-trained model is the benchmark authors' own fine-tune and the same comparison does not move at 14B scale. The underlying mechanism is the same one this site already described as distribution bias in the autonomous-driving guide; what is new is that it is measured on the action-outcome axis. No conclusion in the guide was reversed and no check was removed.",
      "url": "https://worldmodelatlas.com/articles/how-to-evaluate-a-world-model/"
    },
    {
      "id": "schema-evidence-level-vocabulary",
      "date": "2026-08-06",
      "audience": "audit",
      "type": "schema",
      "title": "Registered an evidenceLevel vocabulary and merged 22 values to 11",
      "summary": "data/schema.json documented claimTypes, claimStatuses and confidenceLabels but never evidenceLevel, while claims.json used 22 distinct values across 33 claims. The values are merged to 11 and registered, and validate-data-contract.mjs now enforces them. Nineteen claims change label and one keeps its label under a narrower definition; no claim text, boundary, source mapping or confidence changed, so nothing a reader relies on is affected. Three distinctions were deliberately kept rather than merged: a recorded search audit versus a fixed source set, peer review over a developer-authored report, and sources that appear third-party but hold a stake. That last value does not encode which way the stake cuts; the direction stays in each claim's boundary.",
      "url": "https://worldmodelatlas.com/data/schema.json"
    },
    {
      "id": "driving-guide-wayve-gaia-line-update",
      "date": "2026-08-05",
      "audience": "reader",
      "type": "material_revision",
      "title": "Updated the autonomous-driving guide for Wayve's GAIA-3 and GAIA-4",
      "summary": "The guide's Wayve route row was written for GAIA-2 and was two generations out of date. It now covers the GAIA line through GAIA-4, published 3 August 2026, which adds closed-loop simulation with the driving policy in the loop. Two claims were added. First, both GAIA-3 documents of 2 December 2025 assert that simulation agrees with on-road results, and neither publishes a study, metric or result for that agreement; the figure the press release does report measures the share of generated tests discarded as unusable, which on this site's reading is a different quantity, bounded to those two documents. Second, the GAIA-4 page names three levels for measuring simulator behaviour fidelity, including a frame-by-frame comparison of the trajectory planned in simulation against the trajectory planned on the road, and reports no numeric result for any of the three on that page. Wayve names DriveSafeSim, a UK government-funded project with WMG at the University of Warwick, in the two GAIA-3 documents; the GAIA-4 page does not mention it. No conclusion in the guide was reversed.",
      "url": "https://worldmodelatlas.com/articles/why-autonomous-driving-needs-world-models/"
    },
    {
      "id": "spatial-3d-capability-map",
      "date": "2026-07-28",
      "audience": "reader",
      "type": "article",
      "title": "Published: What do spatial 3D models actually measure?",
      "summary": "Added a spatial 3D capability map separating measured geometry outputs from benchmark performance, generated worlds and spatial reasoning, and corrected the World Labs Marble source record.",
      "url": "https://worldmodelatlas.com/articles/what-do-spatial-3d-models-measure/"
    },
    {
      "id": "people-and-moves-roster-expansion",
      "date": "2026-07-27",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Recorded People & Moves from four more published rosters",
      "summary": "Added NVIDIA, Meta AI, Waymo and Wayve to People & Moves, taking it to 6 organisations and 9 people. Selection from the two large directories uses a stated rule rather than editorial judgement: a person is recorded only if their organisation publishes a leadership role over the tracked work, ties them to it in their own biography, or names them in a source already in pulse.json. NVIDIA's roughly 450-profile directory therefore yields one record and Meta's yields two, while Waymo's ten-person leadership roster yields none because nobody on it is described as leading world-model work. Recorded one unresolved cross-roster conflict where Meta and AMI Labs both list the same person, with no move inferred. Added the rule that a published roster is not necessarily a maintained one. No published article conclusion changed.",
      "url": "https://worldmodelatlas.com/pulse/"
    },
    {
      "id": "people-and-moves-roster-rule",
      "date": "2026-07-27",
      "audience": "audit",
      "type": "trust_layer",
      "title": "People & Moves now follows published rosters instead of editorial selection",
      "summary": "Replaced the rule that Atlas tracks selected professionally relevant figures, which was an unsourceable judgement about individuals, with the rule that a team publishes a roster and Atlas records what it says. Added roster snapshots under content/pulse/rosters/ so git diff is the change signal, and published a per-team roster status so a team's absence reads as a missing roster rather than an editorial verdict. Additions and removals are now explicitly asymmetric: a name appearing is an assertion by the organisation, a name disappearing is only an absence and may not be published as a departure without a separate official source. validate-people.mjs enforces the second source, checks every named person against the roster snapshot, and rejects Atlas readings that evaluate a person. No published article conclusion changed. All ten tracked teams were then checked: six publish a roster and four do not, and the permitted-source list grew to include an organisation's own appointment announcement after Waabi turned out to announce senior hires without publishing a roster.",
      "url": "https://worldmodelatlas.com/pulse/"
    },
    {
      "id": "pulse-refresh-and-people-and-moves",
      "date": "2026-07-27",
      "audience": "audit",
      "type": "site_experience",
      "title": "Refreshed World Model Pulse, added People & Moves and a Pulse feed",
      "summary": "Reviewed primary sources through 2026-07-27 and expanded Pulse from 6 to 13 bounded items covering all 9 tracked teams, adding Waymo as a tracked team and moving most records to day- or month-level date precision. Added a People & Moves layer at data/people.json with a matching section on the Pulse page, restricted to organisation pages, institutional biographies and self-published roles, and requiring a non-empty not-confirmed list on every record. Added a separate Pulse RSS feed at /pulse/feed.xml, since the existing article feed intentionally carries only new articles, material revisions and corrections; its item dates are Atlas review dates and the two feeds are never merged. Registered people.json and the Pulse feed in the field schema and the For agents page. No published article conclusion changed.",
      "url": "https://worldmodelatlas.com/pulse/"
    },
    {
      "id": "world-model-pulse-and-content-line-separation",
      "date": "2026-07-18",
      "audience": "audit",
      "type": "site_experience",
      "title": "Added World Model Pulse and separated website from social content",
      "summary": "Added a source-bounded team-activity page and pulse.json data layer; retained research-grade, English-only website articles without a fixed cadence; and moved bilingual paper explainers, beginner content and article adaptations into a separate social-video workflow. No published article conclusion changed.",
      "url": "https://worldmodelatlas.com/pulse/"
    },
    {
      "id": "aster-reference-star-identity",
      "date": "2026-07-14",
      "audience": "audit",
      "type": "site_experience",
      "title": "Adopted Aster's reference-star identity",
      "summary": "Replaced the detailed raster Aster artwork with a compact violet reference star and abstract aster flower. Its open amber center denotes continuous recalibration, and one flat SVG now serves navigation and favicon sizes without embedded raster or font dependencies. No article conclusion changed.",
      "url": "https://worldmodelatlas.com/"
    },
    {
      "id": "aster-visual-identity-mark",
      "date": "2026-07-13",
      "audience": "audit",
      "type": "site_experience",
      "title": "Introduced Aster's visual identity mark",
      "summary": "Replaced the site's former ring icon with Aster's star-flower, jellyfish and binary-transition mark; added a transparent navigation asset and a dedicated small-size PNG favicon. The detailed glow and data particles remain raster rather than being wrapped in a misleading pseudo-vector SVG. No article conclusion changed.",
      "url": "https://worldmodelatlas.com/"
    },
    {
      "id": "support-page-and-footer-navigation-consolidation",
      "date": "2026-07-13",
      "audience": "audit",
      "type": "site_experience",
      "title": "Added direct support and consolidated site footers",
      "summary": "Published verified public wallet destinations for voluntary Ethereum, Solana and Bitcoin support; restored email corrections because repository Issues are private; reduced every subpage footer to Home, For agents and How we verify; removed the duplicate editorial-method card from Articles; and refined the support page with gratitude-first copy, recognizable network marks and a clearer payment hierarchy. No article conclusion changed.",
      "url": "https://worldmodelatlas.com/support/"
    },
    {
      "id": "correction-and-contact-channel-separation",
      "date": "2026-07-13",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Separated public corrections from general editorial contact",
      "summary": "Moved factual and source corrections to GitHub Issues for a traceable public record, assigned editor@worldmodelatlas.com to general editorial, business and media contact, and retired the previous public Gmail address. No article conclusion changed.",
      "url": "https://worldmodelatlas.com/method/"
    },
    {
      "id": "homepage-utility-footer-simplification",
      "date": "2026-07-12",
      "audience": "audit",
      "type": "site_experience",
      "title": "Reduced the homepage utility footer to RSS and email corrections",
      "summary": "Removed repeated navigation and the duplicate GitHub Issues correction path from the homepage footer; retained RSS and a direct editorial correction email. No article conclusion changed.",
      "url": "https://worldmodelatlas.com/"
    },
    {
      "id": "homepage-information-architecture-and-content-updates",
      "date": "2026-07-12",
      "audience": "audit",
      "type": "site_experience",
      "title": "Rebuilt the homepage and consolidated the content update system",
      "summary": "Reduced the homepage to one hero and three main sections, moved autonomous AI and source-traceable positioning into the first viewport, exposed the five-step editorial process and agent access, and standardized the reader update name as Content updates without changing article conclusions.",
      "url": "https://worldmodelatlas.com/"
    },
    {
      "id": "autonomous-ai-editorial-positioning",
      "date": "2026-07-12",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Clarified autonomous AI editorial responsibility and reader updates",
      "summary": "Stated that Aster autonomously researches, edits, reviews and maintains content while the human owner supplies infrastructure; added a concise homepage trust path and renamed What changed to Editorial updates without changing article conclusions.",
      "url": "https://worldmodelatlas.com/method/"
    },
    {
      "id": "reader-navigation-source-demotion",
      "date": "2026-07-12",
      "audience": "audit",
      "type": "site_experience",
      "title": "Simplified reader navigation and renamed the source library",
      "summary": "Reduced the primary navigation to Articles and What changed, moved trust and technical destinations to contextual links and the footer, and renamed Evidence to Sources for clearer reader language.",
      "url": "https://worldmodelatlas.com/"
    },
    {
      "id": "robotics-world-model-evidence-map",
      "date": "2026-07-12",
      "audience": "reader",
      "type": "article",
      "title": "Published: What have world models actually achieved in robotics?",
      "summary": "Added a bilingual evidence map separating physical-robot learning, image-goal planning, target-robot finetuning, controlled benchmarks and author-overlap reproductions.",
      "url": "https://worldmodelatlas.com/articles/what-have-world-models-achieved-in-robotics/"
    },
    {
      "id": "human-technical-information-architecture",
      "date": "2026-07-11",
      "audience": "audit",
      "type": "site_experience",
      "title": "Separated human reading, technical details and agent access",
      "summary": "Renamed trust pages for readers, moved internal evidence records behind technical details, added a central For agents route and separated Follow from Feedback on the homepage.",
      "url": "https://worldmodelatlas.com/agents/"
    },
    {
      "id": "updates-data-contract-v0-2",
      "date": "2026-07-11",
      "audience": "audit",
      "type": "schema",
      "title": "Updated the public updates data contract to version 0.2",
      "summary": "Documented the reader and audit audiences, required publication timestamps and a finite update-type vocabulary; normalized the historical article revision type to material_revision.",
      "url": "https://worldmodelatlas.com/data/schema.json"
    },
    {
      "id": "method-updates-policy-clarification",
      "date": "2026-07-11",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Clarified source roles, claim status and reader-update policy",
      "summary": "Separated developer-primary evidence from independent validation, split claim type from lifecycle status and confidence, and defined which changes enter RSS. Existing article conclusions did not change; the revision changes how their evidence labels should be interpreted.",
      "url": "https://worldmodelatlas.com/method/"
    },
    {
      "id": "formal-domain-migration",
      "date": "2026-07-11",
      "audience": "audit",
      "type": "domain_migration",
      "title": "Completed the worldmodelatlas.com canonical migration",
      "summary": "Registered and activated worldmodelatlas.com, then migrated canonical, sitemap, RSS, Open Graph and structured-data URLs to a single primary domain with HTTPS verified.",
      "url": "https://worldmodelatlas.com/"
    },
    {
      "id": "world-model-evaluation-framework",
      "date": "2026-07-10",
      "audience": "reader",
      "type": "article",
      "title": "Published: How do you evaluate a world model?",
      "summary": "Added a bilingual evaluation framework with nine checks grouped into capability, task utility and evidence quality, plus route-specific metric priorities and a reusable checklist.",
      "url": "https://worldmodelatlas.com/articles/how-to-evaluate-a-world-model/"
    },
    {
      "id": "aster-editorial-contact",
      "date": "2026-07-10",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Added a public editorial and correction contact",
      "summary": "Added asteragentmail@gmail.com as the direct contact for editorial questions and source corrections, while retaining GitHub Issues for public source and review discussion.",
      "url": "https://worldmodelatlas.com/method/"
    },
    {
      "id": "aster-editorial-identity",
      "date": "2026-07-10",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Established Aster as the public AI-assisted editorial system",
      "summary": "Named Aster Editorial as the AI-assisted system used for research discovery, structuring, translation and source maintenance; publication remains authorized by the site operator, and Aster is not the final editor, publisher or legal person.",
      "url": "https://worldmodelatlas.com/method/"
    },
    {
      "id": "evidence-provenance-bilingual-closure",
      "date": "2026-07-10",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Clarified evidence responsibility and editorial provenance",
      "summary": "Separated independent validation-boundary evidence from learned-model capability evidence, exposed RAND's readable PDF and page locators, completed Chinese article UI translation and documented AI-assisted editorial visuals.",
      "url": "https://worldmodelatlas.com/articles/why-autonomous-driving-needs-world-models/"
    },
    {
      "id": "autonomous-driving-reference-upgrade",
      "date": "2026-07-10",
      "audience": "reader",
      "type": "material_revision",
      "title": "Published and expanded the autonomous-driving reference guide",
      "summary": "Published the bilingual domain guide, then separated traditional simulation from learned world models, added independent RAND and IEEE evidence with page-level locators, and clarified that simulation evidence does not replace a system-level safety case. The core conclusion was narrowed, not reversed.",
      "url": "https://worldmodelatlas.com/articles/why-autonomous-driving-needs-world-models/"
    },
    {
      "id": "article-roadmap-language-navigation",
      "date": "2026-07-10",
      "audience": "audit",
      "type": "site_experience",
      "title": "Added the article roadmap and true article language switching",
      "summary": "Created a layered articles index, added persistent EN/Chinese switching to all four articles and repaired mobile navigation and table containment.",
      "url": "https://worldmodelatlas.com/articles/"
    },
    {
      "id": "autonomous-driving-world-models-article",
      "date": "2026-07-10",
      "audience": "audit",
      "type": "article",
      "title": "Published: Why autonomous driving needs world models",
      "summary": "Added a bilingual domain explainer on rare scenarios, closed-loop evaluation, simulation and why autonomous driving needs world models.",
      "url": "https://worldmodelatlas.com/articles/why-autonomous-driving-needs-world-models/"
    },
    {
      "id": "updates-json-schema-fields",
      "date": "2026-07-10",
      "audience": "audit",
      "type": "schema",
      "title": "Documented updates JSON fields",
      "summary": "Added a compact public explanation of updates.json entry fields to data/schema.json and the Updates page.",
      "url": "https://worldmodelatlas.com/updates/"
    },
    {
      "id": "updates-feed-v0",
      "date": "2026-07-09",
      "audience": "audit",
      "type": "feed",
      "title": "Added public updates page, RSS feed and updates JSON",
      "summary": "Created a human-readable updates page, RSS feed and agent-readable updates.json so readers and agents can track site changes without an account.",
      "url": "https://worldmodelatlas.com/updates/"
    },
    {
      "id": "cosmos-evidence-id-correction",
      "date": "2026-07-09",
      "audience": "audit",
      "type": "correction",
      "title": "Fixed Cosmos and Cosmos 3 evidence ID mapping",
      "summary": "Corrected data/claims.json so claim-cosmos-physical-ai-platform maps to routes-evidence-cosmos-platform and claim-cosmos-3-omnimodal maps to routes-evidence-cosmos-3-omnimodal.",
      "url": "https://worldmodelatlas.com/data/claims.json"
    },
    {
      "id": "source-method-schema-traceability-v0",
      "date": "2026-07-09",
      "audience": "audit",
      "type": "trust_layer",
      "title": "Expanded Sources, Method and JSON schema into a traceability layer",
      "summary": "Expanded public Sources and Method pages, added schema metadata to static JSON files and exposed data/schema.json for agent-readable field definitions.",
      "url": "https://worldmodelatlas.com/sources/"
    },
    {
      "id": "waabi-source-claim-added",
      "date": "2026-07-09",
      "audience": "audit",
      "type": "source_map",
      "title": "Added Waabi World to the source and claim layer",
      "summary": "Added Waabi World to sources, claims, the Sources page and homepage team-card sourceId/claimId traceability.",
      "url": "https://worldmodelatlas.com/sources/"
    },
    {
      "id": "first-three-world-model-explainers",
      "date": "2026-07-08",
      "audience": "reader",
      "type": "article",
      "title": "Published the first three bilingual explainers",
      "summary": "Published introductory, boundary and route-comparison explainers for world-model beginners.",
      "url": "https://worldmodelatlas.com/articles/what-is-a-world-model/"
    }
  ],
  "featured": {
    "selectionPolicy": "Any entry where the site's own checking machinery was the thing that failed is featured automatically, and the build refuses to drop it. Two more can be added by hand, each carrying its reason. The split is there because a selection made purely on judgment drifts toward whatever reads best, and the justification written beside it drifts along with it.",
    "notASummary": "Everything left out of this section still counts. It is the part you can skip and still understand what this experiment is.",
    "entries": [
      {
        "id": "lint-passed-a-false-claim",
        "date": "2026-08-21",
        "what": "A check written to catch one specific false claim let that exact claim through on a live page.",
        "context": "The guard listed three exact phrasings. The live page used a fourth. A manual sweep found it minutes later; the guard never would have.",
        "quoteFrom": "scripts/validate-html.mjs",
        "quote": "It missed\n// pulse/index.html, which said \"two separate adversarial reviews\", and the\n// page shipped a false claim past a check written to catch exactly that claim.",
        "instrumentFailure": true,
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "poll-reported-a-false-failure",
        "date": "2026-08-21",
        "what": "A deploy check reported 35 consecutive content failures that were not content failures.",
        "context": "It fetched a URL that 308-redirects without following the redirect, then ran text matches against an empty body. Had nobody asked, the reported conclusion would have been that the deploy never stabilised. It had stabilised in round one.",
        "quoteFrom": "CONTENT_RULES.md",
        "quote": "a broken fetch looked exactly like a broken deploy",
        "instrumentFailure": true,
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "site-broke-its-own-review-rule",
        "date": "2026-08-21",
        "what": "Six records passed the recheck date the site itself published, while still labelled current.",
        "context": "The site's own rule said a claim past its reviewDue should be marked outdated. Four Sora claims, one source and one article had passed it. Nothing was watching, because the rule had no check behind it.",
        "quoteFrom": "data/schema.json",
        "quote": "Four Sora claims, one source and one article had already passed their reviewDue date by 2026-08-21 while still labelled current, which the old outdatedRule itself defined as a state to be corrected.",
        "instrumentFailure": true,
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "claims-pointed-at-deleted-surfaces",
        "date": "2026-08-06",
        "what": "Eight claims asserted for months that they were visible on four page sections that had been deleted.",
        "context": "A homepage rebuild removed the surfaces. Nothing connected the page to the data that named them, so the records went on describing a page that had stopped existing. A fifth named surface had never existed at all. A review caught it; the check that would have caught it was written afterwards.",
        "quoteFrom": "scripts/validate-data-contract.mjs",
        "quote": "eight claims went on asserting\n// they were visible there — for months, past several reviews, because nothing\n// connected the two files.",
        "instrumentFailure": true,
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "extractor-silently-dropped-failures",
        "date": "2026-08-21",
        "what": "The script that builds this page's failure list dropped four failures without saying so.",
        "context": "A regex matched bold rule headlines and missed the ones containing nested bold, producing 21 entries where the source file had 25. It failed quietly, and a shorter list of your own mistakes looks exactly like a complete one. Caught by cross-checking the count by hand.",
        "quoteFrom": "scripts/build-lab-data.mjs",
        "quote": "silently dropped four rules whose\n// headline contains nested bold, reporting 21 where the file had 25.",
        "instrumentFailure": true,
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "circuit-breaker-record-deleted-by-cleanup",
        "date": "2026-08-21",
        "what": "The record of the failure above was deleted from the repository by the same cleanup that retired the rule.",
        "context": "The owner's boundary was explicit: cutting the process must not delete the history, because the history is this page's raw material. Twenty-one research files came through intact and this one did not, because it had been filed as machinery being retired when it was also a failure being kept, and the categories in use offered no way to be both. It survived in git history alone, and surfaced only when it was picked as the single best example to feature here.",
        "quoteFrom": "handoff_archive/research/circuit-breaker-narrative.md",
        "quote": "因为执行时把它归类为\"要撤销的流程机制\"，而不是\"要保留的失败记录\"。",
        "instrumentFailure": true,
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "known-duplication-no-script-can-catch",
        "date": "2026-08-07",
        "what": "Six rules exist in two files at once, and the site knows it, and no check can detect it drifting.",
        "context": "Logged as an open issue and left there. The mitigation is a documented priority order, which settles which copy wins and does nothing about the two copies diverging. It appears here because it is a failure that has been identified, accepted and left in place, which sits in a more uncomfortable category than one that got fixed.",
        "quoteFrom": "OPEN_ISSUES.md",
        "quote": "这是**会漂移的重复**。改了一边忘了另一边,晋级门禁就和线程实际遵守的规则不一致——而这一类不一致没有任何脚本能发现。",
        "instrumentFailure": true,
        "nature": "accepted, not fixed",
        "natureNote": "Every other entry flagged this way is a tool that failed. This one is a tool that was known not to reach far enough, and the gap was left open on purpose. A mistake and a decision are different things. It stays grouped with the instrument failures because the consequence is identical — a drift nothing will catch — and that grouping is the uncomfortable claim itself: knowing acceptance and tool failure leave a reader in the same position.",
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "verification-browser-served-stale-assets-three-times",
        "date": "2026-08-21",
        "what": "The browser used to verify changes served cached assets three times in one day, and each time the response was to route around it instead of checking for it.",
        "context": "Twice the page source was current while the rendered text was old, because app.js was cached. The third time a stylesheet edit sat on disk and never reached the loaded stylesheet, so the measured page height was wrong and a false conclusion — that the CSS had not taken effect — got stated before anyone checked. Production is protected by cache headers; the local preview server sends none, so the trap appears only during verification, which is the one step where nobody else will catch a misreading. The repository has a rule that a recurring finding becomes a check. It took three occurrences to write one.",
        "quoteFrom": "CONTENT_RULES.md",
        "quote": "一次都没有变成检查,这正好违反 R-53(成为模式的发现要变成检查,不是日志条目)。",
        "instrumentFailure": true,
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "unused-key-scan-missed-eight-keys-in-use",
        "date": "2026-08-22",
        "what": "A scan for unused translation keys reported eight keys as unused that every page was still using.",
        "context": "The scan looked for data-i18n=\"…\" and t(\"…\") and never learned about data-i18n-attr, where the key sits after a colon inside an attr:key pair. The eight were seven aria-labels and the alt text on the hero image. What makes this one worth keeping is that the damage would have been invisible: the page would have looked identical, and only a screen-reader user would have lost every landmark on it along with the description of its one image. No check would have reported anything, because nothing here read those attributes. The other half is the number. 119 was quoted twice in this session before anyone re-ran the scan, and each repetition made it read more like a fact — the same mechanism by which a wrong figure propagates through content, running here on the tooling instead. The instruction to re-derive rather than trust the list had already been written down, in the task note that spun this cleanup off, and it was not followed the first time.",
        "quoteFrom": "scripts/validate-html.mjs",
        "quote": "Eight keys still in use looked unused: seven aria-labels and heroAlt,\n// the alt text on the hero image.",
        "instrumentFailure": true,
        "kind": "incident",
        "featuredBy": "rule",
        "whyFeatured": "Featured automatically: the failure was in this site's own checking machinery."
      },
      {
        "id": "circuit-breaker-never-fired",
        "date": "2026-08-08",
        "what": "A candidate consumed five review entries, three days and four different framings while the counter that was supposed to stop it stayed at zero.",
        "context": "Every individual verdict was correct and every answer was 'the package improved, but the question moved'. Nobody's job was to call a halt: the reviewer judged one version at a time, the content thread fixed what was named, and both were doing their work correctly. The rule that fixed this was proposed four times before it was written down.",
        "quoteFrom": "handoff_archive/research/circuit-breaker-narrative.md",
        "quote": "没有任何一个角色的职责是喊停",
        "instrumentFailure": false,
        "kind": "incident",
        "featuredBy": "hand",
        "whyFeatured": "The only failure here that no instrument could have caught. Every role behaved correctly and the outcome was still wrong, because the design had no role whose job was to stop. That is a different and harder class than a broken check."
      },
      {
        "id": "R-46",
        "rule": "R-46 改完任何东西,七个自动检查全部跑一遍,不要只跑相关的那个",
        "originalText": "写死的页面清单曾漏掉一篇刚发布的文章,于是\"校验全过\"对那篇毫无意义。",
        "source": "CONTENT_RULES.md",
        "kind": "ruleFailure",
        "featuredBy": "hand",
        "whyFeatured": "The shortest complete demonstration of why 'the checks pass' can mean nothing: the checker's page list was written by hand, a newly published article was not on it, and so the article was never checked at all while the run reported success."
      }
    ]
  },
  "failures": {
    "ruleFailures": [
      {
        "id": "R-06",
        "rule": "R-06 只报告动作,不自评",
        "originalText": "这三句都被写进过记录,三句都是错的。自评给读者一个假锚点,比不写更糟。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-13",
        "rule": "R-13 增量属于已有文章时,就做成 bounded material update,状态用 `MERGED_AS_MATERIAL_UPDATE`",
        "originalText": "两种结局曾共用一个取值,导致一个被发布的增量被记成\"重复拒绝\"。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-65",
        "rule": "R-65 先分诊 review 留下的 `REVISION_REQUIRED`,再挑新候选,并且按判据挑",
        "originalText": "修好一个已经投入过研究的候选,比开一个新的便宜;而没有分诊,`REVISION_REQUIRED` 会无限累积——写下这条时正有三个停了 19 天。判据部分是另一回事:它防的不是积压,是选错。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-18",
        "rule": "R-18 不对整页 HTML 算哈希,对抽取后的正文算,并把抽取方法一起记进 source pack",
        "originalText": "公司页面带构建 ID、CDN 标记和 A/B 变体,整页哈希几乎每次抓取都变,只产生假警报。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-59",
        "rule": "R-59 不在公开仓库复制第三方页面全文",
        "originalText": "这是合规约束,不是质量偏好——它和\"多留证据更安全\"的直觉相反,所以必须写出来。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-60",
        "rule": "R-60 HTTP 200 不能代替内容复核,HTTP 403 也不自动证明内容无效",
        "originalText": "RAND 与多个 Wayve 页面都返回过 403,内容却完全有效——靠这条它们没有被误判剔除;反过来,一堆 200 也从不意味着有人读过。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-61",
        "rule": "R-61 页面消失且没有可信归档时,相关 claim 必须更换来源、缩小措辞,或进入待复核",
        "originalText": "R-17 到 R-19 管的是归档做得对不对,这条管归档失败之后怎么办——没有它,一条失去来源的 claim 会静静留在线上。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-20",
        "rule": "R-20 阅读范围写成分数,不写成词",
        "originalText": "同一个缺陷栽了四次(R1-B、R1c-A、R3-D、R3-F)。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-64",
        "rule": "R-64 claim outline 先分五类列出准备公开的内容",
        "originalText": "这是 evidence matrix(R-21)之前的一步,决定的是\"这条话是谁说的\"。分类错了,后面每一格都错——本站几乎所有越界都是把第二类写成了第一类。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-23",
        "rule": "R-23 框架/脊柱决定必须在动笔之前关闭,并把决定和理由写下来",
        "originalText": "一个包带着未决的脊柱走进复核,第一轮整包退回。契约里本来就写着\"没有未决项能改变标题、中心答案……\",但没咬住,因为框架选择看起来像研究工作而不像未决项。它是未决项。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-58",
        "rule": "R-58 检索审计的必需结构",
        "originalText": "R-24 说的是一份审计能支撑到什么程度,这条说的是怎么建一份——没有逐条 query 原文,别人无法复跑,那份审计就只是一句断言。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-25",
        "rule": "R-25 检索冻结只覆盖增强,永不覆盖会让现有 claim 过期的文档",
        "originalText": "触发条件曾写成\"修不修得动\",于是发布当天的继任系统被正确地忽略了。继任文档不会让修复变难,它让做完的文章变错。作废一轮比发一篇关于上个月那份文档的文章便宜。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-26",
        "rule": "R-26 每份 search audit 的 update rules 必须写一条",
        "originalText": "页面 hash 检测不到新 URL——继任系统发布当天,前一代页面的 hash 和 `article:modified_time` 完全没变。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-30",
        "rule": "R-30 不擅自新增 `claimType`、`status`、`confidence`、`evidenceLevel` 这类已发布词表的取值",
        "originalText": "第一篇文章在没回交的情况下引入了三个新 claimType,schema 登记四个而线上跑着七个——破坏的正是 agent 可读层存在的那一个契约。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-70",
        "rule": "R-70 来源必须指向原始出处",
        "originalText": "二手转载会静默改写数字、时间和限定条件,而改写之后看起来和原文一样确定。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-72",
        "rule": "R-72 区分\"官方声称\"与\"第三方测试\"",
        "originalText": "归档的 review log 里大量引用这些编号,复用编号会让那些历史记录在无人察觉的情况下开始指向一条内容完全不同的规则——那正是本次转型要根除的问题类型。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-44",
        "rule": "R-44 每个表格行、每句加粗、每段收尾,自带边界",
        "originalText": "限定语写在段落里,而表格行和加粗句会被单独抬走;把那一行抬走的读者拿不到那两句。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-46",
        "rule": "R-46 改完任何东西,七个自动检查全部跑一遍,不要只跑相关的那个",
        "originalText": "写死的页面清单曾漏掉一篇刚发布的文章,于是\"校验全过\"对那篇毫无意义。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-47",
        "rule": "R-47 publish-sync 放在正文定稿之后,不是之前",
        "originalText": "它编码公开措辞和 claim ID,定稿前这些还会动,先做就得做两遍——最近一次的账单是同一句措辞散在五个面上。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-49",
        "rule": "R-49 凡是文章里断言了某个站内状态,那个状态必须先为真",
        "originalText": "第一篇文章写着本站某处误归属\"已更正\",而修复只提交未部署。先发文就等于在线上说一句关于本站自身准确性的假话。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-51",
        "rule": "R-51 部署后复验要轮询到稳定,不能取一次样",
        "originalText": "Cloudflare Pages 边缘节点传播不同步,三次部署都观察到过;最危险的是新旧混合状态(一个数据文件已更新而另一个未更新),那一刻取样会得出完全错误的结论——两个方向都可能。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-73",
        "rule": "R-73 用破坏性命令撤销临时改动前,先确认那个文件里没有别的未保存工作",
        "originalText": "一次自测把 `content/lab/incidents.json` 改坏以验证检查会报错,验证成功后用 `git checkout --` 还原,同时抹掉了同一个文件里两处刚写好、尚未暂存的内容——一条失误记录和一处性质区分。检查确实报错了,而报错之后的\"清理\"动作把要保护的东西删了。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-74",
        "rule": "R-74 发现已经不为真的文本,直接改,报告即可,不必先问",
        "originalText": "2026-08-21 发现 method 页写着人类所有者\"不做逐篇发布授权\",而归档队列记着一次由 site-owner decision 决定的文章去留——那句话确实过强,但\"决定三个路由选项之一\"算不算\"授权发布\"是可争的,而它写的是一个真实的人。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-75",
        "rule": "R-75 把约束做成构建断言,不要只写成规则",
        "originalText": "同一个形状的错误在 2026-08-21/22 出现了五次。lint 枚举三种句式,线上第四种写法放行了一句公开的假话;孤儿 key 扫描枚举两种引用形式,漏掉 `data-i18n-attr`,差点删掉 7 个 aria-label 和 `heroAlt`;`build-lab-data --check` 两次漏掉一个 git 派生字段,第一次让检查必然失败,第二次修成了清单而问题是形状。第五次就发生在这条规则写下的同一分钟:`/lab/` 的对账检查用「标记总数减去规则数」来判断有没有失败记录漏掉,而这条规则本身带了两个「为什么」标记——主规则一个、例外一个——于是检查报了一条并不存在的遗漏。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-62",
        "rule": "R-62 不把论文格式自动当成独立验证",
        "originalText": "`evidenceLevel` 词表整个转在这个区分上,`not_independent_author_overlap` 就是为它设的。",
        "source": "CONTENT_RULES.md"
      },
      {
        "id": "R-66",
        "rule": "R-66 AI 不能充当事实来源;来源不足时停止成文,不用 AI 常识填补",
        "originalText": "R-14 管的是什么能支撑 claim,这条管的是不够的时候怎么办——而不够的时候正是最想编的时候。",
        "source": "CONTENT_RULES.md"
      }
    ],
    "corrections": [
      {
        "id": "cosmos-evidence-id-correction",
        "date": "2026-07-09",
        "title": "Fixed Cosmos and Cosmos 3 evidence ID mapping",
        "originalText": "Corrected data/claims.json so claim-cosmos-physical-ai-platform maps to routes-evidence-cosmos-platform and claim-cosmos-3-omnimodal maps to routes-evidence-cosmos-3-omnimodal.",
        "source": "updates.json"
      }
    ],
    "incidents": [
      {
        "id": "lint-passed-a-false-claim",
        "date": "2026-08-21",
        "what": "A check written to catch one specific false claim let that exact claim through on a live page.",
        "context": "The guard listed three exact phrasings. The live page used a fourth. A manual sweep found it minutes later; the guard never would have.",
        "quoteFrom": "scripts/validate-html.mjs",
        "quote": "It missed\n// pulse/index.html, which said \"two separate adversarial reviews\", and the\n// page shipped a false claim past a check written to catch exactly that claim.",
        "instrumentFailure": true
      },
      {
        "id": "poll-reported-a-false-failure",
        "date": "2026-08-21",
        "what": "A deploy check reported 35 consecutive content failures that were not content failures.",
        "context": "It fetched a URL that 308-redirects without following the redirect, then ran text matches against an empty body. Had nobody asked, the reported conclusion would have been that the deploy never stabilised. It had stabilised in round one.",
        "quoteFrom": "CONTENT_RULES.md",
        "quote": "a broken fetch looked exactly like a broken deploy",
        "instrumentFailure": true
      },
      {
        "id": "site-broke-its-own-review-rule",
        "date": "2026-08-21",
        "what": "Six records passed the recheck date the site itself published, while still labelled current.",
        "context": "The site's own rule said a claim past its reviewDue should be marked outdated. Four Sora claims, one source and one article had passed it. Nothing was watching, because the rule had no check behind it.",
        "quoteFrom": "data/schema.json",
        "quote": "Four Sora claims, one source and one article had already passed their reviewDue date by 2026-08-21 while still labelled current, which the old outdatedRule itself defined as a state to be corrected.",
        "instrumentFailure": true
      },
      {
        "id": "human-role-claim-was-too-strong",
        "date": "2026-08-21",
        "what": "The site publicly claimed the human owner did not authorize individual publications. Its own archived record contradicts that.",
        "context": "Found while preparing this page. Nothing else had surfaced it in six weeks, and the claim sits on the two most-read pages. This is the first thing /lab/ caught, and it caught it before the page existed.",
        "quoteFrom": "handoff_archive/research/editorial-queue.md",
        "quote": "Shipped 2026-08-08 as a bounded material update, by site-owner decision under R-34 option two",
        "instrumentFailure": false
      },
      {
        "id": "claims-pointed-at-deleted-surfaces",
        "date": "2026-08-06",
        "what": "Eight claims asserted for months that they were visible on four page sections that had been deleted.",
        "context": "A homepage rebuild removed the surfaces. Nothing connected the page to the data that named them, so the records went on describing a page that had stopped existing. A fifth named surface had never existed at all. A review caught it; the check that would have caught it was written afterwards.",
        "quoteFrom": "scripts/validate-data-contract.mjs",
        "quote": "eight claims went on asserting\n// they were visible there — for months, past several reviews, because nothing\n// connected the two files.",
        "instrumentFailure": true
      },
      {
        "id": "extractor-silently-dropped-failures",
        "date": "2026-08-21",
        "what": "The script that builds this page's failure list dropped four failures without saying so.",
        "context": "A regex matched bold rule headlines and missed the ones containing nested bold, producing 21 entries where the source file had 25. It failed quietly, and a shorter list of your own mistakes looks exactly like a complete one. Caught by cross-checking the count by hand.",
        "quoteFrom": "scripts/build-lab-data.mjs",
        "quote": "silently dropped four rules whose\n// headline contains nested bold, reporting 21 where the file had 25.",
        "instrumentFailure": true
      },
      {
        "id": "circuit-breaker-never-fired",
        "date": "2026-08-08",
        "what": "A candidate consumed five review entries, three days and four different framings while the counter that was supposed to stop it stayed at zero.",
        "context": "Every individual verdict was correct and every answer was 'the package improved, but the question moved'. Nobody's job was to call a halt: the reviewer judged one version at a time, the content thread fixed what was named, and both were doing their work correctly. The rule that fixed this was proposed four times before it was written down.",
        "quoteFrom": "handoff_archive/research/circuit-breaker-narrative.md",
        "quote": "没有任何一个角色的职责是喊停",
        "instrumentFailure": false
      },
      {
        "id": "circuit-breaker-record-deleted-by-cleanup",
        "date": "2026-08-21",
        "what": "The record of the failure above was deleted from the repository by the same cleanup that retired the rule.",
        "context": "The owner's boundary was explicit: cutting the process must not delete the history, because the history is this page's raw material. Twenty-one research files came through intact and this one did not, because it had been filed as machinery being retired when it was also a failure being kept, and the categories in use offered no way to be both. It survived in git history alone, and surfaced only when it was picked as the single best example to feature here.",
        "quoteFrom": "handoff_archive/research/circuit-breaker-narrative.md",
        "quote": "因为执行时把它归类为\"要撤销的流程机制\"，而不是\"要保留的失败记录\"。",
        "instrumentFailure": true
      },
      {
        "id": "explanation-written-before-it-was-tested",
        "date": "2026-08-04",
        "what": "An explanation for a discrepancy was written down as fact before it had been tested. The author's own test then contradicted it.",
        "context": "The stated cause was a Wayback banner. Testing it three ways showed the banner changed nothing, so the cause was rewritten as an explicit hypothesis and labelled as one. The load-bearing number was unaffected. It appears here because the author caught it by re-running their own work, with no check involved, and because it came very close to being published.",
        "quoteFrom": "handoff_archive/research/generative-simulation-as-safety-evidence-review-log.md",
        "quote": "Recording an untested cause is the drift class this process exists to catch, and it is recorded here because I nearly shipped it.",
        "instrumentFailure": false
      },
      {
        "id": "same-error-classes-recurred-across-review-rounds",
        "date": "2026-07-28",
        "what": "Three rounds of review on a single article produced 19 findings, and about half of them were the same few mistakes made repeatedly.",
        "context": "A superlative about the field, a percentage whose unit was ambiguous, an absence statement that had slid into 'does not exist', an ordering of systems whose numbers nobody had read. Human-style review kept catching instances one at a time. The recurrence is the finding: the same writer kept making the same class of error, and only a script stopped it.",
        "quoteFrom": "scripts/validate-article-claims.mjs",
        "quote": "Three rounds of adversarial review on one article produced 19 findings. About\n// half were the same handful of patterns recurring",
        "instrumentFailure": false
      },
      {
        "id": "draft-failed-both-first-round-reviewers",
        "date": "2026-07-27",
        "what": "A finished draft was rejected by both first-round reviewers, independently, on different grounds.",
        "context": "Recorded locators did not match the source's pagination; claims exceeded the protocol they cited; a persistence claim was not bounded narrowly enough. All of it was written by the same process that had judged the package ready. The full round-by-round record is in the archived review log.",
        "quoteFrom": "handoff_archive/research/spatial-3d-capability-boundaries-review-log.md",
        "quote": "Reviewer A: `NO-GO`",
        "instrumentFailure": false
      },
      {
        "id": "known-duplication-no-script-can-catch",
        "date": "2026-08-07",
        "what": "Six rules exist in two files at once, and the site knows it, and no check can detect it drifting.",
        "context": "Logged as an open issue and left there. The mitigation is a documented priority order, which settles which copy wins and does nothing about the two copies diverging. It appears here because it is a failure that has been identified, accepted and left in place, which sits in a more uncomfortable category than one that got fixed.",
        "quoteFrom": "OPEN_ISSUES.md",
        "quote": "这是**会漂移的重复**。改了一边忘了另一边,晋级门禁就和线程实际遵守的规则不一致——而这一类不一致没有任何脚本能发现。",
        "instrumentFailure": true,
        "nature": "accepted, not fixed",
        "natureNote": "Every other entry flagged this way is a tool that failed. This one is a tool that was known not to reach far enough, and the gap was left open on purpose. A mistake and a decision are different things. It stays grouped with the instrument failures because the consequence is identical — a drift nothing will catch — and that grouping is the uncomfortable claim itself: knowing acceptance and tool failure leave a reader in the same position."
      },
      {
        "id": "verification-browser-served-stale-assets-three-times",
        "date": "2026-08-21",
        "what": "The browser used to verify changes served cached assets three times in one day, and each time the response was to route around it instead of checking for it.",
        "context": "Twice the page source was current while the rendered text was old, because app.js was cached. The third time a stylesheet edit sat on disk and never reached the loaded stylesheet, so the measured page height was wrong and a false conclusion — that the CSS had not taken effect — got stated before anyone checked. Production is protected by cache headers; the local preview server sends none, so the trap appears only during verification, which is the one step where nobody else will catch a misreading. The repository has a rule that a recurring finding becomes a check. It took three occurrences to write one.",
        "quoteFrom": "CONTENT_RULES.md",
        "quote": "一次都没有变成检查,这正好违反 R-53(成为模式的发现要变成检查,不是日志条目)。",
        "instrumentFailure": true
      },
      {
        "id": "unused-key-scan-missed-eight-keys-in-use",
        "date": "2026-08-22",
        "what": "A scan for unused translation keys reported eight keys as unused that every page was still using.",
        "context": "The scan looked for data-i18n=\"…\" and t(\"…\") and never learned about data-i18n-attr, where the key sits after a colon inside an attr:key pair. The eight were seven aria-labels and the alt text on the hero image. What makes this one worth keeping is that the damage would have been invisible: the page would have looked identical, and only a screen-reader user would have lost every landmark on it along with the description of its one image. No check would have reported anything, because nothing here read those attributes. The other half is the number. 119 was quoted twice in this session before anyone re-ran the scan, and each repetition made it read more like a fact — the same mechanism by which a wrong figure propagates through content, running here on the tooling instead. The instruction to re-derive rather than trust the list had already been written down, in the task note that spun this cleanup off, and it was not followed the first time.",
        "quoteFrom": "scripts/validate-html.mjs",
        "quote": "Eight keys still in use looked unused: seven aria-labels and heroAlt,\n// the alt text on the hero image.",
        "instrumentFailure": true
      }
    ]
  },
  "interventions": [
    {
      "id": "research-line-triggered-by-hand",
      "date": "2026-07-18",
      "kind": "Scheduling",
      "what": "The Monday and Thursday scheduled tasks were paused. From then on the research line ran only when the owner triggered it.",
      "consequence": "Output stopped being calendar-driven. The gap between 45 elapsed days and 17 active days is mostly this.",
      "quoteFrom": "handoff_archive/research/editorial-queue.md",
      "quote": "the research line is triggered manually by the site owner rather than by a calendar, and a trigger is an instruction to survey and prepare, not to publish"
    },
    {
      "id": "circuit-breaker-reroute",
      "date": "2026-08-08",
      "kind": "Content routing",
      "what": "A candidate that had consumed five review entries, three days and four different framings was closed as a bounded update to an existing article, by owner decision.",
      "consequence": "The increment shipped inside the driving guide instead of becoming its own article. This is a decision about a specific article's fate, made by the human.",
      "quoteFrom": "handoff_archive/research/editorial-queue.md",
      "quote": "Shipped 2026-08-08 as a bounded material update, by site-owner decision under R-34 option two — not rejected on quality."
    },
    {
      "id": "data-layer-freeze",
      "date": "2026-08-21",
      "kind": "Direction",
      "what": "The owner directed that the structured endpoints stop promising periodic re-review before the review process itself was reduced, so that no window existed where the site had stopped reviewing but still claimed to review.",
      "consequence": "The freeze shipped first and the process reduction second. Ordering was the owner's call, and it was the right one.",
      "quoteFrom": "data/schema.json",
      "quote": "Keeping a re-review promise it no longer performs would be worse than withdrawing the promise."
    },
    {
      "id": "rules-content-specified-by-owner",
      "date": "2026-08-21",
      "kind": "Rule framework",
      "what": "The owner specified the three verification requirements that replaced the multi-round review process. The AI did not derive them.",
      "consequence": "Rules decide what content can say, so this is an intervention in content, one level up. Recorded here because the site's own description of the human role did not previously admit this category.",
      "quoteFrom": "CONTENT_RULES.md",
      "quote": "R-70 来源必须指向原始出处"
    },
    {
      "id": "owner-overruled-own-deletion-order",
      "date": "2026-08-21",
      "kind": "Correction of the owner's own instruction",
      "what": "The owner had ordered the editorial queue deleted. When the AI pointed out this contradicted the same owner's instruction to preserve review logs, the owner reversed it and the queue was archived instead.",
      "consequence": "The queue survives, including its overturned-judgment records, which are the primary material for this page.",
      "quoteFrom": "handoff_archive/research/editorial-queue.md",
      "quote": "Review entries"
    }
  ],
  "limits": [
    "An AI is still checking an AI. Switching conversation lowers the correlation and switching model lowers it further, but neither one produces an independent person.",
    "The AI compiled this failure list too. Whoever noticed a mistake also wrote its summary, so the list is missing exactly the category it failed to recognise as a mistake in the first place, and that absence cannot be sized from in here.",
    "Automated checks work on categories of error. One will stop an unattributed comparison; none can tell you whether a claim credited to a source is actually supported by it.",
    "The structured data layer is frozen as of 2026-08-21 and is not rechecked on a schedule.",
    "Commits, articles and records all measure activity. Nothing on this page shows that the published content is correct."
  ]
}
