{"ok":true,"note":"Every data product publishes its accuracy; this one also publishes its falsifications. An accuracy figure produced by a process whose failures are invisible says little about whether the next figure is true. These are the claims this platform made that were not so, what was actually the case, and the test that now fails if the fault returns. Entries are added and never rewritten, in a file under version control rather than a database, so a softened description or a deleted entry leaves a diff with an author and a date.","digest":{"total":14,"byCause":[{"cause":"STATISTIC_MISNAMED","count":5},{"cause":"ABSENCE_READ_AS_MEASUREMENT","count":4},{"cause":"DEAD_FEED_CLAIMED_LIVE","count":2},{"cause":"SILENT_WRITE_FAILURE","count":2},{"cause":"SYNTHETIC_DATA_PUBLISHED","count":1}],"bySeverity":[{"severity":"critical","count":9},{"severity":"high","count":5}],"selfFound":14,"open":0,"medianDaysToCorrect":0,"latest":"2026-10-09"},"ledgerIntegrity":{"sound":true,"problems":[]},"corrections":[{"id":"NC-2026-014","discovered":"2026-10-09","corrected":"2026-10-09","liveSince":"2026-09-16","surfaces":["/api/v2/gpai — maritime composite (API-key holders)","maritime signals feeding the physical anomaly index"],"claimed":"The Strait of Hormuz reading as normal: 4 transits on 2026-10-04 against a baseline of 5, z-score −0.23, anomaly false, direction \"normal\".","actual":"Hormuz has been close to shut since March 2026. IMF PortWatch counts about 102 transits a day in April–June 2025 and 78 in February 2026, then 3 a day in March, 3.6 in September and 2.5 in the first four days of October, with no tankers at all. The same 91 days a year earlier averaged 87; the current regime is 6% of it.","cause":"STATISTIC_MISNAMED","mechanism":"The anomaly flag measured distance from the last ninety days, and nothing else. That is the right instrument for a noisy day and the wrong one for a regime break: three months into a collapse, the collapse is the baseline, and every day of it looks ordinary next to its neighbours. The field was called \"anomaly\" and measured \"unusual for this quarter\". The worker had only ever requested ninety days, so it had no way to know.","remedy":"The worker now requests a year and a half-window of history and compares the rolling regime with the same 91 days one year earlier. Below half or above double that level is a structural break: it is flagged as an anomaly with its direction whatever the z-score says, and the year-ago reference and ratio travel with every reading. Without a year of history the comparison is not made and no break is claimed.","test":"scripts/maritime-worker.selftest.mts","commit":"pending","foundBy":"self-audit","severity":"high"},{"id":"NC-2026-013","discovered":"2026-10-09","corrected":"2026-10-09","liveSince":"2026-06-30","surfaces":["/accountability — the Romania record","/api/public/ledger","/romania","@NoosphrePrime on X, 2026-10-08 (\"216 settled\")"],"claimed":"The Romania record as published on /accountability: 218 settled calls, 141 confirmed, 67 partial, 10 refuted, out of 530. The same figures, a day earlier, were posted on X as \"216 settled on outside data: 140 confirmed, 66 partial, 10 refuted\".","actual":"Counted once each, the record is 184 settled: 122 confirmed, 52 partial, 10 refuted, out of 452 calls. 78 rows were second or third filings of a call already made that day — 46 day × type × horizon groups, every copy with the same baseline, direction and verdict, 42 of them filed within ten minutes of the original. The hit rate barely moves (66% against 65% published); the counts were inflated by about a sixth.","cause":"STATISTIC_MISNAMED","mechanism":"/romania recomputed the whole Romania reading on every visit, because the snapshot it was meant to reuse lived in a cache this server does not run. Each recomputation also filed the day's calls, and nothing made filing idempotent: two visits a few seconds apart — a crawler, mostly — filed the same calls twice. The counts were labelled \"calls\" and were in fact filings. Every check on the record looked at what each call said and whether it settled correctly, and every copy passed, because each copy was a correct call.","remedy":"The reading is now computed once and stored, with single-flight so concurrent visits wait for one computation instead of each starting their own. The 78 copies are not deleted: each day's calls are anchored under an immutable Merkle root built from what was filed, and removing rows would both break that anchoring and erase the record of this fault. They are recognised when the record is read — the earliest filing of each day, type and horizon is the call, later ones are copies — and left out of every count, every rate and the published ledger. Read this way, a copy filed in future is excluded too.","test":"scripts/romania-duplicates.selftest.mts","commit":"pending","foundBy":"self-audit","severity":"high"},{"id":"NC-2026-012","discovered":"2026-09-16","corrected":"2026-09-16","liveSince":"2026-02-06","surfaces":["/romania — macro signals","BNR_RATE forecast reasoning","/api/v1/romania"],"claimed":"Romania HICP inflation of 8.6% year on year, presented as the current reading and used as the inflation input to the BNR policy-rate forecasts (\"CPI Romania 8.6% YoY — inflatie ridicata, BNR prudenta\").","actual":"That figure describes December 2025 and was seven months old. Eurostat changed HICP methodology on 4 February 2026 and retired the dataset this platform read; the ECB retired its ICP dataflow the same day and said so in a comment attached to its final observation. Romanian inflation over the silent months ran 9.5% (April), 9.7% (May), 9.2% (June) and 8.2% (July) — it rose above the published figure and then fell below it, so the error had both signs and neither was visible.","cause":"ABSENCE_READ_AS_MEASUREMENT","mechanism":"The fetch kept succeeding. A retired dataset does not answer with an error; it answers with its last observation, forever, and the code had no rule that made an old print different from a new one. The system did detect it, in the one place that had a rule: the settlement guard refused 103 inflation settlements on the ground that the newest print predated the forecast it would score. That refusal ran daily from June. It stopped the bad settlement and said nothing about the bad publication, and nobody followed the refusals back to their cause. A correct refusal is a symptom; nothing was reading the symptoms.","remedy":"The reading now comes from the ECB dataflow that replaced ICP, and every macro observation carries the period it describes, its age in days, and a `stale` flag set when the series has not printed within its own publication rhythm. A stale reading is not passed to a settlement and is not presented as current. There is deliberately no fallback to the retired dataset. Two sentinel checks now watch the age of the HICP and policy-rate observations directly, measured from the END OF THE PERIOD described rather than from the moment of the fetch — because fetching a nine-month-old number successfully, every hour, is the failure itself. The same pass replaced `const BNR_POLICY_RATE = 6.50`, against which 103 rate forecasts were unscoreable by construction, with the BIS series sourced from the National Bank.","test":"scripts/romania-observations.selftest.mts","commit":"pending","foundBy":"self-audit","severity":"critical"},{"id":"NC-2026-011","discovered":"2026-09-07","corrected":"2026-09-16","liveSince":null,"surfaces":["Technical datasheet §6 — Data flows","/status"],"claimed":"Maritime chokepoint throughput for Hormuz, Suez, Malacca, Bosphorus, Panama, Dover, Rotterdam and Shanghai, refreshed every 30 minutes — listed among the live data flows.","actual":"Zero of the eight points had ever reported. The worker read AISHub, which requires AISHUB_USER and AISHUB_PASS; neither has ever been set on this server. Every run since the flow was declared therefore took the fallback path, which called a synthetic generator until ALLOW_SYNTHETIC_DATA=0 turned that into a throw, after which the endpoint returned 500. Two of the eight named points are ports, not chokepoints.","cause":"DEAD_FEED_CLAIMED_LIVE","mechanism":"The flow was declared from the design rather than from a successful run, and the credential it needed was never part of what \"declared\" meant. The synthetic fallback then made the absence survivable: for as long as it ran, the endpoint answered and nothing upstream had to notice there was no feed. Removing the fabrication turned a silent absence into a 500, which is an improvement that still left the datasheet saying the opposite.","remedy":"The worker now reads IMF PortWatch, which is free, needs no credentials, and publishes daily transits per chokepoint and daily calls per port from AIS processed by the IMF and the UN Global Platform. All eight points return history. The synthetic generator is deleted rather than guarded, and the signal type no longer admits a mock reading. The claim now states the real cadence — daily, two to three days in arrears — and distinguishes the six chokepoints from the two ports. Baselines are measured from a ninety-day window instead of a hand-written constant, and the day under test is excluded from the distribution it is scored against.","test":"scripts/maritime-worker.selftest.mts","commit":"pending","foundBy":"sentinel","severity":"critical"},{"id":"NC-2026-010","discovered":"2026-09-12","corrected":"2026-09-16","liveSince":"2026-09-12","surfaces":["/status — GDELT Event Stream","/methodology","/accountability"],"claimed":"GDELT global event entropy, refreshed every 120 minutes — listed among the live data flows, with a cadence attached to it.","actual":"The feed had returned nothing since 2026-09-12. The GDELT document API answers this server with HTTP 429 on a single cold request: it is not our request rate, it is the address, and backing off cannot change it. The worker behaved correctly throughout — it reported the reading unavailable and refused to store it — so no false NUMBER was ever published. What was false was the sentence saying the flow was live.","cause":"DEAD_FEED_CLAIMED_LIVE","mechanism":"Refusing to publish a bad number and telling the reader the feed is dark are two different jobs, and only the first was anyone's. The integrity sentinel did carry it as a critical failure from the first day, which is why the interval here is four days rather than months — but the sentinel's findings sit behind the operator secret, and the public pages went on describing a flow that had stopped.","remedy":"The worker now reads the raw v2 file feed, which answers this server with 200, publishes an MD5 for every file and updates every fifteen minutes. The download is verified against that digest and refused outright if it disagrees, so the reading can be re-derived by anyone rather than trusted. The measure itself necessarily changed and says so: v1 was the Shannon entropy of hourly article volume for four hand-picked risk phrases; v2 is the entropy of world events across the twenty CAMEO root categories. Every snapshot now carries `measureVersion`, so the break is visible in the data rather than hidden by a shared name, and the two series must not be read across.","test":"scripts/gdelt-worker.selftest.mts","commit":"pending","foundBy":"sentinel","severity":"critical"},{"id":"NC-2026-009","discovered":"2026-09-13","corrected":"2026-09-13","liveSince":null,"surfaces":["/divergence/narrative","/intel/country/romania","/crisis","/concepts"],"claimed":"Romania fiscal deficit widened to 8.6% of GDP in 2024, the largest in the EU — repeated in eight places, including a passage describing it as the reality SIGMA detected behind the official projections.","actual":"Eurostat publishes the 2024 figure at 9.3% of GDP and the 2025 figure at 7.9% (gov_10dd_edpt1, B9/S13). 8.6% is most likely an early estimate that was later revised, which is worse than a wrong number rather than better: it was true when it was typed and nothing on the platform was ever going to notice that it had stopped being so.","cause":"STATISTIC_MISNAMED","mechanism":"The figure was typed into page text, an SEO description and three archive entries. A number written into source has no source, no settlement contract and no expiry. The platform reads Romania deficit from Eurostat every day and has done throughout; the pages simply were not connected to it.","remedy":"All eight corrected to the published figure with its year and dataset named, so each is checkable. The deeper fix is not done: these remain literals and will go stale again. public-claims-canary lists every typed figure on every page ranked by how much it looks like a measurement, which is how this one was found on its first run.","test":"scripts/public-claims-canary.mts","commit":"pending","foundBy":"self-audit","severity":"high"},{"id":"NC-2026-008","discovered":"2026-09-13","corrected":"2026-09-13","liveSince":"2026-09-12","surfaces":["/api/integrity","/accountability"],"claimed":"A self-audit of thirty-two checks, reporting three failures where the previous run had reported six — an improvement in the platform own verdict.","actual":"Nothing had been fixed. Two claim classes left the report. The settlement audit had withdrawn every inadmissible settlement, and for BNR_RATE and INFLATION_DIRECTION that was all of them: 196 predictions returned to PENDING, and five falsifiability checks that had run 392 consecutive times stopped existing at 19:30. The verdict improved because two instruments had quietly left the building.","cause":"SILENT_WRITE_FAILURE","mechanism":"The collector grouped claim classes over settled rows only, so a class with nothing settled produced no group and never reached the checks. The checks themselves handle the case correctly and report it as unmeasurable; they were simply never given it. A disappearance is invisible in a report that lists what it found.","remedy":"The grouping is over every class that has ever issued a prediction, and a class with nothing settled arrives carrying its pending count — reported as unmeasurable, naming how many predictions stand behind the silence. Every sentinel run is now stored, so a check that stops being reported is itself an event in the record.","test":"src/prime/__tests__/integrity-sentinel.test.ts","commit":"pending","foundBy":"self-audit","severity":"critical"},{"id":"NC-2026-007","discovered":"2026-09-13","corrected":"2026-09-13","liveSince":null,"surfaces":["/api/public/sigma/greece","/today","/intel/country/greece"],"claimed":"The Greek systemic risk score, its Hurst exponent, its critical-slowing-down reading and its Minsky phase, published daily and labelled as resting on a real market series.","actual":"The Athens General index series behind those figures last closed on 2026-07-17. Every reading published after that date described a window fifty-seven days old, and the provenance carried no qualification at all: input class \"entity-series\", source \"real-series\", caveat null.","cause":"ABSENCE_READ_AS_MEASUREMENT","mechanism":"A series that has stopped is still a real series, and the engine cannot tell the difference: twenty closes are twenty closes whether the last one was yesterday or in July. The only thing that distinguishes a live reading from a frozen one is the date of the last observation, and it was not being recorded. Found while assembling a cross-section for the absorption ratio, where Athens truncated every other euro-area index to its own stale window.","remedy":"The last observation date travels out of the fetch with the score, the daily run records it, and a series more than ten days behind carries a caveat naming the date and the gap. The absorption baskets exclude a stopped member and say which, rather than letting it drag the basket back in time.","test":"src/prime/__tests__/absorption.test.ts","commit":"d4bb0ad","foundBy":"self-audit","severity":"high"},{"id":"NC-2026-006","discovered":"2026-09-13","corrected":"2026-09-13","liveSince":null,"surfaces":["/api/public/sigma/{slug}","/api/public/sigma-dataset","/dataset"],"claimed":"A SIGMA score per entity, served from a public API that asks for attribution and a dataset page that calls the figures citable in academic research.","actual":"Those figures were not the ones the platform settles against. The public API and the accountability ledger disagreed about 27 of 28 entities and about the REGIME — the categorical claim predictions are settled on — for Czechia, Serbia and Technology. Emerging markets differed by 14.7 points, real estate by 9.9, banking by 8.0.","cause":"STATISTIC_MISNAMED","mechanism":"There were two paths, and neither was buggy. The daily cron fetched each entity market series, computed the score, hashed it and filed it for settlement. The public route called the engine again at request time with no series at all, so every figure it served was derived from the query text — the engine own comment reads \"Never present a a text-derived SIGMA as if it were market-driven\". A citing reader could not reproduce the number the next day, and we were not accountable for the one they had.","remedy":"The published figure is a lookup, not a computation. publishedSigma() serves the filed row — score, regime, layers as recorded, the forward distribution it was filed with, the hash, the settlement date and what it rested on. A surface answering \"what would happen if\" still calls the engine, because a hypothetical is not a published measurement. Where no record exists the endpoint returns 404 rather than synthesising one.","test":"scripts/published-figure-canary.mts","commit":"41ab5cc","foundBy":"self-audit","severity":"critical"},{"id":"NC-2026-005","discovered":"2026-09-12","corrected":"2026-09-12","liveSince":null,"surfaces":["/api/prime/entity/{ticker}?kind=corporate"],"claimed":"JPMorgan Chase and Deere & Co each held zero days of refinancing headroom — a breached constraint, the most severe state the corporate lens reports about an entity.","actual":"Neither filing states the maturity split the measure needs. JPMorgan tags $72.4bn of short-term borrowings and no long-term leg under the concepts this lens reads, while carrying well over $300bn of long-term debt; Deere tags $17.1bn current and nothing beyond. The correct reading is that the split is unstated (sec:us-gaap companyfacts).","cause":"ABSENCE_READ_AS_MEASUREMENT","mechanism":"The refinancing horizon is (debt beyond a year / debt due within a year) x 365. An untagged leg read as zero sends the horizon to whichever extreme the gap falls toward: a missing long-term leg gives zero days, which reads as breached; a missing current leg gives infinity, which reads as nothing falling due within twelve months. Two of fifty-six large filers land in that branch today.","remedy":"debtStock() requires both legs tagged and describing the same period as each other. Either may be zero, because a reported nil is a measurement and an absent tag is not. It also guards both carried-rate paths, where a missing leg shrinks the denominator and inflates the rate.","test":"src/prime/__tests__/corporate-twin.test.ts","commit":"bcc160f","foundBy":"self-audit","severity":"high"},{"id":"NC-2026-004","discovered":"2026-09-12","corrected":"2026-09-12","liveSince":null,"surfaces":["/api/prime/entity/czechia?kind=bank"],"claimed":"The Czech banking system had exhausted its high-quality liquid assets inside the supervisory stress scenario — a breach of the liquidity coverage floor.","actual":"The ECB does not publish the Czech liquidity coverage ratio in CBD2. The series exists and the quarters are listed; the observation value is blank. The Czech National Bank reports a system ratio far above the 100% floor. The correct reading is that the ECB does not say.","cause":"ABSENCE_READ_AS_MEASUREMENT","mechanism":"In JavaScript, Number of an empty string is zero and that zero is finite, so the ordinary CSV guard admitted a withheld observation as a hard zero. The kernel treats a null buffer as not published and a zero buffer as already breached, which are opposite ends of every ranking the platform produces. Denmark arrived the same way on two ratios.","remedy":"numericCell() distinguishes a blank cell from a reported zero, applied at all seven sites that parsed cells this way — including the settlement reader, which would otherwise have resolved a prediction against a number nobody published.","test":"scripts/suppressed-observation.selftest.mts","commit":"a36ac0a","foundBy":"self-audit","severity":"critical"},{"id":"NC-2026-003","discovered":"2026-09-12","corrected":"2026-09-12","liveSince":null,"surfaces":["/api/cron/settlement-audit","/accountability"],"claimed":"The settlement audit had vacated the inadmissible settlements it identified.","actual":"It identified them and wrote nothing. 199 of 290 settlements stayed in the published record as though they had been verified against an independent observation.","cause":"SILENT_WRITE_FAILURE","mechanism":"The audit addressed rows by a field that was not the document key, and the Postgres document shim returned success for an update that matched no rows. Two faults in series, either of which alone would have been visible.","remedy":"The shim now raises DOCUMENT_NOT_FOUND when an update matches nothing, detected with RETURNING rather than a row count the driver does not supply. The audit writes by document key.","test":"scripts/postgres-schema.selftest.mts","commit":"a46f9e0","foundBy":"self-audit","severity":"critical"},{"id":"NC-2026-002","discovered":"2026-09-07","corrected":"2026-09-07","liveSince":"2026-08-09","surfaces":["/accountability","/methodology","investor documentation (ten documents)"],"claimed":"93.7% accuracy on regime prediction at thirty days.","actual":"In 1848 of 1848 cases the predicted regime was the regime at issuance. The figure measured persistence rather than skill: it is what a model scores by asserting that tomorrow resembles today. Measured against that baseline the skill was negative.","cause":"STATISTIC_MISNAMED","mechanism":"The transition matrix had been retired, and with no transition term the prediction reduced to the present state. Accuracy against outcomes stayed high because regimes are persistent, and nothing in the pipeline compared it to the persistence baseline.","remedy":"Skill is reported against the climatological base rate everywhere the accuracy figure appears, and the sentinel refuses to pass a skill claim it cannot distinguish from that baseline. The headline was corrected in all ten investor documents the same day.","test":"src/prime/__tests__/skill-score.test.ts","commit":"published on /accountability","foundBy":"self-audit","severity":"critical"},{"id":"NC-2026-001","discovered":"2026-09-07","corrected":"2026-09-07","liveSince":"2026-09-07","surfaces":["European physical data feed","/status"],"claimed":"Sixteen rows of European zone measurements.","actual":"The rows were generated rather than measured. No zone reported them.","cause":"SYNTHETIC_DATA_PUBLISHED","mechanism":"A thrown exception was the only thing preventing a mock generator from running in production. Removing it — reasonably, since an exception is not a policy — let the generator run, because the caller never consulted the synthetic-data policy at all.","remedy":"The policy is consulted at the call site instead of being enforced by an exception elsewhere. Synthetic data is disabled in production and the sentinel counts fabricated rows on every run.","test":"scripts/evidence-ingestion.selftest.mts","commit":"published on /accountability","foundBy":"self-audit","severity":"critical"}]}