feat(release-service): add operations and recovery - #2748
Conversation
|
| Name | Type |
|---|---|
| @emdash-cms/registry-client | Minor |
| @emdash-cms/plugin-cli | 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/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 | 837561a | Aug 29 2026, 07:33 AM |
Scope checkThis PR changes 5,600 lines across 47 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. |
ec99ab2 to
a282932
Compare
@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: |
7318375 to
c60a4d6
Compare
f2658cf to
cfea52a
Compare
cfea52a to
0daf44d
Compare
🔍 Adversarial review — stack #2766, layer 7 of 8Automated deep review of this layer's diff ( What the PR actually does + verdictLayer 06 adds, on top of the layer-05 release service: a 256-shard non-authoritative identity directory DO registered from OAuth callbacks and listed via an Access-viewer route; a per-publisher-DO fixed-window rate limiter (workload/repository/publisher scopes) consumed in the submit-intent route after token verification and policy evaluation; encrypted R2 publisher archives (JWE pages context-bound to deploymentId/objectClass/table/ Findings
Verified non-findings worth relaying: rate-limit attribution is the authenticated OIDC identity (repository.id/workflow.ref from the verified token) and quota is consumed only after the victim publisher's own policy authorizes the workload, so a third party cannot burn a victim's budget; limiter errors fail closed (500); replays don't double-count. Restore cannot silently roll back newer live state — it requires admin role, service-control suspension, exact DID confirmation, and an explicit destructive prepare, and restored authority is neutralized (empty delegation ciphertext, PR description vs code
Test-coverage gaps
~ 🤖 Fable |
20a63de to
4a1afe7
Compare
41d3da6 to
47fbbb1
Compare
738349c to
4073859
Compare
1e3150b to
61cb7fa
Compare
61cb7fa to
467c150
Compare
467c150 to
837561a
Compare
What does this PR do?
Adds the sharded identity directory, per-publisher abuse limits, encrypted R2 archive and fail-safe restore, encryption rotation controls, Analytics Engine metrics, archive Workflow, and the operational runbook. The follow-up commit makes approval expiry authoritative and restore preparation replay-safe after partial progress.
This is PR 6 of 7. The implementation and recovery-safety follow-up remain separate commits. The stack merges as one unit and this branch is not deployable by itself.
Discussion: #1590
Type of change
Checklist
pnpm typecheckpassespnpm lintpassespnpm testpasses (or targeted tests for my change)pnpm formathas been runAI-generated code disclosure
Screenshots / test output
Directory, rate-limit, archive/restore, encryption operations, metrics, alarm expiry, replay safety, Workflow, and typed-client tests pass.