Skip to content

Commit ba38bb0

Browse files
authored
Merge pull request #176 from BerkayYilmaz11/feat/tasks-list-view
feat(tasks): Tasks screen becomes a Specs-style list with Play
2 parents d388522 + 9188e8d commit ba38bb0

22 files changed

Lines changed: 2579 additions & 723 deletions

‎.frame/STRUCTURE.json‎

Lines changed: 440 additions & 163 deletions
Large diffs are not rendered by default.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
keywords: tasks board, kanban, task list, spec tasks, play button, in progress, new task form, acceptance criteria
3+
related: tasks-detail-on-demand, boards-done-window, agent-dispatch, home-widget-board, compact-center-vs-code-density, new-spec-agent-handoff
4+
---
5+
Replaced the Tasks Kanban with the Specs screen's shell: scope segments with counts (All / Active / Done,
6+
opens on Active), In progress above Pending, Completed under the done window behind the "Show" ghost tile,
7+
tiles in the Specs grid, no drag anywhere. Under Active, In progress / Pending chips narrow to one section,
8+
the Specs phase-chip pattern (T10). The reason was spec safety: a drag rewrote a spec task's status
9+
and so the spec's phase. Spec tasks are now hidden by default; an "Include spec tasks n" checkbox lists them
10+
in the status sections with the others, each tile labelled `<slug> · T##`, read-only (no Play, no status
11+
action, no Delete; the drawer has "Open spec"). A first version put them in a section of their own, grouped
12+
per spec, behind a chip; review rejected it as a second list hung under the main one (T09 overturned D4). What the screen lists
13+
comes from the pure `src/renderer/tasks/listModel.js`; the run prompt lives in the pure
14+
`src/renderer/tasks/runPrompt.js`, which every Play surface shares through `tasksPanel.openRunFlow`.
15+
A task missing `description` or `acceptanceCriteria` gets a format step at Play: the agent writes the fields,
16+
shows the criteria and waits. New Task saves only `userRequest` verbatim; no agent runs at creation (rejected:
17+
the new-spec-style handoff at creation, which writes criteria before the code is in view).
18+
Rules: never send a status from an order write. Permanent Save sends `{ id }` only and keeps spec tasks in their
19+
file slots. A screen action must never change a `spec:` task's status. Counts must equal what each
20+
scope and status chip lists with the checkbox in its current state.
21+
22+
Chain: spec.md → plan.md → tasks.md → outcome.md
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Outcome — Tasks List View
2+
3+
## T01 — Add the pure list model
4+
5+
Added `src/renderer/tasks/listModel.js` (`buildListModel`, plus `isSpecTask` and `specSlugOf` for later tasks) and `test/tasksListModel.test.js` (23 tests, including a sweep that checks every scope's count equals what it lists, with and without the reveal and the window). Beyond plan.md's shape: the window also applies to revealed spec tasks, their older ones count toward `olderCount` only while revealed, and spec groups keep file order even under a sort. Not wired yet, as the plan sequenced.
6+
7+
_Captured: 2026-10-15 · 2 file change(s)_
8+
9+
---
10+
## T02 — Move the run prompt into the pure runPrompt.js
11+
12+
Added `src/renderer/tasks/runPrompt.js` (`missingFields`, `buildTaskPrompt`, `isSpecTask` re-exported from `listModel.js`) and made `tasksPanel.buildTaskPrompt` a one-line delegate; fixed its stale "Kanban" comment. The "Before starting" steps are now built from a list numbered First/Then, so a ready task's prompt is byte-identical to the old builder plus the criteria line (pinned in `test/taskRunPrompt.test.js` against a verbatim copy of the old function). Beyond the plan's wording, the format step tells the agent to read the task's `tasks.json` entry, because that is where a form-created task's `userRequest` is: the prompt itself still carries no request text.
13+
14+
_Captured: 2026-10-15 · 3 file change(s)_
15+
16+
---
17+
## T03 — Make addTask keep the request
18+
19+
`tasksManager.addTask` now copies a non-blank string `userRequest` verbatim, whitespace included. A blank or non-string request records no field. Extended `test/tasksManager.test.js` with the verbatim, blank/absent/wrong-type, and id-only `reorderTasks` cases; the last checks that status, `updatedAt` and `completedAt` all survive. Also rewrote `reorderTasks`' doc comment, which described Kanban drag-and-drop, to say what an entry without a status does. No code change there.
20+
21+
_Captured: 2026-10-15 · 2 file change(s)_
22+
23+
---
24+
## T04 — Replace the Kanban with the Specs-style grid
25+
26+
Rebuilt the Tasks markup in `index.html`: a toolbar with the scope segments, Filter and Sort moved to its right, and a list container in place of the three columns. `tasksDashboard.js` now renders sections of `.specs-card` tiles and the `.specs-card-older` ghost tile from `buildListModel`; all drag code, `commitOrder` and the column lookups are deleted, and the export surface is unchanged. Permanent Save sends ids only. Beyond the plan, it keeps spec tasks in their file slots and fills the remaining slots with the sorted non-spec tasks, so a sort never reorders a spec's T01…Tn. Section tracks are a task-only `.tasks-dashboard-grid` with the Specs template, because `.specs-dashboard-grid` is itself a full-height scroll container and cannot repeat per section.
27+
28+
_Captured: 2026-10-15 · 3 file change(s)_
29+
30+
---
31+
## T05 — Play and drawer status actions
32+
33+
Added the Play button to pending non-spec tiles; it calls `tasksPanel.openRunFlow` without selecting the tile. Added a drawer action slot (`index.html`) left of Delete, filled per status as D9 lists: Play → `openRunFlow`, and Mark complete, Back to pending and Reopen → `UPDATE_TASK { status }`. The action handler re-reads the task and refuses spec tasks, so a spec task opened from the top-bar chip already shows no actions before T06 adds its read-only drawer. A task with an unknown status gets the pending set, matching the section it is listed in.
34+
35+
_Captured: 2026-10-15 · 3 file change(s)_
36+
37+
---
38+
## T06 — Spec tasks on demand
39+
40+
Added the "Spec tasks n" chip after the scope segments. It is present only while the project has spec tasks, and it toggles a per-project `showSpecTasks` flag that resets on project change. Revealed spec tasks render in a "Spec tasks" section, grouped by slug with an "Open spec" link. A spec task's drawer is read-only: no actions, Delete hidden and refused, an "Open spec" button (`specsDashboard.show()` + `openSpec(slug, { instant: true })`, D17). Beyond the plan, spec tiles show their T number and a status pill, since they sit outside the status sections. Groups are headed by slug, not title, because this screen does not load spec data.
41+
42+
_Captured: 2026-10-15 · 2 file change(s)_
43+
44+
---
45+
## T07 — New Task maps to the schema
46+
47+
Replaced the New Task form's Description textarea with Request (`index.html`). `submitForm` now sends `userRequest` untrimmed when it is not blank, and never sends `description`. A tile shows `userRequest` until the task has a description. The saved task still has `description: ''`, because `addTask` defaults it. The plan left that alone, and readiness treats it as missing. The retired side panel's own task modal keeps its Description field; it is out of scope.
48+
49+
_Captured: 2026-10-15 · 2 file change(s)_
50+
51+
---
52+
## T08 — Rewrite the texts that describe the Kanban
53+
54+
Rewrote the tour's Tasks step, the guide's "Plan and tasks" sentence and capability entry 04.01 to describe the grid, Play on a pending task, and spec tasks hidden until revealed. Beyond the three texts plan.md named, two more in the same files made the same Kanban claim and changed with them: the guide's "Specs & tasks boards" item ("every task, spec-generated or added by hand") and the capabilities diagram's "kanban state" label for tasks.json. Tour and guide tests still pass, including the tour's two-sentence limit.
55+
56+
_Captured: 2026-10-15 · 3 file change(s)_
57+
58+
---
59+
## T09 — Spec tasks join the status sections behind an "Include spec tasks" checkbox
60+
61+
Overturned D4 after review: `listModel.js` drops `specGroups`, and included spec tasks now sit in the In progress / Pending / Completed sections under the same scope, window and sort rules. `tasksDashboard.js` replaces the "Spec tasks" chip and bottom section with an "Include spec tasks n" checkbox on the toolbar's right (`index.html`, `tasks-dashboard.css`). A spec tile shows `<slug> · T##` in its foot instead of its number and status pill, and keeps no Play. The guide sentence and capability entry 04.01 name the checkbox; the tour step already said only "hidden until you show them", so it stays.
62+
63+
_Captured: 2026-10-15 · 7 file change(s)_
64+
65+
---
66+
## T10 — In progress / Pending status chips under Active
67+
68+
`buildListModel` now takes `status`, narrows Active to that one section (ignored in All and Done), and returns `status:in_progress` / `status:pending` counts that do not move with the pick, while `specTasks` follows it. `tasksDashboard.js` shows the two chips after the scope segments only while Active is picked, with the Specs phase-chip markup; a second click clears the pick, any scope pick resets it, and an empty pick says "Nothing in progress." or "Nothing pending.". `tasks-dashboard.css` inks them like the section dots, and `test/tasksListModel.test.js` extends the S10 sweep to each status.
69+
70+
_Captured: 2026-10-15 · 4 file change(s)_
71+
72+
---

0 commit comments

Comments
 (0)