Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
2b4105a
feat(evidence): implement version one runtime
jeremi Aug 2, 2026
ed7ccec
feat(evidence): add requester-scoped discovery
jeremi Aug 2, 2026
99884bc
feat(mint): issue short-lived tokens to registered clients
jeremi Aug 2, 2026
00b4604
wip(evidence): version one closeout in progress
jeremi Aug 2, 2026
60ae00a
feat(mint): issue delegated tokens bound to one subject
jeremi Aug 2, 2026
0a8fe38
merge: delegated, subject-bound tokens in Mint
jeremi Aug 2, 2026
b2e2822
fix(mint): carry requestNonce in the delegation test and demo
jeremi Aug 2, 2026
52cfb58
feat(mint): obtain a development token from the client side
jeremi Aug 2, 2026
ad8fc50
docs(mint): diagram the delegated evidence flow
jeremi Aug 2, 2026
6e44d42
feat(evidence): serve the generated OpenAPI document
jeremi Aug 2, 2026
06a209f
docs(evidence): bound version one delegation against the deferred pro…
jeremi Aug 2, 2026
a1a3c58
merge: bring Mint and Evidence work onto v0.16.3
jeremi Aug 2, 2026
76f97da
feat(evidence): land version one runtime and professional-licence def…
jeremi Aug 2, 2026
0048fcc
Merge branch 'temp-merge-up'
jeremi Aug 2, 2026
3dd4b0b
feat(evidence): add SD-JWT VC response format
jeremi Aug 2, 2026
16399dd
fix(mint): construct EvidenceRequest with the SD-JWT holder key field
jeremi Aug 2, 2026
a3f6bb3
docs(evidence): print each command the SD-JWT VC demo runs
jeremi Aug 2, 2026
6f4bcc8
feat(evidence): accept an omitted expires_in and remove URL credentials
jeremi Aug 2, 2026
121e0ba
docs(evidence): document the metrics listener series and labels
jeremi Aug 2, 2026
3f4ad32
docs(evidence): state that a private metrics bind is a floor, not a b…
jeremi Aug 2, 2026
f74c243
feat(evidence): add evidencectl adopter tooling
jeremi Aug 2, 2026
2495877
docs(evidence): document evidencectl in repo and product guidance
jeremi Aug 2, 2026
e002a9a
style(evidence): reformat reference deployment YAML for editability
jeremi Aug 2, 2026
5f64824
feat(evidencectl): reject NUL bytes in generated secret material
jeremi Aug 2, 2026
5c4245f
style(evidence): expand remaining inline YAML in the reference bundle
jeremi Aug 2, 2026
2ed6425
perf(evidence): commit audit appends in groups to sustain 1000 req/s
jeremi Aug 2, 2026
eb182f2
fix(evidence): validate deployment secret material in check
jeremi Aug 2, 2026
7e6fe35
feat(evidence): add a compose deployment for the adopter images
jeremi Aug 2, 2026
f69040d
docs(evidence): route compose traffic on readiness, not liveness
jeremi Aug 2, 2026
8927af5
feat: add distroless adopter and development images for mint and evid…
jeremi Aug 2, 2026
1d48796
feat(evidence): declare source response shapes and add get_path
jeremi Aug 2, 2026
a177f42
Merge commit '8927af5f' into feat/evidence-source-response-schema
jeremi Aug 2, 2026
3a3c24a
docs: add Notary retirement and Evidence onboarding plan, DoD, and /goal
jeremi Aug 2, 2026
0feb5bd
feat(evidence): add a curl | bash installer for the Evidence toolset
jeremi Aug 2, 2026
75f8c63
feat(release): ship the Evidence toolset through the release channel
jeremi Aug 2, 2026
cf43ffd
docs(evidence): document how adopters install the Evidence toolset
jeremi Aug 2, 2026
a816db5
docs: record that root CI already drift-checks the Evidence OpenAPI
jeremi Aug 2, 2026
3d37764
fix(evidence): stop response schemas requiring leaves projection may …
jeremi Aug 2, 2026
30b1537
feat(release): build the Evidence toolset for the optional platforms
jeremi Aug 2, 2026
155af8c
docs(evidence): record group commit as implemented in PERFORMANCE.md
jeremi Aug 2, 2026
3338a43
docs(site): add the Evidence onboarding content surface
jeremi Aug 3, 2026
6442396
docs(evidence): quote the fixture placeholder in the operator contract
jeremi Aug 3, 2026
cd3b5bf
docs(site): wire the Registry Evidence product into the site plumbing
jeremi Aug 3, 2026
0b7fa09
docs: tick B1, B3, B7, F6, F7 and record the docs-wave status
jeremi Aug 3, 2026
ff508f8
docs(evidence): use straight quotes in the operator contract lead
jeremi Aug 3, 2026
e70fe07
fix(evidence): remove eight adopter frictions found writing the tutorial
jeremi Aug 3, 2026
3f12260
feat(docs): add the Evidence tutorial gate
jeremi Aug 3, 2026
0d9ce4a
feat(ci): run the Evidence tutorials from a clean container
jeremi Aug 3, 2026
c7c1d4d
docs(site): add the move-Evidence-to-production-signing tutorial
jeremi Aug 3, 2026
6c40e6f
docs: tick B4 and B6 and record the tutorial-gate design
jeremi Aug 3, 2026
b5b2e24
docs: record the A1 token-topology outcome
jeremi Aug 3, 2026
ae45e89
fix(evidencectl): keep zero bytes out of test-provisioned secrets
jeremi Aug 3, 2026
6163b1a
feat(evidencectl): suggest source configuration from an OpenAPI document
jeremi Aug 3, 2026
329a526
test(evidence): prove a signed assertion over a Relay-shaped source
jeremi Aug 3, 2026
91c5726
Merge branch 'evidencectl/source-suggest'
jeremi Aug 3, 2026
1f2390f
wip(evidence): commit in-flight work set aside for the worktree merge
jeremi Aug 3, 2026
b2ef9ad
Revert "wip(evidence): commit in-flight work set aside for the worktr…
jeremi Aug 3, 2026
f931803
docs(site): state the exact immutability refusal wording in tutorials
jeremi Aug 3, 2026
6abe314
Merge branch 'fix/evidence-adopter-friction'
jeremi Aug 3, 2026
5750cb9
fix(evidencectl): make the evidence binary resolver crate-visible
jeremi Aug 3, 2026
44897ef
fix(evidencectl): dispatch the source suggest command from the binary
jeremi Aug 3, 2026
3b8b94d
fix(evidencectl): correct the bounds and quoting the suggest draft emits
jeremi Aug 3, 2026
7f512c2
feat(evidence): add a protected-read reference deployment project
jeremi Aug 3, 2026
7e1f90c
docs(site): correct the first-assertion tutorial against the shipped …
jeremi Aug 3, 2026
1b1fcae
fix(evidencectl): read real-world OpenAPI documents in source suggest
jeremi Aug 3, 2026
866564d
docs(site): run the Evidence tutorial gate over a registry of tutorials
jeremi Aug 3, 2026
08e7c1e
ci: keep Evidence tutorial routing in step with the gate's registry
jeremi Aug 3, 2026
fb2a58b
feat(evidencectl): fetch the OpenAPI document for source suggest from…
jeremi Aug 3, 2026
b18214a
docs(evidence): note the URL form of source suggest --openapi
jeremi Aug 3, 2026
5221470
fix(evidence): name why the audit boundary refused to start
jeremi Aug 3, 2026
d30b5c5
feat(evidencectl): report every artifact mode the runtime will refuse
jeremi Aug 3, 2026
d185d53
fix(evidence): name an unreachable access-token issuer and keep servi…
jeremi Aug 3, 2026
535dd95
Merge branch 'fix/evidencectl-suggest-real-specs'
jeremi Aug 3, 2026
6a034b9
Merge branch 'fix/evidence-adopter-friction'
jeremi Aug 3, 2026
ecf0007
docs(evidence): add the acceptance-definition authoring tutorial
jeremi Aug 3, 2026
a21ffb5
docs(evidence): add the institution-source connection tutorial
jeremi Aug 3, 2026
6c4b615
ci: route the two new Evidence tutorials to the gate that replays them
jeremi Aug 3, 2026
40dffd7
fix(docs): restore the docs site check for the Evidence surface
jeremi Aug 3, 2026
4b74423
docs(evidence): point tutorial readers at evidencectl doctor
jeremi Aug 3, 2026
602deb4
docs(evidence): teach the real response-schema defect in the source t…
jeremi Aug 3, 2026
a0bfc98
docs(evidence): cover $ref cycles in the source connection tutorial
jeremi Aug 3, 2026
cc30693
docs(site): label every tutorial with whose it is
jeremi Aug 3, 2026
9c07f07
ci: bind the adopter image to the Debian 13 boundary
jeremi Aug 3, 2026
81d3cc6
docs(evidence): add the served-assertion tutorial
jeremi Aug 3, 2026
51c13ae
docs(evidence): add the consumer verification tutorial
jeremi Aug 3, 2026
147940a
docs(mint): diagram the client, Mint, and Evidence round trip
jeremi Aug 3, 2026
8276f0a
docs(site): make the Evidence tutorial track traversable
jeremi Aug 3, 2026
8d8af89
docs(site): present two doors on when-to-use
jeremi Aug 3, 2026
9567795
docs(mint): show how to request a token from application code
jeremi Aug 3, 2026
5a19906
docs(evidence): say what each generated key is for
jeremi Aug 3, 2026
8e52f7b
docs(site): give Evidence a front door and a quickstart
jeremi Aug 3, 2026
a14552c
docs: record Notary retirement decision
jeremi Aug 3, 2026
d1672d6
docs(plan): record D1, the composed Relay, Mint, and Evidence demo
jeremi Aug 3, 2026
63c51c3
refactor(registryctl): remove Notary tooling
jeremi Aug 3, 2026
e6fad1f
fix(ci): expect Evidence contracts in Rust result
jeremi Aug 3, 2026
cb8ae93
docs(evidence): rewrite the Solmara Lab first run against the compose…
jeremi Aug 3, 2026
5544636
refactor(release): retire Notary release surface
jeremi Aug 3, 2026
d15e991
docs: present Relay and Evidence as maintained products
jeremi Aug 3, 2026
aad4b27
refactor(notary): remove retired product
jeremi Aug 3, 2026
57820af
docs(evidence): end the onboarding spine on Evidence over a Relay API
jeremi Aug 3, 2026
9cb8f27
ci: retire Notary gates
jeremi Aug 3, 2026
e9543ca
refactor(platform): remove orphaned Notary primitives
jeremi Aug 3, 2026
4b6d7bb
merge: integrate completed Evidence onboarding
jeremi Aug 3, 2026
04202b6
docs(evidence): rewrite the heavy pages around Relay, Evidence, and Mint
jeremi Aug 3, 2026
188ce08
docs: remove retired Notary product surface
jeremi Aug 3, 2026
b9189d6
docs(evidence): redraw the two diagrams E1 left orphaned
jeremi Aug 3, 2026
d82269c
merge: integrate the Notary retirement branch
jeremi Aug 3, 2026
f9a2dc4
chore(release): drop the external integration retirement guard
jeremi Aug 3, 2026
a9f74aa
docs(plan): record the post-merge review decisions and open C9 and C10
jeremi Aug 3, 2026
5ef5c21
chore(ci): drop dangling Notary coverage flags and secret-scan allowl…
jeremi Aug 3, 2026
e67ac12
docs(release): retire the Notary release evidence and repin its perma…
jeremi Aug 3, 2026
00696bf
test(relay): restore real-loader coverage for the maintained examples
jeremi Aug 3, 2026
7715962
docs(relay): repoint a recovery claim at a test file that still exists
jeremi Aug 3, 2026
9989a5e
docs(site): clear the Notary data residue the deletion cascade left b…
jeremi Aug 3, 2026
7654bac
fix(registryctl): refuse pre-retirement approved baseline sets
jeremi Aug 3, 2026
5cb3abb
docs(site): state the approved-set 2.0 bump and the re-approval requi…
jeremi Aug 3, 2026
191aa29
docs(crates): record why the retired Notary names stay parseable
jeremi Aug 3, 2026
a8ff00d
docs(plan): open C11 for the registryctl schema versions the retireme…
jeremi Aug 3, 2026
1495c15
refactor(crates): delete the callerless Notary platform API
jeremi Aug 3, 2026
96ee82e
docs(site): drop the OID4VCI standards row with the retired product
jeremi Aug 3, 2026
5913efe
fix(registryctl): bump the schema versions the retirement changed
jeremi Aug 3, 2026
af40e1b
fix(registryctl): repair registryctl dev for claim-free projects
jeremi Aug 3, 2026
de2fe83
docs(site): finish the light-touch Notary pass and drop its waiver set
jeremi Aug 3, 2026
c2dcc71
docs(site): stop naming Registry Notary on the current product surface
jeremi Aug 4, 2026
9e67369
test(release): assert a real source read in the Relay conformance smoke
jeremi Aug 4, 2026
cc02706
feat(manifest): retarget evidence offering access from Notary to Evid…
jeremi Aug 4, 2026
060f2ad
docs(manifest): describe evidence offering access instead of federation
jeremi Aug 4, 2026
1455511
docs(site): restate RS-DM-MANIFEST-010 around registry-evidence access
jeremi Aug 4, 2026
316de0c
style(manifest): satisfy rustfmt in the evidence access tests
jeremi Aug 4, 2026
ccb0cc3
docs(relay): rewrite crate docs around Relay and Evidence
jeremi Aug 4, 2026
44887b3
docs: drop retired-product references from published product docs
jeremi Aug 4, 2026
8939e47
test(docs): hold the mirrored crate docs to the Notary surface rule
jeremi Aug 4, 2026
eeea74f
docs(plan): record the tutorial gate results and tick G3
jeremi Aug 4, 2026
cf0c5fc
docs(plan): record security review notes and tick G5
jeremi Aug 4, 2026
8ab8420
test(evidence): name the response-shape canary for what it is
jeremi Aug 4, 2026
f0e1527
fix(docs): replay Evidence tutorial edits without an interpreter
jeremi Aug 4, 2026
92538a9
docs: re-tick G3 on the container replay that proves it
jeremi Aug 4, 2026
62025b1
fix(relay): accept the conforms_to format diff and pin why
jeremi Aug 4, 2026
85b45d2
fix(mint): make the demonstration's TLS front behave like an ingress
jeremi Aug 4, 2026
85c825d
refactor(relay): give the v3 baseline its own validator
jeremi Aug 4, 2026
f4df34d
test(release): pin the builder image at both ends and sharpen two ass…
jeremi Aug 4, 2026
6d7b1df
fix(release): record one retired diagnostic code, not a blanket exemp…
jeremi Aug 4, 2026
0b9f4a2
fix(relay): match the accepted diff to the oasdiff release CI pins
jeremi Aug 4, 2026
e4b7b7d
fix(mint): name the demonstration's secret directory for what it hold…
jeremi Aug 4, 2026
61b4fc1
fix(evidencectl): install on the macOS bash the installer advertises
jeremi Aug 4, 2026
43a1449
docs(evidence): document an install command that can actually run
jeremi Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
29 changes: 29 additions & 0 deletions .claude/commands/goal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
description: Execute the next step of the Notary retirement and Evidence onboarding plan
argument-hint: [DoD item id, e.g. B5, or a workstream letter; empty picks the next item]
---

