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
{{ message }}
Repository navigation
id: design: ID core build v1 — app model + capability system, enough to start app examples #2028
LIST 6 synthesis. Merge the app-packaging and capability investigations into the design for the basic ID build Drew prioritised: 'enough of a basic build that we can start making some more app examples.' Scope the v1 ruthlessly: the smallest app model + capability set that unblocks the sticky-notes app, chat, and boards work. Specialist/Summit-grade synthesis.
Program: Drew's 2026-10-28 directive (full text: hatch-personal memory/topics/id-program-2026-10-28.md).
Working pattern: parallel investigations, then the named synthesis issue merges them into a full design. Route guidance: Workhorse by default; Specialist/Summit for synthesis and ramification-heavy work. A result that says "done" is not the endpoint — the orchestrator reviews it and may commission another round. Deliverables: a markdown design/investigation doc (mermaid/SVG diagrams welcome) linked from this issue, plus follow-up issues for anything buildable. Build a proof of concept where the design calls for one, but do NOT build the permanent feature on top of an unreviewed PoC.
agent-note:v1 — task 5725/5726 design triage record (lane A shift, 2026-11-01). This is the LIST 6 synthesis: it merges investigation #2026 (app packaging, CLOSED, design merged via PR #2326) and investigation #2027 (capability taxonomy v0, CLOSED, record merged via PR #2337) into the v1 build decision.
The decision to be made
What is the smallest ID core — app model + capability set — that unblocks making more app examples (sticky-notes #2031, chat #2051, boards #2054)?
What the investigations established (grounded)
Packaging is designed, not built. #2026s merged record (doc/2026-10-29T12-50-36Z_design_id_app_packaging/) fixes the terms: app manifest = app.toml in the app folder (new), distinct from the world-apply manifest (src/world_manifest.rs:28, operator, apply-time) and the web-build manifest (build output). Schema v1 in doc section 2; layout pkgs/id/apps/<id>/ in section 3; invariants: folder name == app id, everything folder-relative, unknown fields are errors, an app needs at least one interface section, capabilities are REQUESTED in app.toml and GRANTED only by the operator (world-apply manifest). Verified today at main 51919e9: pkgs/id/apps/ does not exist; apps still live as pkgs/id/examples/*/.
B. Packaging only (app.toml + apps/ + discovery + adapter). Rejected: sticky-notes and chat need structured input on day one; with Screen as the only surface they would fake forms as terminal grids and bake in the workaround.
C. RECOMMENDED — phased minimum: packaging/discovery first, then exactly one interface capability (form.*) plus the text/1 contract, then the web adapter binding. Everything else stays filed for v1.1.
Recommendation (option C) — phases, all enqueued today
Extend world_caps/WorldSurface — no second capability system; requests in app.toml, grants operator-side only; folder name == app id; bounded validated DTOs on every new surface; sensor caps (loc/media/speech, when they come) never wildcard-grantable.
Questions for Drew
None that block v1. One deferred product question, named explicitly so it does not stall silently: the ESP32/MQTT path in #2343 (Home Assistant bridge vs ID speaking MQTT directly vs direct web). Options and trade-offs are in the taxonomy record; recommendation: decide when the first hardware app is actually scheduled (v1.1), not now — v1 is web/TUI/text only and loses nothing by waiting. If Drew wants it decided earlier, #2343 is the place.
agent-note:v1 — correction to the record above: the triage task for this #2028 record is task 5726 (task 5725 was the #541 triage earlier this shift). The four phase packets are tasks 5769-5772 as listed.
Activity
developing-today commentedon Oct 29, 2026
CODE-949
dezren39 commentedon Oct 29, 2026
Parent epic: #2056 — ID platform expansion (2026-10-28 directive).
dezren39 commentedon Nov 1, 2026
agent-note:v1 — task 5725/5726 design triage record (lane A shift, 2026-11-01). This is the LIST 6 synthesis: it merges investigation #2026 (app packaging, CLOSED, design merged via PR #2326) and investigation #2027 (capability taxonomy v0, CLOSED, record merged via PR #2337) into the v1 build decision.
The decision to be made
What is the smallest ID core — app model + capability set — that unblocks making more app examples (sticky-notes #2031, chat #2051, boards #2054)?
What the investigations established (grounded)
doc/2026-10-29T12-50-36Z_design_id_app_packaging/) fixes the terms: app manifest =app.tomlin the app folder (new), distinct from the world-apply manifest (src/world_manifest.rs:28, operator, apply-time) and the web-build manifest (build output). Schema v1 in doc section 2; layoutpkgs/id/apps/<id>/in section 3; invariants: folder name == app id, everything folder-relative, unknown fields are errors, an app needs at least one interface section, capabilities are REQUESTED in app.toml and GRANTED only by the operator (world-apply manifest). Verified today at main 51919e9:pkgs/id/apps/does not exist; apps still live aspkgs/id/examples/*/.src/world_caps.rsalready runs a wants/result capability model (17-name CATALOG, six stable refusal codes, bounds 64 KiB wants / 8 KiB args) for server data, andsrc/world_presentation.rshas exactly one surface,Screen. The taxonomy ruling: interface capabilities extend that model and WorldSurface; sensor caps are never wildcard-grantable; consent is per-use and revocable mid-stream. Its eight follow-ups are filed: id: device.info capability — device capability manifest for interface adaptation (#2027) #2338 device.info, id: text/1 presentation contract — text-only as the main mode, with a text projection for every surface (#2027) #2339 text/1, id: form.* capability + Form surface — structured input without program-supplied HTML (#2027) #2340 form., id: loc.* capability — position/watch with an accuracy ceiling and per-use consent (#2027) #2341 loc., id: media.* — typed media artifacts by default, one bounded raw stream for realtime (#2027) #2342 media., id: MQTT device bridge id.device.v1 — spec + labelled PoC (ESP32 path recommendation) (#2027) #2343 MQTT bridge, id: speech.* — client-side transcription by default, server capture per app (#2027) #2344 speech., id: semantic style tokens on WorldSurface — adapter-resolved, no CSS/HTML (#2027) #2345 style tokens — all still OPEN, none yet queued (verified by dedupe-key read today).Options
Recommendation (option C) — phases, all enqueued today
apps/folder (app.toml + host discovery, malformed-manifest rejection). Deduperepo-health:v1:fix:developing-today/code:issue:2324. This is the proof step #2026s own design named....:issue:2340....:issue:2339....:issue:2325.After phase 4, id: design+PoC: sticky-notes / did-it tracker — the first ID app #2031 (sticky-notes design+PoC, OPEN) is the first real app on the v1 core — it should be triaged/enqueued next; it was NOT enqueued here because its own design step comes first. The pack step (id: investigate: app packaging — apps as folders (code + resources), TUI/web interface parity, web-native specialization #2026 doc section 5) stays deliberately deferred until the PoCs discovery shape survives, per the design itself.
Invariants the implementation must hold
Extend world_caps/WorldSurface — no second capability system; requests in app.toml, grants operator-side only; folder name == app id; bounded validated DTOs on every new surface; sensor caps (loc/media/speech, when they come) never wildcard-grantable.
Questions for Drew
None that block v1. One deferred product question, named explicitly so it does not stall silently: the ESP32/MQTT path in #2343 (Home Assistant bridge vs ID speaking MQTT directly vs direct web). Options and trade-offs are in the taxonomy record; recommendation: decide when the first hardware app is actually scheduled (v1.1), not now — v1 is web/TUI/text only and loses nothing by waiting. If Drew wants it decided earlier, #2343 is the place.
dezren39 commentedon Nov 1, 2026
agent-note:v1 — correction to the record above: the triage task for this #2028 record is task 5726 (task 5725 was the #541 triage earlier this shift). The four phase packets are tasks 5769-5772 as listed.
docs(id): design minimal core for #2028
docs(id): refresh #2028 source citations
dezren39 commentedon Nov 1, 2026
Decision record: ID core v1 design.
pkgs/id/apps/<id>/app.toml, host discovery, strict validation, and app-scoped failures.world_caps/WorldSurface; requests stay separate from operator grants.form.*/Form, then first-class line-orientedtext/1, then bind manifest routes through the trusted web adapter.Merge pull request #3909 from developing-today/design/id-2028
dezren39 commentedon Nov 2, 2026
Agent note — picked up (OpenChamber scheduled lane)
repo-worker-code), lane9aca43b4-5439-4939-9f71-323f5d32521bdezren39 commentedon Nov 2, 2026
Agent note — triaged (OpenChamber scheduled lane)
repo-worker-code), lane9aca43b4-5439-4939-9f71-323f5d32521b773f54f4), anddoc/2026-11-01_design_id2028.mdis on main. The synthesis record already routed four implementation phases as tasks 5769–5772: id: PoC: package tic-tac-toe as the first apps/ folder — app.toml + host discovery #2324 packaging PoC (CLOSED), id: form.* capability + Form surface — structured input without program-supplied HTML (#2027) #2340 Form capability (OPEN/blocked), id: text/1 presentation contract — text-only as the main mode, with a text projection for every surface (#2027) #2339 text/1 (OPEN/blocked), and id: implement the [interfaces.web] adapter binding — parameterise /world + /ws/world from app.toml #2325 web adapter (CLOSED).queue/queuedlabel and closing id: design: ID core build v1 — app model + capability system, enough to start app examples #2028 with this evidence.dezren39 commentedon Nov 2, 2026
Agent note — done (OpenChamber scheduled lane)
repo-worker-code), lane9aca43b4-5439-4939-9f71-323f5d32521b