One task page for every task: a run's task opens the real task room - #1485
Conversation
…ker seat) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ker seat) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…urns late (#1210) The root's worker marks its task done in the store before it returns. When the supervisor's pass saw the store done in that gap, Start ended the run with the right outcome and an empty result. Start now reads the stored root result when the worker's return is missing. A new test holds the return back past one pass, so the gap is every run of the test.
…y, and the landing's deadline fits a real call Deciding whether to refresh ran after every message and opened the plan store twice each time; it now reads the rows the task sheet already carries and the store read moves into the command. The landing waited half a second for a call that takes two to four, so the refresh could only ever succeed in a test; it waits six. The rail no longer draws the whole plan when its reading holds no rows (a fallback added for a fixture), and the landing fixture sets the belt itself instead of inheriting it from the shell that ran it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…he loop and at the landing Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…nced answer The page the model read was six lines; it now says who is asking, when to open a task, what an answer is, and what to do when the record does not hold it or the person is steering. The rows, notes and task bodies are bounded, the page is said once, and the answer is found by its braces. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The owner, 2026-09-18: a prompt is written so it is true in any setup. Two example lines spelled a Go file and one a Go glob; they name a path and a name pattern instead. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…one next thing (#1209) The answer section of the chat prompt is reworded, close to byte neutral, so a reply leads with the action, uses the fewest numbered steps for a sequence, says where a multi-step job stands, gives cost in minutes or hours, states an error as cause then fix, and ends on the one thing that is the person's to do next. Shaped after the i-have-adhd skill by Ayoub Ghriss (MIT); no text copied. Fixed prefix 55,253 of 55,280; lean prefix 47,042 of 47,055.
…tore from a frame Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…l, the dot row, the run summary, one road to put work out, a landing that speaks only when an answer is owed
…conversation's turns, and the note carries the result
dev moved by one commit (f101ad2, #1440) while the first merge of the day was being pushed; this brings it in. Conflicted files and how each was settled: - cmd/codeaf/chatv3_process.go: v3Process keeps dev2's catalog ownership (catalogs, closed, lifetime, ownCatalog, keepCatalog, takeCatalogs) and gains #1440's creditWatcher inside the struct. The process builds the skill shelf, then installs the credit watcher; neither needs the other. closeAll cancels processCtx and then joins the watcher. - internal/manual/chat_test.go: dev2's six skills probes and #1440's five credits probes, side by side. Broken by the merge without a textual conflict: - internal/manual/chat/models-and-cost.md said a task on the shipped crew always runs on the paid worker model. While a known OpenRouter balance is low, an unwritten worker row now uses the free worker model; a row somebody chose keeps its model. Checked with no change: the free crew covers all five tiers, and every dev2 role (check, repair, belt worker, chat manager) reads one of them; a 402 is kept out of dev2's router retry, and the affordable-cap resend happens once; one low-credit warning path per frame beside dev2's chips, tip and keys rows; both launch roads wire ReadCredits once. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…and waited for #1440's balance reads at launch, on a key change and on a switch to a paid model run as Bubble Tea commands, and Bubble Tea does not wait for a command it started. On santos/dev2 the process's closeAll cancels and joins everything it owns (#1259, #1274), so a read could still be writing credits.json after the process that owns the profile had closed. tui3.Run now wraps ReadCredits in an owner that cancels every read in flight and waits for it before Run returns, and refuses a read that starts after close. Both local launch roads go through it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
An ended task's box names another door, so the scenario asserts the room's tabs and only logs the note box.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
@AbirAbbas ready for review and merge. It's third in line, after #1429 and #1494.
|
An ended run gives its copy back and leaves the folder on disk as a plain folder that git no longer answers for. readPlanWork only fell back to the run's branch when the folder was gone entirely, so every finished or stopped run's work tab said "the run's working copy is not here any more" while its branch still held the work. Only a folder git still answers for is now read as the live copy; every other copy is read off its branch. The manual's sentence now says when the branch is read and what the tab says without it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The work tab drew each line of a run's patch, each added file's name and each file a node changed with tabs expanded and nothing else, so a carriage return from a file with Windows line ends, a title escape or a screen clear that a worker wrote into a file reached the frame raw and repainted rows the surface owns. They now go through drawableLine, as a call's output in the transcript already does. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
tasks.md still sent held parts to the run's plan page, and worker-harness.md still said the page steps aside for the stop card and that `x` on a part ends it without a card. The page is the task room now: held parts read their state on their own rows, `x` in a room asks first for a part as for the run, and only a part's row in the tasks place ends it at once. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Reviewed this and checked it by hand in the real binary (engine road plus one I'm pushing three commits on top of
Should-fixes left for you, not blocking:
Merge order is #1429 → this → #1494. Once #1429 lands I'll merge dev into this branch (it conflicts mechanically with #1429 in app.go/input.go/render.go/view.go) and merge after CI. |
…and #1495 Four tui3 conflicts, each #1429's wall and team code beside the plan page this branch removes. Both are kept: the wall's paint term stands before the task room's, the wall, team menu and zoom keys are read where the plan page's and work tab's keys were, the row keeps both its plan and open fields, and the frame draws the wall where it drew the plan page and the work tab. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Brings in #1429 (conversation overview) and #1485 (one task page for every task). #1485 retired the page senior-dev's stored page was drawn on, so a program's task now opens its program room from every door — its row, its card, the tasks place and the run's tab. A program room draws no transcript/work tabs, the run's own tab stays the one selected tab, and the branch's guards for the retired overlays are dropped or pointed at the room. Tests that drove the old page drive the room. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#1485 replaced the separate plan page with the task room and retired the work tab as a full-frame view. This branch's one-line child rows move with it: the task room's parts are drawn through planPageLines, the side column's row with the call and the clock and money under it. The teams pane and the nav's head cover no longer ask about the plan page or the work tab, which are rooms of their chat now, and the task room's subtree test reads the room rather than the side column every chat has on this branch. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Delegation around team managers: questions go up the team tree as decision packets, settings inherited with their provenance shown, nested teams and an optional All teams manager, wrap-up and close with a deadline that survives a restart, and spending caps that raise one packet. A teams place, the places on the wordmark line, one side column with Tasks and Traffic, and a standing card that says what it is. Added in review: dev merged in over #1429's squash (through a stand-in merge so the squash does not conflict with this branch's own edits) and #1485 (the task room keeps this PR's one-line child rows; the plan page stays gone). Co-authored-by: Santosh kumar <29346072+santoshkumarradha@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
One conflict, internal/manual/chat/getting-started.md: the crew branch dropped "three" from the first-run questions (the crew step is gone) and #1429 made the places opt+1…opt+8; both are kept. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…1436) A task's crew is picked per task by internal/crewroute (class, price on every connected route, quality minus lambda times cost) instead of a stored preset. /crew holds only what is allowed, what is pinned and a daily cap; --best and --cheap move one task. Old profiles migrate once. Route health, a per-seat fallback ladder, per-task and daily spend limits, /redo stronger, remote protocol 18. Added in review: a pin keeps its thinking level, auto in the reflex or small-work row reads its default and migrates, -yes-spend passes the daily cap, the cap refusal no longer offers --cheap, zero crew money is not drawn, and the manual describes the one seats row; dev merged in over #1429, #1485, #1494 and #1511. Co-authored-by: Santosh kumar <29346072+santoshkumarradha@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
One task page for every task
In a chat, a task on the run engine opened a page of its own. #1420 restyled it to look like the task room, but it was still a second page: no transcript or work tab, no steer box, no step rows, and no tokens or model. Now every task opens the real task room, on either engine. There is one page type.
What a run's task shows in the room
The room reads the run's task through the session layer:
refusedline. A call that did not run for any other reason has no row, but it still counts in the steps. Notes you left are drawn where corrections are drawn. Notes from a worker or the run name no author. The result comes last once the task has ended.session.PlanTaskWork, built onrunCopyOfand the run's notice copy.PlanNote). Once the store has it, the room saysthe worker reads a note at its next step. A refused note shows the store's own sentence on the line you typed. On a task that has ended, the room refuses the note before sending it, in the same words its box and foot already show (this task has finished), and keeps the text in the box.x: raises theStop this task?card and then stops the task through the plan's door. For the run's root, that is the run's stop.PlanTaskRowgainsModelandTokens, and the model shown is the one the task spent the most through.The tasks place, the side list and the run's tab all open this room. The separate plan page is removed, along with its
pkey and its direct part cancel.Tabs on every room
No room had tabs before, on either engine, so this PR adds them to every task room (not to the adaptive run's graph page):
transcriptandworkare named on the trail row beside the way back.tabover an empty box switches between them, and a click on a name does the same.Apart from the tabs, older-engine tasks are unchanged.
Kept from #1420
◑ $rows.Live.Step > 0and a command.Tests
internal/tui3/planroom_test.go:PlanTaskPage;readPlanWorkagainst a real git copy;esc.Tagged e2e
TaskOnTheRunEngineThe room assertions pass. The scenario still fails on this branch, but every remaining failure fails the same way on clean santos/dev2:
→ what ran under itnever appears;donebeforerunningcan be read;maininstead of the run's branch.On clean santos/dev2 the scenario also fails at the old page's own
steps · $wait.Live check (tmux, isolated home, telemetry off, deepseek-v4-flash)
A
/taskon the run engine, opened from the tasks place:transcript · worktabs.done 9s · 3 stepswithdeepseek/deepseek-v4-pro · 22.2k tok · $0.02.tabshows the three new files as a diff.On clean santos/dev2 the same press opens the old page, which has no tabs, no model and no tokens.
Manual
Updated
reading-a-task-page.md(new section on the two tabs),worker-harness.mdandtask-controls.md.