docs: diigo-cache UX map

capsite-notes gains a map of what a person can do in diigo-cache, where,
by which transport (HTTP route or Cap'n Web RPC), and with what
authority — a flowchart of the pages plus a table — marking the
misalignments: publish and dump are cache-key actions on HTTP forms, not
the RPC facet; the public page can write (a miss fills from diigo).
Input to aligning the admin UX with the RPC interface.

Generated-by: Claude Opus 5.5
This commit is contained in:
dckc committed 2026-10-07 09:21:30 -05:00
1 parent 0bffff8175
commit 6dd7a37532
1 file changed
+50
+50
View File
@@ -32,6 +32,56 @@ If it works out well, we should be able to expand to [bib sync #195](https://git
serves a public JSON route, and has a Block Kit admin page ("Sync now" button + table). serves a public JSON route, and has a Block Kit admin page ("Sync now" button + table).
- Site `/bookmarks` page renders the collected bookmarks (linked from the primary menu). - Site `/bookmarks` page renders the collected bookmarks (linked from the primary menu).
## diigo-cache UX map (2026-10-07)
What a person can do, where, and with what authority. Input to aligning
the admin UX with the RPC interface (checklist: the store refactor and
"align admin UX and RPC").
```mermaid
flowchart LR
home["/ home<br/>(no authority)"]
connect["/_connect<br/>mint form"]
wire["wire step<br/>(webapp id)"]
created["cache created<br/>(cache id)"]
login["/cache/ login<br/>(password manager)"]
admin["webkey page<br/>/cache/ + key in fragment"]
public["/public/username<br/>(anyone)"]
home -->|create| connect
connect -->|"POST /_mint (cookie)"| wire
home -->|"POST /_wire (webapp id)"| created
wire -->|"POST /_wire"| created
created -->|"POST /_publish (cache id)"| created
created -->|"open this cache"| admin
home -->|"open a cache"| login
login -->|"cache id"| admin
home -->|"dump: POST / (cache id + page)"| home
admin -->|"api.cache(key) …"| admin
created -->|"link (public mode)"| public
```
| action | where | transport | authority |
|---|---|---|---|
| mint the diigo session | `/_connect` | HTTP `POST /_mint` (relays webapp's form) | the cookie |
| wire a cache (private/public) | wire step, home | HTTP `POST /_wire` | webapp id |
| save the ids | created page | browser (copy, password manager) | — |
| publish later | created page | HTTP `POST /_publish` ⚠ | cache id |
| dump a page (raw rows) | home | HTTP `POST /` ⚠ | cache id |
| fingerprint, has-public | webkey page | RPC `fingerprint()`, `hasPublic()` | cache key |
| fill / stop / status | webkey page | RPC `startFill()`, `stopFill()`, `fillStatus()` | cache key |
| …of the public companion | webkey page | RPC `publicCache().…` | cache key |
| invalidate the last N days | webkey page | RPC `invalidateRecent(days)` | cache key |
| read public bookmarks | `/public/<u>` | HTTP GET (HTML or JSON) ⚠ | none |
| bulk dump for another worker | — | service binding `DiigoBridge.dumpNdjson` | worker config |
⚠ misalignments:
- publish and dump are admin actions held by the cache key, but live on
HTTP form routes rather than the RPC facet the webkey page uses
- the public page can write: a miss fills from diigo through the owner's
session (to become read-only: the reader facet only)
- the webkey page has no dump or publish; the home page has no fill
## Native-plugin wiring (the part that took a while) ## Native-plugin wiring (the part that took a while)
`emdash()`'s `plugins: []` takes **descriptors**, not plugin objects — the Astro `emdash()`'s `plugins: []` takes **descriptors**, not plugin objects — the Astro