capsite: toybox user stories and goals (T1-T3)
toybox-stories.md: the weekly roundup (#23), album-to-album sync (endojs/playground#16), and drag-to-archive.org (#118), with the needs they share. The checklist gains the toybox tree: a changed signal (T1), Blockly composition by petname (T2), and confined code in Dynamic Workers (T3). Generated-by: Claude Opus 5.5
This commit is contained in:
1 parent
a086a8c495
commit
1aeb3a21db
2 files changed
+99
No files matched your search
@@ -138,6 +138,30 @@ narrative.
|
|||||||
running webapp as the primary worker so its own port serves the
|
running webapp as the primary worker so its own port serves the
|
||||||
form directly; revisit as the UI grows.
|
form directly; revisit as the UI grows.
|
||||||
- [ ] @endo/errors for structured error details (needs node_modules).
|
- [ ] @endo/errors for structured error details (needs node_modules).
|
||||||
|
- [ ] **toybox: typed pieces that fit together, peer to peer** (working
|
||||||
|
name; tinker toys per the madmode.com home page). Kinds are typed
|
||||||
|
interfaces, à la Genode session interfaces, but wired by
|
||||||
|
introduction (E's Granovetter diagram), not a parent tree; named by
|
||||||
|
petnames; each piece guards its own resources. Why:
|
||||||
|
[the toybox user stories](toybox-stories.md).
|
||||||
|
- [ ] **T1. Changed signal**: a reader can subscribe to "this cache
|
||||||
|
changed" instead of polling (Genode's ROM-session sigh is the
|
||||||
|
model: public cache ≈ ROM, `/_publish` ≈ report). Fires on 1f's
|
||||||
|
head refresh when it upserts anything new. Shape TBD: a Cap'n Web
|
||||||
|
callback stub the cache holds (live only), or a durable
|
||||||
|
subscription it calls back via a webkey (survives eviction).
|
||||||
|
- [ ] **T2. Compose with [Blockly](https://developers.google.com/blockly)**:
|
||||||
|
connector checks (`setCheck(kind)`) are the shapes; a workspace
|
||||||
|
is a set of introductions. **Blocks refer to capabilities by
|
||||||
|
petname**, never by key: workspace JSON is shareable; the keys
|
||||||
|
live with whatever runs it.
|
||||||
|
- [ ] **T3. Run compositions in [Dynamic Workers](https://developers.cloudflare.com/dynamic-workers/)**:
|
||||||
|
code from anywhere: Blockly's JS generator, code written by
|
||||||
|
agents, by hand. Confinement makes codegen safe: the Worker
|
||||||
|
Loader isolate's `env` holds only the stubs its petnames resolve
|
||||||
|
to, with `globalOutbound: null`, so the code's authority is
|
||||||
|
exactly what it was handed. (Ordinary Workers forbid `eval`;
|
||||||
|
lifting that is the point of the Worker Loader.)
|
||||||
|
|
||||||
## How to run (continuation prompts)
|
## How to run (continuation prompts)
|
||||||
|
|
||||||
@@ -196,6 +220,7 @@ to every goal in this tree.
|
|||||||
|
|
||||||
## Pointers
|
## Pointers
|
||||||
|
|
||||||
|
- [the toybox user stories](toybox-stories.md) — what the pieces are for
|
||||||
- [the zotero goal tree](zotero-checklist.md) and
|
- [the zotero goal tree](zotero-checklist.md) and
|
||||||
[the social.coop goal tree](social-coop-checklist.md) — the next caches
|
[the social.coop goal tree](social-coop-checklist.md) — the next caches
|
||||||
- [the capsite notes](capsite-notes.md) — the original goal and the EmDash
|
- [the capsite notes](capsite-notes.md) — the original goal and the EmDash
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
# toybox user stories
|
||||||
|
|
||||||
|
What the pieces are for. A goal in [the capsite checklist](capsite-checklist.md)
|
||||||
|
earns its place by serving one of these; architecture with no story
|
||||||
|
waits.
|
||||||
|
|
||||||
|
## S1. Weekly roundup
|
||||||
|
|
||||||
|
> Monday morning, I open madmode and find last week's bookmarks waiting
|
||||||
|
> as a draft roundup. I drop a few, add a line of commentary to a
|
||||||
|
> couple, and publish: 10 minutes, not an hour of copy-paste.
|
||||||
|
|
||||||
|
[Weekly PESOS a la Tim Bray, madmode-blog#23](https://github.com/dckc/madmode-blog/issues/23).
|
||||||
|
Later sources join the same weekly shape: Zotero additions
|
||||||
|
([bib sync, madmode-blog#195](https://github.com/dckc/madmode-blog/issues/195);
|
||||||
|
[the zotero goal tree](zotero-checklist.md)) and social.coop posts
|
||||||
|
([the social.coop goal tree](social-coop-checklist.md)).
|
||||||
|
|
||||||
|
- source: the diigo cache, read-only (public items)
|
||||||
|
- sink: a madmode draft post
|
||||||
|
- trigger: weekly, a human in the loop
|
||||||
|
- glue: editorial — the human picks and comments
|
||||||
|
|
||||||
|
## S2. Album to album, unattended
|
||||||
|
|
||||||
|
> Every time I add a photo to Google Photos album A, it shows up in
|
||||||
|
> Amazon Photos folder A' (so it's on the TV).
|
||||||
|
|
||||||
|
[Copy on insert, IFTTT-style, endojs/playground#16](https://github.com/endojs/playground/issues/16);
|
||||||
|
context in [photo album on TV, madmode-blog#118](https://github.com/dckc/madmode-blog/issues/118).
|
||||||
|
|
||||||
|
- source: Google Photos, read-only, **one album**, with a stream of
|
||||||
|
photos added to it
|
||||||
|
- sink: Amazon Photos, write to **one folder**, plus a read-only
|
||||||
|
view of it to avoid duplicates
|
||||||
|
- trigger: each insert, nobody watching
|
||||||
|
- glue: a one-line rule
|
||||||
|
|
||||||
|
## S3. Drag photos to archive.org
|
||||||
|
|
||||||
|
> I browse my Google Photos and drag the ones worth keeping onto an
|
||||||
|
> archive.org target, which publishes them.
|
||||||
|
|
||||||
|
[The drag-and-drop comment on madmode-blog#118](https://github.com/dckc/madmode-blog/issues/118);
|
||||||
|
background in [archive.org and IPFS for the commons, madmode-blog#108](https://github.com/dckc/madmode-blog/issues/108).
|
||||||
|
The plugins should be "boring enough for an LLM to do most of the
|
||||||
|
work", given [ocap-discipline clues for LLMs, awesome-ocap#55](https://github.com/dckc/awesome-ocap/issues/55).
|
||||||
|
|
||||||
|
- source: Google Photos, read-only
|
||||||
|
- sink: archive.org, post
|
||||||
|
- trigger: a human gesture (drag-and-drop)
|
||||||
|
- glue: a UI that holds both capabilities
|
||||||
|
|
||||||
|
## What the stories share
|
||||||
|
|
||||||
|
| need | S1 | S2 | S3 | goal |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| session-cookie read where the official API is closed | diigo | Google Photos | Google Photos | webapp (done for diigo) |
|
||||||
|
| a cache of what's been read | ✓ | ✓ | ✓ | 1c (done for diigo) |
|
||||||
|
| fresh data | ✓ | ✓ | | 1f |
|
||||||
|
| **narrowed capabilities** (one album, one folder, public only) | public only | ✓ | ✓ | *no goal yet* |
|
||||||
|
| a changed signal / stream of additions | | ✓ | | T1 |
|
||||||
|
| generated code, confined | | rule | plugins | T3 |
|
||||||
|
| visual composition | | | | T2 (no story yet: parked) |
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
- Google's Photos Library API stopped serving a user's own library in
|
||||||
|
2025 (only media the app itself uploaded), as far as we know; that's
|
||||||
|
the diigo situation again, and why #118 links a
|
||||||
|
[browser-console approach](https://github.com/Ninefrm/console-automation-google-photos/).
|
||||||
|
Check before building on it.
|
||||||
|
- S1 is the first to ship; S2 is the first unattended one, so it's
|
||||||
|
where T1 and narrowed capabilities stop being optional.
|
||||||
Reference in new issue
Block a user