Skip to content

Regulated AI Navigator

Turn an AI use case into its full regulatory footprint — every domain it touches, from AI law and data protection to cyber, product safety and sector rules — with the obligations, the architecture and the evidence you owe, in about two minutes.

Community-curated knowledge graph — every claim carries its citation across law, engineering and governance. Every change traceable →

Start where you stand →Browse 78 profiles

Track record

A tool that tells you how confident it is owes you a record of how well that confidence has held up. This page carries three things, all computed from data that already exists: every correction we have logged, what the review pipeline did with challenges, and the calibration promise — whether claims we marked provisional really do get corrected more often than the ones we called robust. Where there is not enough data yet, this page says so instead of showing a number.

Corrections ledger

97 logged corrections across 87 releases · graph v2.21.0 · every one of them written by us about our own graph

A correction is only real once it is public. Every line below is a change we made to a claim we had previously published, taken verbatim from the release it shipped in — including the 12 weaknesses our own pilot audit found in this graph.

Every correction we have logged, per release
ReleaseDateWhat was corrected
v2.56.02026-09-22Engine fix, not scoped to this profile: EMPLOYMENT_DECISION_RE and WORK_SUBJECT_RE (src/lib/kg/reason.ts) now recognise 'screen AND rank' (two verbs sharing one elided object), third-person-singular verb forms ('ranks', 'selects'), subject-before-verb word order ('staff scoring'), a modifier phrase between a verb and 'tasks' ('allocates patent drafting tasks'), and 'associate'/'attorney' as work-subject nouns. Verified with the standard before/after probe over every existing catalogue profile's own text and the 30 Baseline Study cases: 0 changes. This is a general precision improvement to the Annex III point 4 employment-decision detector, useful independently of this release.
v2.56.02026-09-22Known limit, disclosed rather than hidden: one text from round 2's own hijack table — an applicant-ranking description for patent-attorney vacancies — still matches this profile instead of the HR profile by semantic nomination on shared patent vocabulary, even with the tag fix and the engine fix both applied. Its risk tier is now correctly preserved at rc-high (via the hardened employment-decision floor), so the catalogue rule that a new profile must not pull a neighbour's text to a LOWER tier is satisfied; the match label itself is not yet fully clean for this one phrasing. A fix would mean giving the employment-decision reading priority in match SELECTION, not just tier flooring — a separately scoped engine change, not attempted here.
v2.54.02026-09-21Known engine limit, recorded for the curator: a description of targeted job advertisements matches the ad-targeting profile at rc-minimal without asking the Annex III point 4(a) question, because an alternate reading cannot model that branch (the natural-person reading would fire on ordinary consumer ad text). The fix belongs in the reasoner's Annex III point 4 test.
v2.53.02026-09-21Corrections the second-round skeptics specified and tested: mortgage — two valuation tags and the summary wording pulled auto-loan and property-valuation texts to the profile, so they were replaced and shortened, and the Fair Housing Act gate also covers the appraising prong of 42 U.S.C. § 3605(b)(2); pharmacy — a gate on an edge to an unverified placeholder instrument could never fire and was removed, and research-process wording was replaced by neutral text; payroll — the working-time gate now says EU/EEA (Iceland, Liechtenstein and Norway apply the Directive through EEA Agreement Annex XVIII) and two misplaced statements were deleted; freight — the base node omits dataSubjectType, sets hasProfiling and asks a narrower interview question.
v2.53.02026-09-21Open engine limit, recorded for the curator and not changed here: the reasoner cannot model the payroll profile's own statement that it lapses to rc-high if the system decides exempt or contractor status or adjusts individual pay. Such descriptions now match the payroll profile weakly or partially at rc-limited (before: no match or a weak match at rc-minimal). The fix belongs in the employment-decision vocabulary of the detector (EMPLOYMENT_DECISION_RE) with golden cases.
v2.52.02026-09-18Two drafts shipped with the verifier-specified correction instead of being discarded. The MSP/MSSP profile lost twelve generic tags (soc, noc, outsourcing, third-party, patch management and similar) in favour of seven provider-specific phrases, because in the real reasoner the generic ones pulled own-estate SecOps and outsourcing-contract descriptions away from uc-secops-agent and uc-svc-contract (the verifier reported 0 differences across the 94 golden and baseline anchors after the change). The insurance-brokerage profile lost the coInsuranceDecision gate on its two Colorado edges — the engine filters both instruments as not-yet-applicable or repealed before gates run, so that gate could never ask a question or exclude anything — and one provision label was trimmed to what its cited URL actually contains. The healthcare revenue-cycle profile, confirmed as drafted, lost two generic tags (back-office, claims-submission) after a before/after probe showed an auto-insurer's claims description moving from uc-claims to it at strong confidence and a lower risk tier; 156 profile texts and the 30 Baseline Study cases answer identically before and after the wave.
v2.51.02026-09-18A third profile, clinical trials & CRO operations AI including real-world-evidence research (uc-clintrials-rwe — EU Clinical Trials Regulation 536/2014, ICH-GCP, FDA 21 CFR Parts 11 & 312, EHDS secondary-use, GDPR Art. 9), resolves the one remaining excludeStrict violation from release 2.50.0: a real-world-evidence modelling case was matching uc-diagnosis on a weak lexical hit on the word 'diagnoses' and inheriting that profile's own Medical Devices Regulation trigger, even though release 2.50.0's detector-level MDR exemption already fixed the keyword-detector half of the same bug. This profile's own real-world-evidence/drug-development vocabulary now wins the match outright and carries no MDR trigger by design.
v2.51.02026-09-188 of the 11 researched candidates (insurance brokerage, MSP/MSSP services, healthcare revenue cycle, mortgage origination, freight brokerage, pharmacy back-office, fund administration, payroll compliance) were rejected by their own adversarial verifier for concrete defects — a wrong article citation, a dangling trigger to a non-existent instrument id, an outdated or non-existent legal claim, or a fabricated procedural detail — and are not in the graph. Logged here, not silently dropped, so the rejected research is not repeated blind in a future wave.
v2.50.02026-09-18Precision fix: the `health` detector's reg-mdr add now carries an exemption list (research-only/no-clinician/no-bedside-use phrasing) so a real-world-evidence research platform stops inheriting a Medical Devices Regulation duty off two generic health-topic keywords alone — confirmed on a case that explicitly says its models are never used at the bedside and no clinician interacts with them. First attempt at the fix (removing reg-mdr from the detector outright) regressed a genuinely diagnostic case (an emergency-dispatch triage classifier) that relied on the same detector as its only route to reg-mdr; caught by re-running the full baseline-study anchor sweep after the first fix, not by a pre-existing test, and fixed by the narrower exemption-phrase mechanism instead of the blanket removal.
v2.48.02026-09-14Confirmed live false positives, fixed with minMatches:2 (adds only requires a second corroborating keyword; the hit itself still registers for catalog-match scoring, same decoupling as the adm fix): us-deployment (bare "New York"/"NYC" was pulling in NYC LL144 hiring-bias-audit duties on systems with zero hiring nexus — e.g. a bank fraud model referencing the NYSE), voice-channel (bare "call"/"outbound" was pulling in TCPA/ePrivacy off on-call rotations, callback URLs, outbound network traffic), web-collection (bare "scrap"/"crawl"/"marketplace"/"competitor" was pulling in CFAA/UCPD off scrap-metal inventory, a baby crawling, an internal marketplace app), supply-chain-dd (bare "esg"/"supplier"/"sorgfaltspflicht" was pulling in CSDDD off an ESG-scored robo-advisor, a logistics dispatcher, a dermatology triage AI — including an undetected instance already live in the s-procure-agent golden case), records-retention, synthetic-media, quoting-pricing, marketing-disclosure, service-as-a-software, portfolio-execution (partial — see below) all showed the same pattern and got the same fix. Zero corpus regressions: none of these detectors' `adds` regulations are asserted by any current top25/golden case.
v2.48.02026-09-14personal-data: could NOT take a blanket minMatches:2 (11 real cases legitimately earn reg-gdpr off exactly one keyword — that is simply how a one-sentence use-case description names its data subject). Instead removed the 7 keywords demonstrated as false-positive-prone with zero corpus dependency ("patient", "name", "profile", "worker", "resident", "people", "person" — e.g. a database column "name", a thread "worker", a memory "profile"). Left open: "individual", "citizen" and "face" are simultaneously risky (generic adjective; "citizen developer"; "face" prefix-matches "facebook") AND the sole legitimate trigger for three real cases — flagged in the graph note for curator judgment rather than silently traded off either way.
v2.48.02026-09-14finance and critical-infra: same false-positive pattern confirmed (bank/credit/loan/trading/aml on finance; water/utility/infrastructure/transport/energy/netz/kritisch on critical-infra), but a blanket minMatches:2 was REJECTED for both — it would silently break a previously-confirmed legitimate lone trigger ("insurance" for DORA) and, for critical-infra, is a CONFIRMED regression against two real signed-off rc-high cases (t25-grid-control, s-grid-control) that need the bare word "grid" alone. Both need a per-keyword mechanism or a detector split, not a one-line threshold edit — documented as open design questions in the graph notes, not fixed here.
v2.48.02026-09-14portfolio-execution: minMatches:2 applied but flagged as only a partial fix — most of its keywords (portfolio, trade, invest, advisory, broker, depot, rebalanc, anlage) are common enough that even two co-occurring generic ones can misfire together (demonstrated: "a weather advisory" + flight-rerouting "trade-offs" still pulled in three SEC/FINRA regs). No corpus case exercises this detector today, so narrowing the keyword strings themselves is deferred rather than rushed pre-launch.
v2.48.02026-09-14techdoc-annexiv and policy-update: audited and confirmed NOT to need a fix — their sole `adds` target, reg-aiact, is unconditionally baseline-seeded elsewhere in reason.ts for any EU-scoped case and gated purely by market selection, so no description can wrongly earn it through these detectors regardless of keyword match. (policy-update's "sop" keyword does prefix-match "sophisticated" and similar, which is cosmetically misleading in the trace panel but does not affect the regulation list — flagged, not fixed, since correcting it means changing the shared word-boundary matcher used by every detector in the graph.)
v2.47.02026-09-12Root cause: several detector ids (adm, health, public, edge, agentic, finance, critical-infra) double as catalog `attributes` tags — scoreUseCases() corroborates a catalog profile’s own declared attributes against which detectors fired, so a detector hit does two jobs at once: authoring its `adds` regulation list, and contributing to the catalog match’s confidence score. Gating a detector’s existence below minMatches (the round-3 fix) silently starved BOTH jobs — for "adm" specifically, a bare "rank" in a content-moderation or NYC-hiring description lost enough match-confidence score to drop below the round-3 partial-confidence floor, deleting the EU DSA and EEOC/ADA/FCRA respectively, regulations that have nothing to do with adm’s own `adds: ["reg-gdpr"]`.
v2.47.02026-09-12Fixed at the source in detect() itself: a detector hit now always fires on any single keyword match (preserving its legitimate scoring contribution), but its `adds` field is only populated when the detector’s own minMatches threshold is actually met — the regulation-authoring half and the match-scoring half are now independently gated. `adm` gained `minMatches: 2` under this corrected mechanism. Live-verified: all 5 originally-confirmed bare-keyword false positives (dinner-decision, vacation-approval, trivia-score, movie-ranking, fantasy-reject) no longer add reg-gdpr, while t25-content-moderation and t25-nyc-aedt keep their real regulations at unchanged confidence scores.
v2.47.02026-09-12A companion unit test (attributes.test.ts, "excludes GDPR-style instruments when only legal entities are assessed") had unknowingly relied on the very false positive being fixed — its one-keyword description ("scores...") no longer nominates GDPR at all, so there was nothing left to demonstrate the exclusion-transparency feature it exists to test. Strengthened to two co-occurring keywords ("scores and ranks"), which genuinely earns the nomination the test exercises.
v2.46.02026-09-12uc-welfare -> reg-dga gained a dgaReuse TriggerGate instead of being deleted: reg-dga has no other incoming edge anywhere in the graph, so removing it outright would have orphaned the node — a bigger call (dropping a real EU regulation from the graph) than this fix's scope. The Data Governance Act's Art. 2(2) "re-use" test requires a party OTHER than the public body using the data for a purpose OTHER than the original public task; a welfare agency assessing and paying its own benefit claims never leaves that original task. The gate asks the one fact that actually decides it, defaulting to shown (this project's standing conservative default, same as every other gated regulation), and a second, more precise source citing Art. 2(2) itself was added alongside the original Art. 3(1)(d) citation.
v2.46.02026-09-12bench/top25.ts updated to match: t25-grid-control's excludeStrict guard now describes a genuinely fixed defect, kept only as a regression tripwire; t25-benefits-eligibility's excludeStrict guard is removed, since reg-dga is now a correctly-sourced conditional duty (like FCRA, CCD2 and CER elsewhere in the catalog), not a bug to suppress.
v2.45.02026-09-12Item #24, round 3 — the round-2 matchCarriesTriggers fix (matchConfidence !== "weak") only ever gated "weak" matches; both of the false positives that originally motivated the whole investigation (a spreadsheet-cleaning utility, an energy-trading desk — both matching uc-predmaint on a single generic tag word) score "partial", a confidence band the guard never touched. A pure matchConfidence === "strong" gate resolves both, but a full corpus sweep found it silently drops legitimate triggers from every partial-confidence catalog match already in the golden+top25 suite — including the EU Digital Services Act on a content-moderation case and EEOC/ADA/FCRA on the NYC hiring case — because every one of those real matches scores between 1.143 and 1.564, comfortably inside the band "strong" throws away wholesale. Shipped instead: a narrower gate, matchConfidence === "strong" || (matchConfidence === "partial" && score >= 1.1), which resolves the same two motivating cases with zero regressions anywhere in the existing corpus (independently re-verified case by case, not just by pass/fail count).
v2.45.02026-09-12Three more detectors gained minMatches: 2 after their own bare keywords were reproduced as false positives: "agentic" (bare "tool"/"execute"/"workflow", and separately bare "agent" meaning a human call-center worker — a second distinct false-positive pattern for the same word — spuriously added reg-pld); "tax-filing" (bare "return" spuriously added reg-tax-beps + reg-sox, including on an existing golden case describing library book returns); "financial-reporting" (bare "close" spuriously added reg-sox). A fourth candidate, "adm" (bare decision/approve/reject/score/rank), is a confirmed real bug left deliberately unfixed: any tightening breaks two real, statute-mandated cases (content moderation's DSA, NYC hiring's EEOC/ADA/FCRA) that themselves rely on a single bare "rank" with no other adm keyword — the same shape of problem already documented for finance/"insurance" and critical-infra/"grid" in the prior round.
v2.44.02026-09-12The "public" keyword detector's adds field is now empty (was ["reg-dga"]); its informational note (Art. 27 fundamental-rights impact assessment, BSI catalogue, 2030 legacy deadline) is unchanged and still fires. DGA Art. 2(2) defines "re-use" as use by a party OTHER than the public body, for a purpose OTHER than the original public task — a bare "public sector" signal never establishes that on its own, and no case in this graph currently relies on it (confirmed during the same wave's exhaustive golden+top25 sweep). The detector's own note was never about DGA at all, so the mismatch was a content error, not merely an over-broad keyword list. The one remaining reg-dga edge in the graph (uc-welfare -> reg-dga, cited to DGA Art. 3(1)(d)) carries the identical legal weakness — a welfare agency processing its own applicants' data for its own eligibility determination is the paradigm original public task, not a re-use — and is already guarded at the benchmark level (t25-benefits-eligibility's excludeStrict) but deliberately left unfixed at the edge level here: removing it would orphan reg-dga entirely (it is the only remaining edge into the node), which is a bigger call — effectively retiring DGA from this graph's active coverage — than this pass's scope, and needs its own dedicated look at whether any real data-intermediation profile belongs in the catalog before deciding either way.
v2.42.02026-09-12Item #8 — reg-eu-equality-goods's label widened from "EU Equal Treatment Directives (Goods, Services, Insurance)" to "... (Goods, Services, Social Protection)": the node's own desc already covers the 2000/43/EC strand's social-protection, social-advantage and education scope (Art. 3(1)(e)-(h)), which the old label never named even though three of the node's six triggers run through that strand. eed-2's desc corrected: Art. 2(2)(b)(ii) does not add a further duty for disability on top of the general objective-justification test, it REPLACES it — no indirect-discrimination liability arises where the employer has taken the Art. 5 reasonable-accommodation measures the disadvantage calls for; skipping accommodation forfeits that shelter rather than triggering a separate obligation.
v2.42.02026-09-12Item #5 — a `dates.promulgated` convention is now documented in docs/architecture.md: the enactment date named in an EU act's own title (or the Ausfertigung/presidential-signature date for a German or US statute), never the later Official Journal / Bundesgesetzblatt publication date. Two nodes corrected to the convention: reg-eu-equality-employment's `promulgated` had recorded the OJ publication date (2 December 2000) instead of the Council's actual adoption date (27 November 2000) — both dates sit in the node's own embedded SPARQL citation, so this was a read error, not new research; a statusNote now states both dates explicitly. reg-bdsg-26 gained a statusNote confirming its existing `promulgated` value already follows the convention (30 June 2017 Ausfertigung, five days before the 5 July 2017 Bundesgesetzblatt issue). reg-fcra gained its previously-missing `dates.inForceFrom` (25 April 1971, 180 days after the 26 October 1970 enactment per the Act's own effective-date clause, already quoted in the node's statusSource) and a `lastVerified` date it had never carried.
v2.40.02026-09-11Item #16 — new catalog use case uc-gpai-provider ("General-Purpose AI Model Training & API Provisioning", role: provider, classified_as rc-minimal) with triggers to reg-aiact (Art. 53(1) GPAI-provider duties, binding independently of Annex III/Art. 50 tier) and reg-dsm-copyright (Art. 4(3) TDM opt-out via Art. 53(1)(c)); requires comp-lineage for training-data provenance. The five catalog cases that only CONSUME a third-party GPAI model (uc-codegen, uc-procure-agent, uc-svc-creative, uc-marketing, uc-legalresearch) deliberately did NOT get this trigger — reason.ts already surfaces Art. 53 for them purely as "know about/contract for your vendor's compliance" via the existing gpaiUpstream/roleDutyNote mechanism, and duplicating the trigger would have wrongly asserted the duty as their own. dsm-4's desc no longer states "training is TDM" as settled: it now presents the current German/CJEU dispute (LG München I 42 O 14139/24 GEMA v. OpenAI — training-with-memorisation held outside § 44b UrhG regardless of any opt-out, under appeal; OLG Hamburg 5 U 104/24 Kneschke v. LAION — addresses only dataset construction, further appeal to the BGH permitted; CJEU C-250/25 Like Company v. Google Ireland — first hearing 10 Mar 2026, pending). uc-svc-shelf's rationale and its reg-dsm-copyright triggers-edge note no longer invent an "images" hook (the node never processed images); the real IP hooks are the sui generis database right over compiled pricing/stock/rank data and copyright in review text, and Art. 7(1)'s contract-override shield does not extend to Art. 4 (it lists only Arts 3, 5 and 6), so a site's ToS can validly exclude TDM reliance. Also: GPAI_KWS widened with "general purpose language model" (the literal phrase used in the GPAI benchmark fixture, previously not a contiguous match); roleDutyNote() no longer tells a GPAI-provider case it "inherits" documentation duties that are in fact its own.
v2.40.02026-09-11Item #24, root cause found and partially fixed — the earlier "weak catalog match" hypothesis for spurious regulations (reg-mdr on visa-triage, etc.) was wrong: the real mechanism is the graph's keyword-detector layer (knowledge-graph.json's detectors array), where a detector fires and pulls its entire adds[] regulation list into scope off a SINGLE matching keyword, independent of the catalog use-case match or its confidence. "imaging-triage" fired reg-mdr off the bare word "triage" (already known); newly found: "public" fired reg-dga off the bare word "authority", "health" fired reg-mdr/reg-ehds off bare "diagnos"/"health", "edge" fired reg-cra/reg-gpsr off bare "machine", and "finance" fired reg-dora off bare "payment". Fix: detectors can now carry an optional minMatches (default 1); imaging-triage, public, health, edge and credit-decision now require 2 co-occurring keywords, and finance's standalone "payment" keyword (the only bare-word offender there) was removed outright. Both bench/top25.ts's t25-visa-triage and the golden case s-visa-triage now also explicitly exclude reg-mdr and reg-dga as regression guards, kept even though the underlying detector bug is now fixed. Two detectors were investigated and deliberately left untouched: finance's "insurance" and critical-infra's "grid" are legitimate lone triggers (gating them broke real, correct cases in case-provenance.test.ts and interview.test.ts). A DEEPER, separate bug was found and left open, not half-wired: reason.ts's existing guard against a weak catalog match authoring its own triggers list (matchCarriesTriggers) only covers matches that arrived via the semantic/embedding layer, not the ordinary lexical scoring path — a weak LEXICAL match (e.g. uc-predmaint on an unrelated "AI utility that cleans spreadsheet rows" description) still gets its full triggers list applied uncorroborated. This needs its own scoped fix and full regression sweep before shipping; flagged for the next wave.
v2.38.02026-09-10#17, reg-agg — the Gesetzesbegründung (BT-Drs. 16/1780, S. 42) states standardised consumer credit is ‘regelmäßig keine Massengeschäfte‘ because it rests on individual risk assessment — uc-credit’s AGG trigger now leads with § 19 Abs. 2 (race/ethnic origin, unconditional) and marks § 19 Abs. 1 Nr. 1 (other grounds) as contested rather than settled. Directive family corrected to include 2002/73/EC (recast 2006/54/EC); Ausfertigung (14 Aug 2006) distinguished from Verkündung (BGBl. I Nr. 39, 17 Aug 2006); § 2 Abs. 4’s dismissal carve-out (routes to the KSchG) added to uc-perf-analytics. The pending Zweites AGG-Änderungsgesetz (BT-Drs. 21/6178, 21/6669; Bundesrat session 25 Sept 2026) tracked as a horizon item, outcome not yet known as of this release.
v2.36.02026-09-10Edge-type correction applied uniformly: every new edge originates FROM the article and uses operationalized_by/implemented_by/evidenced_by per the target node’s actual type (control/component/evidence) — collectObligations() in reason.ts only walks those four types from an article, never requires (that type is read only from regulation and use-case nodes). All 20 Study-12 cases verified unchanged.
v2.33.02026-09-10Fixed both: added applicant/resume/shortlist to uc-hr's tags, and rewrote its summary to describe only what uc-hr covers — application screening, ranking and interview scheduling. The NYC case's match strengthens from weak to partial (the words are recognised, but a real hiring-tool description still needs more than one keyword to earn a strong match); uc-hr's own summary now matches itself strongly, closing the self-sweep gap.
v2.32.02026-09-09conclusion-citation-floor's article/control floors move down (515→493, 178→152): the removed admissions were never legitimately this case's to cite. Two confidence-calibration goldens (c-market-thin/c-market-full, both already signoff:required) newly fail and are marked known-failing — a market with zero applicable instruments now trivially maximises the citation-chain confidence score (nothing to weaken it), which can outrank a richly-sourced full-coverage market; that is a pre-existing gap in the confidence model's handling of an empty derivation, exposed by this fix, not caused by it, and needs its own design decision.
v2.30.02026-09-08The audit's other 11 surviving candidates — a human-review signal the reasoner already computes but never asks about, controller/processor role, EU establishment, GPAI-upstream detection, legacy-placement date, employer-size tiers, e-Privacy tracking/marketing, and a NIS2 balance-sheet alternative — need an actual reasoner change (a new answer type, a new fact key wired into collectObligations, or a new article node), not a data-only gate, and stay open as a curator backlog (bench/results-study12/interview-audit/interview-gaps-2026-09-08.md). 22 candidates were dropped after adversarial review — most for citing a mechanism the graph cannot reach or a fact the reasoner already establishes another way; two of those drops the completeness critic flagged as premature (an assistant profile that co-decides a credit/insurance/employment outcome, and a profiling fact hidden behind a misleading 'fixed criteria' framing) and are noted in the document for reconsideration with corrected wording.
v2.26.32026-09-07CER Directive: obligationsFrom said 2024-10-17, the transposition deadline; Art. 26(1) applies the national measures from 18 October 2024, and Art. 6(3) binds an identified critical entity to Chapter III only from 10 months after the notification of its identification (identification deadline 17 July 2026). The date is corrected and the statusNote says what binds whom from when. The review's further point — that both CER triggers presuppose an operator identified as a critical entity, and that a predictive-maintenance planning tool carries no CER duty of its own — is a curation decision and stays on the curator list.
v2.26.32026-09-07No other change. The adversarial re-check upheld every correction of 2.26.2 it reached: three independent lenses each for the ADA Statutes-at-Large pages and the § 12112(b)(3) quotation, the CFPB withdrawal, the BAG holding on § 26 Abs. 1 BDSG and the Art. 9 point; one of three lenses on the BDSG note dissented. Instrument-title truncations were verified mechanically, not by agents.
v2.26.22026-09-07THEME 2 — Four status texts contradicted the primary source. FCRA: CFPB Circular 2024-06 was cited as a live position; the Bureau withdrew it on 12 May 2025 (90 FR 20084), which the note now says. § 26 BDSG: the note called Abs. 1 S. 1 'widely read as still applicable' while the BAG (8 AZR 209/21, Rn. 16 and 19) orders it left unapplied and denies it is an Art. 6(3) GDPR basis; note and article node now say so, and the article node no longer treats emotion inferences as an Art. 9 special category (Art. 9(1) lists health data and biometric data for unique identification, not emotions). ADA/ADEA: Statutes-at-Large pages corrected to LII's source credits (104 Stat. 327, 330; 81 Stat. 602), the § 12112(b)(3) quotation made verbatim ('standards, criteria, or methods of administration'), and the note records that the EEOC's May 2022 technical assistance is no longer published (HTTP 404). Equality bundles: Directive (EU) 2024/1499 Art. 23 deletes Chapter III of 2000/43/EC and 2004/113/EC rather than replacing it, and Directive (EU) 2024/1500 Art. 23 deletes Art. 20 of 2006/54/EC, both from 19 June 2026.
v2.26.12026-09-06Those nine edge sources and one citeUrl now use a text-fragment link (#:~:text=Article 3-,Scope and #:~:text=Article 2-,Concept of discrimination): the scroll-to-text directive every current browser implements, with the article number as prefix and the article heading as target, both unique on the page. Checked two ways — in a Chromium session, where the heading lands mid-viewport, and by the verifier, which now resolves text fragments against the page text instead of only looking for id="art_N".
v2.25.12026-09-04CORRECTION — Australia's mandatory guardrails were carried as `withdrawn`. No official text says so: they were consulted on in 2024 and never introduced, and a withdrawal presupposes a bill that never existed. The node now reads `not-a-law`, a new term in the declared status vocabulary. The vocabulary guard correctly blocked the change until the term was declared in all five places that enumerate lifecycle terms.
v2.25.12026-09-04CORRECTION — Taiwan's AI Basic Act was carried as `enacted-not-yet-applicable` with `unverified: true`; the Ministry of Justice database gives 14 January 2026 and Art. 20 (in force on the day of promulgation). Corrected, with a status source.
v2.25.02026-09-04A wrong assertion in jurisdiction.test.ts is corrected rather than deleted: it read 'a data law with no ADM provision never enters on jurisdiction alone', which turned a true fact about the PDPA into a false claim about its scope.
v2.24.02026-08-31THEME 4 — Citations that reach the answer. 90 of 94 regulation entries in the benchmark cases were assembled without their citations although the graph held them; fixed, and pinned. Three triggers edges onto § 87(1) Nr. 6 BetrVG gained sources from gesetze-im-internet.de.
v2.21.02026-08-27DENOMINATOR CORRECTION, NOT A REGRESSION. The duty to cite applied to four relations (triggers, imposes, requires, classified_as). Five further relations assert something legal and were entirely outside the model, uncounted and uncited: applies_in (scope, e.g. AI Act Art. 2(1)), implemented_by, evidenced_by, supported_by, operationalized_by — plus the three crosswalk relations, whose mandatory rationale/confidence is a stated reason, not a source. They now count wherever the from-side is a statute (regulation/article/standard). The denominator grows from 412 to 763 obligation-bearing edges and overall coverage reads 45% instead of 72.3%. The lower number is the honest one; the ratchet floor is repinned on the wider base and now pins every relation individually, so a relation at 0% cannot sit there while the overall share is propped up elsewhere.
v2.19.22026-08-28WAY A CHOSEN OVER A BUNDLED EMBEDDER. `src/data/concept-lexicon.json` is a curated everyday-language synonym field per index concept — 42 lexica across use-case profiles and statutory elements — folded into the build-time index by `scripts/generate-semantic-index.ts`. It stays exact arithmetic (no weights, no inference, no latency in the reasoner path), it is reviewable phrase by phrase like any other authored evidence, and it is versioned in its own right (`meta.lexiconVersion` in the generated index). A fixed-weight ONNX embedder would have bought the same recall at the cost of bundle size, inference latency and an unreviewable artefact — it was not needed. A lexicon key that matches no index document now fails the build, so a stale entry cannot sit there reading as if it were in force.
v2.19.02026-08-28DEPLOYER PRECEDENCE CORRECTED. A catalog profile is a template for a kind of system, not a statement about who runs this one, so a deployer named in the description ('a court uses the system') now outranks the profile's default. An explicit answer still governs both.
v2.17.02026-08-26SHAPE IS ENFORCED, COVERAGE IS RATCHETED. The integrity report gains a `sources` group: a citation without an article-level provision, without an https URL or without a real ISO retrieval date is an error, and a citation on a non-obligation relation is a warning. Coverage is reported as a number per relation, and `edge-source-floor.test.ts` pins the achieved share the same way the mutation floor pins kills — the share can rise, never fall.
v2.15.22026-08-18The prohibited-interlock regression test guarded the WRONG module. Surfaces (b) and (c) imported buildDossier/dossierMarkdown from src/lib/kg/dossier.ts — the evidence dossier, which never carried productClasses. The defect fixed in 2.15.1 lived in src/lib/workflow/dossier.ts, whose Markdown is a user-facing download, so the code fix was correct but unguarded. The workflow dossier JSON and Markdown are now asserted through the same shared helper (src/testing/vendor-silence.ts) on a prohibited fixture that still pulls controls into scope, so the assertion is not vacuous. Revert-check performed: temporarily removing the `!prohibited &&` gate in workflow/dossier.ts fails the new test ("where": "workflow dossier JSON") and passing it again requires the gate — a guard that cannot fail is not a guard.
v2.15.22026-08-18Deleted the committed scratch directory tmpchk/ (desc.ts, meta.ts, mkcheck.ts, fix.ts). tmpchk/fix.ts rewrote src/data/knowledge-graph.json in place and bumped meta.version — a foot-gun on any re-run. Nothing in it was worth keeping under scripts/.
v2.15.22026-08-18NOTED, NOT ACTED ON: market.entryShape was relaxed in 2.15.1 to accept an empty claimedAlignments array. That is legitimate for the four vc-grounding entries whose only 'claim' was a deployment property that has since moved to the hosting field, but it is a loosening of an error-severity rule and is recorded here so future waves do not lean on it to silence warnings.
v2.15.12026-08-18CORRECTION to the 2.15.0 entry's own wording: that entry claimed 'hops' is identical with and without the market layer. It is not, and cannot be — trace step 6 emits real supplied_by edges into vendorCategory and every trace edge is scored. Measured at this release: high-risk CV screening 413 hops with the layer, 378 without (35 vendor edges); support assistant 165 vs 136 (29 vendor edges). Band, score, chainMin and every non-vendor stage score are byte-identical in both variants, and the vendor stage always scores strictly above the chain minimum, so it can never become the weakest link that sets the band. An honest invariant replaces a false one.
v2.15.12026-08-18The 2.15.0 entry said 70 '(certification)' claims were downgraded; the true number is 63. Digits corrected in place — contentHash is the fingerprint of the graph file, not of the entry text, so no hash changed.
v2.15.02026-08-17Seven new integrity rules for marketExamples (entry shape, hosting enum, alignment wording, certification shape, duplicate product names, desc/marketExamples consistency, market-position labels — the last three errors/warnings per convention), with tests. Selection metrics added for the eight layers that had none.
v2.15.02026-08-17REFUSED and deliberately not imported: market-position / quadrant labels of named companies (an integrity error if one ever appears); per-vendor regulatory coverage assertions, coverage_depth and audit_ready fields, and vendor→article edges; Colorado SB 24-205 as a live regulation (repealed, never took effect — existing modelling unchanged). 'SR 26-2' stays flagged as pending verification and was filed as a curator verification proposal against Federal Reserve primary sources; a second unsourced compilation is circular corroboration, not confirmation. Compliance gate manifest and artifact pack stay vendor-free.
v2.13.22026-08-17GOLDEN SUITE — three audit stress tests became permanent cases, authored from law rather than from the graph, with article-level sources. g-confidential-summary (on-premise contract summarisation) PASSES: rc-minimal, and art-9 is correctly absent — confidentiality is located in GDPR Art. 32 / ISO 27001 as an information-security dimension and does not, per se, meet any Annex III category. g-gpai-no-exemption PASSES: a high-risk recruitment system built on an external, vendor-certified GPAI API still carries art-9 through art-15 — using a certified base model exempts nothing. The scope-drift cascade is a two-half pair: g-scope-drift-after PASSES with rc-high via Annex III 4(b), art-27 (FRIA) present and, with DE in markets, reg-betrvg-87 and gdpr-88 present. g-scope-drift-before FAILS and is recorded as known-failing with an owner and a date: the reasoner tiers the pre-drift FAQ bot as high risk on the employment keyword alone ("HR handbook") although it evaluates no person — the exact over-triggering the audit predicted, now a disclosed reasoner gap instead of an unknown one. The case asserts no negative expectation, so exclusion precision stays 1.0 and nothing wrong is published while the detector is narrowed.
v2.13.12026-08-17reg-pld — MATERIAL GAP CLOSED. The Revised Product Liability Directive carried a description and nothing else: no status, no lastVerified, no effective date, no citation, even though its transposition deadline is 9 December 2026. It now records status "in-force — transposition pending", the full date chain (entered into force 8 December 2024; transposition deadline 9 December 2026; applies to products placed on the market on or after that date), sourceKind primary and the EUR-Lex ELI citation. The statusNote states the evidence split explicitly: the in-force and deadline dates are primary (EUR-Lex), the transposition-progress picture (Hungary adopted 16 December 2025; roughly half of Member States with no significant public progress as of June 2026) is SECONDARY, from a Faegre Drinker survey. instrumentKind corrected from "regulation" to "directive" — the first use of that value in the graph, and the accurate one for a directive that binds only after national transposition.
v2.13.12026-08-17meta.currency.staleAfterDays SET TO 90 — app/graph mismatch fixed. The graph recorded no threshold, so the app fell back to 120 days; with the oldest lastVerified at 13 days under a weekly sweep, no node could ever be stale and the "may be stale" badge was structurally incapable of firing. 90 days is reachable: a node that falls out of the sweep for a quarter now surfaces to users as possibly stale. The reason is recorded in meta.currency.staleAfterDaysNote so the next reader does not have to rediscover it.
v2.12.92026-08-17HONEST LIMIT (documented, not fixed) — the reasoner runs client-side, so knowledge-graph.json necessarily ships inside the app bundle and a determined actor can recover it from network traffic. This lockdown removes the convenient bulk copy; it is not DRM and is documented as such in README.md and in a comment at the import site in src/lib/kg/data.ts. True protection would require moving the reasoner server-side, trading away latency, offline use and the 'no server sees your description' property — recorded as an open architectural decision, deliberately not approximated with obfuscation.
v2.12.82026-08-16WALKERS — the five monitoring dimensions are reachable. executeWalker dispatched through a three-way ternary, so the scheduled 'tech' and 'vendor' runs fell through to graph reflection and would have recorded reflection findings under a foreign walker identity. Dispatch is now an exhaustive Record<Walker, fn>: a walker without an implementation is a type error. A test asserts each of the five names resolves to its own function. The security model is untouched — agents still only propose, curators still decide, budget caps and ISO-week idempotency unchanged.
v2.12.72026-08-16ACCESSIBILITY — a skip-to-content link before the navigation, a real label and announced validation error on the describe textarea, and the unstyled 404 and crash screens rebuilt with house tokens. 43 unused scaffold components and 33 orphaned dependencies removed.
v2.12.52026-08-16LEGAL CORRECTION — Art. 50 APPLIES FROM 2 AUGUST 2026, NOT 2 DECEMBER 2026. The graph and the landing "what changes next" strip modelled 2 Dec 2026 as the Art. 50 application date. That was wrong and it told readers a duty that already binds them starts next December. Art. 50 transparency — chatbot disclosure, deepfake labelling, synthetic-content and emotion-recognition disclosure — is in force now.
v2.12.52026-08-16NEW INTEGRITY RULE cite.amendedSourceCurrency (error): a node marked amendedBy must not have its only citation pointing at a source on the hand-maintained list of texts verified to be pre-amendment, and must carry a caveat. The stale-source list is explicit and dated, entry by checked entry — a hostname heuristic would either over-block honest mirrors or go quietly stale. 0 errors on the shipped graph.
v2.12.52026-08-16OMNIBUS MODELLING CONFIRMED CORRECT against the primary text, unchanged: Annex III standalone high-risk 2 Dec 2027, Annex I embedded 2 Aug 2028, sandboxes 2 Aug 2027, Art. 6(1a)–(1c) inserted with 6(3)/6(4) unamended, Annex VIII Section B points 7 and 9 deleted, Art. 99(6a) extending the reduced caps to small mid-cap enterprises per Commission Recommendation (EU) 2025/1099. Recorded as a nuance on the omnibus block: the Commission's November 2025 proposal tied the deferral to a conditional trigger keyed to the availability of harmonised standards; the adopted text replaced it with unconditional fixed calendar dates.
v2.12.52026-08-16MEASURED SUITES, RE-RUN AFTER THE CORRECTION. Golden suite: 39 cases, 29 expectations met, 10 unmet (all 10 accepted with owner, date and reason), 5 not independently verified. Exclusion precision 73.7% (19 negative assertions), inclusion recall 100.0% (31), flag recall 77.8% (9). Temporal category now 5 cases, all passing. Mutation harness: 9 of 56 injected graph faults detected — tier-shift 5/8, gate-invert 3/8, status-force-in-force 1/8, and 0/8 for applies-in-flip, triggers-delete, triggers-spurious and crosswalk-swap. Survivors are named on /correctness. Full suite 464/464 across 44 files.
v2.12.42026-08-16MUTATION HARNESS: 9 of 56 injected graph faults were detected (8 per operator, 7 operators). Per operator: tier-shift 5/8, gate-invert 3/8, status-force-in-force 1/8, and zero for applies-in-flip, triggers-delete, triggers-spurious and crosswalk-swap. Surviving mutants are named individually on /correctness — a wrong jurisdiction mapping, a withdrawn instrument forced in force, and a deleted or invented trigger currently pass the suite unnoticed.
v2.12.42026-08-16TWO FALSE COMMENTS CORRECTED. The credits module claimed every ledger write goes through the definer functions; the payment webhook writes directly, and the comment now describes both sanctioned paths. The teams module described purchased credits as a future wave; that bucket is filled today.
v2.12.32026-08-15TESTIMONIAL FORM MATCHES THE DATABASE. The form accepted a longer quote and role than the table allows, so a member's submission failed with a raw constraint error. The limits are stated once and shared with the form, and the public display gate now really reads the consent record it documents.
v2.12.22026-08-15TESTS. Signature rejection (missing header, wrong secret, tampered body, stale timestamp), idempotent replay crediting exactly once, event-supplied amounts ignored, team-pool crediting, refund compensation and partial scaling, won-versus-lost disputes, the provenance split leaving earned standing untouched, and the unconfigured deployment refusing to start a checkout instead of half-charging.
v2.10.12026-08-15CRITICAL — REPEALED LAW NO LONGER SERVED AS APPLICABLE. The status vocabulary is defined on the term before the em dash, but isApplicableLaw() and isPendingLike() compared the FULL status string, so "repealed — reenacted by SB 26-189 (2026); never took effect" matched nothing and fell through to applicable. On the DEFAULT markets (EU+US) an HR, credit or claims analysis therefore listed the Colorado AI Act (SB 24-205) — which never took effect — as applicable law, carrying the duty-of-care, impact-assessment and risk-management-programme duties the same release documented as removed, and it was not even routed to the horizon. Fixed on all four fronts: both checks now compare statusTerm(); reg-colorado sets operatorBinding:false; a new integrity rule (jurisdiction.recordOnlyNotApplicable) asserts that no repealed or withdrawn instrument can be applicable and that every shipped status TERM is in the vocabulary; and reasoner regression tests run EU+US, not EU-only, asserting the act is absent from applicable law and present as a record on the horizon for uc-hr, uc-credit and uc-claims. The whole graph was swept for other statuses carrying a qualifier after the term.
v2.10.12026-08-15ART. 6(4) DUTIES ARE OBLIGATIONS. Taking the derogation flips the tier to limited, so collectObligations never saw them and they appeared in no obligation list, count or dossier section — they existed only as next steps. They are now surfaced as obligations, because they are owed precisely BECAUSE the derogation was taken. Earlier wording that implied otherwise is corrected here.
v2.10.12026-08-15RECORD CORRECTION. The reg-colorado statusNote said "Magistrate Judge Cyrus Y. Chung"; the verified record says "Judge Cyrus Y. Chung". The designation is dropped.
v2.10.02026-08-15CORRECTION OF OUR OWN RECOMMENDATION — the human-in-the-loop blueprint previously recommended a post-hoc explainability API (SHAP/LIME or CoT traces) for high-risk decision support including credit. For CONSEQUENTIAL SCORING of natural persons (credit, insurance pricing, tenant screening, employment scoring) that was the wrong default: local surrogate explanations are sampling-unstable, vary with the perturbation and background choice, and can be selected to look fair while the decision surface is unchanged — and an adverse-action reason that would not change the outcome if the person remediated it is not a defensible reason. Those cases now resolve to intrinsic interpretability (glass-box additive models with enforced monotonicity), with post-hoc methods kept as a supplementary diagnostic only. New integrity rule + test: a consequential-scoring use case must not resolve to a post-hoc-only explainability pattern.
v2.9.02026-08-12PENALTY MODEL — instruments now carry structured 'penalties' (tier label, maximum amount, maximum percentage of turnover, basis, who it applies to, article, citation URL) for the AI Act, GDPR, NIS2, CRA, DORA and Colorado. Conclusions and the dossier render statutory CEILINGS with the SME inversion of Art. 99(6) stated as written; the app never computes an expected fine. Integrity rule: a penalty without an article and a resolvable citation URL is an error.
v2.9.02026-08-12COLORADO — the record is corrected rather than quietly updated: SB 24-205 never took effect, implementation was stayed in April 2026, and it was repealed and reenacted by SB 26-189 in May 2026 (new node 'reg-co-admt', enacted-not-yet-applicable, so it routes to the horizon section rather than posing as applicable law).
v2.8.22026-08-12FIX (user-visible): the landing capability strip read the release count as if it were an array and rendered 'every one of the 0 releases is hash-chained', on the very page that claims every figure is counted from the projection. The count is a number and is now read as one; a test fails when a capability card renders a zero for a projection value that is non-zero.
v2.8.22026-08-12CORRECTION (log accuracy): the 2.8.1 entry described the dossier integrity suite as covering 'six use cases and eight target markets'. Measured: six use cases and five distinct markets (EU, US, UK, SG, JP) across ten market selections. The sentence now says what the suite actually runs.
v2.8.12026-08-12CORRECTION (model): the derivation factor was not band-effective. Weighted at 0.15, a hop resting on an asserted crosswalk mapping or a practice-derived link still scored 0.92 on strong endpoints and rendered as robust, which contradicts the model's own claim that an interpretive step is disputable by construction. Hops with an interpretive basis are now capped at 0.77, one point below the robust floor of 0.78, so they can never present as robust; the cap is reported as 'capped: interpretive basis' next to the unchanged five-factor breakdown, and weakest-link aggregation carries it into every chain that runs through such a hop.
v2.8.02026-08-12TRACK RECORD: new public /track-record page — the logged-corrections ledger read from this changelog, the dispute statistics of the public review pipeline (aggregate counts only, readable without an account), and the calibration table that will report whether provisional claims really are corrected more often than robust ones. Where the data does not exist yet, the page says 'not enough data yet' instead of showing a number.
v2.7.12026-08-11DATA / documentation: the 'art-26' → 'ev-fria' edge is retained with an explicit recorded reason (deployer duties whose implementation the assessment documents) rather than being silently duplicated next to the new 'art-27' basis; the 2.7.0 changelog sentence about it was wrong twice and now describes what the graph actually contains.
v2.6.12026-08-11FACTUAL FIX: the EU Declaration of Conformity artifact cited Art. 19; the declaration of conformity is Art. 47. Corrected to match the Art. 47/48 nodes already in the graph.
v2.6.02026-08-11INTEGRITY: five new rules — evidence.orphan (no artifact without an obligation pointing at it), evidence.derivation (must be text or practice), evidence.artifactClass (must be one of the six classes), evidence.textArticle (a text-derived artifact must link the article whose text names it) and evidence.notLaw (nothing may classify, trigger or impose through an artifact). jurisdiction.nodeCode was widened from jurisdiction and article nodes to evidence nodes. The suite is now 49 rules, 0 errors.
v2.5.12026-08-11CORRECTIONS to the 2.5.0 note: the single-points-of-contact count is 8 of 27 as of March 2026 — the date the data node and the EPRS source carry, not June 2026 — and the integrity paragraph said five new rules where six rule IDs shipped.
v2.5.02026-08-11ENFORCEMENT INFRASTRUCTURE: 8 of 27 Member States had notified a single point of contact as of March 2026, against a 2 August 2025 deadline; the number of AI Act notified bodies has no authoritative public count and is recorded as unknown rather than estimated. Application dates are stated as fixed by the Digital Omnibus, Regulation (EU) 2026/1744 (in force 27 July 2026): Annex III standalone high-risk 2 Dec 2027, Annex I embedded 2 Aug 2028, Art. 50 transparency for generated content 2 Dec 2026, sandboxes 2 Aug 2027. GPAI obligations have applied since 2 Aug 2025, with the Code of Practice published 10 July 2025.
v2.4.22026-08-11SCOPE CORRECTION: the 2.4.1 gating was too tight and hid foreign AI law entirely — no new instrument carried a triggers edge and no node carried the always-applicable marker, so a China, Japan or Vietnam target market returned no instrument at all. The horizontal, AI-specific binding instruments now carry that marker: the KR AI Framework Act, the JP AI Promotion Act, the VN AI Law and the Chinese generative-AI Interim Measures, synthetic-content Labeling Measures and amended Cybersecurity Law. Conditional instruments earn scope honestly through 9 new triggers edges instead: the Deep Synthesis Provisions from synthetic-media and generative use cases, the Algorithmic Recommendation Provisions from recommender use cases, and the UK Online Safety Act from user-facing chatbot and generative use cases. Data laws stay gated on an ADM provision plus personal data or an automated decision.
v2.4.12026-08-11CORRECTIONS to the jurisdiction wave: sub-national instruments (Colorado AI Act, NYC LL 144, NY RAISE) are in scope again when their country is a selected market — the previous ternary always returned false; instruments now enter a conclusion only via a triggers edge, a relevant ADM provision (personal data plus an automated decision), or an explicit always-applicable marker, so eIDAS 2, EEOC Title VII and data laws without ADM provisions no longer attach to every use case; unverified instruments (e.g. the UK Crime and Policing Bill) are excluded from applicable law and shown in the horizon/unverified section instead; Taiwan's registry tier now reads "binding AI law passed — not yet in force"; pending policy instruments (South Africa's national AI policy) appear on the horizon and declare operatorBinding:false.
v2.4.12026-08-11INTEGRITY: seven new jurisdiction rules — registered jurisdiction codes, lifecycle status vocabulary, operatorBinding:false on every non-applicable status, unverified never applicable, uptake evidence for cross-jurisdiction bridges, horizon context, jurisdiction-node codes — plus reasoner tests pinning market filtering, horizon exclusion and an EU+US regression against pre-2.4 output. Changelog order restored to strictly newest-first; the landing page derives its correction release by date and semver instead of array position, and per-jurisdiction instrument counts from the explicit jurisdiction field instead of an id regex.
v2.3.22026-08-10CORRECTION (found by the audit against our own graph) — reg-colorado still asserted SB 24-205 as 'effective 30 June 2026'. Implementation was stayed by a federal court in April 2026 and a narrower repeal-and-replace (SB 26-189) passed in May 2026. Status set to 'amended — original text superseded by SB 26-189 (2026), implementation stayed', desc rewritten so it no longer asserts the old effective date, statusNote records the facts and flags that the successor's final text is pending full verification, lastVerified 2026-08-09.
v2.3.22026-08-10MEASURED DIFF — nodes 299 → 299 (unchanged), edges 1062 → 1062 (unchanged). This is a text, status and instrumentation release: three node corrections, one new integrity rule, one new published dataset (study gaps), zero graph topology changes.
v2.3.12026-08-09CORRECTION — reg-cloudact carried no `full` field, so the citation resolver could not render its statutory reference. Added full = '18 U.S.C. §2523 / §2713 (CLOUD Act)'. reg-cloudact was also grouped into 'sector, market & employment law' by the layer catch-all; it now sits in the cyber & resilience layer, which is where a sovereignty counter-force belongs in our own layer model.
v2.3.12026-08-09SCORING FIX — vendor confidence and the build/buy/assemble verdict counted named examples by parsing the desc text only, so the four categories that carry examples exclusively in marketExamples (sovereign infrastructure, grounding/retrieval/memory, observability & MRM, agentic applications) were scored as 'no named examples' and 15 components supplied by them were mislabelled 'market unmapped'. Named-example counting now reads marketExamples first and falls back to the desc parser; regression test added.
v2.32026-08-09MEASURED DIFF — nodes 296 → 299 (+3), edges 1030 → 1062 (+32), detectors 29 → 29 (unchanged), source layers 9 → 10. New nodes: vendor categories (3) vc-grounding (Grounding, Retrieval & Agent Memory), vc-observability (Agent Observability & Model Risk Management), vc-apps (Agentic Applications & Copilots). New edges: 20 supplied_by (components/patterns → the three new layers) and 12 relates_to (vendor layers → articles, regulations and one control objective). Structured market examples: 93 named products across 11 vendor categories — sovereign infrastructure 15, models & data engines 11, grounding/retrieval/memory 16, orchestration 9, runtime security 7, observability & MRM 10, agentic applications 8, privacy engines 5, agentic execution governance 4, GRC 5, secure data infrastructure 3. Integrity suite: 0 errors, orphan rule green.
v2.32026-08-09TWO SOURCE CORRECTIONS — the compilation's 'Mistral → Art. 10 & 13 open-source exemption' claim was NOT ingested as an article claim: the open-source exemption analysis is contested, so the entry reads 'positions its open-weight offering for EU sovereignty and auditability requirements'. Foundation-model documentation duties attributed by the source to Art. 50 were re-aligned to our own article structure (Art. 50 = transparency, technical documentation = Art. 11) or left without an article number.
v2.22026-08-09MEASURED DIFF — nodes 279 → 296 (+17), edges 957 → 1030 (+73), detectors 29 → 29 (unchanged). New nodes by type: components (7) comp-interface-transparency, comp-agent-registry, comp-nhi-broker, comp-tool-boundary, comp-tokenisation-engine, comp-sovereign-boundary, comp-agent-memory-record-store; threats (3) thr-a2a-impersonation, thr-jurisdictional-access, thr-standing-credentials; control objective (1) ctl-nhi-governance; regulation (1) reg-cloudact; standards (2) std-bsi-c3a, std-secnumcloud; vendor categories (3) vc-sovereign, vc-privacy, vc-agentgov. Integrity suite: 0 errors, orphan rule green.
v2.1.22026-08-07NEW FIELD `citeUrl` (any node, optional): a manual override for the citation resolver in src/lib/kg/cite.ts, which otherwise derives an authoritative public URL by pattern (AI Act article pages, EUR-Lex CELEX for regulations/directives, eCFR for CFR cites, Cornell LII for U.S.C., ISO catalogue search for ISO/IEC numbers). Convention: `citeUrl` always wins; when neither an override nor a pattern resolves, the UI renders no link at all, because a guessed source URL is worse than an absent one. No node currently sets `citeUrl` — the field exists so a corrected or non-patterned source can be pinned without a code change.
v2.1.12026-08-07WHY A CORRECTION RELEASE: meta.currency states that a node without a lastVerified date is a claim, not a fact. The corollary is that a correction without a changelog entry is indistinguishable from a claim that was never wrong. This release logs the errors found in a review of the shipped 2.1 graph, so the diff is auditable rather than silent.
v2.1.12026-08-07PENALTIES — 'reg-aiact': the third sanction tier read €7.5m / 1.5%. AI Act Art. 99(5) is €7,500,000 or 1% of total worldwide annual turnover, whichever is higher, for supplying incorrect, incomplete or misleading information to notified bodies or national competent authorities. Corrected to 1% and the article citation added. The €35m / 7% (prohibited practices) and €15m / 3% (Art. 9–15 high-risk obligations) tiers were already correct.
v2.1.12026-08-07UNDATED QUANTITATIVE CLAIMS — 'pat-dual-gate' carried four named guardrail products with specific latency figures and no verification date, the only quantitative vendor claim in the graph without one. It now has lastVerified 2026-08-07, the date of this correction pass, plus a statusNote framing the numbers as indicative order-of-magnitude figures from that period, dependent on model size, hardware and policy count, to be re-measured per stack. 'uc-scribe' summary no longer presents a named vendor and a named customer as fact; it describes the ambient-scribe pattern instead, consistent with how vendorCategory nodes handle named vendors.
v2.1.12026-08-07CHANGELOG INTEGRITY — the 2.1 entry itself was found to be reconstructed from a written description rather than from the data, and overstated almost every count (79 nodes and 482 edges claimed against 22 nodes and 255 edges actual; new threats, evidence artefacts and control objectives claimed where none were added). It has been rewritten from a programmatic diff of the v2.0 and v2.1 graphs and now names only ids that exist. The first rewrite still reported 251 edges (695 -> 946): it diffed an intermediate commit and counted only edges incident to a new node. Re-measured at the 2.1 merge point (950 edges), the delta is 255, and 6 of the new edges connect two pre-existing nodes, so the claim that every new edge touches a new node was also wrong; both are corrected in the 2.1 entry. The 1.6 entry has now been re-derived the same way: all nine of its numeric claims hold against a v1.5 -> v1.6 diff (8 use cases, 14 components, 7 patterns, 6 evidence artefacts, 8 regulations, 3 standards, 9 threats, 4 ISO 42001 control objectives — ctl-aims-riskassess, ctl-aims-dataquality, ctl-aims-traceability, ctl-aims-perfmon with their four 'includes' edges from std-iso42001 — and 6 new detectors, 15 -> 21).
v2.1.12026-08-07CURRENCY HYGIENE — meta.currency.monitoredFeeds still listed the AILD procedure file as monitored, contradicting 'reg-aild.statusNote'; the entry now names the Omnibus and EHDS files and records that the AILD file is closed and watched only for a successor. 'art-4' and 'reg-colorado' carried a status with no lastVerified, against meta.currency.nodeFields; the status is dropped rather than backed by an invented date, and both descs still state the in-force date. meta.version and meta.date are bumped to 2.1.1 / 2026-08-07 so the graph identifies itself as the corrected build.
v2.12026-08-06WHY 2.1: 2.0 answered 'what do I build or buy it with?'. 2.1 answers 'what is actually being sold, under which regime, on which stack?'. Measured against the shipped v2.0 graph: 22 new nodes (257 -> 279) and 255 new edges (695 -> 950; 257 distinct new from/to/type triples, two of which deduplicate entries the v2.0 file carried twice). No nodes or edges were removed. 249 of the new edges attach to at least one of the 22 new nodes; 6 connect two pre-existing nodes and are corrections to the existing layer rather than part of the new one: reg-raise -> comp-vendor-dd / comp-registry / comp-incident (requires) and -> comp-risk-register (relates_to), plus supplied_by edges from comp-model-router and comp-watermark to vc-models. Counts and named ids in this entry were re-derived from a programmatic diff of the two graphs after the original entry was found to overstate them; an earlier correction put the edge delta at 251 (695 -> 946) by measuring an intermediate commit and counting only edges incident to a new node. See the 2.1.1 entry.
v1.52026-08-04THEME 3 — Currency & drift (answers 'a node that was accurate at launch can quietly become wrong'): meta.currency added — status vocabularies for legal acts (in-force/amended/proposed/repealed) and standards (draft/enquiry/formal-vote/published/ojeu-cited), per-node 'status' + 'lastVerified' fields, monitored feeds (OJEU, EP Legislative Observatory, JTC 21 dashboard, AI Office guidance), quarterly deepsearch review + community-dispute-triggered re-verification, and change-propagation rule (status change flags all dependent edges for review). Live proof shipped in this very release: prEN 18286 became EN 18286:2026 (published July 2026, first AI Act harmonised-standard candidate to reach publication; OJEU citation still pending) — the node was silently stale and is updated here.

Dispute statistics

Loading the review pipeline numbers…

Calibration

The promise behind the three confidence bands is testable: if the bands mean anything, a claim we published as Provisional should be corrected more often than one we published as Robust. Measuring that requires corrections recorded against the band a claim carried when it was published — tracking started 2026-09-22, so there is not enough data for a statement yet. The table structure is shown so you can see exactly what we will have to report.

Published bandClaims publishedLater correctedCorrection rate
Robusttracking started 2026-09-22—not enough data yet
Check-worthytracking started 2026-09-22—not enough data yet
Provisionaltracking started 2026-09-22—not enough data yet

Until this table carries real rows, the only external anchor we have is the machine-conducted pilot source audit over 5 cases: Web research 34% · Free checkers 17% · RAINavigator 62% instrument coverage. Machine-conducted pilot source audit, Aug 2026 — method, limitations and our own 12 found weaknesses: read the pilot study →

Hash chain

From release v2.8.0 forward, every release records the SHA-256 hash of the graph file it shipped and the hash of the release before it, computed by the build script. Older releases carry no hash: adding one retroactively would be manufacturing evidence, so we do not. See the chain on the changelog →

current graph fingerprint · SHA-256 7d16100080205127e2e7cdf9014824953f410de0bba6ec39c1f269f85666681b