feat(release-service): complete delegated publishing - #2749
Conversation
|
| Name | Type |
|---|---|
| @emdash-cms/registry-client | Minor |
| @emdash-cms/plugin-cli | Minor |
| @emdash-cms/registry-verification | Minor |
| @emdash-cms/admin | Patch |
| emdash | Patch |
| @emdash-cms/release-action | Patch |
| @emdash-cms/release-service | Patch |
| @emdash-cms/perf-demo-site | Patch |
| @emdash-cms/cache-demo-site | Patch |
| @emdash-cms/do-demo-site | Patch |
| @emdash-cms/do-solo-demo-site | Patch |
| @emdash-cms/labeler | Patch |
| @emdash-cms/release-verifier | Patch |
| @emdash-cms/cloudflare | Patch |
| @emdash-cms/sandbox-workerd | Patch |
| @emdash-cms/fixture-perf-site | Patch |
| @emdash-cms/auth | Patch |
| @emdash-cms/blocks | Patch |
| @emdash-cms/gutenberg-to-portable-text | Patch |
| @emdash-cms/x402 | Patch |
| create-emdash | Patch |
| @emdash-cms/auth-atproto | Patch |
| @emdash-cms/plugin-embeds | Patch |
Click here to learn what changesets are, and how to add one.
Click here if you're a maintainer who wants to add a changeset to this PR
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
docs | 54d3b36 | Aug 29 2026, 07:32 AM |
There was a problem hiding this comment.
This is the final integration PR (7/7) for the approved delegated release service Discussion #1590. It adds the encryption-key lifecycle, fleet verification Workflow, dry-run admission, browser handoff CLI commands, publisher/operator audit surfaces, and the CI lane.
I reviewed the diff statically against AGENTS.md conventions and the existing code base. Headline: the change is well-scoped and the implementation looks sound.
What I checked:
- Encryption key lifecycle (activate/verify/retire): state machine is paused-gated, permits now carry the active key version, retirement requires prior fleet verification, and idempotency is preserved.
EncryptionVerificationWorkflow: bounded shard scanning, compare-and-set re-encryption, two zero-change passes, deterministic workflow IDs, and NonRetryableError on control-state drift.- Dry-run admission: reads only, does not reserve, rate-limit, or start a workflow.
- Browser-handoff CLI commands: URLs are validated (HTTPS or localhost HTTP only, no credentials/path/search/hash), and credentials stay out of the terminal.
- UI: new strings go through Lingui, layout uses logical Tailwind classes, and the e2e spec verifies RTL mobile behavior.
- Registry-verification
/recordsentry avoids loading the Node default verifier in Worker contexts. - SQL: all Durable Object queries use parameterized
?bindings; no string interpolation into identifiers or values. - Tests: new coverage is behavior-oriented (workflow rotation, key lifecycle through routes, dry-run isolation, audit pagination, approver status privacy).
- Changesets: both entries name public surfaces, user-visible behavior, and migration guidance.
I did not find logic bugs, security regressions, AGENTS.md violations, or missing tests that would block merge. The release-service is still gated as experimental and not to be deployed from this stack, which matches the stated deployment posture.
Scope checkThis PR changes 6,900 lines across 72 files. Large PRs are harder to review and more likely to be closed without review. If this scope is intentional, no action needed. A maintainer will review it. If not, please consider splitting this into smaller PRs. See CONTRIBUTING.md for contribution guidelines. |
Overlapping PRsThis PR modifies files that are also changed by other open PRs:
This may cause merge conflicts or duplicated work. A maintainer will coordinate. |
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/auth-atproto
@emdash-cms/blocks
@emdash-cms/cloudflare
@emdash-cms/contentful-to-portable-text
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@emdash-cms/plugin-cli
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/registry-moderation
@emdash-cms/registry-verification
@emdash-cms/sandbox-workerd
@emdash-cms/x402
@emdash-cms/plugin-ai-moderation
@emdash-cms/plugin-atproto
@emdash-cms/plugin-audit-log
@emdash-cms/plugin-color
@emdash-cms/plugin-embeds
@emdash-cms/plugin-field-kit
@emdash-cms/plugin-forms
@emdash-cms/plugin-webhook-notifier
commit: |
3fec083 to
3d45266
Compare
586695f to
84ace40
Compare
5f868fb to
b11fc75
Compare
b11fc75 to
3b54053
Compare
Use the same URL-source contract for submit, dry-run, and the registry client. Reject mixed or blob-backed input before requesting GitHub OIDC, while publication materializes the verified sources into the final blob-only record.
Define the URL-source input contract, durable PDS blob materialization, late publication permit, and private R2 staging lifecycle across the service specification, implementation plan, Action, CLI, and changeset.
3b54053 to
54d3b36
Compare
What does this PR do?
Completes the delegated release service with Worker/package compatibility, bounded state and browser conformance, dry-run admission, publisher audit and approver status, recovery controls, fleet encryption verification/retirement, completed product surfaces, normative specifications, and a dedicated CI lane for the service, verifier, Action, browser, generated bindings, and Wrangler dry runs.
This is PR 7 of 7. Hardening, product completion, CI, and the stack-documentation follow-ups remain separate commits. All seven PRs merge as one unit. Do not deploy or release the service from this stack; confidential-client PDS/key-removal conformance and external security review remain documented deployment/launch gates.
Discussion: #1590
Type of change
Checklist
pnpm typecheckpassespnpm lintpassespnpm testpasses (or targeted tests for my change)pnpm formathas been runmessages.pofiles are includedAI-generated code disclosure
Screenshots / test output
Verified on the complete stack: