Skip to content

feat(release-service): complete delegated publishing - #2749

Open
ascorbic wants to merge 21 commits into
feat/drs-review-06-operationsfrom
feat/drs-review-07-integration
Open

feat(release-service): complete delegated publishing#2749
ascorbic wants to merge 21 commits into
feat/drs-review-06-operationsfrom
feat/drs-review-07-integration

Conversation

@ascorbic

Copy link
Copy Markdown
Collaborator

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

  • Bug fix
  • Feature (requires maintainer-approved Discussion)
  • Refactor (no behavior change)
  • Translation
  • Documentation
  • Performance improvement
  • Tests
  • Chore (dependencies, CI, tooling)

Checklist

  • I have read CONTRIBUTING.md
  • pnpm typecheck passes
  • pnpm lint passes
  • pnpm test passes (or targeted tests for my change)
  • pnpm format has been run
  • I have added/updated tests for my changes (if applicable)
  • User-visible strings use Lingui and logical RTL-safe layout; no messages.po files are included
  • I have added and reviewed the consolidated user-facing changesets
  • New features link to an approved Discussion: RFC: Attested Automated Publishing #1590

AI-generated code disclosure

  • This PR includes AI-generated code — model/tool: OpenAI Codex (GPT-5)

Screenshots / test output

Verified on the complete stack:

  • formatting, strict lint, package/application typechecks, and demo/template typechecks;
  • all package tests, 338 release-service tests, 10 verifier tests, and 7 Action tests;
  • browser conformance for Access denial, Arabic mobile RTL, and user-verified passkey approval;
  • generated Worker bindings, both Wrangler dry runs, and byte-identical generated Action output;
  • root package build and changeset validation.

@changeset-bot

changeset-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: b11b7b4

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes changesets to release 23 packages
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

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 27, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
docs 54d3b36 Aug 29 2026, 07:32 AM

@emdashbot emdashbot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 /records entry 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.

@github-actions

Copy link
Copy Markdown
Contributor

Scope check

This 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.

@github-actions github-actions Bot added the review/approved Approved; no new commits since label Aug 27, 2026
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 27, 2026

Copy link
Copy Markdown

🚀 Deploying Preview to Cloudflare 🚀

Preview URL: https://feat-drs-review-07-integration.try.emdashcms.com, https://feat-drs-review-07-integration-emdash-playground.emdash-cms.workers.dev (commit b11b7b4)

This URL reflects your latest Preview deployment

Preview Deployments by commit

Status Deployment URL Commit Updated (UTC) See this deployment's details
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://9edd231c.try.emdashcms.com, https://9edd231c-emdash-playground.emdash-cms.workers.dev b11b7b4 2026-08-29T08:21:01.841Z Visit the dashboard ↗
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://eda2e6c9.try.emdashcms.com, https://eda2e6c9-emdash-playground.emdash-cms.workers.dev 54d3b36 2026-08-29T07:33:59.820Z Visit the dashboard ↗
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://b5aed727.try.emdashcms.com, https://b5aed727-emdash-playground.emdash-cms.workers.dev 3b54053 2026-08-29T07:15:04.971Z Visit the dashboard ↗
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://c01bc017.try.emdashcms.com, https://c01bc017-emdash-playground.emdash-cms.workers.dev b11fc75 2026-08-28T23:21:48.467Z Visit the dashboard ↗
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://7aaa9e95.try.emdashcms.com, https://7aaa9e95-emdash-playground.emdash-cms.workers.dev 5f868fb 2026-08-28T22:43:22.115Z Visit the dashboard ↗
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://bfc2fa1c.try.emdashcms.com, https://bfc2fa1c-emdash-playground.emdash-cms.workers.dev b486790 2026-08-28T22:19:06.232Z Visit the dashboard ↗
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://73484589.try.emdashcms.com, https://73484589-emdash-playground.emdash-cms.workers.dev 46b7d15 2026-08-28T21:40:51.983Z Visit the dashboard ↗
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://c9428861.try.emdashcms.com, https://c9428861-emdash-playground.emdash-cms.workers.dev a96811c 2026-08-28T15:25:23.803Z Visit the dashboard ↗
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://918a4d19.try.emdashcms.com, https://918a4d19-emdash-playground.emdash-cms.workers.dev d02febe 2026-08-28T13:44:46.106Z Visit the dashboard ↗
  • Build: In progress 🔵

