One of four plugin-API seams from building 33 out-of-tree plugins on the #206 loader (report). Second-most-demanded; the seam every "react to pod writes" app wants.
The gap
A plugin cannot observe pod writes, so a write-time index / cached feed / live push is impossible. Plugins do read-time work instead (walk the container per request) and eat the O(N) cost, or simply cannot offer the feature.
Consumers (7, rising sharpness)
- notifications/ — a miss is a late notification.
- sparql/ — a miss is a wrong query result.
- search/ — a miss is stale results (the most user-visible instance).
- matrix/ —
/sync?since= needs live push; a stateless bridge can only do full-state /sync without it.
- backup/ — no change hook + no plugin-owned read authority means incremental and scheduled backup are both unbuildable.
- jmap/ — push (
eventSourceUrl) and delta sync (*/changes, Email/queryChanges) are refused in-protocol.
- remotestorage/ — descendant-version propagation needs a write-time index.
A sharpening from sparql/'s UPDATE work: owning a write endpoint does not buy the index — a plugin could index its own writes, but plain-LDP writes bypass it, yielding a silently-wrong index. Only the host's event stream sees all writes.
Sketch
api.events.onResourceChange(({ path, method }) => {}), fired post-commit on PUT/PATCH/DELETE. Core already has the emitter internally (src/notifications/events.js) — the seam is exposure, not construction.
Cost
Small — the event stream exists; scope it and pass it through.
One of four plugin-API seams from building 33 out-of-tree plugins on the #206 loader (report). Second-most-demanded; the seam every "react to pod writes" app wants.
The gap
A plugin cannot observe pod writes, so a write-time index / cached feed / live push is impossible. Plugins do read-time work instead (walk the container per request) and eat the O(N) cost, or simply cannot offer the feature.
Consumers (7, rising sharpness)
/sync?since=needs live push; a stateless bridge can only do full-state/syncwithout it.eventSourceUrl) and delta sync (*/changes,Email/queryChanges) are refused in-protocol.A sharpening from
sparql/'s UPDATE work: owning a write endpoint does not buy the index — a plugin could index its own writes, but plain-LDP writes bypass it, yielding a silently-wrong index. Only the host's event stream sees all writes.Sketch
api.events.onResourceChange(({ path, method }) => {}), fired post-commit on PUT/PATCH/DELETE. Core already has the emitter internally (src/notifications/events.js) — the seam is exposure, not construction.Cost
Small — the event stream exists; scope it and pass it through.