audit(C396): presence-protocol 10th delta — the §7-bound directory tells implementers the vectors bind every tool's output; they bind six of eight, and the two they miss are the credential pair - #720
Merged
Conversation
…lls implementers the vectors bind every tool's output; they bind six of eight, and the two they miss are the credential pair Tenth delta on a target byte-frozen 53 days (blob 6414a7f, 722 L). Window 360c366..HEAD = 28 commits, 0 touching any of the 19 non-audit presence artifacts — seventh consecutive fire with both delta halves empty. C356's pre-registered regression set holds 4 of 4 (format 14, pattern 6, $vocabulary 0, sole non-conformance line). Zero mutation of web4-standard/. Ten passes asked of the vector file "do its shapeMatchesSchema refs resolve?" and got a correct answer every time. This pass ran it backwards. All 7 distinct targets resolve, but of the 8 tools only 6 have their own output schema as an assertion target: hestia_vault_get is bound twice and both times to error_envelope, hestia_vault_set to nothing at all (a bare setup node with expect:{}). Neither vault $id occurs in the vector file. N1 (MED) is not that coverage gap — C372:411-412 already ratified "coverage != defect", and the first headline died to it in policy review. The finding is one rung down: schemas/presence-protocol/README.md:69-71 asserts the vectors "bind each tool's output ... via shapeMatchesSchema", a universal that is false for 2 of 8, in the section an implementer reads to learn what validation exists, inside a directory §7 declares normatively binding. The same document discloses vector-absence at :63-65 and ships a known-gap ledger at :44-45 — so this is an internal contradiction, not an undisclosed gap, and charging it is not charging the disclosure discipline. Consequence, executed rather than asserted: a vault_get reply carrying allowed_consumers+scope beside the secret FAILS the normative schema and PASSES every vector, so §7 item 1 and item 5 diverge. Severity is MED because the false universal has already been consumed as a warrant — C378:276 verified the operand (12 occurrences) and never the population (8 tools). Routed, not re-adjudicated: C378's decline rests on five grounds and is scoped to its locus. N2 (LOW, routed out) sets that consequence: shapeMatchesSchema has 0 of 3 executors among the runners that consume this file. Only the TypeScript runner declares the field (conformance.test.ts:45) and nothing reads it; none carries a JSON-Schema dependency. All three execute fieldChecks only. I-1/I-2: three sites overstate this tree's coverage (C160:97 "14" for 12 shape sites — the scenario count, which asserts a 1:1 coverage the two resources/read scenarios break; C127:108 "13"; and testing/conformance/ README.md:15 "10" for 14 scenarios, stale since ac9de27 and invisible to every filename sweep in ten passes). It surfaced only because the tree-crossing residue recovered 4 orphan files a filename sweep cannot reach — C356's empty artifact-token residue was true of the sweep it ran. Five candidates refuted or declined, including this pass's own first headline and the P0-007->v1 shape, which is ratified (C88-3 charged the opposite polarity, C89 repointed, C127/C160 confirmed) and was killed by the novelty matcher before it reached review. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Owner
Author
|
APPROVED: every load-bearing claim re-measured at this head, independently.
Doc-only: 1 new file under |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Slot: C396 (= C356 + 40). Doc-only: 1 new file,
docs/audits/C396-presence-protocol-10th-delta-2026-08-15.md. ZERO mutation ofweb4-standard/.Baseline
Target byte-frozen 53 days (blob
6414a7fe, 722 L, last touched0beb1b93/C89). The vector file is frozen at the same commit. Window360c3660..HEAD= 28 commits, 0 touching any of the 19 non-audit presence artifacts — seventh consecutive fire with both delta halves empty.C356's pre-registered regression set holds 4 of 4:
format= 14 (11uuid+ 3date-time),pattern= 6,$vocabulary= 0, README non-conformance rule still the corpus's only one. C356-N1 neither remedied nor regressed.Carries: C127-1 STILL OPEN; C198 B.2 trigger not fired; consumer gate NEGATIVE, 9th time; C316's routed N1 stays discharged by C342 and is not re-reported.
The question, run backwards
Ten passes asked of the vector file "do its
shapeMatchesSchemarefs resolve?" — and got a correct answer every time. This pass ran the complement. All 7 distinct targets resolve ($idand JSON-Pointer fragment), but of the 8 tools only 6 have their own output schema as an assertion target:$id$id(ratified — C89)hestia_vault_geterror_envelopehestia_vault_setsetupnode,expect: {}Neither vault
$idoccurs anywhere in the vector file (grep -c= 0). By schema: 9 of 12 reachable, 3 not, two of the three being the credential pair.N1 (MED) — and why the coverage gap is not it
C372:411-412already ratified "coverage ≠ defect, per v43", and this pass's first headline died to it in policy review. The finding is one rung down.schemas/presence-protocol/README.md:69-71asserts the vectors "bind each tool's output to the$idURLs above viashapeMatchesSchema" — a universal that is false for 2 of 8, in the## Validationsection an implementer reads to learn what coverage exists, inside a directory §7 declares "normatively bound … not only the vectors JSON."This is not an undisclosed gap, so it is not charging the project's disclosure discipline: the same document discloses vector-absence at
:63-65, ships a four-item known-gap ledger at:44-45, and self-discloses the absent validator at:72-74. It is an internal contradiction.Consequence — executed, not asserted (
jsonschema4.26.0,Draft202012Validator, scope published per C163):Both schemas are sound — the gap is assertion-side. A daemon leaking credential metadata alongside the secret fails §7 item 1 and passes §7 item 5. The closure does real work that no vector invokes, and
:71tells the implementer otherwise.MED because the false universal has already been consumed as a warrant.
C378:276(registries, 2026-08-13) declined a finding partly on it, verifying the operand (12 occurrences) and never the population (8 tools) — v55. Routed, not re-adjudicated: C378's decline rests on five independent grounds and is scoped to its locus (v51).Fix shape is ratified and cheap — the one C128 applied to C127-1. Routed, not applied.
N2 (LOW, routed OUT) — the named mechanism has no executor
shapeMatchesSchemahas 0 of 3 executors among the conformance runners that load this exact vector file. Only the TypeScript runner names it (conformance.test.ts:45, an optional interface field read by nothing); Python and Rust have no occurrence; none carries a JSON-Schema dependency. All three executefieldChecks(+ordering) only. Not presence's to fix — it sets N1's consequence.I-1 / I-2 — instrument
Three sites overstate this tree's coverage:
C160:97"14" for 12 shape sites (14 is the scenario count — asserting a 1:1 coverage that P0-009/P0-010 break, in the audit verifying C127-1's remediation);C127:108"13" (12); andtesting/conformance/README.md:15"10" for 14 scenarios — stale and datable (0405999dpredatesac9de279, where P1-004 landed).That third site is in one of 4 orphan files the tree-crossing residue recovered, which no filename sweep in ten passes could reach. C356's empty artifact-token residue was true of the sweep it ran.
Refuted / declined (5)
Including this pass's own first headline, and P0-007→v1, which is ratified (C88-3 charged the opposite polarity → C89 repointed → C127 mechanically confirmed → C160 listed it intentional) and was killed by the novelty matcher before review. Also declined: the
approvalTokenprobe (C160:95, ratified non-defect) and "no in-repo validator" (corrected —testing/validator/exists; true only when scoped to the presence schemas).Protocol
v2 followed. Step 0 queue: nothing greenlit for this track. Step 0.5: no open PR carries this track's branch prefix. Policy review returned REVISE and falsified the headline framing — the 7th consecutive pass in which review moved a central premise. Ten of its corrections were adopted; every locus it cited was independently re-resolved before adoption (one off-by-one found and fixed).
🤖 Generated with Claude Code