Work the tracked plan at `plans/notary-retirement-and-evidence-onboarding.md`.

1. Read the plan in full: decisions, constraints, DoD checklist, dependency
order, status log. The decisions are settled; do not relitigate them.
2. Select work. If `$ARGUMENTS` names a DoD item or workstream, target it.
Otherwise pick the first unchecked item whose dependencies are satisfied,
preferring workstream B (onboarding is the standing priority).
3. Announce the selected item and its intended shape in one short message,
then execute. Only stop for input when the item is security-sensitive,
requires a decision the plan reserves for Jeremi (A1's Mint-for-Relay
branch, G4 re-approval), or turns out to conflict with a constraint.
4. For code: TDD, failing test first. The frozen Evidence V1 rules in
`AGENTS.md` and `products/evidence/AGENTS.md` apply; composition work
must not touch Evidence production code.
5. Verify with the gates listed in the plan's Verification section for every
area touched. All must pass; paste the evidence in the report.
6. Update the plan file in the same commit as the work: tick the DoD
checkbox, append a dated status log line (absolute dates).
7. Commit with `git commit -s` and a conventional prefix. Stage only files
belonging to this item; never sweep unrelated worktree changes.
8. Report: what changed, verification evidence, and the next unblocked item.

Never: modify frozen Evidence V1 contracts, hand-edit generated artifacts,
scrub Notary from history pages, or log secrets.
5 changes: 5 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.git
.cargo-home
target
scratch
docs/site/node_modules
32 changes: 0 additions & 32 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,6 @@ updates:
- minor
- patch

