You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
rc5: adopt CIRISConstitution#112 (grammar as data) — verify's lowercase accord kinds, the single hardware vocabulary, minors at promotion, vector replay — and publish the operational-relief evidence row #691
Why. CIRISConstitution#112 (operator decision 2026-09-26) makes parsing and casing 100 % consistent before anything is built up. The CC half is merged on main (#113, #122): manifests/namespace_registry.json at 148 families with the grammar as data, one reference matcher (tools/cc_namespace_match.py), 962 replayed vectors, _meta.registry_sha256 as the pin. Persist's adopt is CIRISPersist#924 (pulled into v50). This is the server checklist from #112, plus one evidence row.
Checklist (from CIRISConstitution#112, server section):
Adopt verify's rc5 cut — InvocationKind serde/as_str lowercase (constitutional | notify | drill) under the domain label ciris.accord_invoke.v2; the old label fails loudly by design. accord.rs:1353's error text should assert against as_str(), not a literal. Cut-over precondition: no halt latched.
One hardware vocabulary — a test hardware_custody_vocabulary_single_source forbidding the literals TPM_2_0, SOFTWARE_ONLY, EXTERNAL_SECURE_ELEMENT, PKCS11, secure_enclave, platform-sealed anywhere outside ciris_keyring::HardwareType; verify-status emits HardwareType::as_platform() (the 13 snake_case hardware_custody:{platform} tokens) and drops key_storage_mode. hardware_class stays a JSON property (CC 4.2.2 mapping table; unlisted class ⇒ multiplier 0.0).
Minors — promote_owner_binding_to_federation refuses when the granter's age band is minor (CC 5.4.6: "announced" is the owner-binding at cohort_scope: federation; a minor's node never carries one); announce_bundle visibility flips only on promote.
Vector replay — conformance replays manifests/namespace_match_vectors.json (962) against whatever matcher the server uses; a matcher that admits Capacity:composite:v1 as open vocabulary, or consent:totally:new:v1, fails.
Evidence row (rc5 re-pin). CC re-pinned server at 046e1b3 today. One rc4 ruling row still has no symbol: 4.2.1.4 CLM-operational-relief — a node self-reports config:load on infra:attest with witness_relation: self; a root relieves via mesh_config; the relief expires (CIRISConstitution#96). Add the row naming the config:load self-report emitter and the mesh_config relief path in evidence/cc_impl.tsv; CC re-pins and it graduates. #536's 30 decimals and #537's fold rows remain the larger evidence asks.
Why. CIRISConstitution#112 (operator decision 2026-09-26) makes parsing and casing 100 % consistent before anything is built up. The CC half is merged on
main(#113, #122):manifests/namespace_registry.jsonat 148 families with the grammar as data, one reference matcher (tools/cc_namespace_match.py), 962 replayed vectors,_meta.registry_sha256as the pin. Persist's adopt is CIRISPersist#924 (pulled into v50). This is the server checklist from #112, plus one evidence row.Checklist (from CIRISConstitution#112, server section):
InvocationKindserde/as_strlowercase (constitutional | notify | drill) under the domain labelciris.accord_invoke.v2; the old label fails loudly by design.accord.rs:1353's error text should assert againstas_str(), not a literal. Cut-over precondition: no halt latched.hardware_custody_vocabulary_single_sourceforbidding the literalsTPM_2_0,SOFTWARE_ONLY,EXTERNAL_SECURE_ELEMENT,PKCS11,secure_enclave,platform-sealedanywhere outsideciris_keyring::HardwareType; verify-status emitsHardwareType::as_platform()(the 13 snake_casehardware_custody:{platform}tokens) and dropskey_storage_mode.hardware_classstays a JSON property (CC 4.2.2 mapping table; unlisted class ⇒ multiplier 0.0).promote_owner_binding_to_federationrefuses when the granter's age band isminor(CC 5.4.6: "announced" is the owner-binding atcohort_scope: federation; a minor's node never carries one);announce_bundlevisibility flips only on promote.manifests/namespace_match_vectors.json(962) against whatever matcher the server uses; a matcher that admitsCapacity:composite:v1as open vocabulary, orconsent:totally:new:v1, fails.main(a4d29a6,registry_sha256re-stamped) — not at any Conformance gap (scaling §1.4): trust-recursion-depth admission not enforced in any shipping artifact #113 intermediate head.Evidence row (rc5 re-pin). CC re-pinned server at
046e1b3today. One rc4 ruling row still has no symbol: 4.2.1.4CLM-operational-relief— a node self-reportsconfig:loadoninfra:attestwithwitness_relation: self; a root relieves viamesh_config; the relief expires (CIRISConstitution#96). Add the row naming theconfig:loadself-report emitter and themesh_configrelief path inevidence/cc_impl.tsv; CC re-pins and it graduates. #536's 30 decimals and #537's fold rows remain the larger evidence asks.Refs: CIRISConstitution#112, #113, #122, #96, #536, #537; CIRISPersist#924; CIRISVerify (companion issue filed today).