T3 Code · Task-system concept sheet · 1 of 3

Concept A — Task Inbox

Tasks are treated like email: one global, cross-project inbox optimized for triage — sweep, snooze, done. The Inbox lives above projects in the sidebar. Untriaged tasks carry unread weight; triaged ones recede. Two-pane surface: list on the left, reading pane on the right. Keyboard triage (e done, h snooze, j/k move) makes a morning sweep of fourteen tasks a sub-minute ritual.

tested against: busy inbox (9 open) · inbox zero · task detail #245 w/ provenance + attempts · capture mid-run (log mode, agent stays Working) · start → focused thread (live attempt, task stays Open) · blocked #231 / done #212 w/ evidence · mobile home + swipe triage · mobile quick capture

A1 · Inbox — triage list + reading pane (task detail #245)
1 2 3 4 5 6
Inbox 14 open 9 · snoozed 3 · done 2
New · 3
T3 Crash: renaming a thread while its agent is settling suggested #2494m
T3 Thread list flickers on reconnect when >200 threads #238
T3 Add test for snooze across DST boundary #2411d
Open · 6
T3 Focus ring lost after closing command palette with Esc #2456w
T3 Decide retention policy for settled threads blocked #2313w
XF Focus outline invisible on amber buttons dup? #245 #1988w
Snoozed until later · 3
T3 Composer stash lost when switching projects back Mon #229
Done this week · 2
T3 Migrate diff renderer to @pierre/diffs v3 #2122d
XF Empty-state copy for archived threads #2074d
#245 Open logged 6w ago · triaged 2d ago
Focus ring lost after closing command palette with Esc
Start ✓ Done ◷ Snooze

Close the palette with Esc and keyboard focus silently lands on body — the visible focus ring disappears until the next pointer click. Tab order still works, so it passes automated checks. Repro on Safari and Chrome; regression window points at the palette portal refactor.

Provenance
Logged from Focus ring bug — #245 · 6w ago
“esc closes the palette fine but then tab focus is invisible — the ring never comes back until you click somewhere. feels like focus fell back to the document root.”
apps/web/src/palette/CommandPalette.tsx apps/web/src/styles/focus-ring.css
Attempts · 2
T3 Focus ring bug — #245 Awaiting input 5d
T3 Palette focus spike Closed 5w
Related: #198 Focus outline invisible on amber buttons — possible duplicate
▸ History · 12 events
1 Inbox sits above pinned threads — first row in the shell, global across projects. Count = open untriaged + triaged.
2 Untriaged = never opened: indigo dot + heavier title. Triaged rows recede to 400-weight. Row anatomy: dot · project monogram · title · #id (mono, tabular) · age.
3Hover reveals two ghost triage buttons: ✓ done, ◷ snooze. Keyboard sweep: e done · h snooze · j/k move. No modal, no confirm.
4 Groups mirror email triage: New · Open · Snoozed until later · Done this week. Snoozed rows show their return day; done rows keep a quiet ✓.
5 Reading pane = full task detail: identity + lifecycle pill, description, then provenance — source thread, 2-line origin quote, file chips.
6 Attempts list threads with their own status pills (thread status, not task status). #245 stays Open while an attempt awaits input.
A2 · Inbox zero
1
#
Inbox zero
Nothing waiting. Log findings from any thread with #.
1 Calm terminal state, no confetti: tiny # glyph, one line of copy that re-teaches the capture gesture. No count badge in the sidebar at zero.
A6 · Inset — blocked task · done task w/ evidence
1 2
#231 Open 3w
Decide retention policy for settled threads
Blocked — waiting on a decision: keep 90 days vs. forever
#212 Done 2d
Migrate diff renderer to @pierre/diffs v3
Swapped the renderer behind a flag, removed the legacy splitter, and verified hunk alignment on the ten largest diffs in the corpus.
✓ pnpm test — 214 passed screenshot diff +38 −6
Reopen
1 Blocked is a flag on an Open task, not a status: 2px amber left border + one amber line naming what it waits on.
2 Done carries proof, not just a checkmark: agent summary + evidence chips (test run, screenshot, diff stat) and a ghost Reopen.
A3 · Conversation — capture while the agent works (log mode)
1 2 3 4 5
t3code/ Reconnect flicker fix Working
The list still jumps when the socket reconnects — can you gate the re-render until the diff settles?
Reproduced it. The store emits a full refresh on reconnect before the server diff arrives, so the list paints twice. I’ll hold the render behind a 250 ms settle window and drop the interim frame.
Gate re-render behind settle window 4/7
While tracing this I noticed the reconnect spinner never clears on links slower than ~2 s RTT — separate bug, not touching it now.
#246 Reconnect spinner never clears on slow links Logged
Edit apps/web/src/stores/threadStore.ts
Back on the settle window — replaying a 300-thread reconnect storm against the gated render now.
# Reconnect spinner never clears on slow links claude · opus
Logging a task — won’t interrupt the agent
# Logged to Inbox · #246 View
1 The agent stays Working (sky, pulsing) through the whole capture — logging never interrupts a run.
2 Plan chip = the agent’s execution checklist: pips + step + 4/7. Deliberately distinct from tasks — no #id, no capture affordance.
3 Task chip = one quiet line in the timeline: #246 mono, inferred title, “Logged”. Never a card. It anchors provenance — the detail view quotes this spot.
4 Typing # first flips the composer to log mode: thin indigo top border + hint line. Enter logs; Esc returns to chat.
5 Bottom-left toast confirms the destination, not just the action: “Logged to Inbox · #246”, with a View escape hatch.
A4 · Starting #245 — reading-pane popover
1 2
#245 Open logged 6w ago
Focus ring lost after closing command palette with Esc
Start ✓ Done ◷ Snooze

Close the palette with Esc and keyboard focus silently lands on body — the visible focus ring disappears until the next pointer click. Tab order still works…

New focused thread
Named “Focus ring bug — #245” · claude · opus ▾
Continue here
Attach the attempt to the thread you came from
1 Default: spin a fresh focused thread named after the task, with provider/model picked inline — one Enter from triage to a running agent.
2 “Continue here” keeps the attempt in the current thread for small fixes — same attempt link either way.
A5 · The focused thread — live attempt, task stays Open
1 2
t3code/ Focus ring bug — #245 Working
#245 Focus ring lost after closing command palette with Esc Open attempt 2 · Working
Starting from the task’s provenance quote and the two linked files. First step: confirm where focus lands after the portal unmounts.
Read apps/web/src/palette/CommandPalette.tsx
Grep "restoreFocus" — 3 matches
Trace focus after portal unmount 2/5
The portal’s cleanup runs after the palette’s restoreFocus, so the stored element is already detached. That matches the “focus fell back to the document root” quote.
Reply, or # to log a task… claude · opus
1 Task ribbon under the topbar: the task keeps its Open pill next to a sky attempt chip. “In progress” is the thread’s state, never the task’s.
2 Thread auto-named from the task; provenance quote and file chips are pre-loaded into context, so the agent starts oriented.
A7 · Mobile — home with Inbox card
1 2
9:41●●●●
Home #
#
Inbox
3 new · 2 done this week
14
T3 t3code
Pinned-thread drag ordering
Working
2m
Reconnect flicker fix
Working
18m
Focus ring bug — #245
Awaiting input
5d
XF xenforo-cloud
Billing webhook retries
Pending approval
3h
Importer memory audit
Done
6h
1 Inbox card pinned above all projects — count + “what changed” subline. Tap → full-screen list (A8).
2 # button in the Home header = quick capture from anywhere (A9).
A8 · Mobile — inbox list, swipe triage
1 2
9:41●●●●
Inbox 14
New · 3
T3
Crash: renaming a settling thread
#249 · suggested
4m
T3
Thread list flickers on reconnect
#238
2h
T3
Add test for snooze across DST
#241
1d
Open · 6
T3
Focus ring lost after closing palette
#245
6w
T3
Decide retention policy
#231 · blocked
3w
XF
Focus outline invisible on amber
#198 · dup? #245
8w
1 Swipe right = done (emerald reveal, ✓). Full-swipe commits, no confirm; undo lives in a snackbar.
2 Swipe left = snooze (amber reveal, ◷) → tomorrow / next week / pick date.
A9 · Mobile — quick capture sheet
1
9:41●●●●
Home #
#
Inbox
3 new · 2 done this week
14
T3 t3code
Pinned-thread drag ordering
Working
2m
Reconnect flicker fix
Working
18m
Log a task
# Composer stash lost when switching projects
Goes to Inbox as new — triage later. Project inferred: t3code ▾
Log task
1 One field, one button. The # prefix is fixed — same sigil as desktop log mode. Sheet dismisses on log; a toast shows the new #id.