@@ -22,7 +22,7 @@ want it.
2222 with zero core changes. Seven of those are ports of bundled features;
2323 remoteStorage in particular still ships always-on in core and could
2424 move out-of-tree behind the loader.
25- - Of the ~ 40 ` plugin ` -tagged backlog issues, ** 13 are built here** , 6
25+ - Of the ~ 40 ` plugin ` -tagged backlog issues, ** 14 are built here** , 7
2626 bundled features are ported, 5 shipped upstream during this line of work,
2727 2 more are unblocked, and ** 6 clusters are blocked on exactly four
2828 missing seams** . The rest are core-by-nature (a finding, not a gap).
@@ -199,9 +199,11 @@ probe-port-then-boot dance for the same reason.
199199- ** Per-route Fastify options** — ` capability/ ` found ` maxParamLength `
200200 (100) silently 404s long tokens in named params; wildcard routes are
201201 the workaround. Sharp when it bites.
202- - ** Response-header injection on core routes** — wanted twice
202+ - ** Response-header injection on core routes** — wanted three times
203203 (notifications' ` Updates-Via ` discovery; micropub's
204- ` <link rel="micropub"> ` endpoint discovery on the user's homepage).
204+ ` <link rel="micropub"> ` endpoint discovery on the user's homepage;
205+ oembed's per-resource discovery ` <link> ` , whose in-HTML form is content
206+ rewriting even a header hook couldn't do).
205207 Deliberately * not* asked for as a default-on hook: it's a bigger grant
206208 than route ownership. If ever, gate it: ` capabilities: ['hooks'] ` .
207209
@@ -262,8 +264,9 @@ isolation the default.
262264## The core/plugin line (#564 , answered empirically)
263265
264266** A feature is plugin-able iff it OWNS its routes; it stays core iff it
265- MODIFIES the pipeline of routes it doesn't own.** Six bundled features
266- ported cleanly (relay, webrtc, terminal, tunnel, notifications — plus
267+ MODIFIES the pipeline of routes it doesn't own.** Seven bundled features
268+ ported (relay, webrtc, terminal, tunnel, notifications,
269+ remoteStorage — plus
267270` pay/ ` as the deliberate counter-example: 402-gating LDP routes is
268271pipeline modification, which is the definition of core). The migration
269272list in #564 is right for every route-owning feature; the
@@ -285,15 +288,17 @@ hooks capability.
285288
286289If effort is scarce, this order maximizes unblocked value per unit cost:
287290
288- 1 . ` api.serverInfo ` (trivial; tidies ~ 10 plugins' config and every test
291+ 1 . ` api.serverInfo ` (trivial; tidies ~ 16 plugins' config and every test
289292 harness),
2902932 . ` api.reservePath ` (small-medium; makes four existing shims
291- self-contained and didweb * possible* ),
294+ self-contained and didweb * possible* — pair it with a webfinger link
295+ registry for the shared-document case),
2922963 . ` api.events.onResourceChange ` (small; unlocks webhooks/WebSub/indexing
293- and makes search/sparql/matrix faithful),
294- 4 . ` api.authorize ` (medium; the blocking seam for proxy ACLs and
295- capability semantics),
296- 5 . the two loader bug fixes (anytime; small).
297+ and makes search/sparql/matrix/jmap faithful),
298+ 4 . ` api.authorize ` (medium; the blocking seam for proxy ACLs, capability
299+ semantics, and scheduling delivery),
300+ 5 . the five bug fixes (anytime; small — the non-atomic conditional write
301+ is the one with real data-loss consequences).
297302
298303Everything else can wait until a real consumer shows up — this repo is the
299304mechanism for finding those.
0 commit comments