{
  "_README": [
    "GENERATED. Do not edit by hand: `npm run changelog` overwrites this file from git history.",
    "Written by scripts/build-changelog.mjs, deliberately before a deploy and never inside `npm run check`.",
    "changelog.html renders it. The counts below are measured, and `withheld` is printed on the page."
  ],
  "generated": "2026-09-05",
  "directory": "openstamps-furniture",
  "counts": {
    "commits": 66,
    "published": 65,
    "withheld": 1
  },
  "withheldBecause": [
    "it names a security weakness that is not closed",
    "it names a credential, key or token",
    "it names a customer, or material held under confidence for one"
  ],
  "days": [
    {
      "date": "2026-09-05",
      "entries": [
        {
          "subject": "feat(dds): the Renew action on the desk — one draw extends a sealed record's checkability, the chain rides as a side-car, and the reader's own re-read decides what is stored",
          "note": "The renewal that the engine release unblocked is now a button. On the desk (dds.html Records tab) every sealed row gains Renew: lib/seal.js renewVia runs the released engine's renewStamp inside the same relay wrap and tsaGate a seal uses, names its authorities in order (a qualified one where this deployment relays to one, else FreeTSA to 2040, else DigiCert to 2031), and appends only a token that checked offline against a pinned key. The sealed bytes and the content id never change: the chain is a side-car, <exact .cts file name>.renewal, stored on the row, written into the authority pack beside records/<id>.cts, downloadable from the row, and paired by exact name on try.html's Chain tab and in CHECK.txt."
        },
        {
          "subject": "feat(engine): the one recorded engine release — SK ID Solutions pinned from the Estonian trusted list, DigiCert's rotated key measured and prepended, renewStamp appends only a verified token from a NAMED authority, and a third relay leg that is silent until a contract exists",
          "note": "lib/cstp.js was declared frozen and changed only as the output of the root build:cstp, once, with every input measured on 2026-09-05 and recorded in openstamps-furniture/docs/ENGINE-RELEASE-2026-09-05.md. Bundle b7ae5794… 446033 B -> bbbfd5fe… 463008 B, byte-identical in both copies, reproducible from source."
        },
        {
          "subject": "feat(openstamps): the shelf line — a reader prints the date each stamp stops being independently checkable, and the phone notices a clock behind its own past",
          "note": "Assessed the four already-built primitives (renewal.ts, collisioncheck.ts, clockskew.ts, scaleladder.ts) against Trusty, SourceTrace, Meridia, Satelligence, TraceX, LiveEO and osapiens with five assessors and two judges. One edge is real and needed no engine change: none of the seven can print a shelf life, because none issues an artefact whose checkability has a date. The frozen lib/cstp.js already returned r.shelf on every verify; nothing on this site read it."
        },
        {
          "subject": "chore(netlify): run the functions in Frankfurt, not Ohio",
          "note": "The default region is `cmh` (US East) and no region was set, so every function has been running there. Almost everything they contact is in Europe: the qualified timestamp authority being contracted is in Tallinn, the EU Information System is a Commission host, billing is Stripe Payments Europe, and the operators are EU furniture businesses. Ohio put a double Atlantic crossing on the stamp path — the one place latency is actually felt, because the browser waits on the closing edge of a bracket before it can seal."
        },
        {
          "subject": "fix(meter): every conditional write in the money path was a lie in production — @netlify/blobs 8.x silently ignores onlyIfMatch",
          "note": "An infrastructure review of Netlify found something nobody was looking for, and it is the most serious defect in this repository."
        },
        {
          "subject": "feat(dds): Conformance Test 1 steps 4-10 as one command, and the sequence proved against a scripted acceptance endpoint",
          "note": "The founder asked to run the EU conformance test. Steps 1-3 cannot be done by anybody but him and must not be automated: an Economic Operator and a web-service user on TRACES NT acceptance, under an EU Login account, and an Authentication Key copied off that profile. That is an identity, a company registration, a person accepting terms and a credential."
        },
        {
          "subject": "feat(openstamps): the specification in the tree, a contracted third authority, the enterprise quiz and a status page that says what it cannot measure",
          "note": "THE SPECIFICATION IS PUBLISHED, so the sentence the pages sell is finally true in a tree a visitor can reach. docs/CSTP-SPECIFICATION.md and FORMAT-LICENCE.md are copied in and served — the spec text is CC BY 4.0 and implementing the wire format is royalty-free. launch.html's footer and enterprise.html's first pillar now link the document itself instead of a README anchor. ⚠ docs/CSTP-PATENT-COVENANT.md is deliberately NOT served. Its own first line reads \"DRAFT FOR COUNSEL — NOT YET GIVEN\", and a published draft covenant is worse than an absent one because a reader may rely on it and we would have invited them to. enterprise.html now says that in a line rather than leaving the gap for somebody to find."
        },
        {
          "subject": "feat(openstamps): a second device that witnesses a stamp, and a published surface that stops leaking",
          "note": "FOUR THINGS THE FOUNDER ASKED FOR, AND ONE THE RESEARCH FOUND FIRST."
        },
        {
          "subject": "fix(try): the three drop zones could not be reached by a keyboard",
          "note": "A drop zone is a <div> whose file input carries class=\"hidden\", so the input is display:none and unfocusable, and the div had no tabindex and no role. The only way to open the picker on the site's main tool was a pointer — WCAG 2.1.1 Keyboard, a Level A failure, on a site that publishes an accessibility statement aiming at 2.2 AA."
        },
        {
          "subject": "fix(openstamps): the red team's nine blockers — an annual year that delivered one month, a top-up that erased it, and a rule dead since it was written",
          "note": "A 49-agent adversarial pass over the repriced meter, the new tier and the annual cadence raised 44 findings; 38 survived independent refutation. The blockers, and what each actually cost:"
        },
        {
          "subject": "feat(openstamps): a price that pays for the tokens, an enterprise tier nobody has to phone for, and the band the palette was always drawn for",
          "note": "THE LADDER WAS BELOW COST. A closed stamp is two RFC 3161 tokens, not one (tsa-relay.mjs authoritiesPerStamp: 2), which is about 8 euro cents fully loaded at medium volume. Works sold 15,000 of them for EUR 399 — 2.66 cents each, roughly a third of what they cost — and every rung lost money on every stamp. The founder's word for it was \"too cheap\"; the arithmetic is worse than that. Trial 0/25 once · Maker 39/120 · Studio 149/600 · Works 499/2,400 · Enterprise 1,490/9,000, from 32.5 down to 16.6 cents an included stamp, all of it above the floor. Annual is twelve months for the price of ten, which also turns twelve fixed Stripe fees into one. Top-up blocks now carry published prices and still never expire, topped by 100,000 for EUR 11,900 — the SKU a purchase order can be raised against, which never renews and cannot be cut off. The dead Volume plan is deleted rather than repriced."
        },
        {
          "subject": "fix(site): every page rendered as plain text — a rule inserted inside site.css's opening comment",
          "note": "THE OUTAGE, AND IT WAS MINE. Yesterday I added `[hidden] { display: none !important; }` to site.css by inserting it after the file's first newline — which put it INSIDE the opening `/**` header comment. CSS comments do not nest, so the inserted comment's own `*/` closed the header early, and every declaration from \"OpenStamps for Furniture — the ONE visual system\" onwards was parsed as garbage. The stylesheet still returned 200, still had the right byte count, and still passed html-validate, check-visual-system, check-display-law, check-launch and 268 unit tests. Every page on the site rendered as unstyled text."
        },
        {
          "subject": "feat(openstamps): sell the closing edge of the bracket — the pilot is dead, the meter is the business",
          "note": "The founder killed the €12,000 pilot, the turnover bands and the free-under-€1M tier: consulting is a job with extra steps, and a price that rests on a self-declared number needs a human to argue with. Everyone who wants a CLOSED time bracket is now metered, self-serve, by card, with nobody in the loop."
        }
      ]
    },
    {
      "date": "2026-09-03",
      "entries": [
        {
          "subject": "feat(openstamps): the whole due-diligence workflow, the farmer's page, and a chain that reads as one map",
          "note": "The public site is rebuilt on one visual system (site.css / site.js / legal.css) with one sales URL (launch.html, <=520 words, EUR 12,000 pilot, production from EUR 18,000/year) and the 4,700-word deck frozen in docs/superseded/."
        }
      ]
    },
    {
      "date": "2026-08-13",
      "entries": [
        {
          "subject": "refactor(index): 19 sections made ~6 arguments — now 12 make them once, sitting still",
          "note": "The complaint was fair: the GNSS-spoof argument appeared four times, the onboarding story three, the rate bands three, while two countdowns and three self-animating widgets ran at once. What changed, and why each is a merge and not a loss:"
        },
        {
          "subject": "feat(server): the two halves the static site could never supply — and the first bracketed stamp",
          "note": "Every stamp this site ever minted was 'Sealed — one-sided': requestTsaTokens POSTs to /tsa/freetsa and /tsa/digicert, same-origin proxies no static host serves. And phone.html's acoustic path needed an /api/copresence rendezvous that existed nowhere in this repo. Both halves now ship:"
        },
        {
          "subject": "feat(portal): the members area the pitch kept deferring — journey, map, vault, OIDC",
          "note": "portal.html + lib/journey-data.js: the S01-S62 catalog in master-sequence flow order (62 stamp points = 61 mintable + the S42 read — never one number without the decomposition), an illustrative FJORD dossier in the evaluator's exact grammar, and five scenarios whose lamp, gloss and per-receipt glyphs are all DERIVED from evaluateDossier live in the browser — never captioned by hand. The map plots declared stations and recomputes the S49 polygon's area from its vertices (it caught this page's own first fake polygon: declared 6.2 ha, drawn 38). The vault chains receipts by digest, re-checks offline, and refuses to render zero checked links as a hold. Sign-in is Authorization Code + PKCE from this static origin with the ID token's signature, iss, aud, azp, exp, iat and nonce checked in-browser before a session opens; SAML needs the server half and says so: roadmap under signed pilot / order."
        },
        {
          "subject": "fix(seal): a malformed seal made US look broken — the verifier threw where it should have reported",
          "note": "MEASURED end to end, 2026-08-13."
        },
        {
          "subject": "fix(seal): a caveat about the READER reached nobody — I had moved it into a field with no consumer",
          "note": "MEASURED, then fixed, then measured again."
        },
        {
          "subject": "fix(disclosures): six of nine consumers dropped them — and a derived guard so the seventh cannot",
          "note": "⚠⚠ FIXING SIX CALL SITES DOES NOT FIX THIS DEFECT. THE DEFECT IS THAT DROPPING IT IS SILENT."
        },
        {
          "subject": "fix(envelope): every disclosure the assertion layer wrote died one function up",
          "note": "⚠⚠ MEASURED 2026-08-13 ON A REAL SEALED ENVELOPE — FOUR DISCLOSURES PRODUCED, ZERO CARRIED."
        },
        {
          "subject": "feat(spacetime): answer \"do two axes of ONE body earn CS_STRONG?\" by GRADING it, not redefining it",
          "note": "Register row #12, open all day because both obvious answers are wrong."
        },
        {
          "subject": "fix(gate): the retraction gate forbade the house convention it exists to enforce — and land the OSFP lane",
          "note": "⚠⚠ WRITING A RETRACTION CORRECTLY TURNED THIS GATE RED; DELETING THE HISTORY WOULD HAVE TURNED IT GREEN."
        },
        {
          "subject": "fix(gate): the mirror list was hand-written, named a file no build copies, and missed a whole destination",
          "note": "⚠⚠ THIS GATE ENFORCES \"DERIVE, NEVER RESTATE\" ON BUILD OPTIONS AND BROKE THAT RULE ON ITS OWN MIRROR CHECK. Its header says restating options here \"would eventually certify a build nobody performs — the same class of drift it is here to catch, one level up\". Twelve lines from the foot it did exactly that, with a hand-typed list:"
        }
      ]
    },
    {
      "date": "2026-08-12",
      "entries": [
        {
          "subject": "fix(copresence): four live consumers never passed the z-score they were given",
          "note": "⚠⚠ `6c688e16` plumbed the z-score HalfReport → AssemblyResult → RangeOptions and the SHIPPED PAGES WENT ON PASSING ONLY THE PSR. Every consumer picks fields off `asm` rather than spreading it, so adding `zA`/`zB` upstream reached none of them:"
        },
        {
          "subject": "build: rebuild the 6 bundles my own source edits drifted",
          "note": "⚠⚠ SELF-INFLICTED, CAUGHT BY THE GATE THAT EXISTS FOR IT, AND THE THIRD INSTANCE OF THIS CLASS IN THIS REPOSITORY. I rebuilt all eight bundles at `bbcbe65d`, then spent the day editing proof.ts, spacetimeseal.ts, spacetimesealsurface.ts, enrolmentroot.ts, prediction.ts, clockaudit.ts, massbalance.ts and presencegate.ts — every one of which these bundles pull in — and committed the SOURCE in eleven commits without the ARTEFACTS."
        },
        {
          "subject": "refactor(massbalance)!: split the reader's yield band off the claim it judges",
          "note": "⚠ A LATENT TRAP CLOSED STRUCTURALLY, NOT A LIVE DEFECT — and it is filed as such because overstating it would be the same sin as understating one."
        },
        {
          "subject": "test(osfp): R1 coverage was 0 of 15 and printed OK 89/89 — now 15 of 15",
          "note": "⚠⚠ THE TWO OLDEST ATTACK CASES WERE INERT AND HAD BEEN FOR AS LONG AS ANYONE LOOKED. Attacks 1 and 2 ran `delete v.dossier.requireS59` / `delete v.dossier.amberOpen`. MEASURED: `V09.dossier` and `V11.dossier` carry exactly two top-level keys each, `devices` and `events`. Neither field is there. Both deletes were no-ops, and the `red`/`amber` they asserted is what those vectors return untouched. They measured nothing and reported it as an attack refused."
        },
        {
          "subject": "fix(bundles): the shipped verifier refuted no self-contradictory envelope — 8 of 10 bundles were stale",
          "note": "⚠⚠ THE LIVE SITE COULD NOT REFUTE AN ENVELOPE THAT CARRIES DATA IT HAS NOT DECLARED. Measured on the committed `cosmicstamp-site/cstp.js` against a fresh build of the same source, occurrences:"
        },
        {
          "subject": "feat(gate): try.html says \"same engine as cosmicstamp-site\" and nothing made that true",
          "note": "THE FORMAT LAYER, which the 116-agent sweep named as covered by nothing. Measuring it first changed the question, and the correction is worth more than the row:"
        },
        {
          "subject": "test(osfp): the negative half — rules that must not OVER-fire — 89.4% -> 92.4%",
          "note": "Fourth batch. After three rounds the survivors were almost entirely CONNECTIVE mutants: `&&` swapped for `||` in guards like `mb.productClass === \"sawn\" && mb.fromResidue`. Every one survived for the same reason, and it is a reason worth naming: THE FIXTURES ONLY EVER SHOWED A RULE FIRING. A rule that fires on EITHER half passes that test exactly as well as one that requires BOTH. Without the negative half, \"this rule works\" only means \"this rule sometimes returns the answer I expected\"."
        },
        {
          "subject": "test(osfp): my own cases asserted `cause` and not `outcome` — 82.4% -> 89.4%",
          "note": "Third batch, and the mutation pass named a weakness in the CASES I had just written rather than in the evaluator."
        },
        {
          "subject": "test(osfp): eight more fixtures for reader-policy arms and the ordinal boundary — 76.2% -> 82.4%",
          "note": "Second reachability batch, chosen from where the survivors actually clustered after the first: `sla` 15, top-level 14, `bom` 14, `ordinal` 8, `devices` 7, `parents` 7."
        },
        {
          "subject": "test(osfp): seven fixtures for arms nothing reached — 69.7% -> 76.2% mutation score",
          "note": "The finding-set assertion (0932901a) took the score from 65.0% to 69.7%, exactly as predicted, and the measurement that came with it said where the rest was: 102 of the remaining survivors sit in arms NO VECTOR ENTERS, because the fields that reach them are minted by nothing in the pack. No assertion over vector output can defend an arm nothing reaches. Only a fixture can."
        },
        {
          "subject": "test(osfp): vectors asserted a LIGHT, not which findings produced it — 65.0% -> 69.7% mutation score",
          "note": "A SYSTEMATIC MUTATION PASS over `osfp-verify.mjs` was run first: 340 mutants (outcome-swap, guard-forced, comparison-flip, negation-dropped, connective-flip), 0 unscored, against every oracle the repo ships except bundle parity."
        },
        {
          "subject": "test(osfp): two arms whose docblocks claimed a fix, mutation-confirmed measured by nothing",
          "note": "Both are in the ordinal guard, both written earlier today by me, and both were MUTATION-CONFIRMED BLIND on 2026-08-12: disabling either left BOTH `run-vectors` (15/15) and `run-attacks` (56/56) fully green."
        },
        {
          "subject": "fix(osfp): an unreadable amber age rendered identically to one checked and inside the SLA",
          "note": "`open && ageDays > slaDays` had no finiteness gate — in the file that states the isFinite-first rule more often than any other. Every comparison against NaN is false, so an unreadable age did not merely fail to breach: it SKIPPED THE HOLD AND SAID NOTHING. MEASURED on V11, 2026-08-12:"
        },
        {
          "subject": "fix(osfp): `b.id === s32.bomId` is TRUE when both are undefined — a BOM naming nothing bound to everything",
          "note": "14 of the pack's 15 S32 units carry no `bomId`, so one S60 with no `id` bound itself to every one of them by `undefined === undefined`. And `.find` took the FIRST match, so array position picked which BOM a unit was judged against. MEASURED 2026-08-12:"
        },
        {
          "subject": "fix(osfp): de-attributing an event deleted the revocation check — and the obvious remedy floods",
          "note": "`if (!e.deviceId) continue;` skips an event with no device, so an operator strips the field off whatever a revoked device minted and the refutation is simply gone. MEASURED on V08, 2026-08-12:"
        },
        {
          "subject": "feat(gate): the not-checked CAUSE vocabulary had no gate — and five tokens were added in one day",
          "note": "An unknown dossier KEY has failed this runner since 2026-08-11. The not-checked CAUSE — the token a relying party ROUTES on, the one field of a gap meant to be machine-readable rather than prose — had no such check, and the repo gate that would (`scripts/not-checked-reason-check.mjs`) is scoped to `packages/`, not here. I added five tokens to this evaluator today with nothing able to notice a typo, a synonym, or a token whose meaning had drifted. A router keyed on `family-absent` silently stops matching if someone writes `famly-absent`; nothing in this tree would have failed."
        },
        {
          "subject": "fix(osfp): one `null` in a JSON array abandoned all fifteen checks and suppressed every refutation",
          "note": "The largest blast radius in the evaluator, and it needed no crafted field, no unusual type and no knowledge of the profile — `JSON.parse` produces `null` without complaint."
        },
        {
          "subject": "fix(osfp): `undefined` was a grouping key — two honest sales refuted each other, and three ways to vanish",
          "note": "The parallel-sale guard was four lines and carried four separate defects. All measured on V07, 2026-08-12, against the shipped `groupBy(…S41…, s => s.ordinalId)` + `s.live !== false`:"
        },
        {
          "subject": "fix(osfp): a shipped rule refuted on an ABSENCE — seven honest vectors went red on the reader's own flag",
          "note": "⚠⚠ THE INVERSE OF EVERY OTHER ROW ON THIS BRANCH. The rest ask \"can a hostile dossier buy a pass?\"; this asks \"can an honest one be convicted?\", and that is the worse failure — a verifier that reds compliant filings is one nobody can use."
        },
        {
          "subject": "fix(osfp): an amendment costs amber; a whole second work order cost nothing — disclose what cannot be checked",
          "note": "Third pass on the ordinal guard, from a 116-agent adversarial sweep whose skeptic REPRODUCED it by running. MEASURED on V02 (planned run 500, unit ordinal 999), 2026-08-12:"
        },
        {
          "subject": "fix(osfp): my own N-lock fix left a narrower silent skip — an intra-event contradiction behind a link",
          "note": "Follow-up to 324a2214, found by an adversarial re-read of that commit rather than by its author, and MEASURED on a unit stating `n: 40, of: 12` — the fortieth of twelve, a contradiction INSIDE ONE EVENT:"
        },
        {
          "subject": "fix(osfp): the N-lock was raised by the document it locks, and JSON array order was a security parameter",
          "note": "OSFP-POLICY-FROM-ARTEFACT, the S55 limb — the one §6.7.2 flagged as still live. Measured on V01 through `evaluateDossier` before a line was written, and again after:"
        }
      ]
    },
    {
      "date": "2026-08-11",
      "entries": [
        {
          "subject": "fix(osfp): try.html's mass-balance chip was a function of which button you pressed, not of the numbers",
          "note": "OSFP-EVALUATOR-NO-CONSUMER. §6.3 records the row's headline as refuted for `index.html` — which drives its lamp, glyph, word and gloss from `evaluateDossier` under a bundle-parity gate — and notes that \"try.html contains no reference to the evaluator at all, its mass-balance widget is still the same hardcoded constants\". An adversarial re-measurement found the sharper thing: the widget's VERDICT was hardcoded too."
        },
        {
          "subject": "fix(gate): the retracted-claim gate had never once read a PDF — and prescribed a remedy it ignored",
          "note": "Two defects in the gate I landed this morning in `e9142c5a`, both found by running it rather than reading it. It exists to catch a rendering that outlives its own retraction; it could do neither thing it claimed."
        },
        {
          "subject": "feat(osfp): a gate for retracted claims — the .md took it back, the .pdf still says it",
          "note": "OSFP-TRACES-ERP-UNBACKED. Re-measured before touching anything, because this register has been burned by stale evidence: the claim IS still there. `pdftotext -layout` line 988 of docs/OPENSTAMPS-SEED-TO-SALE-TIMELINE.pdf —"
        },
        {
          "subject": "fix(osfp): a stated plot area is mandatory — and Art. 9's six decimals CANNOT be evidenced by a JSON number",
          "note": "Operator ruling: a stated plot area and six-decimal coordinates are both mandatory Art. 9 content. One of those is enforceable on this dossier shape. The other is not, and the honest half of this commit is saying so instead of shipping a check that convicts compliant filings."
        },
        {
          "subject": "fix(osfp): the last two thresholds the artefact set for itself — the yield band and the polygon rule",
          "note": "Closes OSFP-POLICY-FROM-ARTEFACT's fourth limb and OSFP-GREEN-NO-EUDR-CONTENT's live limb. Same defect, so they are done together: a rule whose THRESHOLD or APPLICABILITY comes from the blob under test."
        },
        {
          "subject": "fix(osfp): two gates that could not see what they claimed to check",
          "note": "Both from §6, both R8 — not logic defects, but gates whose green meant less than it said."
        },
        {
          "subject": "fix(osfp): the four-light legend still printed a precondition the evaluator had stopped requiring",
          "note": "OSFP-OFFLINE-COLLAPSE, page limb. §6's skeptic: \"the reviewer quoted the promise and stopped. Four lines below it, in the same #lights section, the shipped static legend still defines the middle lamp with the gate the fix deleted.\""
        },
        {
          "subject": "fix(osfp): three decision inputs were still taken off the blob under test — two turned RED into GREEN",
          "note": "OSFP-POLICY-FROM-ARTEFACT. The row's claim — \"every hostile check is opt-in from the dossier under test; deleting one field turns red into green\" — was refuted on a `grep \"dossier\\.\"` over osfp-verify.mjs, and §6's skeptic showed that grep is structurally blind: the artefact is bound ONCE at :240 and every later read is spelled `e.`, `mb.`, `bom.`. Four survived. Three are closed here."
        },
        {
          "subject": "fix(copresence): \"the camera read nothing\" was rendering as \"the sighting failed\" — on two shipped pages",
          "note": "First fix taken from §6's re-measurement, and it is the plainest cardinal sin still shipping."
        },
        {
          "subject": "try.html: itemise the timestamp check — the verdict counted it and nothing showed it",
          "note": "Closes the residual recorded in 783fceea. `tsForged` and `tsUnchecked` (:471-473) already decided the headline — a forged timestamp made the whole verdict `bad`, an indeterminate one `warn` — while the per-check list held exactly three rows: file, envelope, beacon. A reader was told a check had failed and given no way to see which one. A gap counted by the verdict and itemised nowhere is the same defect as a field nobody renders."
        },
        {
          "subject": "register: the OSFP tail — two rows were STALE, and the fix for one of them was my own rebuild's fault",
          "note": "OSFP-EVALUATOR-NO-CONSUMER — ROW REFUTED BY MEASUREMENT, and reported rather than \"fixed\". It says the evaluator has \"no consumer except its own vector runner\", citing a grep that finds three paths. Measured now: TWO runners import the source (run-vectors.mjs:18, run-attacks.mjs:19) and TWO import the bundle — including openstamps-furniture/index.html:2911, which is production: it calls evaluateDossier(v.dossier, readerPolicy(...)) and derives the live four-light widget from r.light, r.coverage and r.reasons, and refuses to fall back to the mock copy when the engine fails to load. ⚠ THE ROW'S BUSINESS CONCERN SURVIVES ITS EVIDENCE, and that distinction is the whole result: the page runs the real evaluator over the repo's OWN five pinned vectors, so it is a live-computed demonstration, not an evaluator applied to buyer-supplied data. No surface anywhere accepts a dossier from a customer. try.html still drives its mill widget from hand-written constants (:514, :528-530) — honestly labelled \"(illustrative)\" at :123, so nothing false is claimed, but unwired. The row should be REWRITTEN to that, not closed. I did not edit GAP-REGISTER-2026-08-10.md; another session owns it."
        },
        {
          "subject": "try.html: a verify with no original file was reading as a full pass — close OSFP-GREEN-TICK-DISPLAY",
          "note": "The last piece of OSFP-GREEN-TICK-DISPLAY. On /try, a proof checked with NO original file supplied fell through to `kind === \"ok\"` and rendered \"Holds up — checked on this device\". The fingerprint comparison — the check that ties a proof to the buyer's actual file, and the whole point of the page — had not run. It is now `warn`: \"Nothing to compare — no original file supplied\", with a body saying in terms which check did not run and that this \"is not a failure, and it is not a pass\"."
        },
        {
          "subject": "osfp: the shipped evaluator bundle was five checks short, and V15 rendered GREEN where it must be AMBER",
          "note": "⚠⚠ THE LIVE DEFECT, FOUND IN A WORKSTREAM'S RESIDUE AND MEASURED HERE BEFORE ACTING ON IT. openstamps-furniture/index.html loads `lib/osfp.js` and tells the reader, at :2934, that the lights are \"computed live in your browser by the same evaluator a verifier runs\". That artefact was built 2026-08-10 19:37; the evaluator was rewritten 2026-08-11 00:12. Measured across all 15 conformance vectors before the rebuild: · every vector reported FEWER checks through the bundle (V02: 10 against 15) — a short answer wearing the appearance of a thorough one, which is the exact failure `coverage` exists to prevent, happening one layer beneath coverage; · V15-codes-without-eudr-content-amber rendered **GREEN** through the bundle where the source and the vector's own expected value say **AMBER**; · the bundle contained zero occurrences of EUDR_CONTENT, checkContentField or POLYGON_THRESHOLD_HA. An EUDR buyer, an auditor or a regulator reading that page saw a green light the evaluator does not give, under a sentence promising parity. Rebuilt here."
        },
        {
          "subject": "register: close SPEC-NO-DISPLAY-ROLE, CI-SKIPS-16-TESTS, OSFP-TRACES-ERP-UNBACKED",
          "note": "Three rows from a six-row fan-out; the other three were held by their adversarial refuters with concrete blockers and are being reworked."
        },
        {
          "subject": "fix(osfp): make the EUDR floor check CONTENT, not the presence of an event code",
          "note": "⚠⚠ MEASURED, ON THE SHIPPED GREEN VECTOR. V02 expects `green` and its plot event read, in its entirety:"
        }
      ]
    },
    {
      "date": "2026-08-10",
      "entries": [
        {
          "subject": "fix(osfp): register item 3 end to end — the EUDR evaluator could be disarmed by the dossier it was checking",
          "note": "⚠⚠ THE DEFECT, MEASURED AGAINST THE SHIPPED VECTORS WITH THE VERIFIER UNMODIFIED: V09 minus `requireS59` red -> GREEN V11 minus `amberOpen` amber -> GREEN V08 with its own `devices[].revoked` flipped false red -> GREEN The revocation ROSTER was read out of the artefact being checked. CSTP §6 reader law R1 calls this \"the single most repeated defect class — measured eleven times\". This was instance twelve, on the page a regulator reads."
        },
        {
          "subject": "chore: register items 1 and 2 — correct the stale rows, then gate the display law",
          "note": "REGISTER ITEM 1 — the registers were planning work from a false picture."
        },
        {
          "subject": "docs: the 2026-08-10 gap register, and the two display violations it found on the flagship page",
          "note": "THE REGISTER. Five independent surveys (spec docs, phoenix-client, sutrax, openstamps-furniture, docs/design) run in parallel, 65 raw rows, merged and re-verified against the working tree, ranked blocks-launch first. Every row carries evidence its author personally measured — a file:line they opened or a command they ran and its output — and rows that could not meet that bar were cut rather than kept. It also carries a \"recorded as open but actually closed\" section, because a register with dead rows is how a team stops reading it, and a \"measured this pass\" line naming the areas that got thin coverage."
        },
        {
          "subject": "fix(openstamps-furniture): make the offline claim true, and stop the page saying \"Verified\"",
          "note": "Three defects on the flagship commercial page, all measured before being fixed and all verified in a browser afterwards."
        }
      ]
    }
  ]
}