# The conformance helper lock is a pip-compile requirements file. Its direct
# input remains byte-bound to the reviewed upstream suite requirements.
- package-ecosystem: pip
directory: "/release/conformance/openid"
schedule:
interval: weekly
day: wednesday
time: "08:30"
timezone: Etc/UTC
open-pull-requests-limit: 1
groups:
conformance-python:
patterns:
- "*"

# Pinned GitHub Actions used by the workflows.
- package-ecosystem: github-actions
directory: "/"
Expand All @@ -64,9 +49,7 @@ updates:
- package-ecosystem: docker
directories:
- "/release/docker"
- "/release/conformance/openid"
- "/crates/registry-relay"
- "/products/notary"
schedule:
interval: weekly
day: wednesday
Expand All @@ -77,18 +60,3 @@ updates:
docker-images:
patterns:
- "*"

# Docker Compose image pins use a distinct Dependabot ecosystem from
# Dockerfiles. Both override filenames match Dependabot's Compose matcher.
- package-ecosystem: docker-compose
directory: "/release/conformance/openid"
schedule:
interval: weekly
day: wednesday
time: "11:30"
timezone: Etc/UTC
open-pull-requests-limit: 1
groups:
docker-compose-images:
patterns:
- "*"
63 changes: 39 additions & 24 deletions .github/scripts/ci_changes.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,49 +15,65 @@
"platform": (
"registry-platform-audit",
"registry-platform-authcommon",
"registry-platform-cache",
"registry-platform-canonical-json",
"registry-platform-config",
"registry-platform-crypto",
"registry-platform-httpsec",
"registry-platform-httputil",
"registry-platform-oid4vci",
"registry-platform-oidc",
"registry-platform-ops",
"registry-platform-pdp",
"registry-platform-replay",
"registry-platform-sdjwt",
"registry-platform-testing",
),
"manifest": (
"registry-manifest-cli",
"registry-manifest-core",
),
"notary": (
"registry-notary",
"registry-notary-client",
"registry-notary-core",
"registry-notary-server",
"registry-notary-worker-harness",
"xtask",
),
"relay": ("registry-relay",),
"evidence": ("registry-evidence", "registry-evidencectl"),
"mint": ("registry-mint",),
"developer-tools": (
"registry-config-report",
"registry-language-server",
),
"registryctl": ("registryctl",),
}

