You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
compose.test.js and serve.js now boot all 26 from pure config (both new
plugins live under their own prefix — no appPaths widening needed).
Findings folded into NOTES.md: api.events gains its 5th consumer
(backup — incremental/scheduled backup unbuildable), api.serverInfo now
~12, the raw-body-stream seam (#583) gains micropub's media endpoint,
response-header injection gains micropub endpoint discovery, and
micropub is the reservePath counter-witness (client-discovered endpoints
fit the one-prefix model exactly).
New: REPORT.md — the maintainer-facing summary. What the api already
carries (26 plugins, eleven capability classes, zero core changes),
the four seams to add ranked by independent demand (authorize, events,
reservePath, serverInfo) each written as a fileable issue with
consumers/sketch/cost, two loader bug fixes, the #564 core/plugin line,
and a suggested order of work. NEXT.md updated: webhooks/webmention
deliberately deferred (outbound fetches to arbitrary URLs need a
focused, careful session).
-**REPORT.md exists** — the maintainer-facing summary (ranked seams, each
23
+
fileable nearly verbatim). Keep its consumer counts current as plugins
24
+
land.
21
25
22
26
## The hard rule (don't break it)
23
27
@@ -33,17 +37,18 @@ plugin), `NOTES.md` (the findings/seams — the real deliverable), and
33
37
pinned to 0.0.215 on `gh-pages`. You may **read** it for reference; keep
34
38
it clean.
35
39
36
-
## Immediate next step: finish Wave 7
40
+
## Wave 7 status
37
41
38
-
Four plugins were *planned but not yet built* — this is where to resume:
42
+
`micropub/` and `backup/` are **built and integrated**. Two remain
43
+
*deliberately deferred*, not forgotten:
39
44
40
-
| Plugin | What |Copy from|
45
+
| Plugin | What |Why deferred|
41
46
|---|---|---|
42
-
|`webhooks/`| change-notification webhooks; **must poll** (no `api.events`) → the canonical 5th consumer of that seam, and a real integration primitive | notifications/ (fs.watch), rss/sparql (container walk) |
43
-
|`micropub/`| IndieWeb Micropub server — POST creates a post in the pod | mastodon/ (auth + pod write via loopback) |
44
-
|`webmention/`| IndieWeb Webmention receiver — store incoming mentions in the pod | activitypub/ inbox, capability/ |
45
-
|`backup/`| pod container → `.tar.gz` download (data portability); hand-roll tar headers + `node:zlib` gzip (no deps) | webdav/rss (container walk) |
47
+
|`webhooks/`| change-notification webhooks; **must poll** (no `api.events`) → a 6th consumer of that seam | POSTs to arbitrary operator-supplied URLs — build with corsproxy/-grade SSRF gates and a careful review, in a session focused on it |
48
+
|`webmention/`| IndieWeb Webmention receiver — store incoming mentions in the pod | spec requires fetching the (arbitrary) source URL to verify the link — same outbound-fetch caution as webhooks |
46
49
50
+
If you build them, copy notifications/ (fs.watch) + rss/sparql (walk) for
51
+
webhooks, activitypub/ inbox + corsproxy/'s SSRF gates for webmention.
47
52
Dispatch each as its own worker into its own directory (they don't conflict
48
53
— separate subdirs, shared files touched only by you at integration time).
49
54
Verify each with `node --test --test-concurrency=1 <name>/test.js`, then:
@@ -91,12 +96,15 @@ each. Current top four (keep this current as you add consumers):
91
96
92
97
1.**`api.authorize(request, path, mode)`** — 3 consumers; the top
93
98
*blocking* seam (authority the requester doesn't drive).
0 commit comments