Skip to content

feat(uuid-v8): the profile C domain register and its check (ADR-008) - #1246

Merged
hyperpolymath merged 1 commit into
mainfrom
claude/new-session-th4e9w-domains
Oct 14, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
claude/new-session-th4e9w-domains

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

ADR-008 profile C requires a registered domain, but no register existed. The owner chose a single register in standards (2026-10-14), over per-repo declarations in each chora deed. This PR adds the register, its check, and the first entries.

Changes

  • docs/decisions/ADR-008-profile-c-domains.json: one JCS line (D306) of {domain, name, purpose, repos} entries.
    • name says in words what is hashed after domain:.
    • repos lists every repository that mints ids in that domain.
    • A domain shared by several repos is one registration.
  • scripts/check-uuid-v8-domains.sh [--registry FILE] [DOMAIN...] checks that:
    • the bytes are one line of printable ASCII with one final LF, equal to jq -cS . (which is JCS for this value shape);
    • the top level is exactly {domains, schema} with schema estate-uuid-v8-domains/1;
    • each entry is exactly {domain, name, purpose, repos};
    • each domain is printable ASCII without :;
    • each repos list is non-empty, sorted, unique, and in owner/repo form;
    • domains are strictly increasing, so none is registered twice.
  • Domain arguments: given DOMAIN arguments, the check fails on any that is unregistered. A repo that mints profile C ids runs it in CI against a pinned standards checkout.
  • scripts/tests/check-uuid-v8-domains-test.sh (auto-discovered by run-shell-test-suite.sh): 23 cases. The real register passes, and each planted defect fails for its own reason. Exit 2 is reserved for "could not run".
  • ADR-008 gains an amendment section that records the answer and the register.

First entries (from current code)

Domain Repos Hashed name
echidnabot-proof-obligation echidnabot JCS of {claim, context, prover, repo} (ProofObligationRecord.id)
gv-clade-index gv-clade-index github.com/<owner>/<name> (D320 amendment)
proof-goal echidnabot, proof-burrower JCS of the goal text as a JSON string
prove-result proof-burrower JCS of a prove result (ProofReceipt.result_id)
  • proof-goal is shared on purpose. echidnabot and proof-burrower compute the goal id identically today, and proof-burrower's ledger documents it as the cross-tool content address. Separate domains would break that identity.
  • No echidna domain. echidna has no content-id call site yet.
  • No berrywiki-import. It is left for berrywiki to register with its own name form; I have not read its code.

Verification

  • bash scripts/tests/check-uuid-v8-domains-test.sh: PASS=23 FAIL=0.
  • Mutants:
    • Replacing the ordering check with false fails 2 cases (a duplicate, and out-of-order domains).
    • Replacing the JCS cmp with false fails 2 cases (pretty-printed, and keys out of order).
  • ijson-jcs check (built from hyperpolymath/ijson-jcs 3a9a4ee) reports the register canonical. So does serde_json_canonicalizer.

🤖 Generated with Claude Code

https://claude.ai/code/session_019a95kk88TZ1iegsBK3kox3


Generated by Claude Code

Profile C requires a registered domain, but there was no register. The
owner chose a single register in standards (2026-10-14).

- docs/decisions/ADR-008-profile-c-domains.json: one JCS line of
  {domain, name, purpose, repos} entries. The first entries come from
  current code:
  - echidnabot-proof-obligation;
  - proof-goal, the cross-tool goal address that echidnabot and
    proof-burrower compute identically, so one registration covers both;
  - prove-result;
  - gv-clade-index, as ruled in D320.
- scripts/check-uuid-v8-domains.sh [--registry FILE] [DOMAIN...]
  validates the register: its bytes, its shape, the domain rule, and
  strict order so no domain is registered twice. Given domains, it fails
  on any that are unregistered, so a repository can gate its own domains
  in CI against a pinned standards checkout.
- scripts/tests/check-uuid-v8-domains-test.sh: 23 cases, each a planted
  defect failing for its own reason, plus the real register passing.
  Removing the order check, or the JCS comparison, fails the suite.
- ADR-008 gains an amendment section that records the answer and the
  register.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019a95kk88TZ1iegsBK3kox3
@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 26 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: cc9dbb5b-e725-4e28-b39b-96d35699765b
📥 Commits

Reviewing files that changed from the base of the PR and between 3daaad2 and 45d2675.

📒 Files selected for processing: 4
  • docs/decisions/ADR-008-profile-c-domains.json
  • docs/decisions/ADR-008-uuid-v8-estate-standard.adoc
  • scripts/check-uuid-v8-domains.sh
  • scripts/tests/check-uuid-v8-domains-test.sh
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

K9 contract conformance

run https://github.com/hyperpolymath/standards/actions/runs/38540931519

K9 normative contract typecheck

k9_contract.ncl typechecks

K9 contract self-test

