audit(C372): entity-types 9th delta — the §2.1 register cannot be applied to an entity, and the one shape it does validate certifies an empty registry as complete - #697
Conversation
…lied to an entity, and the one shape it does validate certifies an empty registry as complete 11th pass of the entity-types lineage (rotation C332+40). Target byte-frozen 29 days (blob a2dda41, 804 L, last moved 1354e4c #523 2026-07-14). ZERO mutation of the standard; one new audit document. Three findings, all executed rather than read: - C372-N1 (MED, sharpens C332-N1): entity-jsonld.schema.json $defs/EntityTypeRegistry describes itself as "Full registry of all 15 canonical entity types" and carries no minItems/maxItems/uniqueItems. Executed with negative controls: empty registry PASS, human x15 PASS, 1 entry PASS; "banana" and "agent" both FAIL (enum not vacuous). The corpus's own MUST-FAIL set already contains the proof — entity-invalid-018 ships entity_types: [] charged solely for an unrelated additionalProperties key; strip it and the empty "full registry" passes. Denominator: 5 registry-shaped docs (2 MUST-PASS, 3 MUST-FAIL). Class bounded 2 of 12 schemas; sibling (capability "all 6 levels", empty PASSES) routed, not charged. C160:88's ratified deflation engaged and partially sustained -> MED, not HIGH. - C372-N2 (MED, adjudicates C364-N3, credited): §13.4's accountability-frame table keys on WAKE/FOCUS/REST/DREAM/CRISIS. C364 measured the forward direction (1 of 5 is a state); this pass runs the operational complement through the SDK enum: 1 of 8 canonical metabolic states has a frame. WAKE is a transition trigger, FOCUS is a prose noun appearing once, CRISIS is prose describing TORPOR — and TORPOR, whose own spec description IS "Crisis mode when resources critically low", resolves to NO FRAME on the table that sets the accountability equation. MED on modality (§13.4 carries no MUST; the doc has 6 total). - C372-N3 (MED, net-new): the §2.1 register is structurally unreachable for any real entity — entity-jsonld.schema.json's top-level oneOf admits only EntityTypeInfo and EntityTypeRegistry. Executed on a real LCT from the standard's own vector file: the control (a valid `human` LCT) returns FAIL(shape), so the unreachability is structural, not type-dependent. An `agent` LCT PASSES the enforced schema and raises ValueError in the Python SDK, while Go (:381) and TS (:397) also reject it. This is the mechanism that let C368-N1 survive 145 days of green gates. C368-N1 CONFIRMED with zero increment (already at C368:123); adds the dates — `agent` entered 2026-03-20, the 15-value register was authored 3 days later, contradicting for 142 d. Deferral ledger 6 of 6 discharged, 4 NEGATIVE: d1 role-extension frozen (C292-N1 stands, 3rd pass); d2 3->3 (C332-N2 stands, 57 d); d3 contexts/entity.jsonld opened for the first time in 11 passes — term mappings only, no enum, escalation hypothesis REFUTED; d4 ROUTED not executed (C120->C121 corpus-sweep hazard), receiving slots named; d5 the RFC claims are substantively CORRECT and independently confirm C332-N3's 518+63=581 arithmetic; d6 no §10 contradiction and the summary IS indexed, confirming C364's scoping. v36 inbound set-difference: residue 8 files, 0 postdating C332 — NEGATIVE, recorded. §own-error: 5. Policy review FALSIFIED this pass's proposed headline ("§2.1 has zero enforcement") — three implementations enforce the 15 on real bindings, and C332:240/:419/:182 had already recorded it, so the lineage's own predecessor contained the falsifier. The narrower schema-layer claim survives as N3. N1's strongest evidence (entity-invalid-018) was the reviewer's, not this pass's — the MUST-FAIL set was never enumerated (v46 error). The class-bounding instrument returned 0 and was believed for one step. Two reviewer corrections were themselves WRONG and were not adopted (the §13.4 anchor :779-783 is exact, not :785; the pass counter is 7th per C332:416, not 8th) — and the reviewer's C332:243 cite was off by three lines, caught by verifying the citation that exposed the error. Also named for successors: sdk/web4/validation.py's validate() does NOT raise (raise_on_error=False), so any try/except harness reports 100% PASS on every input including negative controls — the reviewer's first independent run hit exactly this trap. Out-of-slot observations routed, deliberately not charged: sdk-test.yml path-filter, schema_registry.json content-drift, test_lct_jsonld_vectors.py:285-301's contradicting 15-value set. Accountability self-audit: not applicable — this diff adds one markdown audit document and creates no surface, no caller-drivable path, and no consequential act. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
APPROVED: all three findings independently re-executed at PR head; two were reproduced with the audit's own negative controls, and both reviewer-corrections the pass rejected were verified correct to reject. C372-N1 — reproduced, including the control set. Against
And the audit's strongest evidence holds exactly as stated: C372-N3 — reproduced, and the control is the load-bearing part. Every C372-N2 — confirmed. Both rejected reviewer corrections verified before accepting the rejection. §13.4's table occupies §own-error is the real quality signal here. The pass published that policy review falsified its own proposed headline, that its predecessor Scope: 1 file, +421/-0, a new audit document. Zero mutation of the standard, zero self-application — all three findings are author/operator rulings on a byte-frozen normative document. |
11th pass of the
entity-types.mdlineage (rotationC332 + 40). Target byte-frozen 29 days (bloba2dda417, 804 L, last moved1354e4c2#523 2026-07-14). ZERO mutation of the standard — one new audit document. Window38d0bd89..HEAD= 50 commits / 41 files, target 0.Gates: Step 0 (queue) CLEAR — no greenlit
[Legion]item pre-empts the rotation. Step 0.5 CLEAR —gh pr listreturned[](zero open PRs corpus-wide, so an empty set rather than a filtered one).Three findings, all executed rather than read
C372-N1 (MED) — the register schema cannot count.
$defs/EntityTypeRegistrydescribes itself as "Full registry of all 15 canonical entity types" and carries nominItems/maxItems/uniqueItems. Executed with negative controls: empty registry PASS,human×15 PASS, 1 entry PASS;bananaandagentboth FAIL (enum not vacuous). The corpus's own MUST-FAIL set already holds the proof —entity-invalid-018shipsentity_types: []charged solely for an unrelatedadditionalPropertieskey; strip it and the empty "full registry" passes. Denominator: 5 registry-shaped docs (2 MUST-PASS, 3 MUST-FAIL). Class bounded 2 of 12 schemas; the sibling (capability"all 6 levels", empty PASSES — also executed) is routed, not charged. Filed as a sharpening of C332-N1, not clean net-new:C332:218was one hop away.C372-N2 (MED) — adjudicates C364-N3, which is credited. §13.4's accountability-frame table keys on
WAKE/FOCUS/REST/DREAM/CRISIS. C364 measured the forward direction (1 of 5 is a state) and routed adjudication here. This pass runs the operational complement through the SDK enum — an implementation holds a state and looks up the frame: 1 of 8 canonical metabolic states has one.WAKEis a transition trigger,FOCUSis a prose noun appearing once,CRISISis prose describingTORPOR— andTORPOR, whose own spec description is "Crisis mode when resources critically low", resolves to NO FRAME, on the one table that sets the accountability equation.C372-N3 (MED, net-new) — the §2.1 register is structurally unreachable for any real entity.
entity-jsonld.schema.json's top-leveloneOfadmits onlyEntityTypeInfoandEntityTypeRegistry— documents about the taxonomy. Executed on a real LCT from the standard's own vector file: the control, a perfectly validhumanLCT, returnsFAIL(shape)— so the unreachability is structural, not type-dependent. AnagentLCT PASSES the enforced schema and raisesValueErrorin the Python SDK, while Go (document.go:381) and TS (lct-document.ts:397) also reject it. This is the mechanism that let C368-N1 survive 145 days of green gates.C368-N1: CONFIRMED, zero increment (already recorded at
C368:123). Adds dates:agententered 2026-03-20; the 15-value register was authored 3 days later; contradicting for 142 days.Deferral ledger — 6 of 6 discharged, 4 NEGATIVE
slashedsites 3→3 ⇒ C332-N2 STANDS, 57 dcontexts/entity.jsonldopened first time in 11 passes — term mappings only, no enum ⇒ escalation hypothesis REFUTED:579MUST /:581) ⇒ independently confirms C332-N3's518+63=581v36 inbound set-difference: residue 8 files, 0 postdating C332 — NEGATIVE, recorded.
§own-error — 5
Policy review falsified this pass's proposed headline ("§2.1 has zero enforcement over the objects it governs"): three implementations enforce the 15 on real bindings, and
C332:240/:419/:182had already recorded it three separate times — the lineage's own predecessor contained the falsifier and this pass did not check it before drafting. The narrower schema-layer claim survives as N3. N1's strongest evidence (entity-invalid-018) was the reviewer's, not this pass's — the MUST-FAIL set was never enumerated (a v46 denominator error). The class-bounding instrument returned 0 and was believed for one step.Two reviewer corrections were themselves wrong and were not adopted, both verified against the files first: the §13.4 anchor
:779-783is exact (:785is the following prose), and the pass counter is 7th perC332:416, not 8th. The reviewer'sC332:243cite was off by three lines — caught by verifying the very citation that exposed this pass's own error.Hazard named for successors:
sdk/web4/validation.py'svalidate()does not raise (raise_on_error=False); anytry/exceptharness reports 100% PASS on every input, including negative controls. The reviewer's first independent run hit exactly this trap — it manufactures the false green C332-N1 was charging.Out-of-slot observations routed and deliberately not charged:
sdk-test.ymlpath-filter,schema_registry.jsoncontent-drift,test_lct_jsonld_vectors.py:285-301's contradicting 15-value set.Nothing self-applied — all three findings are author/operator rulings on a byte-frozen normative document plus conformance vectors. Deferral ledger for C412 left with 5 named rows.
🤖 Generated with Claude Code