The bench
Where this site ships MVPs and experiments. 16 of the 17 things below are built and running right now — you can fetch them, run them, and check them. Each one lives in its own folder with its own code, arrives from a brief or a dev pack, and is iterated release by release.
Every entry must say what it does not prove, and the build fails without it. That is the difference between a bench and a showcase. A register whose signatures verify and prove nothing; a hook that refuses pushes and carries no authority; a measurement that is a floor and not a census — each of those is a real, working thing and a demonstration, and a section that listed only the first half would manufacture exactly the false assurance this site exists to argue against.
| On the bench | State | What it is |
|---|---|---|
| The register | live | A static register of agent identities, roles, mandates, grants, acceptances and revocations — eleven records and twenty-three signed statements at constructed public URLs, verifiable with the shipped sgit pki commands. |
| The mandate hook | live | A signed mandate compiled into a pre-push hook that git runs — and that refused a real push to dev with error: failed to push some refs. |
| Grant measurement | live | A tool that generates a grant document for the environment it runs in, and two measured entries — a hosted agent container and a CI runner — that join at the push edge. |
| The building blocks | live | Nine reusable components — tier and evidence badges, cards, the delta block, the grant tree — shipped as a stylesheet and a gallery that renders the real documents. |
| Map your own case | live | A visitor assembles their own agent installations as grant trees, sees the gap, and records a decision per gap — storing the choices and never the answers. |
| The chain room | live | The RiskMandate workflow walked end to end as a playable room — eight stations, the product boundary drawn on the floor, four verbs, and a work item that travels the chain. The left half is real artefacts; the right half is a marked simulation. |
| The table | live | Actions resolving against grants and mandates, played as cards: six suits, four players including the systems, and the estate's real 26 August incident replayed forward as simulation and backward as audit — with every resolution re-run through the enforcement tool at build time. |
| The scenario engine (two worlds) | live | One engine, two worlds: Push to GitHub and The Deploy are rendered by the same generator from two scenario.json files, each referencing a measured twin — the engine holds no capabilities of its own, and every card is a twin node wearing scene clothes, with a confidence rung computed from its evidence and a micro-animation per capability kind. |
| The control room | live | Both scenario worlds on one operator board — mimic diagrams, annunciator tiles whose lamp colour is the tier and nothing else, faceplates on click, and the 26 August incident as a replayable sequence-of-events log with every verdict re-run through the enforcement tool at build time. One more renderer, zero new data. |
| The simulator | live | The first surface here that answers to the visitor rather than replaying this estate's history: play cards against a measured twin and watch what they do. Every outcome is a verdict of the real enforcement tool, a reading of the twin, or UNKNOWN — precomputed at build time, because the browser is not an enforcement point. |
| The workbench | live | An experimental app: the primitives on a rail — identities, grants (the twin), mandates, facts, actions, a simulator — and every decision hands back an evidence pack, because the decision is disposable and the record is not. |
| The Delta Is Where the Insurance Lives (the insurance book) | live | The second volume, by the method of the first: ten voice memos and a pivot briefing, filed verbatim before they were read, made into one argument — the gap between what an agent can do and what it was authorised to do is an insurable exposure, and the honest first product is a rating anybody can recompute, not a premium nobody can check. Seventeen chapters in five parts, with the audit's six defects walked in full. |
| A Key Means Nothing Alone (the book) | live | One volume explaining what this site built, how it composes with RiskMandate.ai, and what none of it proves — 17 chapters in five parts, 14 figures each taken at the release tag its caption names, and 65 quotations re-read out of their sources on every build. |
| Probes, not tables (the capability registry) | live | A registry of capability primitives (verb × object × reach + reversible) and measured grants where a grant claim never travels alone: it points at the probe that established it, the date, the environment and the output, so a challenge is a rerun rather than an argument. A runner that emits findings/v1 in OpenSSF Scorecard's probe/finding shape plus reversibility and tier; seven profiles, two of them measured; grants public, mandates private. |
| What you authorised and never asked for | live | A self-assessment that runs in the browser: name your tools, the grant appears from measurements other people contributed, four questions about work produce the mandate, and the gap is rendered with the irreversible rows first and the reduction on the same screen. The verdict is a statement, not a grade; the tier is on the result; the counts-only tuple is shown and never sent. |
| Which Agent Is It? (the game) | live | Named for the question a person has (working title guess the agent). A guessing game whose output is a measurement: cheap questions with obvious answers, ordinary decision-tree induction over a belief across the public profiles, a prediction step before the reveal, and the prediction gap with the reduction on one screen. Deterministic, in the browser, the path always shown, nothing sent. |
| Synthetic readers | specified | A programme that puts a page in front of an agent which receives pixels and nothing else — no text, no structure, no knowledge of the project — and watches where it goes. |
The bench, in full
The register
liveA static register of agent identities, roles, mandates, grants, acceptances and revocations — eleven records and twenty-three signed statements at constructed public URLs, verifiable with the shipped sgit pki commands.
- Every record has a rendered page — the fixture/real class first, then each signed statement in append order, with the raw JSON one link away
- The four published rules, with entries under them at last — including the ownership rule as a test case: a valid signature by a non-owner is rejected
- C7's commit-graph record model, implemented rather than queued — the public git history is the chain
- Four assumable roles: a fresh session takes one on by copying a keystore
- Six verification answers shipped as data, so any verifier can check itself against them
- That anything here is trustworthy. Ten of the eleven records are fixtures — private keys published on purpose — so every signature verifies and proves nothing
- That the root can be relied on: it is a fixture root, and
roots.jsonsays so in its own entry - That enrolment works without a human: the write path is a git commit reviewed by a maintainer, not the account-less lane the pack designs
registry_tool.py validate— every signature, every reference, the fixture flag read before any signature, and all six expected answers reproduced- the site's key-leak tripwire, which still bans vault-key-shaped strings from the tree
The mandate hook
liveA signed mandate compiled into a pre-push hook that git runs — and that refused a real push to dev with error: failed to push some refs.
- The acceptance test's last sentence, executed: refused by something that is not the agent, with
origin/devunchanged afterwards - A mandate as a living object: v1 was too narrow, refused the release carrying it, and the issuer amended it rather than anyone bypassing the control
- Default-deny — a missing, unparseable, mis-signed or expired mandate all refuse
- That the mandate has any authority. Its issuer is the fixture root, so anybody could forge it and the hook would enforce the forgery just as diligently
- That the constraint is a boundary: it reached tier setting, and
--no-verifystill gets past it - That it protects a fresh clone — the hook file is committed, the config that activates it is local and does not travel
- the hook itself, on every push — and the refusal banner states its own tier rather than overclaiming
mandate.py verify— signature checked against the issuer's public registry record
Grant measurement
liveA tool that generates a grant document for the environment it runs in, and two measured entries — a hosted agent container and a CI runner — that join at the push edge.
- That a grant can be discovered rather than authored, with provenance and a tier per node
- Drift as a diff: re-run after the hook was installed, it independently caught its own node moving from
expectationtosetting - One rule that makes it safe to run: presence and reachability, never contents — there is nothing sensitive in the output to leak, by construction
- That the measurement is complete. An agent measuring its own grant reports what it can see; it is a floor, not a census, and says so on its face
- Anything about environments nobody has measured — two entries, one agent, and a blind-spot delta needs at least two agents against a common reference
- That a hand-assembled entry is as good as a measured one: the gallery caught schema drift in the hand-written entry and none in the tool-generated one
gen_blocks.pyfails the build on an unrecognised tier or evidence class — verified by injecting one- a refused probe is recorded as
unknown, never guessed
The building blocks
liveNine reusable components — tier and evidence badges, cards, the delta block, the grant tree — shipped as a stylesheet and a gallery that renders the real documents.
- The defeat-path rule working on real data that is wrong: a stored
boundarywhose own next node defeats it renders assetting, with the path attached - The authority/enforcement split as two indicators, never one
- A gap rendered as a gap — the three-term block shows
unknownwhere no self-report exists rather than inventing a number
- That the components survive contact with a population. They have been exercised against two environments and one mandate, all measured by one agent
- That the layouts hold on a phone — the grant tree below 390px has a proposed degradation nobody has tested
- That a second consumer will find the contract workable; RiskMandate is committed to consuming it and has not yet
- the gallery renders the actual library entries and mandate, so a schema change breaks the build rather than the integration
Map your own case
liveA visitor assembles their own agent installations as grant trees, sees the gap, and records a decision per gap — storing the choices and never the answers.
- That the no-collection claim can be architectural rather than operational: there is no free-text input anywhere, so there is nothing to type
- The three-tier control test in an interface, with escalation drawn as an edge
- A conformance test for this site's own claim, checkable in ten seconds in a browser's network panel
- That the library covers anybody's real estate. Scenario 5 has no tree to point at at all
- That the assessment changes what anybody does — it has no backend, so it can measure none of its own success measures
- That the acceptor model is sound: it offers a role where the pack's own standard asks for a named person
- no free-text input anywhere on the page, by construction
- browser storage only — nothing leaves the visitor's machine
The chain room
liveThe RiskMandate workflow walked end to end as a playable room — eight stations, the product boundary drawn on the floor, four verbs, and a work item that travels the chain. The left half is real artefacts; the right half is a marked simulation.
- The full chain —
reality → twin → facts → finding│risks → decisions → monitoring— as a place, with the library/instance boundary drawn on the floor: references cross, copies bounce, personal data never crosses up - Every word the room speaks is derived at build time from the same files the pipeline runs on — the measured library entry, the signed mandate, the computed excess row, the marked fixture. Nothing about state is hand-written
- The handover in one image: left of the line the excess row reads
acceptor: none; the exposure gains a named owner only at the acceptance desk, right of the line - Simulate first, then support — the workflow's states and actions exist as walkable, explainable things before any live instance does, the same move the register made with ten labelled fixtures
- That the workflow works. The right half is synthetic and says so on every surface: no risk has been derived, priced, accepted or monitored by anybody
- That a room gets read where a table gets skimmed — the genre's inherited bet, now two implementations old with zero user tests between them
- That the conditions can be monitored for real: 3 of 4 hold by observation, and the fourth — the boundary-tier enforcement point — has never held anywhere in this estate
- That the acceptance shown right of the line is RiskMandate's actual product behaviour: the shape is read off their positioning card, not their system
- the route gate: the station order drawn must equal the declared chain, or the build fails — the room may not draw a route through a workflow that does not exist
- the boundary gate (GM3): the instance fixture stores references, never copies — an embedded grant node fails the build
- the decision gate: the fixture's acceptance carries a named acceptor AND an interval, or it is not a decision and the build fails
- the observed gate: a condition claiming to hold without an observed_as_of fails — a status is observed, never typed
- the marker gate: the generator greps its own output for the SYNTHETIC marker beside every synthetic line
The table
liveActions resolving against grants and mandates, played as cards: six suits, four players including the systems, and the estate's real 26 August incident replayed forward as simulation and backward as audit — with every resolution re-run through the enforcement tool at build time.
- The object layer the room lacked: grants, mandates, facts, evidence and actions each given a card form with a suit — CAN, MAY, IS, SHOWS, DOES, DECIDES — every field read from the artefact the card links
- The resolution order as game mechanics: a DOES resolves against CAN, then MAY, and mints an IS backed by a SHOWS. Blast radius is the CAN cards face-up that no MAY card covers
- Systems as players: the hook plays reactions, the CI runner holds its own alarming CAN cards, and the DECIDES suit is played only by people — the remedy for a refusal is a decision, never a bypass
- Forward is the simulation, backward is the audit, and they are the same cards — the register's was it valid last Tuesday? promise, as play
- A live build gate: every turn's resolution is re-run through
mandate.py check-branchduring the build; a claimed refusal the tool does not reproduce fails it
- Coverage. One scenario, four turns, one agent, one control — the mechanics, not the space of plays
- That a DOES card is a receipt: nothing is signed by the actor at the time of action. The table shows where receipts would sit, which is not the same as having them
That proposed-action simulation works — playing a hypothetical card against the twin is specified in the brief and deliberately not built here.RETIRED at v0.1.46: it is built, at /simulator/, where the cards are playable against either twin and every outcome is a precomputed verdict of the real tool. A does-not-prove retired by later work is recorded here, not quietly dropped- That the card grammar survives a population: the genre bets are now three implementations deep across two estates, still with zero user tests
- the resolution gate, live: mandate.py check-branch is executed for each turn at build time and must agree with the table
- the transcript gate: every reaction quote must exist byte-for-byte in the captured transcript it cites
- the source gate: every card cites a file that must exist, and its fields are read from it, never typed
- the manifest gate: a folder without a manifest entry, or an entry without a folder, fails the hub build
One engine, two worlds: Push to GitHub and The Deploy are rendered by the same generator from two scenario.json files, each referencing a measured twin — the engine holds no capabilities of its own, and every card is a twin node wearing scene clothes, with a confidence rung computed from its evidence and a micro-animation per capability kind.
- Nothing hardcoded: the engine reads players, grant chain, mandate slots, decor and story from scenario.json, and every capability from the twin the scenario references — adding a world is adding a JSON file, which is the memo's claim made falsifiable by the pair existing
- The soft mandate as a place: the constraint that keeps this session off the wrong branch shown in the room it actually occupies — prose in the agent's context (expectation tier), beside the hook it could be (setting) and the platform enforcement it is not (boundary, the doors view's shut door printed in situ)
- The contrast the memo predicted: the hosted agent world has a mandatory egress proxy and three occupied mandate slots; the CI runner world that deploys its work has unrestricted egress, no agent, no hook — and the estate's only boundary-tier grant, the workflow's
permissions:block - The confidence rung as arithmetic: hypothesis 0, self-observed 1, +documented 2, independent 3 — computed from each node's evidence class, never typed, and both decks print why their maximum is what it is
- Capabilities that act: eight micro-animation kinds (push, act-as, edit, egress, recall, escalate, blocked, unknown) — a capability shown acting is legible where a permission string is not, and every animation freezes to its end state under prefers-reduced-motion
- That two worlds are many. The memo says tonnes of scenarios; the engine has rendered exactly two, both from twins this estate measured itself
- That the animations simulate anything — a travelling dot is a depiction of a capability, not an execution of one; no action is resolved here (that is the table's job)
- That the platform library exists: Codex, Lovable and the rest are named in the brief as future scenario.json files, and not one has been written — the fact-based variation catalogue is an argument, not an artefact
- That a rung above 2 is reachable: independent evidence exists nowhere in this estate, so the scale's top rung has never been exercised
- That an agent reads these pages — the memo's claim that agents would also appreciate the visual representation is untested for both humans and agents
- the twin gate: the scenario's twin file must exist and parse, or the build fails
- the deck gate: cards == twin nodes exactly — a twin node without decor, or decor naming an absent node, fails the build; the engine may decorate a capability, never add, remove or restate one
- the slot gate: every mandate slot derives from a real file (the twin's control text, the signed mandate's enforced_by, the doors view) — and the platform slot must agree with the doors view's enforcement_at_boundary count
- the anim gate: every animation kind must be one of the eight the engine defines
- the story gate: every beat cites an artefact that exists on disk
- the manifest gate: a scenario folder without a manifest entry, or an entry without a folder, fails the hub build
The control room
liveBoth scenario worlds on one operator board — mimic diagrams, annunciator tiles whose lamp colour is the tier and nothing else, faceplates on click, and the 26 August incident as a replayable sequence-of-events log with every verdict re-run through the enforcement tool at build time. One more renderer, zero new data.
- The scenario files are a world model, not a page config: the board is drawn from the same scenario.json files and twins the deck pages use, with nothing added to make it possible — adding a way of seeing is adding a renderer
- SCADA's lamp grammar lands exactly on the tier vocabulary: boundary is green (contained), setting amber, expectation amber flashing — one mistake from red — and a capability with no control on it is the alarm state: the CI runner's board lights red where the agent container's does not, visible from across the room
- FAULT as a first-class lamp: a refused measurement renders as a hatched sensor-failure tile, never a blank — the industry's oldest honesty convention applied to the estate's most repeated sentence
- State at a glance: Unit 1's egress wall is solid and its push line broken by a breaker in the setting position; Unit 2's wall prints NO WALL and its push line runs clean to the asset — the doors page proves this in numbers, the board shows it in geometry
- Forward is the simulation, backward is the audit — with transport controls: play, step and reset over the recorded incident; the browser only steps through verdicts the build already re-proved, and with scripting off the board renders complete and final
- That an operator can run a plant from it. Two units and one recorded incident is a diorama with excellent manners, not a control room under load
- That the annunciator scales past twenty tiles a unit, or the log past one incident — the genre solves both (paging, filtering, alarm shelving) and this build implements neither
- That anyone reads a mimic faster than a table — the genre bet is now four implementations deep across two estates, still with zero user tests
- That REPLAY ever becomes LIVE: a live board needs the registry's write path, monitors feeding facts, and a mandate service — all still stated design, which is why the mode chip is pinned where it is
- the tile gate: tiles == twin nodes exactly, per unit — the board may not simplify a world by omitting its embarrassing tiles
- the lamp gate: every lamp class derives from a tier in the closed set; an unknown tier fails rather than guessing a colour
- the mimic gate: the wall drawn must agree with the egress node's tier — NO WALL prints if and only if the tier is none
- the resolution gate, live: mandate.py check-branch re-run for every push event, and the log may not claim what the tool does not reproduce
- the transcript gate: every quoted reaction exists byte-for-byte in its source
- the timestamp gate: times are derived (mandate issued_at, tag commit time) or an em-dash — the generator has no field for a typed clock time
- the replay gate: the generator greps its own output for the REPLAY chip
The simulator
liveThe first surface here that answers to the visitor rather than replaying this estate's history: play cards against a measured twin and watch what they do. Every outcome is a verdict of the real enforcement tool, a reading of the twin, or UNKNOWN — precomputed at build time, because the browser is not an enforcement point.
- It does not predict, it composes. JavaScript cannot run
mandate.py, so the whole resolution table — every card, in both worlds, under both mandate states — is precomputed at build and shipped as resolutions.json with the tool's own output line in each row. The browser looks answers up; a rule in the page that decided a verdict would be a bug - UNKNOWN is a first-class outcome: where measurement was refused the board says unknown, never no — a simulator that turns a hole into a denial manufactures comfort, and three cards here return holes
- The hook card is the argument in one move: installing the pre-push hook changes no verdict at all —
devunder mandate v1 is refused before and after — and changes who refuses, from the agent inside its own loop to a hook outside it. The verdict column does not move and the reliability does - Questions history did not ask:
push to mainis refused under both mandates, which no page here has ever shown, because the estate only ever made the two pushes it made - Rewind is a computation, not an undo stack: board state is a pure function of the event prefix, so stepping back is the same computation with a smaller n — forward is the simulation, backward is the audit, as one control
- That the simulation is predictive. It composes measured facts and real verdicts; it cannot model an environment nobody measured, and every outcome carries the date of the measurement behind it
- That the hand is the space of plays: eight cards, two worlds, one enforcement tool, and a blast radius that is the twin's own reachability rather than a discovered attack path
- That anyone learns more by playing than by reading — the genre bet is now five implementations deep across two estates, still with zero user tests
- That any of it is live: nothing is executed, and the ladder on the control room says exactly which four doors would have to open before a board here could claim to describe the present
- the table gate: every reachable (card, world, mandate) triple must have a precomputed row, or the build fails rather than letting the browser improvise
- the resolution gate, live: every push row is re-run through mandate.py check-branch at build and carries that run's own output line
- the unknown gate: a card over a node with no evidence must resolve UNKNOWN — claiming a definite outcome there fails the build
- the node gate: every capability card names a node that exists in the world it is offered in, or is declared absent-in-this-world explicitly
- the hook gate: the hook card must move no verdict; if a change ever makes it move one, the lesson has changed and the card must be rewritten
The workbench
liveAn experimental app: the primitives on a rail — identities, grants (the twin), mandates, facts, actions, a simulator — and every decision hands back an evidence pack, because the decision is disposable and the record is not.
- A real real-time check: the live mandate's signature is verified in the visitor's browser — Web Crypto, against the signing key fetched from the issuer's registry record, over the registry's canonical form — not rendered as a badge
- The evidence pack (schema
evidence-pack/v0, GM-D33): every check with its result, evidence and source; the delta; the twin's age; the enforcement tier; anddoes_not_proveinside the artefact itself - The twin, operationalised: obligations assessed against a recorded measurement whose age is printed on every pack, with facts attached — and flipping the branch-protection fact moves the enforcement tier from setting to boundary, live (GM-D29 as gameplay, and N12 rehearsable before anyone touches settings)
- Default-deny as pedagogy: an unsigned draft mandate refuses everything while still showing the delta it would govern; force-push is refused because the vocabulary cannot express it
- It found a real defect on first contact: the live mandate names
repo.contents.push, the vocabulary declaresrepo.contents.write— outside the vocabulary under the registry's own exact-equality rule (GM19)
- That anything is enforced. The simulator decides nothing outside the page; the live decision points remain the pre-push hook (setting) and a boundary that does not exist (N12) — and every pack says so about itself
- That the twin matches the environment now — it is a recording; the memo's real-time question needs a re-measurement at decision time, which this app cannot perform and says it cannot
- That a verified signature carries authority — the issuer is a fixture until N11
- That
evidence-pack/v0is settled — introduced here, proposed to the pack, adopted by nobody
- the signature check is a real verification: corrupt the sig in the fetched document and the badge flips to does-not-verify
- default-deny, exercised: no mandate, superseded v1, an unsigned draft and an unexpressible action all refuse — checked headless before every release
- same-origin only: every fetch is a reference to a published estate document; nothing typed here leaves the browser
The second volume, by the method of the first: ten voice memos and a pivot briefing, filed verbatim before they were read, made into one argument — the gap between what an agent can do and what it was authorised to do is an insurable exposure, and the honest first product is a rating anybody can recompute, not a premium nobody can check. Seventeen chapters in five parts, with the audit's six defects walked in full.
- The corpus's own disciplines applied to the corpus: 76 quotations re-read out of the memo transcripts, doctrine and machine surfaces on every build — a quote not found where it claims to be fails the build, and 19 of the writing session's first attempts did fail it, mostly for dropping the sources' own emphasis
- Every count computed, never typed: 20 gen:stat markers — memo and doctrine counts from the manifest, decision counts from the change-control sources, the 41-against-1 excess from the register's own view, the arc's release span from the tags. The first build corrected four of the writer's own numbers, hours after the writer had read an audit about writers typing numbers
- Figures from the version their caption names: eight, including the insurance hub at v0.1.51 — preserved at its tag, believing the series was eight memos — beside the hub today, whose count is computed because believing turned out to be the wrong verb
- A coherent argument, not a compilation: memo 1 contradicts memo 0 and the contradiction is kept and answered; memo 6 corrects memo 3 in both documents; the audit's six defects are the closing chapter rather than an appendix
- The PDF reads start to finish offline — every figure a data URI, every URL that matters printed in full
- Anything the corpus does not prove. The book inherits all twenty of the insurance folder's does-not-prove entries and adds none of its own evidence: nothing described is insurance, nothing described is built, and no external fact has been gathered
- That the book's coherence is the corpus's. A book's job is the through-line, and a through-line is a choice — the five-part structure and the title are the writing session's, recorded as such in BRIEF.md
- That a second volume means the method scales: same harness, same gates, one writer, zero readers so far
- That anyone needed the book. The doctrine documents are shorter, the memos are primary, and the book's claim to exist is the argument between them — which is a claim about readers, tested by none yet
- quotes: 76/76 re-read out of the source they name on every build; a miss fails
- stats: 20 computed markers; a drifted count fails in check mode
- figures: past figures re-derive at their tag; fresh figures must match the live page, and the build fails when the site moves on — which it will, next release
- hashes: book.json records the SHA-256 of every chapter; captions: every figure says what to notice
One volume explaining what this site built, how it composes with RiskMandate.ai, and what none of it proves — 17 chapters in five parts, 14 figures each taken at the release tag its caption names, and 65 quotations re-read out of their sources on every build.
- This estate's habit applied to itself: the specification went up before the thing, and the thing was then checked against it — the brief and the book disagree about four numbers, and the book prints the repository's
- Time-travelled figures — each is taken from the release tag its caption names, by git worktree on a port used once, rather than photographed today and captioned as the past. Two gates: a past figure must re-derive from its tag, a present one must still match the live page or the build fails
- A provenance rule that forces every load-bearing claim to declare itself stated (a verbatim quote, re-read out of its source on every build — 65 of them) or drawn (the writing session's own reasoning, shown in the reader's view — 48 of them)
- A findings chapter computed rather than recalled: twelve places where this estate contradicts itself and seven it does not talk about, both sides of each quoted — including three current artefacts that break the estate's own load-bearing rules
- The harness published with the book, so any figure can be re-taken rather than believed, and any number re-derived rather than accepted
- That the estate it describes is trustworthy. The book's own centre of gravity is a register whose ten fixture records prove nothing and whose root is a fixture — a reader who finishes believing otherwise has read a book that failed
- That a participant's account can be neutral. The mitigations are real and are not independence: the strongest bias in such an account is not what it says but what it thinks to check, and there is no way for the writer to know what it did not think to run
- That the estate is mature enough to deserve a book — two environments, one agent, one mandate, a fixture root, and one outside reader in its entire history, whose single pass produced half the open contradictions in chapter 15
- That any of this is needed. Nobody outside the project has been asked, which the estate's own doctrine appendix rates a Phase I hole rather than a nice-to-have
- the quote gate — every one of the 65 quotations is re-read out of the source it names, and one not found there fails the build (it caught a conflated attribution during writing)
- two figure gates: a past figure must be re-derivable from its tag, a present one must still match the live page or the build fails — which it will, on the next release
- the hash gate — every chapter's SHA-256 in book.json must match its markdown, so a page cannot describe a chapter it did not render
- the caption gate — every figure must carry a caption saying what to notice, never merely what the image is of
A registry of capability primitives (verb × object × reach + reversible) and measured grants where a grant claim never travels alone: it points at the probe that established it, the date, the environment and the output, so a challenge is a rerun rather than an argument. A runner that emits findings/v1 in OpenSSF Scorecard's probe/finding shape plus reversibility and tier; seven profiles, two of them measured; grants public, mandates private.
- The probe as the unit of contribution — fourteen probes, twelve safe to run and two described and never run, each with the command and how to read it
- The grant is per tool, not per product — this container's shell and its fetch tool measured separately on 5 September, union and intersection reported
- A finding shape adopted, not minted — Scorecard's probe, message, outcome, remediation and location, plus the two fields this subject needs
- A row without evidence is visibly a claim — the five derived profiles say so on the page, the manifest and llms.txt
- An incident that demotes — the 26 August hook, claimed inline and shown to be a setting, as the first record
- The diff between two profiles, in the browser: the same assistant with confirmations on and off differs in one control
- Every profile drawn as a graph (graph.html): tools, the capability each reaches, the control on the path, and what it cannot reach
- A hook is a control on one tool — this container's code-host API tool writes to the repository by a path the clone's hooks never see (the harness evidence, self-reported)
- Independence. Every evidence file was produced by the environment it describes — the weakest tier the model has, and stated on every file
- Completeness. A self-run probe reports what the subject can see; a capability it does not know it has will not appear. A floor, not a census
- That a derived profile is true of any instance. Five of the seven are reasoned from what a surface architecturally is; no probe has been run on them
- That the primitive set is right: a starting set, wrong at the edges from the first week by its own admission
gen_probes.py: every probe establishes only capabilities that exist and every capability is established by at least one probe; every profile's union and intersection are recomputed from its tools' grants; a row at a measured tier must point at an evidence file holding a True finding for it; every irreversible capability has a reductionprobes/run.py validateon every evidence file: shape, ids, reversibility copied from the primitive, presence-only size- the site's key-leak tripwire, over the evidence files too
A self-assessment that runs in the browser: name your tools, the grant appears from measurements other people contributed, four questions about work produce the mandate, and the gap is rendered with the irreversible rows first and the reduction on the same screen. The verdict is a statement, not a grade; the tier is on the result; the counts-only tuple is shown and never sent.
- Value arrives at step three — before the visitor has typed anything about themselves
- The site cannot scan you, and says so — nothing leaves the tab; the measurement runs where the agent lives, and a
findings/v1file can be brought in - A falsifiable assessment — a surprise is an action outside the grant, so the surprise count is the validity test
- The reduction on the same screen as the gap, ticking one moves the verdict
- The assessment expires — dated, pinned to profile versions, stale when a vendor moves a default
- The public phrase is a sentence: every coined noun tested collided or needed explaining
- Anything about the visitor's environment. It matched profiles from answers, or read a file the visitor brought; it saw nothing itself
- That the gap is a loss. It is authorised, and most of it is harmless most days; the irreversible rows decide
- That the questionnaire is the mandate. Twelve purposes and ten exclusions are coarse; the full elicitation is an agent asking in the person's own words
- Calibration. No surprise count exists for any assessment made here; the validity test is stated, not passed
- the arithmetic is
app.jsand the rows are the profiles' — no number on the page is typed - the reductions gate in
gen_probes.py: every irreversible row in a gap has a way out - no endpoint exists: there is nothing on the page that can send
Named for the question a person has (working title guess the agent). A guessing game whose output is a measurement: cheap questions with obvious answers, ordinary decision-tree induction over a belief across the public profiles, a prediction step before the reveal, and the prediction gap with the reduction on one screen. Deterministic, in the browser, the path always shown, nothing sent.
- The burden inverted — fifteen questions people can actually answer, instead of an enumeration nobody can make
- The next question splits the belief most evenly, and answers update rather than prune; a wrong answer is recoverable
- The prediction step is the instrument — the gap between what was predicted and what the tree found is the finding
- The tree is public and self-tested — every profile placed from its own modal answers, the count derived at build
- The naming collision caught — a prediction gap, never a surprise
- An honest it hasn't met yours yet when no profile dominates, which is a finding rather than a failure
- Reach is a node (brief v0.33.65) — a mesh of reach nodes, environments, obligations and questions, one file each, typed by one ontology, compiled with gates; walk it in either direction
- Two question classes and a reliability per question — identifying questions never count toward the gap; a low-reliability answer barely moves the belief and fully counts toward it
- The gap collected throughout — per-capability disagreements with their reach node and reversibility, and the end-of-game prediction kept for the sense of scale
- The inspector: asserted, inferred and possible in three treatments never mixed, on by default; every row links to its source file
- Demo mode plays a profile's own modal answers step by step or end to end; the report puts a run on one page
- Build your own — a prompt pack an agent is pointed at: twelve rules that are not its to change, everything else its own; a plan first, then the build, as a folder under
guess/variants/
- Anything about the player's environment. It matched a profile from self-reported answers, the weakest tier available, and produced a hypothesis, not a measurement
- That the tree is right. Seven profiles, fifteen questions, probabilities estimated by the author on one day and answered by nobody yet
- That a small gap is safety. Predicting the grant correctly does not narrow it
- Anything at scale: no tuple has been submitted, and the aggregate is empty
- Calibration. Reliabilities and expected answers are the author's estimates until play data exists
gen_mesh.py: every edge's type is in the ontology and joins the node types it says; every id exists; every refine names a capability in the profile's union and a reach node; every question carries a class, a reliability and an expected answer for every profilegen_guess.py: every profile is placed by its own modal answers under the reliability-tempered update, or the build fails- the model-assisted fallback is deliberately absent: never a model in front of an arithmetic step
Synthetic readers
specifiedA programme that puts a page in front of an agent which receives pixels and nothing else — no text, no structure, no knowledge of the project — and watches where it goes.
- The screenshot boundary as an instrument rather than a limitation
- A patience budget set from outside the model, so abandonment is a measured event rather than a story the model tells about itself
- One run performed, with four defects already folded back into change control
- That synthetic readers can report preferences. They find defects; a preference from a simulated reader is not evidence and the programme says so
- That the findings generalise — one run, one archetype, one page
- That the simulation marker survives export, which is the rule most likely to be broken by accident
- the simulation marker in the filename, the headers, and beside every quote
- the page under test is authored before the run, so the model cannot be agreeing with itself
Putting something on the bench
Three requirements, and the third is the one that matters:
- Its own folder, its own code. An experiment that entangles itself with the site's other machinery cannot be retired, and retiring things is most of what a bench is for.
- An origin. A brief, or a dev-pack document. Something that says what question it was built to answer, so its result can disappoint.
- A
does_not_provelist, and gates. Both are mandatory inadmin/build/gen_bench.py, and the generator refuses to build without them.
Then add a dict to that generator and run it. The machine-readable index is
bench/llms.txt.