Add opt-in Canvas-backed channel Todos - #222
Merged
Merged
Conversation
added 2 commits
September 24, 2026 10:20
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
added 3 commits
September 24, 2026 10:39
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
kalvinnchau
reviewed
Sep 24, 2026
added 4 commits
September 24, 2026 11:19
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Collaborator
Author
kalvinnchau
approved these changes
Sep 24, 2026
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
morgmart
pushed a commit
that referenced
this pull request
Sep 24, 2026
…rs-support * origin/main: feat: show owner-view agent memories in profiles (#231) Add opt-in Canvas-backed channel Todos (#222) Skip hidden folders when discovering plugins in a folder (#229) feat: add owned local agent actions to profiles (#190) feat(channels): move session creation into the context menu (#209) Add Goose as an agent harness option (#214) feat: preview channel agent activity in profiles (#187) Use context-aware identity names with human-first priority (#167) feat: add managed agents to channels from profiles (#196) Signed-off-by: Carl <c217fe6b9d958f41c3a5e030dccc7f626775a923089cb6491305eade75ea1f1b@buzz.block.builderlab.xyz> # Conflicts: # src/features/relay/outbox.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Summary
Adds Todos, an opt-in bundled plugin, disabled by default in browser and native catalogs. Enable it in Settings → Plugins, then use the channel-header ListChecks button to open the right-side panel.
## Todosheading, automatic save after Add/check/assignment and explicit Refresh, open/completed grouping, and scoped local recovery drafts. Source-range edits preserve surrounding content; duplicate sections and unsafe edits are rejected. Disabling removes the UI, not the saved data; Channel settings → Canvas remains editable.· Assignee: [Name](nostr:npub...)suffixes. Only the exact emitted link grammar is recognized; title/angle-bracket variants remain prose. Shared identity labels distinguish namesakes, missing profiles and former members. Missing rosters disable assignment; selection rechecks current membership, while former assignees remain identifiable and clearable when the roster is available.channelPlacement: "bottom" | "side"; omitted placement stays bottom, including Terminal. Preserve panel retirement, focus restoration, popup/panel Escape behavior, settings coexistence and narrow/enlarged-text usability.Autosave pauses task actions while one save is in flight, but keeps the next-item input editable and preserves its current text, waits once for Canvas’s next permitted second, and retains failures/recovered drafts for explicit Retry. Typing an unfinished item stays local. Closing cancels an unstarted wait; accepted outbox operations remain session-owned. No dedicated backend, database, polling, background retry loop, delete/reorder feature, or concurrency overhaul. Plugin architecture documentation includes the Canvas format and placement contract.
Validation
Pushed head:
61d580966e2cd7e11ab490cabe3f0adce4295042. This remediation changes only TodosPanel, its colocated tests, and one documentation sentence. All four outstanding review threads are answered and resolved: cache unchanged Canvas parsing (two duplicate findings), preserve next-item typing during save, and await assignee popup mounting.61d58096bin/pnpm exec vitest run: 273 files / 2,875 tests passed. Five new regression cases failed againste4053128before the fix, then passed. Cache tests cover results/errors and content invalidation; deferred-save tests cover typing across success, failure/retry, and close/reopen, with duplicate Add/save blocked.61d5809661d58096e4053128Fetched main is
5015556a; branch merge base is82bb3a63. The single incoming commit changes profile activity, not Todos or the repaired contracts; left it to merged-tree CI rather than adding an unrelated merge. New-head hosted checks were inspected once after delivery, not watched. Existing approval remains APPROVED; branch rules do not dismiss it on push. Required current-head CI is still a merge gate.The full-app browser journey was not rerun locally during this remediation, respecting the no-server/no-desktop-start boundary. This does not claim a complete local
pnpm test, native-package run, or live-relay concurrency test.Test-layer accounting
Adds one browser scenario, run in Chromium and WebKit; removes none. It proves Settings enable → actual side panel → add/check/assign → automatic saves through the real outbox and fixture-signed receipt → reopen → disable → assignment remains in editable Canvas. Browser-only checks cover keyboard focus, popup/panel Escape, side geometry, themes and narrow/enlarged text. Parser/recovery/roster permutations stay in colocated Vitest tests. Autosave adds deterministic coverage for timestamp waiting/cancellation, failed-draft retry without reopening writes, and member-scoped naming against out-of-channel namesakes. Review remediation adds five colocated cases for parse caching and pending-save input retention; no additional committed browser scenarios. Uses the existing minimal app fixture plus an ephemeral signing helper.
Mutation evidence: removing checkbox focus restoration made both engines fail
toBeFocused(); restoring it passed. The focused command omits measurement dependencies and makes no channel-opening/scroll performance claim.Limits and remaining gates
Safe manual preview:
/tests/fixtures/todos.htmlon the running dev server uses local fake Canvas data.Originating Buzz channel:
9b0b1a4c-bb27-4b93-beb5-c55557161067(cheap-todo-plugin), thread7150a350f8f2466f46c1882cdfae61ff6d826c7c5708f63d0e7cae7230454130.