Skip to content

Commit f8b4450

Browse files
ISSUES.md: disposition of every plugin-tagged issue
The 'how many can you do' answer as a triage table: 8 built as plugins here, 6 ported, 5 shipped upstream, 4 plugin-able with no blocker, 4 clusters blocked on a named seam (each with a proof-of-need consumer), rest core-by-nature or product-scale. Names the MCP-tool seam gap (#495/#496/#500/#501 all want tools a plugin can't add) alongside the api.authorize and api.events seams already in NOTES.
1 parent 61cf85f commit f8b4450

1 file changed

Lines changed: 93 additions & 0 deletions

File tree

ISSUES.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Plugin-tagged issues — disposition
2+
3+
A pass over JSS's `plugin`-labelled backlog, asking of each: *can the public
4+
plugin api do this today, and if not, what's missing?* This repo is the
5+
evidence. Legend:
6+
7+
-**built here** — a working plugin in this repo, tested
8+
- 🧩 **plugin-able, not yet built** — no blocker, just unbuilt
9+
- 🔩 **needs a seam** — a plugin *can't* do it until the api grows (the seam
10+
is named; a consumer here proves the need)
11+
- 🏛️ **core, not a plugin** — pipeline-modifying or infrastructural; belongs
12+
in `src/` (this is a *finding*, not a gap)
13+
- 🗺️ **product/design** — a large feature or an open design question, beyond
14+
a single plugin
15+
16+
## Built as plugins here ✅
17+
18+
| Issue | Plugin | Note |
19+
|---|---|---|
20+
| #445 | `nip05/` | NIP-05 discovery from pods' public keys |
21+
| #382 / #379 | `corsproxy/` | CORS forward proxy, fail-closed SSRF defense |
22+
| #506 | `capability/` | scoped, time-bound, revocable capability URLs |
23+
| #507 | `webdav/` | mount a pod in Finder/Nautilus/Windows |
24+
| #509 | `sparql/` | read-time SPARQL over pod JSON-LD (write-index → 🔩 `api.events`) |
25+
| #322 | `gitscratch/` | ephemeral Solid-authed git remotes (git-http-backend CGI) |
26+
| #515 / #516 | `mastodon/` | Mastodon-API shim — a client can log into its own pod |
27+
| #505 | `otp/` | one-time-password session flow (account *recovery* → 🔩 core auth) |
28+
29+
Plus six **ports of bundled features** proving the migration path for #564 /
30+
#164: `relay/` `webrtc/` `terminal/` `tunnel/` `notifications/`, and `pay/`
31+
(the wall-report — it can't be a plugin, which is the point).
32+
33+
## Shipped upstream this line of work 🚢
34+
35+
| Issue | Where |
36+
|---|---|
37+
| #206 | the loader — `createServer({ plugins })`, merged, v0.0.215 |
38+
| #582 | `appPaths` WAC exemption, v0.0.213 |
39+
| #584 | `api.auth.getAgent`, v0.0.214 |
40+
| #588 | `api.ws.route` WebSocket routing, v0.0.215 |
41+
| #564 | the core/plugin line — answered empirically in [NOTES.md](./NOTES.md) |
42+
43+
## Plugin-able, not yet built 🧩
44+
45+
| Issue | Shape |
46+
|---|---|
47+
| #211 | Bluesky / AT-Protocol shim — same shape as `mastodon/`, different wire format |
48+
| #157 | CardDAV — contact sync, same loopback-bridge shape as `webdav/` |
49+
| #527 | Tunnel client mode — extends `tunnel/` to dial *out* to a relay |
50+
| #277 | MongoDB-backed relay — `relay/` with a Mongo store (needs the infra) |
51+
52+
## Needs a seam the api doesn't have yet 🔩
53+
54+
Each names the seam and the consumer that proves it. Ranked in
55+
[NOTES.md](./NOTES.md).
56+
57+
| Issue(s) | Missing seam |
58+
|---|---|
59+
| #509 (write-index), #501 | `api.events.onResourceChange` — react to pod writes |
60+
| #382 (per-pod ACL), #506 (pod grants) | `api.authorize(request, path, mode)` — ask the host's WAC |
61+
| #495 #496 #500 #501 | `api.mcp.registerTool` — MCP has no plugin-tool seam; all four MCP issues want new tools a plugin can't add today |
62+
| #463 #464 | app-registry primitive — surfacing installed plugins as Solid resources |
63+
64+
## Core, not a plugin 🏛️ (a finding, not a gap)
65+
66+
Pipeline-modifying or infrastructural — they *are* the pod, or they change
67+
every request:
68+
69+
| Issue | Why core |
70+
|---|---|
71+
| #185 | token-based storage quota — gates the LDP write path |
72+
| #476, #271 | git auto-init header, git-mark post-receive — inside the core git handler |
73+
| #236 | SFTP/SSH — a separate server protocol, not a Fastify route |
74+
| #154 | SQLite `db` backend — a storage driver |
75+
| #133 | OIDC-provider replacement — the auth core itself |
76+
77+
## Product / design 🗺️
78+
79+
Large features or open questions beyond one plugin: #200 (marketplace),
80+
#199 #198 (agent containers), #194 #184 (pane store), #183 (skill
81+
provenance), #163 (remoteStorage follow-ups), #134 (WebID/AP URI unification),
82+
#164 (WebFinger/OAuth extraction — partially met by `mastodon/`'s OAuth
83+
bridge). Several become tractable *on top of* the plugin system now that it
84+
exists.
85+
86+
## Tally
87+
88+
Of ~40 plugin-tagged issues: **8 built as plugins here**, **6 ported**, **5
89+
shipped upstream**, **4 more plugin-able with no blocker**, **4 clusters
90+
blocked on a named seam** (each with a proof-of-need consumer), the rest
91+
core-by-nature or product-scale. The plugin api reaches most of the backlog
92+
today; the two seams that would unlock the most next are `api.authorize` and
93+
`api.events`.

0 commit comments

Comments
 (0)