Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
940cd6a
docs: plan plugin registry labelling service
ascorbic Jul 10, 2026
dbf6413
ci: update query-count snapshots
emdashbot[bot] Jul 10, 2026
3e7f830
style: format
ascorbic Jul 10, 2026
673f643
Merge remote-tracking branch 'origin/main' into feat/plugin-registry-…
ascorbic Jul 10, 2026
4a07a48
docs: keep implementation plans ephemeral
ascorbic Jul 10, 2026
532fef3
docs: define labeller Gate 0 contracts (#1910)
ascorbic Jul 10, 2026
035889b
docs: audit registry label vocabulary (#1912)
ascorbic Jul 10, 2026
5648ad0
test: prove ATProto label crypto interoperability (#1911)
ascorbic Jul 10, 2026
e10dbef
docs: narrow gate zero scope
ascorbic Jul 10, 2026
66ad9d9
chore: remove standalone crypto spike tests
ascorbic Jul 10, 2026
622b42f
feat(registry): add moderation evaluator (#1917)
ascorbic Jul 10, 2026
a01683b
feat(registry): add label signing (#1922)
ascorbic Jul 10, 2026
4510fb4
feat(registry): add labeller Lexicons (#1923)
ascorbic Jul 10, 2026
e87f81f
feat(registry): add labeler service core (#1926)
ascorbic Jul 10, 2026
5e01a36
feat(registry): add label subscriptions (#1931)
ascorbic Jul 10, 2026
0e2f097
feat(registry): add labeler key rotation (#1938)
ascorbic Jul 11, 2026
533c40e
feat(registry): add labeler identity runtime (#1942)
ascorbic Jul 11, 2026
9b504bf
fix(registry): remove ambiguous label regexes (#1948)
ascorbic Jul 11, 2026
eeec578
feat(registry): add aggregator labeler identity resolution (#1949)
ascorbic Jul 11, 2026
2d6ad44
feat(registry): add label verification primitives (#1952)
ascorbic Jul 11, 2026
185e9a5
docs: align labelling plans with shipped contracts
ascorbic Jul 11, 2026
e3f157d
docs: record zero-row preflight result, selecting Branch A
ascorbic Jul 11, 2026
a8598eb
docs: record custom-domain and signing-key custody decisions
ascorbic Jul 11, 2026
b57ed9e
docs: record Cloudflare Email Sending as the notification channel
ascorbic Jul 11, 2026
a7a18cf
docs: assign registry-verification ownership to the delegated release…
ascorbic Jul 11, 2026
9e8acee
style: format
emdashbot[bot] Jul 11, 2026
c5983a5
feat(registry): ingest signed labels in the aggregator (#1959)
ascorbic Jul 11, 2026
6133ac5
feat(registry): label-aware aggregator reads (#1965)
ascorbic Jul 12, 2026
c1c83c4
feat(registry): enforce moderation labels in clients (#1972)
ascorbic Jul 12, 2026
02d72af
feat(admin): registry moderation UI and blocked-install gating (#1977)
ascorbic Jul 12, 2026
81acff9
feat(registry): labeler assessment persistence and automated issuance…
ascorbic Jul 12, 2026
ee3ecef
feat(registry): labeler discovery and assessment orchestration (#1978)
ascorbic Jul 12, 2026
8912a7a
docs(labeler-plan): use Workers AI binding, not AI Gateway
ascorbic Jul 12, 2026
7f8f651
docs(labeler-plan): code-first analysis, drop dependency/SBOM/scanner…
ascorbic Jul 12, 2026
9140ba2
style: format
emdashbot[bot] Jul 12, 2026
0dbfc1d
docs(labeler-plan): drop vestigial scannerVersions and coverage.depen…
ascorbic Jul 12, 2026
82c1aa9
feat(labeler): public assessment XRPC API (checkpoint) (#1989)
ascorbic Jul 12, 2026
14402a3
feat(labeler): normalized finding contract (W8.1) (#1991)
ascorbic Jul 12, 2026
84ec20c
chore(deps): update Cloudflare toolchain catalog (workers-types v5) (…
ascorbic Jul 13, 2026
c4a2cae
feat(labeler): code/metadata AI adapter (W8.2) (#1994)
ascorbic Jul 13, 2026
569832c
feat(labeler): image AI adapter (W8.3) (#2003)
ascorbic Jul 13, 2026
f221786
docs(labeler-plan): record W9.3 console stack decision
ascorbic Jul 13, 2026
e32710a
feat(labeler): versioned policy resolver (W8.5) (#2004)
ascorbic Jul 13, 2026
111830e
docs(labeler-plan): ratify W9.2 mutation-protection decisions
ascorbic Jul 13, 2026
675eaa5
feat(labeler): Cloudflare Access operator authentication (W9.1) (#2005)
ascorbic Jul 13, 2026
6474590
feat(labeler): mutation guard and operator action audit (W9.2) (#2008)
ascorbic Jul 13, 2026
8213c8a
docs(labeler-plan): drop Lingui from the operator console
ascorbic Jul 13, 2026
19c70ae
feat(labeler): operator console SPA scaffold (W9.3, client only) (#2006)
ascorbic Jul 13, 2026
943b254
feat(labeler): serve the operator console and Access-guarded read API…
ascorbic Jul 13, 2026
a70266c
docs(labeler-plan): ratify W9.4 decisions
ascorbic Jul 13, 2026
d9c458d
docs(labeler-plan): fold subject-label visibility into W9.5
ascorbic Jul 13, 2026
a3e7a3e
feat(labeler): reviewer label issue/retract actions (W9.4) (#2020)
ascorbic Jul 13, 2026
957eb04
docs(labeler-plan): ratify W9.5 decisions
ascorbic Jul 13, 2026
c6e2c9f
docs(labeler-plan): ratify W9.6 decisions
ascorbic Jul 13, 2026
93fe8ba
docs(labeler-plan): note the kill-switch does not gate future issuanc…
ascorbic Jul 13, 2026
cf6c14f
feat(labeler): operational events, outbox, and automation kill-switch…
ascorbic Jul 13, 2026
19dea73
feat(labeler): reviewer rerun and false-positive override (W9.5) (#2023)
ascorbic Jul 13, 2026
6ce6ad5
feat(labeler): admin emergency takedown and publisher-compromised act…
ascorbic Jul 13, 2026
05afa59
feat(labeler): admin pause/resume of automated issuance (W9.6 PR-2) (…
ascorbic Jul 13, 2026
ea31d76
feat(labeler): admin dead-letter retry and quarantine controls (W9.6 …
ascorbic Jul 14, 2026
6274b8e
docs(labeler-plan): record W9.6 post-review decisions
ascorbic Jul 14, 2026
3792edf
feat(labeler): reject an emergency retract with no active label (#2029)
ascorbic Jul 14, 2026
850085c
docs(labeler-plan): ratify W8.4 decisions
ascorbic Jul 14, 2026
2881e37
docs(labeler): operator guide, ATProto reference, and keygen script (…
ascorbic Jul 14, 2026
4b350ae
test(labeler): component a11y, keyboard, and RTL coverage for the ope…
ascorbic Jul 14, 2026
e741ce4
feat(labeler): publisher-history context stage (W8.4 slice 1) (#2033)
ascorbic Jul 15, 2026
1f21880
docs(labeler-plan): ratify W8.6 decisions
ascorbic Jul 15, 2026
2a205af
docs(labeler-plan): ratify W8.5 severity/vocabulary amendments and W8…
ascorbic Jul 15, 2026
3eefd12
feat(labeler): model calibration harness and OpenAI envelope support …
ascorbic Jul 15, 2026
1e4973b
docs(labeler-plan): track the source-less proposal gap for issuer-har…
ascorbic Jul 15, 2026
ddbbcee
feat(labeler): image-content categories and the ≥high/never-drop seve…
ascorbic Jul 15, 2026
2bb4cee
docs(labeler-plan): record prompt-calibration outcomes and the purpos…
ascorbic Jul 15, 2026
b3119a9
feat(labeler): calibrate adapter prompts against over-warning (W8.6 f…
ascorbic Jul 15, 2026
acc6f96
feat(labeler): publisher-history context in the console subject view …
ascorbic Jul 16, 2026
a15bcb3
docs(labeler-plan): ratify the slice-3 labeler->aggregator service bi…
ascorbic Jul 16, 2026
22e0523
docs(labeler-plan): ratify W0.6 declared-URL-first acquisition
ascorbic Jul 16, 2026
41102f4
docs(labeler-plan): ratify the three-package graduation and Workflow-…
ascorbic Jul 16, 2026
86a7055
docs(labeler-plan): ratify the sync.getRecord enforcement exclusion
ascorbic Jul 16, 2026
0a2eba1
docs(labeler-plan): ratify W10.4 contact-resolution decisions
ascorbic Jul 16, 2026
fd5f64f
Merge remote-tracking branch 'origin/main' into feat/plugin-registry-…
ascorbic Jul 16, 2026
fe89dad
style: format
emdashbot[bot] Jul 16, 2026
467b4d4
feat(labeler): notification contact-state foundation (W10.4 slice B) …
ascorbic Jul 16, 2026
7c28520
feat(labeler): verified artifact acquisition (W7.2) (#2069)
ascorbic Jul 16, 2026
4c3a3b2
docs(labeler-plan): ratify fetch-over-binding read path + foundation …
ascorbic Jul 16, 2026
758294e
docs(labeler-plan): record W10.5 CSPRNG confirm-token requirement (sl…
ascorbic Jul 16, 2026
e95281e
feat(labeler): publisher-notification token endpoints (W10.4 slice C)…
ascorbic Jul 16, 2026
201cdc0
feat(labeler): aggregator service binding + read-only client (W8.4 sl…
ascorbic Jul 16, 2026
523a299
docs(labeler-plan): record W10.5 send-path contracts and redaction-sc…
ascorbic Jul 16, 2026
09e795d
docs(labeler-plan): ratify slice-3 verification-state read + issuer-r…
ascorbic Jul 16, 2026
6baeb41
feat(labeler): publisher contact resolution via aggregator binding (W…
ascorbic Jul 16, 2026
9501d61
feat(labeler): verification-state history input via aggregator read (…
ascorbic Jul 16, 2026
722cb9c
feat(labeler): production Workflow shell over AssessmentOrchestrator …
ascorbic Jul 16, 2026
105c964
docs(labeler-plan): ratify W10.5 source-ref, prolonged-error defer, a…
ascorbic Jul 16, 2026
8da954f
docs(labeler-plan): record W10.5 slice-1 lifetime-cap decision and sl…
ascorbic Jul 16, 2026
2a44112
docs(labeler-plan): add slice-2 sweep contract for cap-holding pendin…
ascorbic Jul 16, 2026
7e04ad1
docs(labeler-plan): record verified Email Sending mechanics for W10.5…
ascorbic Jul 16, 2026
738f94e
feat(labeler): notification delivery table + CSPRNG token + gated sen…
ascorbic Jul 16, 2026
7d4682c
feat(labeler): email adapter, issuance triggers, and retry sweep (W10…
ascorbic Jul 16, 2026
0beb062
docs(labeler-plan): ratify W10.6 reconsideration design decisions
ascorbic Jul 16, 2026
d85240f
docs(labeler-plan): ratify prolonged-error escalation design (W10.5 f…
ascorbic Jul 17, 2026
8bb7bb0
docs(labeler-plan): record prolonged-error adversary fixes + Finding …
ascorbic Jul 17, 2026
4c849c6
feat(labeler): reconsideration case management + outcome notice (W10.…
ascorbic Jul 17, 2026
3cbae51
style: format
emdashbot[bot] Jul 17, 2026
7c0b753
feat(labeler): reconsideration operator console UI (W10.6 client) (#2…
ascorbic Jul 17, 2026
32a286c
style: format
emdashbot[bot] Jul 17, 2026
c065482
feat(labeler): prolonged-error publisher notice via reconciliation cr…
ascorbic Jul 17, 2026
f161aa5
docs(labeler-plan): cut capability analysis + scanners from determini…
ascorbic Jul 17, 2026
05d7be0
style: format
emdashbot[bot] Jul 17, 2026
9ca8443
docs(labeler-plan): record production-stage-wiring design (W7/W8 foll…
ascorbic Jul 17, 2026
6bd42fc
docs(labeler-plan): slice stage wiring — acquire consumer + gate-lift…
ascorbic Jul 17, 2026
c5021ac
docs(labeler-plan): fold image-metadata extractor into slice B
ascorbic Jul 17, 2026
0da771a
docs(labeler-plan): record capabilities-only declared-access mapping …
ascorbic Jul 17, 2026
98c3a47
docs(labeler-plan): carry stage-wiring adversary items into slice B
ascorbic Jul 17, 2026
bdb77c7
docs(labeler-plan): ratify slice-B SSRF approach and release-resoluti…
ascorbic Jul 17, 2026
c24d115
docs(labeler-plan): record slice-B adversary verdict + M1/M2 fixes
ascorbic Jul 17, 2026
5d8f775
feat(labeler): code-AI and history stage wiring + dead-stage removal …
ascorbic Jul 17, 2026
0bb7e7c
feat(labeler): acquire consumer, SSRF egress, image stage, and gate l…
ascorbic Jul 17, 2026
d116ed9
docs(labeler-plan): drop W10.7 optional ATProto decision notice
ascorbic Jul 17, 2026
a728331
chore(labeler): drop kimi-k2.6 from the calibration matrix
ascorbic Jul 17, 2026
1800116
docs(labeler-plan): reclassify undeclared-access as a warning (calibr…
ascorbic Jul 17, 2026
748af2d
feat(labeler): reclassify undeclared-access as a warning, not a block…
ascorbic Jul 17, 2026
921716e
docs(labeler-plan): ratify CLI break-glass for signing-key rotation
ascorbic Jul 17, 2026
9851f36
docs(labeler-plan): descope the rotation break-glass CLI
ascorbic Jul 17, 2026
03625aa
style: format
emdashbot[bot] Jul 17, 2026
00980e5
docs(labeler): incident + key-management runbooks (W11.6, W11.4) (#2100)
ascorbic Jul 17, 2026
3515c38
style: format
emdashbot[bot] Jul 17, 2026
7c4b847
fix(labeler): dispatch the assessment Workflow on operator rerun (#2103)
ascorbic Jul 17, 2026
c539e22
fix(labeler): clear type-aware lint failures on the integration branch
ascorbic Jul 18, 2026
7074e81
fix(labeler): assert assessment-URL origin, not prefix (clears CodeQL)
ascorbic Jul 18, 2026
f71c593
fix(aggregator): rename labellers table via forward migration (#2111)
ascorbic Jul 18, 2026
29bf914
fix: close four label-enforcement bypasses (review round 1) (#2112)
ascorbic Jul 18, 2026
3692bbf
fix(labeler): Access custom-group roles + PDS-fetch SSRF guard (revie…
ascorbic Jul 18, 2026
08237b8
fix(labeler): notification contact-resolution, unsubscribe, and verif…
ascorbic Jul 18, 2026
1f6925f
fix(aggregator): wrap unexpected XRPC errors + harden PDS egress agai…
ascorbic Jul 18, 2026
3128aa9
fix(labeler): durable label publication + rotation-safe replay (revie…
ascorbic Jul 19, 2026
c7fb4c9
chore: consolidate changesets — one initial-release for the new regis…
ascorbic Jul 19, 2026
9596a04
fix(aggregator): wrap syncGetRecord errors in the CORS + no-store env…
ascorbic Jul 21, 2026
fa4d25b
fix(labeler): kill-switch on in-flight runs, durable dead-letter retr…
ascorbic Jul 21, 2026
abe4d72
fix(labeler): keep assessment-pending live until the last concurrent …
ascorbic Jul 22, 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
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/aggregator-get-publisher.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@emdash-cms/registry-lexicons": minor
---

Adds an aggregator `getPublisher` query and `publisherView` definition, returning a publisher's signed profile (display name, description, and identity-level contact channels) by DID alongside any hydrated labels — the publisher counterpart to the existing `getPackage` read.
5 changes: 5 additions & 0 deletions .changeset/aggregator-publisher-verification-read.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@emdash-cms/registry-lexicons": minor
---

Adds the `com.emdashcms.experimental.aggregator.getPublisherVerification` query and its `publisherVerificationView` / `verificationClaimView` definitions: read the verification claims an aggregator has indexed for a publisher DID.
5 changes: 5 additions & 0 deletions .changeset/core-ssrf-doh-export.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"emdash": patch
---

Adds a `emdash/security/ssrf` subpath export exposing the `cloudflareDohResolver` DNS-over-HTTPS resolver and the SSRF URL/address validation helpers for reuse in Workers that fetch untrusted URLs.
2 changes: 0 additions & 2 deletions .changeset/cozy-worlds-smile.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/discovery-empty-accept-labelers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@emdash-cms/registry-client": patch
---

Sends an explicitly empty `atproto-accept-labelers` header when `DiscoveryClient` is configured with `acceptLabelers: ""`, so "accept no labelers" is honored instead of being dropped and letting the aggregator apply its trusted defaults. Omitting the option entirely still sends no header.
5 changes: 0 additions & 5 deletions .changeset/graduate-registry-verification.md

This file was deleted.

2 changes: 0 additions & 2 deletions .changeset/loud-jobs-trade.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/lucky-labelers-admin-moderation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@emdash-cms/admin": patch
---

The registry browser now shows moderation state: blocked releases are visibly blocked with an explanation, warning-labelled releases ask for confirmation before install, and the plugin manager flags blocked or warned updates.
5 changes: 5 additions & 0 deletions .changeset/lucky-labelers-contract.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@emdash-cms/registry-lexicons": patch
---

Adds experimental labeler assessment and policy query contracts.
5 changes: 5 additions & 0 deletions .changeset/lucky-labelers-search-description.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@emdash-cms/registry-lexicons": patch
---

Updates the `searchPackages` description to the canonical moderation vocabulary.
5 changes: 5 additions & 0 deletions .changeset/quiet-labels-moderate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@emdash-cms/registry-client": patch
---

Adds release moderation evaluation over hydrated aggregator labels and exposes the atproto-content-labelers response header.
9 changes: 9 additions & 0 deletions .changeset/registry-moderation-stack-initial.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@emdash-cms/registry-moderation": minor
"@emdash-cms/registry-verification": minor
---

Initial release of the plugin-registry moderation stack.

- `@emdash-cms/registry-moderation`: ATProto signed-label parsing, encoding, and public-key verification; release moderation evaluation over both signed and aggregator-hydrated labels (package and publisher cascades, CID-bound labels, negation and expiry); the shared hard-block and warning label vocabularies; the `atproto-accept-labelers` / `atproto-content-labelers` negotiation headers; and `isModerationBlocking`, the canonical blocking predicate for enforcement consumers.
- `@emdash-cms/registry-verification`: runtime-neutral primitives (Node and workerd) for verifying plugin release artifacts — multihash checksums, SSRF-guarded artifact fetch, canonical tarball and bundle structure validation with a validated file inventory, and Sigstore build-provenance verification.
5 changes: 5 additions & 0 deletions .changeset/tidy-labels-enforce.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"emdash": patch
---

Registry install and update now evaluate the full moderation label set (package and publisher cascades, CID-bound labels, negation and expiry) instead of a single yanked-label string match. The update-check and artifact proxy endpoints also gate on this evaluation.
5 changes: 5 additions & 0 deletions .changeset/tidy-plugins-eligible.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@emdash-cms/plugin-cli": patch
---

Search and info now show moderation eligibility for registry packages instead of raw label values.
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,9 @@ jobs:
- run: pnpm test:unit
env:
EMDASH_TEST_PG: postgres://postgres:test@localhost:5432/emdash_test
- run: pnpm --filter @emdash-cms/labeler build
- run: pnpm --filter @emdash-cms/labeler typecheck
- run: pnpm --filter @emdash-cms/labeler test
# Render tests use the Astro Vite plugin (vitest.repro.config.ts);
# they can't run under the plain-node config in test:unit.
- run: pnpm --filter emdash exec vitest run --config vitest.repro.config.ts
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ examples/wp-theme-unit-test/
# pattern so we can re-include the agents subdirectory.
.opencode/*
!.opencode/agents/
!.opencode/plans/
.opencode/plans/*
!.opencode/plans/plugin-registry-labelling-service/
!.opencode/plans/plugin-registry-labelling-service/**

# .claude is local-only EXCEPT for the symlinks pointing at AGENTS.md and skills/
.claude/*
Expand Down
Loading
Loading