View logs ↗
bab143c 2026-08-28T13:35:55.799Z View logs ↗

View all previews: View all previews ↗

@github-actions

Copy link
Copy Markdown
Contributor

Overlapping PRs

This PR modifies files that are also changed by other open PRs:

This may cause merge conflicts or duplicated work. A maintainer will coordinate.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions github-actions Bot added query-count changed PR diff modifies query-count snapshot files review/needs-rereview Author pushed changes since the last review and removed review/approved Approved; no new commits since labels Aug 27, 2026
@pkg-pr-new

pkg-pr-new Bot commented Aug 27, 2026

Copy link
Copy Markdown

Open in StackBlitz

@emdash-cms/admin

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/admin@2749

@emdash-cms/auth

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/auth@2749

@emdash-cms/auth-atproto

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/auth-atproto@2749

@emdash-cms/blocks

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/blocks@2749

@emdash-cms/cloudflare

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/cloudflare@2749

@emdash-cms/contentful-to-portable-text

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/contentful-to-portable-text@2749

emdash

npm i https://pkg.pr.new/emdash-cms/emdash@2749

create-emdash

npm i https://pkg.pr.new/emdash-cms/emdash/create-emdash@2749

@emdash-cms/gutenberg-to-portable-text

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/gutenberg-to-portable-text@2749

@emdash-cms/plugin-cli

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-cli@2749

@emdash-cms/plugin-types

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-types@2749

@emdash-cms/registry-client

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/registry-client@2749

@emdash-cms/registry-lexicons

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/registry-lexicons@2749

@emdash-cms/registry-moderation

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/registry-moderation@2749

@emdash-cms/registry-verification

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/registry-verification@2749

@emdash-cms/sandbox-workerd

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/sandbox-workerd@2749

@emdash-cms/x402

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/x402@2749

@emdash-cms/plugin-ai-moderation

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-ai-moderation@2749

@emdash-cms/plugin-atproto

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-atproto@2749

@emdash-cms/plugin-audit-log

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-audit-log@2749

@emdash-cms/plugin-color

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-color@2749

@emdash-cms/plugin-embeds

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-embeds@2749

@emdash-cms/plugin-field-kit

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-field-kit@2749

@emdash-cms/plugin-forms

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-forms@2749

@emdash-cms/plugin-webhook-notifier

npm i https://pkg.pr.new/emdash-cms/emdash/@emdash-cms/plugin-webhook-notifier@2749

commit: b11b7b4

@github-actions github-actions Bot removed the query-count changed PR diff modifies query-count snapshot files label Aug 27, 2026
@ascorbic
ascorbic force-pushed the feat/drs-review-07-integration branch from 3fec083 to 3d45266 Compare August 28, 2026 10:15
@ascorbic
ascorbic force-pushed the feat/drs-review-07-integration branch 2 times, most recently from 586695f to 84ace40 Compare August 28, 2026 13:25
@ascorbic
ascorbic force-pushed the feat/drs-review-07-integration branch 3 times, most recently from 5f868fb to b11fc75 Compare August 28, 2026 23:07
@ascorbic
ascorbic force-pushed the feat/drs-review-07-integration branch from b11fc75 to 3b54053 Compare August 29, 2026 07:10
ascorbic and others added 20 commits August 29, 2026 08:28
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.
@ascorbic
ascorbic force-pushed the feat/drs-review-07-integration branch from 3b54053 to 54d3b36 Compare August 29, 2026 07:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants