spec: seed the 4.3 cycle with the covenant seal's carriage repair (#80) - #81
Merged
Nicholas-Keystate merged 1 commit intoAug 27, 2026
Conversation
…cholas-Keystate#80) The covenant seal is carried as the substrate's typed seal with a reserved type value (§10 L2016-2023, ruled R17.1). The substrate's typed seal types the digest's derivation, not the commitment's meaning; the covenant seal's digest is an ordinary SAID, so the type field has nothing to say. §17 L3214-3219 places the reserved value in "the typed seal structure's type table, externally stewarded" — a table that does not exist in either the CESR or KERI corpus. The seed moves the type off the seal and onto the committed governance event the seal resolves to, which is where the substrate puts it (an untyped event seal anchors a TEL event whose own type field names the act). Layers 2 and 3 of R17's split are untouched. No ratified bytes are altered. verify_kernel.py 7/7. Signed-off-by: Daniel Hardman <daniel.hardman@gmail.com>
Nicholas-Keystate
added a commit
that referenced
this pull request
Aug 27, 2026
…uperseded, and the uniformity law R17.1's carriage limb is superseded on finding #80's three limbs (wrong axis typed; type field read as protocol primitive; reservation into a table that does not exist — the third falsifies committed text at §17 L3214-3219). Layers 2 and 3 of R17's split stand as ruled and ratified. The repair seed (PR #81) is adopted as drafting input: the covenant commits as an event of Custos-defined type in the designated governance event log, anchored by the substrate's ordinary seal; the naming discipline restates one dereference out; §17's seal-type reservation is struck at the successor edition; the event's type value is chartered to the encoding round (#57). The uniformity law enters the ruling: a seal never names governance meaning — the committed event it resolves to does; one rule, all strata. Spec text executes at 4.3.
Nicholas-Keystate
added a commit
that referenced
this pull request
Aug 27, 2026
The merge obligation from the #91 review: the seed (merged at #81, hours before the block-line check landed) was the one 4.3-and-later file failing the new discipline — 80-column wrapped, its header pin splitting the ratified sha256 across a line boundary, finding #90's defect reproduced live. Reflowed under the check's own proof: the marker-aware whitespace-normalized diff against the pre-reflow bytes is empty — no text altered, carriage only.
Nicholas-Keystate
added a commit
that referenced
this pull request
Aug 27, 2026
…the #81 seed reflow Merged on the substance review: the checker's semantics verified, the reflow-provability claim mechanical, the separation discipline correct (locator carriage held on the clean-root decision, dfn withdrawn pending a term test). The live exhibit: the covenant-seal seed merged today failed the check on arrival — finding #90 self-demonstrating — and is reflowed in this merge under the whitespace-normalized-diff proof. verify.yml carries both new discipline steps.
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.
Seeds the 4.3 cycle with a repair for finding #80. No ratified bytes are altered — this adds one unpinned seed document under
spec/, in the shape PR #26 established.tools/verify_kernel.pypasses 7/7.Addresses #80 without closing it. R17.1 ruled the carriage this seed replaces, so the discharge is a superseding ruling and not this merge; the seed is that ruling's input. #80 closes when the drafting authority disposes of it.
Where the finding came from
Samuel Smith told Daniel on a call, 2026-08-18, that Custos uses KERI's type seals in the wrong way — the type field distinguishes how a seal's digest is derived, not what the seal means. The remark is oral, paraphrased, and Sam has not reviewed either the issue or this seed. The three limbs below are this repository's own work against published bytes, verified 2026-08-18 against upstream main: KERI spec
71cb54e, CESR spec7a6adca, keripy7da1e64a1.The three limbs
The seal types the wrong axis.
tanswers "what procedure verifies this digest." The hash algorithm is already carried by the CESR code ofd;tcarries the derivation above it, and the substrate's only worked example is the Merkle-tree family, where the type decides how an inclusion proof is checked (spec-body.md:515). The covenant seal'sdis an ordinary SAID of a clause set, derived the ordinary way — nothing about its derivation fortto say. Under the substrate's own reading the honest value names an ordinary digest, which makes the typed seal a digest seal with a decorative field.The implementation reads
tas a protocol identifier. keripy types the field as aVerser(structing.py:67-71, "t = type of digest as (Verser)";coring.py:2451), a protocol-plus-version primitive whose four-character head is drawn fromProtocols = Protocolage(keri="KERI", acdc="ACDC")(kering.py:21). A Custos value there is an application to join the substrate's protocol table — larger than allocating a seal type, and still not commitment semantics.There is no type table to reserve in. This is the limb that falsifies committed text. §17 L3214-3219 places the reserved value "in a namespace of the same kind" as the CESR genus, "the typed seal structure's type table, externally stewarded." The two are not of a kind. CESR's genus namespace is specified, sized and built for other protocol stacks (
spec-body.md:607,:615). The seal-type namespace has no table:CSMToccurs zero times in the CESR spec, and in the KERI spec only as an illustrative value at:518/:520. What CESR registers is the count code that frames the couple (:933) — the frame is allocated, the namespace it frames is not. §17 states a recognition question with no addressee.The repair
Move the type off the seal and onto the artifact the seal commits to.
The substrate's own precedent is exact. A credential issuance is anchored by an untyped event seal (
vdr/eventing.py:337); whether the anchored act is a registry inception, an issuance or a revocation is read off the anchored event's type field (vcp,iss,rev—kering.py:360). Nobody proposed a revocation seal type, because the seal was never where the kind was written.So: the covenant is committed as an event of a Custos-defined type in the domain's designated governance event log, anchored by an ordinary source or event seal. This standard is better positioned for that shape than the substrate is — the sealed set is already clause identifiers into the designated GEL, and R15 already makes which registry that is a committed fact. The type then lives in a table this standard stewards: no reservation, no recognition question, no dependency on another project's custodians. The absorption KN-14 asked for becomes real, not because a value was reserved in someone else's namespace but because nothing needed to be.
Layers 2 and 3 of R17's split are untouched and deliberately not restated. §17's seal-type sentence is struck, leaving the genus reservation standing on its own terms (disposed at #45).
The naming discipline, and the one real cost
§10's discipline — consumers must not infer commitment semantics from context — is preserved one dereference out: the committed event names its kind in a field a consumer reads after resolving the seal. Not a weakening. A consumer that cannot resolve the event holds no clause set, no law head and no candidate successor, so it has nothing to fold; the class losing wire-visible discrimination is exactly the class that could never have acted on it.
The cost is confessed rather than argued away: a consumer holding the seal alone can no longer tell the commitment is a covenant.
One apparent cost is a gain. §10 claimed a typed seal with a reserved value lets "a governance-blind consumer parse the seal unharmed." The opposite is nearer the truth — an ordinary source seal is parsed by every conforming implementation, while an unrecognized type value is precisely what a fail-loud parser is entitled to reject, which §17 elsewhere praises the substrate for doing. The colorless base is better served by the ordinary seal.
What the seed leaves open
The covenant event's type value is not minted here. The repair moves the naming problem rather than dissolving it, and minting the value would legislate a decision surface the encoding round owns — the same reason R17's own seed declined to name a reserved seal type. It routes to #57.
R17's digest-precedence station obligation must be re-expressed in the governance-event form, or the corpus meant to discriminate against this defect will encode it.
Relates to #77 (the 4.3 docket — this is founding-input material), #57, #45.