@@ -7,9 +7,13 @@ repo; nothing is speculative. Detail lives in [NOTES.md](./NOTES.md)
77(findings), [ ISSUES.md] ( ./ISSUES.md ) (per-issue disposition), and each
88plugin's ` README.md ## Findings ` .
99
10- ** The five bugs below are now filed upstream** (#596 –#600 , 2026-07-11, at
11- the maintainer's request). The four * seams* remain unfiled; each is
12- drafted so it could be filed nearly verbatim if wanted.
10+ ** Both the bugs and the seams are now filed upstream** (2026-07-11): the
11+ five bugs as #596 –#600 , and the four ranked seams as ** #601 (serverInfo),
12+ #602 (reservePath), #603 (events), #604 (authorize)** . The secondary asks
13+ below (` api.plugins ` , ` api.isOperator ` , mcp.registerTool, per-route
14+ options, response-header injection, pure-utility exports) are * not* filed
15+ yet — they're lower-priority and better raised when a design discussion on
16+ the four opens.
1317
1418## Executive summary
1519
@@ -73,8 +77,10 @@ Validated by use, not opinion:
7377
7478Rank = how many plugins reached for the seam * without coordinating* . Each
7579entry is written as a fileable issue: motivation, consumers, sketch, cost.
80+ ** All four are now filed:** authorize → #604 , events → #603 ,
81+ reservePath → #602 , serverInfo → #601 .
7682
77- ### 1. ` api.authorize(request, path, mode) ` — the most * blocking*
83+ ### 1. ` api.authorize(request, path, mode) ` — the most * blocking* ( # 604 )
7884
7985** Ask:** let a plugin ask the host's WAC engine for a decision the
8086* requester's credentials don't drive* .
@@ -102,7 +108,7 @@ agent id (not request) in, decision out, same engine the LDP path uses.
102108** Cost:** medium — the WAC engine exists; this is plumbing an entry point
103109into the loader's ` api ` object.
104110
105- ### 2. ` api.events.onResourceChange(cb) ` — every "react to writes" app
111+ ### 2. ` api.events.onResourceChange(cb) ` — every "react to writes" app ( # 603 )
106112
107113** Consumers (seven, rising sharpness):** ` notifications/ ` (a miss = late
108114notification), ` sparql/ ` (a miss = wrong query result), ` search/ ` (stale
@@ -129,7 +135,7 @@ construction.
129135
130136** Cost:** small — the event stream exists; scope it and pass it through.
131137
132- ### 3. ` api.reservePath(pattern) ` — what every API shim structurally needs
138+ ### 3. ` api.reservePath(pattern) ` — what every API shim structurally needs ( # 602 )
133139
134140** The most-hit finding: seven+ consumers.** A plugin can * register* routes
135141outside its prefix, but only its one ` prefix ` is WAC-exempt:
@@ -167,7 +173,7 @@ reporting collisions at boot.
167173** Cost:** small-medium — generalizes the ` appPaths ` mechanism that already
168174exists, moving it from operator config to plugin declaration.
169175
170- ### 4. ` api.serverInfo ` — the broadest, and the cheapest
176+ ### 4. ` api.serverInfo ` — the broadest, and the cheapest ( # 601 )
171177
172178** ~ 16 consumers** — every plugin that mints absolute URLs or loopbacks
173179(the DAV family, the shims, rss, sparql, nip05, webfinger, notifications,
0 commit comments