NOTARY_PACKAGES = frozenset(SHARDS["notary"])
EVIDENCE_PACKAGES = frozenset(SHARDS["evidence"])
PLATFORM_PACKAGES = frozenset(SHARDS["platform"])
MANIFEST_PACKAGES = frozenset(SHARDS["manifest"])
TUTORIAL_PACKAGES = frozenset(
package
for shard in ("platform", "manifest", "notary", "relay", "registryctl")
for shard in ("platform", "manifest", "relay", "registryctl")
for package in SHARDS[shard]
) | {"registry-config-report"}

# Every input the Evidence tutorial gate replays or is built from. The tutorial
# pages here must stay in step with the gate's own registry, which
# test_ci_changes.py enforces: a tutorial CI does not watch is a tutorial that
# rots silently.
EVIDENCE_TUTORIAL_INPUTS = frozenset(
{
"Cargo.lock",
"Cargo.toml",
"docs/site/package-lock.json",
"docs/site/package.json",
"docs/site/scripts/check-evidence-tutorials.sh",
"docs/site/scripts/check-evidence-tutorials.test.mjs",
"docs/site/scripts/registryctl-tutorial.mjs",
"docs/site/src/content/docs/tutorials/author-an-acceptance-definition.mdx",
"docs/site/src/content/docs/tutorials/connect-an-institution-source.mdx",
"docs/site/src/content/docs/tutorials/first-evidence-assertion.mdx",
"docs/site/src/content/docs/tutorials/serve-assertions-over-http.mdx",
"docs/site/src/content/docs/tutorials/verify-an-assertion-as-a-consumer.mdx",
}
)

# The gate also builds and runs `mint`, because one tutorial serves assertions
# to a caller holding a real Mint-issued token.
EVIDENCE_TUTORIAL_PACKAGES = EVIDENCE_PACKAGES | frozenset(SHARDS["mint"])

ROOT_RUST_INPUTS = {
"Cargo.lock",
"Cargo.toml",
Expand Down Expand Up @@ -307,8 +323,8 @@ def classify(
if package is not None:
seeds.add(package)
continue
if path.startswith("products/notary/"):
seeds.update(NOTARY_PACKAGES)
if path.startswith("products/evidence/"):
seeds.update(EVIDENCE_PACKAGES)
elif path.startswith("products/manifest/"):
seeds.update(MANIFEST_PACKAGES)
elif path.startswith("products/platform/"):
Expand Down Expand Up @@ -387,7 +403,6 @@ def classify(
"crates/registry-relay/openapi/*",
"crates/registry-relay/src/api/openapi.rs",
"crates/registryctl/assets/project-starters/*",
"crates/registry-notary-server/src/standalone/activation.rs",
"crates/registry-platform-ops/src/lib.rs",
"crates/registry-relay/src/consultation/*",
"crates/registryctl/schemas/project-reports/*",
Expand All @@ -396,8 +411,6 @@ def classify(
"crates/registryctl/tests/fixtures/project-reports/*",
"docs/site/*",
"products/manifest/docs/*",
"products/notary/docs/*",
"products/notary/openapi/*",
*AUTHORING_REFERENCE_PATTERNS,
)
or path
Expand Down Expand Up @@ -472,18 +485,13 @@ def classify(
"docs/site/src/content/docs/tutorials/use-your-spreadsheet.mdx",
"docs/site/src/content/docs/tutorials/verify-claim-registry-api.mdx",
"docs/site/src/content/docs/tutorials/verify-opencrvs-claims.mdx",
"release/docker/Dockerfile.registry-notary",
"release/docker/Dockerfile.registry-relay",
}
or path.startswith("products/notary/")
for path in paths
)
tutorial_source_under_test = any(
matches(
path,
"crates/registry-notary/src/*",
"crates/registry-notary-core/src/*",
"crates/registry-notary-server/src/*",
"crates/registryctl/src/templates/*",
)
or path
Expand All @@ -503,6 +511,12 @@ def classify(
or bool(affected & TUTORIAL_PACKAGES)
)

evidence_tutorial = (
complete
or any(path in EVIDENCE_TUTORIAL_INPUTS for path in paths)
or bool(affected & EVIDENCE_TUTORIAL_PACKAGES)
)

matrix = []
for shard_name, shard_packages in SHARDS.items():
selected = sorted(affected.intersection(shard_packages))
Expand All @@ -521,15 +535,16 @@ def classify(
"rust_packages": sorted(affected),
"platform": platform,
"platform_hygiene": platform_hygiene,
"notary_contracts": bool(affected & NOTARY_PACKAGES),
"relay_contracts": "registry-relay" in affected,
"evidence_contracts": bool(affected & EVIDENCE_PACKAGES),
"project_authoring": "registryctl" in affected,
"release_tool": release_tool,
"release_source_proof": release_source_proof,
"docs": docs,
"docs_archives": docs_archives,
"editors": editors,
"registryctl_tutorial": registryctl_tutorial,
"evidence_tutorial": evidence_tutorial,
}


Expand Down
Loading
Loading