diff --git a/TODO.md b/TODO.md index bbf595ad..3dcafb85 100644 --- a/TODO.md +++ b/TODO.md @@ -21,7 +21,7 @@ the owner's OS user and can never be granted. Indirection there really is accide ## Themes -**95 open, 30 closed**, across 32 themes. +**96 open, 30 closed**, across 32 themes. | Theme | Open | Closed | | ------------------------------------------------------------------------------------------ | ---- | ------ | @@ -39,7 +39,7 @@ the owner's OS user and can never be granted. Indirection there really is accide | [Infra (alpha)](todo/infra/) | 7 | 0 | | [Known bugs](todo/known-bugs/) | 5 | 3 | | [Memory — one store instead of per-harness files](todo/memory/) | 1 | 0 | -| [Mobile apps](todo/mobile-apps/) | 3 | 0 | +| [Mobile apps](todo/mobile-apps/) | 4 | 0 | | [Multi-user](todo/multi-user/) | 17 | 5 | | [Notifications](todo/notifications/) | 1 | 0 | | [Plugin ecosystem — before it opens to third parties (2026-08-18)](todo/plugin-ecosystem/) | 3 | 0 | @@ -72,8 +72,8 @@ the owner's OS user and can never be granted. Indirection there really is accide - `2026-08-25` **Refresh mid-turn folds the live tool call — it reads as finished while still running** — [known-bugs/refresh-mid-tool-call-renders-the-turn-folded](todo/known-bugs/refresh-mid-tool-call-renders-the-turn-folded.md) - `2026-08-25` **The model picker shows `claude-code` instead of the model that is running** — [known-bugs/the-model-picker-shows-the-bare-harness](todo/known-bugs/the-model-picker-shows-the-bare-harness.md) - `2026-08-25` **Understand how Claude and opencode do memory, then centralize both into one vector database** — [memory/understand-and-centralize-agent-memory-into-a](todo/memory/understand-and-centralize-agent-memory-into-a.md) +- `2026-08-25` **Deep-link a todo notification straight to that item's markdown** — [mobile-apps/deep-link-a-todo-notification-to-its-file](todo/mobile-apps/deep-link-a-todo-notification-to-its-file.md) - `2026-08-25` **Add a favorites tab/panel to the file browser** — [multi-user/add-a-favorites-tab-panel-to-the-file-browser](todo/multi-user/add-a-favorites-tab-panel-to-the-file-browser.md) - `2026-08-23` **A worker cannot verify that the owner delegated to a manager, so it has to ask every time** — [agent-coordination/a-peer-cannot-verify-a-delegation](todo/agent-coordination/a-peer-cannot-verify-a-delegation.md) - `2026-08-23` **An agent cannot learn its own transcript id, so it cannot sign its own work** — [agent-coordination/an-agent-cannot-learn-its-own-session-id](todo/agent-coordination/an-agent-cannot-learn-its-own-session-id.md) - `2026-08-23` **The SendOff file size limit is one constant for everybody** — [sendoff/per-user-size-limit](todo/sendoff/per-user-size-limit.md) -- `2026-08-22` **A commander picks the cheapest model that will do the job — for itself and for what it spawns** — [background-jobs/a-commander-picks-the-cheapest-model-that-will](todo/background-jobs/a-commander-picks-the-cheapest-model-that-will.md) diff --git a/todo/mobile-apps/deep-link-a-todo-notification-to-its-file.md b/todo/mobile-apps/deep-link-a-todo-notification-to-its-file.md new file mode 100644 index 00000000..873259d5 --- /dev/null +++ b/todo/mobile-apps/deep-link-a-todo-notification-to-its-file.md @@ -0,0 +1,44 @@ +--- +id: mobile-apps/deep-link-a-todo-notification-to-its-file +title: "Deep-link a todo notification straight to that item's markdown" +theme: mobile-apps +status: open +created: 2026-08-25 +date_source: stated +order: 4 +--- + +**Deep-link a todo notification straight to that item's markdown.** Wanted 2026-08-25: pressing a +"new todo" notification should open the file directly, not just the app. + +**The mechanism exists — SendOff is the precedent to copy.** The notification catalogue +(`src/servers/notifications/catalogue.ts`) already carries a `route` per entry, e.g. +`officer/core:sendoff.landed` → `officer://files?path=Documents/SendOff/{id}`. A todo entry needs the +same shape: a `route` template, and the producer (whoever calls `/notify` when a todo is filed — +today that is this session, using `officer/core:message`, which carries no route at all) supplying the +values that fill it in. + +**One correction before copying that pattern: `?path=` is the OLD shape.** The file browser's own URL +model (`files-route.ts`, finished 2026-08-15) is the folder as the PATHNAME and `?view=` as the +open file within it — `/files/?view=`, not a `path=` query param. A todo's route +should be built the current way: folder = `todo/`, view = `.md`. Getting this right means +reading `folderHref`/the encode helpers in `files-route.ts` rather than copying SendOff's route +literally — that one predates the model it now looks like it follows. + +**Where the file actually lives is a fact worth stating rather than assuming:** `/files` is scoped to +the owner's home directory (`getRootDir` in `api/file-browser/router.ts`), and this repo's checkout +sits under it — so `todo//.md` IS reachable, as +`officer-dev/platform/todo//.md`. But that means the notification opens a raw file inside +a DEV CHECKOUT via the general-purpose file browser, not a document in the owner's own space. + +**Open question worth deciding before building, not after:** `/todos` — the Kanban board built +2026-08-24 — already has a per-item address, `?selected=`, and renders that item's markdown in a +proper detail pane with a status control, for free. A todo notification could deep-link there instead +of into the raw file browser. Both are real options; the file-browser route is what was asked for, the +board route is what already exists and reads better. Worth a one-line decision rather than defaulting +to the more literal reading. + +**Also needed regardless of which target wins:** the producer side. Whatever POSTs to `/notify` when a +todo is created (this session, and eventually the memo-dispatcher pipeline) needs to know the new +item's `id` at send time and pass it through — trivial here since the id is generated in the same +breath as the file, but worth naming as a real piece of the work, not assumed.