== the bash mirrors cannot drift from the normative contract ==
ok   leash_levels mirrors k9_contract.ncl
ok   core_capabilities mirrors k9_contract.ncl
ok   contract_version mirrors k9_contract.ncl
ok   schema_major mirrors k9_contract.ncl
== capability arithmetic (§8) ==
ok   capability_ok fs.read accepted
ok   capability_ok rollback.apply accepted
ok   capability_ok x-acme.gpu.alloc accepted
ok   capability_ok x-acme rejected
ok   capability_ok x-.gpu rejected
ok   capability_ok fs.delete rejected
ok   capability_ok  rejected
== the extractor ==
ok   extracts pedigree.security.leash
ok   extracts pedigree.component_type
ok   extracts pedigree.metadata.name
ok   pedigree leash is not reported as top-level leash
ok   required_capabilities for a quiet component
ok   required_capabilities follows allow_network
== the envelope strip keeps line numbers (§3.6) ==
ok   line 1 becomes a comment
ok   line count is preserved
ok   schema_version stays on line 5
== L3: signature presence is not verification (§10) ==
ok   no verifier -> K9-C001 is SKIPPED, never a pass
ok   the skip states presence does not authorise 'Hunt
ok   verifier accepts -> verdict 'Verified, no K9-C001 finding
ok   verifier refuses -> K9-C001 error, verdict 'Rejected
== the fixture runner's attribution cannot be fooled by a filename ==
ok   every extracted finding is well-formed rule+layer
ok   the rule that really fired is attributed
ok   a rule named only in the filename is NOT attributed
ok   K9-C001 is present as a skipped finding
ok   and that same finding is NOT extractable as a rejection
== the dialect discriminator agrees with the coordination grammar (§4.3) ==
ok   magic file opening '---' is coordination
ok   magic file opening 'metadata:' is coordination
ok   plain file opening '---' is unclaimed
ok   plain file opening 'metadata:' is unclaimed
== no Nickel reserved word is used as an identifier ==
ok   the contract and all 27 fixtures avoid Nickel's reserved words

self-test: all assertions passed

K9 conformance fixtures

== positive controls (must pass) ==
ok   extension-capability.k9.ncl
ok   extension-fields.k9.ncl
ok   hunt-fully-granted.k9.ncl
ok   kennel-data.k9.ncl
ok   library-base.ncl
ok   yard-typed-config.k9.ncl

== negative controls (must fail, by the named rule) ==
ok   L0-K9-E001-bad-magic.k9.ncl (rejected by K9-E001 at L0)
ok   L0-K9-E002-nul-byte.k9.ncl (rejected by K9-E002 at L0)
ok   L0-K9-E003-crlf.k9.ncl (rejected by K9-E003 at L0)
ok   L0-K9-E004-no-spdx.k9.ncl (rejected by K9-E004 at L0)
ok   L0-K9-E005-unclaimed-body.k9.ncl (rejected by K9-E005 at L0)
ok   L0-K9-S012-library-with-pedigree.ncl (rejected by K9-S012 at L0)
ok   L0-K9-S014-stray-leash.ncl (rejected by K9-S014 at L0)
ok   L1-K9-S001-no-pedigree.k9.ncl (rejected by K9-S001 at L1)
ok   L1-K9-S002-wrong-major.k9.ncl (rejected by K9-S002 at L1)
ok   L1-K9-S003-todo-component-type.k9.ncl (rejected by K9-S003 at L1)
ok   L1-K9-S004-unknown-leash.k9.ncl (rejected by K9-S004 at L1)
ok   L1-K9-S005-missing-name.k9.ncl (rejected by K9-S005 at L1)
ok   L1-K9-S006-unknown-capability.k9.ncl (rejected by K9-S006 at L1)
ok   L1-K9-S007-ungranted-flag.k9.ncl (rejected by K9-S007 at L1)
ok   L1-K9-S008-hunt-signature-not-required.k9.ncl (rejected by K9-S008 at L1)
ok   L1-K9-S009-hunt-no-signature-block.k9.ncl (rejected by K9-S009 at L1)
ok   L1-K9-S010-hunt-empty-side-effects.k9.ncl (rejected by K9-S010 at L1)
ok   L1-K9-S011-recipes-at-yard.k9.ncl (rejected by K9-S011 at L1)
ok   L1-K9-S013-dangling-import.k9.ncl (rejected by K9-S013 at L1)
ok   L2-K9-N001-two-segment-version.k9.ncl (rejected by K9-N001 at L2)
ok   L2-K9-N001-wrong-field-type.k9.ncl (rejected by K9-N001 at L2)

fixtures: 6 positive, 21 negative (0 needing nickel), 0 failure(s)

K9 corpus conformance (L2)

[validate-k9] 14 conforming, 0 grandfathered (layer all, contract v1.0.0)

@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath marked this pull request as ready for review October 14, 2026 09:24
@hyperpolymath
hyperpolymath merged commit ae36881 into main Oct 14, 2026
66 checks passed
@hyperpolymath
hyperpolymath deleted the claude/new-session-th4e9w-domains branch October 14, 2026 09:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants