Skip to content

Adopt Registry Stack v0.13.0 - #13

Merged
jeremi merged 13 commits into
mainfrom
codex/adopt-registry-stack-v0.13.0
Jul 26, 2026
Merged

jeremi merged 13 commits into
mainfrom
codex/adopt-registry-stack-v0.13.0

Conversation

@jeremi

@jeremi jeremi commented Jul 25, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Pin Registry Relay, Registry Notary, and registryctl to the Registry Stack v0.13.0 release.
  • Regenerate all local and hosted Registry projects, simplify claim-evaluation formats, and add detailed registryctl check --explain review output.
  • Consume Registryctl's versioned JSON build report and validate the returned project-owned output closure instead of depending on its private build-directory layout.
  • Keep the 1 GiB CEL worker override only for emulated local profiles. Hosted Notary profiles now inherit the v0.13 product default of 128 MiB.
  • Isolate Relay consultation state behind an explicit v013 state epoch for the v0.13 retained-result contract boundary.
  • Add a source-pinned attribute-release Relay runtime bridge for Solmara's NIA/eSignet profile, including exact tag and commit verification, OCI capability labels, local caching, and release-candidate publication.
  • Add a permanent live NIA attribute-release smoke gate and update scenario assertions, deployment guidance, upgrade notes, and state runbooks.

Why

Registry Stack v0.13.0 improves the project authoring and reporting flow, but its published default Relay image intentionally excludes the beta attribute-release Cargo feature required by Solmara's NIA/eSignet configuration. Without an explicit bridge, the official image rejects the NIA configuration at startup.

This change keeps Solmara on the exact v0.13.0 release source and official runtime base while preserving the required capability. The intended 1.0 end state is an official, narrowly named released Relay variant that Solmara can consume directly by immutable digest. That work is tracked in registry-stack#487.

Developer and operator impact

  • just up and just up-esignet verify or build the feature-enabled Relay runtime before starting the stack.
  • Existing pre-v0.13 Relay consultation databases are not reused accidentally. The new state epoch creates isolated v0.13 database and role names while preserving the shared PostgreSQL volume and unrelated authority data.
  • just registry-projects-review exposes the complete redacted acquisition and disclosure explanation for every local and hosted project.
  • Runtime staging accepts only a registryctl.project_command.v1 build report bound to the requested environment, a real project-owned output directory, and a complete Relay/Notary configuration closure.
  • Hosted Notary deployments use the safer maintained CEL memory default. The larger ceiling remains explicit only where the emulated local environment needs it.
  • Claim evaluation uses Registry Notary's canonical claim-result media type. SD-JWT remains enabled only for credential issuance profiles.

Validation

  • just lint
  • just test: 40 scenario-runner, 175 portal, 72 home, and 106 script tests passed
  • just compose
  • just review-release v0.13.0
  • just registry-projects-check: all 12 local/hosted profiles and 240 fixture executions passed
  • just registry-projects-test: all 120 unique fixtures passed
  • just registry-projects-runtime-check
  • just registry-projects-review
  • Source-pinned linux/amd64 Relay runtime build and OCI label verification
  • Isolated full-stack just up and just smoke: six authorities and 18 scenarios passed
  • Live NIA/eSignet attribute-release profile proof
  • Portal live E2E: 8 passed
  • Home live E2E: 34 passed, 2 expected skips
  • Contract-generation proof and PostgreSQL state-preservation proof
  • git diff --check

Verification gaps and follow-up

  • No hosted deployment or release-candidate image publication was performed from the local checkout.
  • The complete eSignet UI/authenticator topology was not rerun locally because the sibling authenticator checkout did not match the workflow-pinned revision. The real governed NIA attribute-release API path was exercised successfully.
  • One smoke attempt during aggressive repeated restart testing transiently opened the SIPF upstream breaker. The immediate retry and the subsequent complete run passed.
  • Signed configuration bundles and verified baselines are tracked in #14.
  • Version-matched Registry Stack editor schemas are tracked in #15.

Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
@jeremi
jeremi marked this pull request as ready for review July 25, 2026 14:48

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 59881a6b1f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +71 to +72
https://github.com/registrystack/registry-stack.git "$source_dir"
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep normal startup on a published Relay image

On a clean checkout, every just up and just up-esignet now unconditionally reaches this clone and then compiles Registry Stack from source, so normal startup fails without GitHub access and requires a local registry-stack working tree plus a Rust build instead of consuming the digest-pinned image. Publish the feature-enabled Relay image by digest or move this source build behind an explicit development recipe so the documented normal path remains standalone.

AGENTS.md reference: AGENTS.md:L3-L5

Useful? React with 👍 / 👎.

Comment on lines +57 to +60
source_commit = versions.get("REGISTRY_STACK_SOURCE_COMMIT")
if not source_commit or not COMMIT_RE.fullmatch(source_commit):
failures.append(
"REGISTRY_STACK_SOURCE_COMMIT must be exactly 40 lowercase hex characters"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Verify the source commit against the requested tag

For local just review-release or just release-pins runs, this only checks that REGISTRY_STACK_SOURCE_COMMIT looks like a SHA; any arbitrary 40-character hash passes and the command reports that all release inputs match the tag. The release-candidate workflow has a separate checkout comparison, but these public recipes do not, so resolve the requested tag and compare its commit before declaring success.

Useful? React with 👍 / 👎.

jeremi added 2 commits July 25, 2026 22:09
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 572d772fce

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/release-candidate.yml Outdated
Comment on lines +111 to +113
- name: Build and push feature-enabled Relay runtime
id: relay-runtime
uses: docker/build-push-action@v6

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Exercise the newly built Relay before publishing it

In this workflow, the stack smoke and both E2E suites run at lines 95–102 before this build, and just up currently forces REGISTRY_RELAY_IMAGE="$SOLMARA_RELAY_RUNTIME_IMAGE", so those gates exercise the previously committed runtime digest. This step then builds a different Relay binary and uses its digest as the hosted Relay wrapper base without running any test against it; a Dockerfile, compiler, or feature-build regression can therefore produce publishable images despite every gate passing. Build and select this artifact before starting the stack, or rerun the live gates against its resulting digest.

Useful? React with 👍 / 👎.

Comment thread README.md Outdated
Comment on lines +109 to +113
are the Registry Stack `v0.13.0` release assets. The published Relay image is
the immutable runtime base, while `just up` builds and caches a replacement
Relay binary from the pinned source with the explicitly declared
`attribute-release` feature. That opt-in is required by the NIA eSignet
profile because the release Relay intentionally excludes beta API features.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Document the published runtime path consistently

For normal startup, the current just up recipe selects the published SOLMARA_RELAY_RUNTIME_IMAGE, while source compilation occurs only in the *-dev recipes. This paragraph instead says just up builds and caches a replacement binary, and the following paragraph tells users that it prepares that source build, contradicting both the immediately preceding startup documentation and the actual standalone acquisition path. Update this section to describe pulling the digest-pinned runtime and reserve the build instructions for the development recipes.

AGENTS.md reference: AGENTS.md:L3-L5

Useful? React with 👍 / 👎.

jeremi added 3 commits July 25, 2026 22:41
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aaeee3f3db

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +91 to +92
if claims.get("individual_id") != SUBJECT or claims.get("name") != "Elena Dela Cruz":
return "response claims did not match the synthetic eSignet subject"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Validate the complete attribute-release claim contract

When the Relay omits required eSignet attributes such as given_name, family_name, or birthdate, or adds an unintended field such as legacy_nid, this check still returns success because it validates only individual_id and name. The authored solmara-nia-userinfo profile requires five claims and eSignet requests six, so the new live gate can pass while hosted login is unusable or the response over-discloses source data; validate the expected claim set and required values rather than only these two entries.

Useful? React with 👍 / 👎.

Comment on lines +74 to +80
relay_runtime = versions.get("SOLMARA_RELAY_RUNTIME_IMAGE")
relay_runtime_match = PIN_RE.match(relay_runtime or "")
if (
not relay_runtime_match
or relay_runtime_match.group("image")
!= SOLMARA_RELAY_RUNTIME_REPOSITORY
):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Verify the published Relay runtime provenance

When SOLMARA_RELAY_RUNTIME_IMAGE points to any digest in the expected repository, review-release accepts it without inspecting the image labels that bind the runtime to REGISTRY_STACK_SOURCE_COMMIT, REGISTRY_RELAY_FEATURES, and the pinned base image. Since normal just up forcibly selects this runtime, a stale or incorrectly built digest can be declared consistent with the requested release even though the Registry Stack tag, source commit, and official image pins all validate; inspect the published runtime and compare its provenance labels before reporting success.

Useful? React with 👍 / 👎.

jeremi added 2 commits July 25, 2026 23:17
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f1fc780104

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/changelog.md
Comment on lines +30 to +31
runtime base. The release-candidate workflow publishes that source-bound
runtime before the hosted wrapper. PostgreSQL health checks now probe the TCP

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct the runtime publication claim

When release operators rely on this changelog, it incorrectly implies that every release-candidate run publishes a freshly source-built runtime before the hosted wrapper. In the checked .github/workflows/release-candidate.yml, the workflow only verifies the source checkout and then builds the wrapper with the already-pinned SOLMARA_RELAY_RUNTIME_IMAGE; the runtime is published separately, as the README and hosted deployment guide correctly state. This claim can therefore hide the separate runtime publication prerequisite during a Registry Stack upgrade.

Useful? React with 👍 / 👎.

jeremi added 2 commits July 26, 2026 00:11
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: abfda66651

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +95 to +98
unsigned_projection = copy.deepcopy(bundled)
unsigned_projection.pop("config_trust", None)
if unsigned_projection != source:
fail(f"{project} signed config differs from compiler output")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Compare all signed artifacts with compiler output

When a generated Relay artifact is removed, changed, or left stale while relay.yaml remains unchanged, this gate still passes because it compares only the YAML projection and never compares bundle/config/artifacts with runtime/registry-projects/hosted/<project>/relay/artifacts. Signature verification proves only that the stale or incomplete bundle was signed, so the release checks can accept a hosted wrapper whose contracts or private bindings differ from the compiler output; compare the complete artifact trees as part of this closure check.

AGENTS.md reference: AGENTS.md:L12-L13

Useful? React with 👍 / 👎.

Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 87d8ead852

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

--bundle-dir "/etc/solmara/hosted-relay-bundles/$project/bundle" \
--anchor-path "/etc/solmara/hosted-relay-bundles/$project/trust-anchor.json" \
--state-path "/etc/solmara/hosted-relay-bundles/$project/antirollback-seed.json" \
| jq -e '.result == "verified" and .bundle_sequence == 1' >/dev/null

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Accept rotated bundle sequences in release verification

When the documented bundle-rotation process regenerates the bundles with --sequence 2 or higher, this release-candidate gate rejects the valid, successfully verified bundle solely because it requires bundle_sequence == 1. Compare the reported sequence with the committed manifest for each project, or at least accept any positive verified sequence, so the workflow can publish routine configuration rotations.

Useful? React with 👍 / 👎.

jeremi added 2 commits July 26, 2026 11:12
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
@jeremi
jeremi merged commit 6670f9d into main Jul 26, 2026
1 check passed
@jeremi
jeremi deleted the codex/adopt-registry-stack-v0.13.0 branch July 26, 2026 16:46
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.

1 participant