pi-goal-x 0.25.0 → 0.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -6
- package/docs/.pi/goals/.goals-pool-snapshot.json +1 -0
- package/docs/.pi/goals/{active_goal_2026080612411949_mshg3jex-svqfyt.md → archived/goal_2026080613543398_mshg3jex-svqfyt.md} +6 -6
- package/docs/.pi/goals/archived/goal_2026080614052654_mshisjml-bl1gar.md +82 -0
- package/docs/.pi/goals/archived/goal_2026080614173417_mshjewld-9z3e9p.md +72 -0
- package/docs/.pi/goals/archived/goal_2026080614441814_mshk5uvt-nnkztu.md +80 -0
- package/docs/.pi/goals/archived/goal_2026080708140425_msilpn44-qqa4fa.md +76 -0
- package/docs/.pi/goals/archived/goal_2026080708322737_msim9m81-5aa98r.md +92 -0
- package/docs/.pi/goals/goal_events.jsonl +70 -0
- package/docs/unified-dashboard.md +36 -31
- package/extensions/goal-auditor.ts +22 -9
- package/extensions/goal-commands.ts +6 -3
- package/extensions/goal-core-tools.ts +24 -9
- package/extensions/goal-state.ts +6 -4
- package/extensions/goal-widget.ts +13 -1
- package/extensions/widgets/goal-dashboard-model.ts +32 -12
- package/extensions/widgets/goal-dashboard-renderer.ts +74 -59
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -249,17 +249,15 @@ Verify that the generated report contains every required section.
|
|
|
249
249
|
Always visible above the editor while a goal is focused:
|
|
250
250
|
|
|
251
251
|
```text
|
|
252
|
-
╭─ pi-goal-x ─ Add CSV export to reports
|
|
253
|
-
│
|
|
254
|
-
|
|
255
|
-
├─ Tasks ────────────────────────────────────────────────────────────┤
|
|
252
|
+
╭─ pi-goal-x ─ Add CSV export to reports ────────────────────────────╮
|
|
253
|
+
│ goal: running [12m47s 18.2K] (+2 open) │
|
|
254
|
+
├─ Tasks · ✓3 done · 2 open ──────────── [█████░░░] · Sub 2/3 [██░░] ┤
|
|
256
255
|
│ ✓ t1 Review reports page and data source │
|
|
257
256
|
│ ✓ t2 Implement filtered CSV export │
|
|
258
|
-
│ ▸ t3 Add the download button
|
|
257
|
+
│ ▸ t3 Add the download button ☑ ▸ 2/3 │
|
|
259
258
|
│ · t4 Add documentation │
|
|
260
259
|
│ … +1 more task │
|
|
261
260
|
│ Current t3 · Add the download button │
|
|
262
|
-
│ Subtasks [███████░░░] 2/3 · 67% │
|
|
263
261
|
│ Verify Run npm test with zero failures. │
|
|
264
262
|
│ File .pi/goals/active_goal_... │
|
|
265
263
|
╰─ Ctrl+Shift+T: expand tasks ───────────────────────────────────────╯
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":1,"dirMtimeMs":1786087947377.8738,"goals":[]}
|
|
@@ -10,13 +10,12 @@
|
|
|
10
10
|
},
|
|
11
11
|
"sisyphus": false,
|
|
12
12
|
"createdAt": "2026-08-06T11:41:19.497Z",
|
|
13
|
-
"updatedAt": "2026-08-
|
|
14
|
-
"
|
|
15
|
-
"stopReason": "agent",
|
|
13
|
+
"updatedAt": "2026-08-06T13:26:28.723Z",
|
|
14
|
+
"stopReason": "user",
|
|
16
15
|
"pauseReason": "All deliverables verified and committed; the goal cannot complete without the user's signoff (criterion 7) and their acceptance of the documented B4 content-floor exemption (recommendation (a)). Presenting for review in the terminal.",
|
|
17
16
|
"pauseSuggestedAction": "Open specs/2026-08-06-non-agent-flow-optimization/BENCH-DIFF.md + HEADROOM.md and sign off: confirm the B4 content-floor exemption (or run /goal-tweak to relax targets / authorize guidance removal instead). Then tell me to complete the goal.",
|
|
18
17
|
"skipAuditor": true,
|
|
19
|
-
"revision":
|
|
18
|
+
"revision": 163,
|
|
20
19
|
"taskList": {
|
|
21
20
|
"tasks": [
|
|
22
21
|
{
|
|
@@ -50,7 +49,8 @@
|
|
|
50
49
|
"proposedAt": "2026-08-06T11:38:58.636Z"
|
|
51
50
|
},
|
|
52
51
|
"currentTaskId": "task-4",
|
|
53
|
-
"verificationContract": "run `npm run bench` (fresh BEFORE committed, then AFTER), `npm run bench:gate` PASS (including the new ≥10x invariant), `npm test` 0 failures, `npm run check` clean, re-read this goal and confirm every success criterion is met, then user signoff in a real terminal."
|
|
52
|
+
"verificationContract": "run `npm run bench` (fresh BEFORE committed, then AFTER), `npm run bench:gate` PASS (including the new ≥10x invariant), `npm test` 0 failures, `npm run check` clean, re-read this goal and confirm every success criterion is met, then user signoff in a real terminal.",
|
|
53
|
+
"archivedPath": ".pi/goals/archived/goal_2026080613543398_mshg3jex-svqfyt.md"
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
# Goal Prompt
|
|
@@ -68,7 +68,7 @@ If blocked: stop and ask the user.
|
|
|
68
68
|
|
|
69
69
|
## Progress
|
|
70
70
|
|
|
71
|
-
- Status: paused
|
|
71
|
+
- Status: paused
|
|
72
72
|
- Auto-continue: off
|
|
73
73
|
- Sisyphus mode: no
|
|
74
74
|
- Time spent: 36m29s
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"id": "mshisjml-bl1gar",
|
|
4
|
+
"objective": "On a new branch off main (proposed name: fix/open-issues), fix the four actionable open issues on tmonk/pi-goal-x — #19 (settings menu positive-integer rows: row-driven lower bound so stall timeout can be set), #20 (parseAuditorDecision: verdict marker must be the final line, not anywhere in the report), #21 (auditor prompt: delimiter-safe interpolation of objective/completion summary), #22 (update_goal blocked/paused flows must surface failure instead of reporting success) — with regression tests, a spec dir (specs/2026-08-06-fix-open-issues/ with MILESTONES.md, plus PRODUCT.md/TECH.md as needed per AGENTS.md), a CHANGELOG entry with patch bump (0.25.1), and the full test suite + typecheck green. Also close the four junk issues #15–18 via gh with an explanatory comment (user-confirmed).",
|
|
5
|
+
"status": "paused",
|
|
6
|
+
"autoContinue": false,
|
|
7
|
+
"usage": {
|
|
8
|
+
"tokensUsed": 115927,
|
|
9
|
+
"activeSeconds": 475
|
|
10
|
+
},
|
|
11
|
+
"sisyphus": false,
|
|
12
|
+
"createdAt": "2026-08-06T12:56:45.405Z",
|
|
13
|
+
"updatedAt": "2026-08-06T13:26:32.828Z",
|
|
14
|
+
"stopReason": "user",
|
|
15
|
+
"skipAuditor": true,
|
|
16
|
+
"revision": 81,
|
|
17
|
+
"taskList": {
|
|
18
|
+
"tasks": [
|
|
19
|
+
{
|
|
20
|
+
"id": "task-1",
|
|
21
|
+
"title": "Create branch fix/open-issues off main and scaffold specs/2026-08-06-fix-open-issues/ (MILESTONES.md; PRODUCT.md/TECH.md if planning is useful)",
|
|
22
|
+
"status": "complete",
|
|
23
|
+
"completedAt": "2026-08-06T12:58:01.791Z"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "task-2",
|
|
27
|
+
"title": "Fix #19: settings menu positive-integer rows use a row-driven lower bound (stallTimeoutMinutes accepts 0+, subtaskDepth 1+) + regression test",
|
|
28
|
+
"status": "complete",
|
|
29
|
+
"completedAt": "2026-08-06T12:59:12.353Z"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "task-3",
|
|
33
|
+
"title": "Fix #20 + #21: parseAuditorDecision matches only the final non-empty line; buildGoalAuditorPrompt interpolates objective/completion summary safely (escaping or non-colliding delimiters) + regression tests",
|
|
34
|
+
"status": "complete",
|
|
35
|
+
"completedAt": "2026-08-06T13:01:27.636Z"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "task-4",
|
|
39
|
+
"title": "Fix #22: runGoalBlockedFlow and the agent-pause flow return the apply() failure message when the mutation failed instead of claiming success + regression test",
|
|
40
|
+
"status": "complete",
|
|
41
|
+
"completedAt": "2026-08-06T13:03:18.851Z"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "task-5",
|
|
45
|
+
"title": "Close junk issues #15–18 via gh with a comment noting they are invalid empty-body duplicates of #19–22",
|
|
46
|
+
"status": "complete",
|
|
47
|
+
"completedAt": "2026-08-06T13:03:37.231Z"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "task-6",
|
|
51
|
+
"title": "Validation & wrap-up: npm run check clean, npm test 0 failures, CHANGELOG entry + patch bump, MILESTONES.md maps each issue fix to evidence, all committed on the branch",
|
|
52
|
+
"status": "pending"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"blockCompletion": true,
|
|
56
|
+
"proposedAt": "2026-08-06T12:56:41.516Z"
|
|
57
|
+
},
|
|
58
|
+
"currentTaskId": "task-6",
|
|
59
|
+
"archivedPath": ".pi/goals/archived/goal_2026080614052654_mshisjml-bl1gar.md"
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# Goal Prompt
|
|
63
|
+
|
|
64
|
+
On a new branch off main (proposed name: fix/open-issues), fix the four actionable open issues on tmonk/pi-goal-x — #19 (settings menu positive-integer rows: row-driven lower bound so stall timeout can be set), #20 (parseAuditorDecision: verdict marker must be the final line, not anywhere in the report), #21 (auditor prompt: delimiter-safe interpolation of objective/completion summary), #22 (update_goal blocked/paused flows must surface failure instead of reporting success) — with regression tests, a spec dir (specs/2026-08-06-fix-open-issues/ with MILESTONES.md, plus PRODUCT.md/TECH.md as needed per AGENTS.md), a CHANGELOG entry with patch bump (0.25.1), and the full test suite + typecheck green. Also close the four junk issues #15–18 via gh with an explanatory comment (user-confirmed).
|
|
65
|
+
|
|
66
|
+
## Progress
|
|
67
|
+
|
|
68
|
+
- Status: paused
|
|
69
|
+
- Auto-continue: off
|
|
70
|
+
- Sisyphus mode: no
|
|
71
|
+
- Time spent: 7m55s
|
|
72
|
+
- Tokens used: 116K (115,927) tokens
|
|
73
|
+
## Tasks
|
|
74
|
+
|
|
75
|
+
<!-- blockCompletion: true -->
|
|
76
|
+
- [x] task-1: Create branch fix/open-issues off main and scaffold specs/2026-08-06-fix-open-issues/ (MILESTONES.md; PRODUCT.md/TECH.md if planning is useful)
|
|
77
|
+
- [x] task-2: Fix #19: settings menu positive-integer rows use a row-driven lower bound (stallTimeoutMinutes accepts 0+, subtaskDepth 1+) + regression test
|
|
78
|
+
- [x] task-3: Fix #20 + #21: parseAuditorDecision matches only the final non-empty line; buildGoalAuditorPrompt interpolates objective/completion summary safely (escaping or non-colliding delimiters) + regression tests
|
|
79
|
+
- [x] task-4: Fix #22: runGoalBlockedFlow and the agent-pause flow return the apply() failure message when the mutation failed instead of claiming success + regression test
|
|
80
|
+
- [x] task-5: Close junk issues #15–18 via gh with a comment noting they are invalid empty-body duplicates of #19–22
|
|
81
|
+
- [ ] task-6: Validation & wrap-up: npm run check clean, npm test 0 failures, CHANGELOG entry + patch bump, MILESTONES.md maps each issue fix to evidence, all committed on the branch
|
|
82
|
+
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"id": "mshjewld-9z3e9p",
|
|
4
|
+
"objective": "Fix the goal-widget Escape handling so that pressing Escape stops the working as well as pausing: on a live (active + autoContinue) goal, Escape still pauses the goal but is no longer consumed — it is passed back to pi so the running tool execution / current turn is aborted too — and on an already-paused goal, Escape is passed back to pi to stop the current turn without changing goal state (restoring the pre-fix behavior). Continue on the existing fix/open-issues branch: first commit the validated pending issue fixes (#19–#22 + tests + CHANGELOG + spec docs) directly, then implement the escape fix with regression tests, spec-doc updates, and a full green validation.",
|
|
5
|
+
"status": "complete",
|
|
6
|
+
"autoContinue": true,
|
|
7
|
+
"usage": {
|
|
8
|
+
"tokensUsed": 49792,
|
|
9
|
+
"activeSeconds": 107
|
|
10
|
+
},
|
|
11
|
+
"sisyphus": false,
|
|
12
|
+
"createdAt": "2026-08-06T13:14:08.641Z",
|
|
13
|
+
"updatedAt": "2026-08-06T13:17:34.176Z",
|
|
14
|
+
"stopReason": "agent",
|
|
15
|
+
"skipAuditor": true,
|
|
16
|
+
"revision": 30,
|
|
17
|
+
"taskList": {
|
|
18
|
+
"tasks": [
|
|
19
|
+
{
|
|
20
|
+
"id": "task-1",
|
|
21
|
+
"title": "Commit the pending validated fix/open-issues work (issues #19–22 fixes, tests, CHANGELOG 0.25.1, spec docs) directly on fix/open-issues",
|
|
22
|
+
"status": "complete",
|
|
23
|
+
"completedAt": "2026-08-06T13:15:43.315Z",
|
|
24
|
+
"evidence": "Direct git commit 9bd218f on fix/open-issues: 12 staged files (4 issue fixes + tests + spec docs + CHANGELOG 0.25.1); working tree clean after commit."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "task-2",
|
|
28
|
+
"title": "Fix goal-widget.ts Escape handling: live-goal Escape still calls pauseActiveGoal but returns undefined (passes Escape to pi so the running turn stops); confirm paused-goal Escape already passes through; update the handler comments to explain consume-vs-passthrough split",
|
|
29
|
+
"status": "complete",
|
|
30
|
+
"completedAt": "2026-08-06T13:16:04.725Z",
|
|
31
|
+
"evidence": "goal-widget.ts: live-pause branch keeps pauseActiveGoal but returns undefined (Escape passes to pi, aborting the running turn); top comment updated to explain consume-vs-passthrough split; paused-goal"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "task-3",
|
|
35
|
+
"title": "Regression tests in tests/goal-modal-escape.test.ts: live-goal Escape pauses AND is not consumed; paused-goal Escape returns undefined and leaves the goal paused with no state change; existing escape tests still pass",
|
|
36
|
+
"status": "complete",
|
|
37
|
+
"completedAt": "2026-08-06T13:16:32.821Z",
|
|
38
|
+
"evidence": "tests/goal-modal-escape.test.ts: added 2 regression tests (live-goal Escape pauses + returns undefined/passthrough; paused-goal Escape passes through with no re-pause/state change). npx tsx --test tes"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "task-4",
|
|
42
|
+
"title": "Docs + validation + commit: fold the escape fix into the 0.25.1 CHANGELOG entry and the branch's PRODUCT/TECH/MILESTONES docs, npm run check clean, npm test 0 failures, commit on fix/open-issues",
|
|
43
|
+
"status": "complete",
|
|
44
|
+
"completedAt": "2026-08-06T13:17:29.781Z",
|
|
45
|
+
"evidence": "CHANGELOG 0.25.1 + PRODUCT/TECH/MILESTONES docs updated; npm run check clean; npm test 664/664 pass (2 new escape tests); committed ddf4a28 on fix/open-issues, tree clean."
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"blockCompletion": true,
|
|
49
|
+
"proposedAt": "2026-08-06T13:13:49.755Z"
|
|
50
|
+
},
|
|
51
|
+
"archivedPath": ".pi/goals/archived/goal_2026080614173417_mshjewld-9z3e9p.md"
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
# Goal Prompt
|
|
55
|
+
|
|
56
|
+
Fix the goal-widget Escape handling so that pressing Escape stops the working as well as pausing: on a live (active + autoContinue) goal, Escape still pauses the goal but is no longer consumed — it is passed back to pi so the running tool execution / current turn is aborted too — and on an already-paused goal, Escape is passed back to pi to stop the current turn without changing goal state (restoring the pre-fix behavior). Continue on the existing fix/open-issues branch: first commit the validated pending issue fixes (#19–#22 + tests + CHANGELOG + spec docs) directly, then implement the escape fix with regression tests, spec-doc updates, and a full green validation.
|
|
57
|
+
|
|
58
|
+
## Progress
|
|
59
|
+
|
|
60
|
+
- Status: complete
|
|
61
|
+
- Auto-continue: on
|
|
62
|
+
- Sisyphus mode: no
|
|
63
|
+
- Time spent: 1m47s
|
|
64
|
+
- Tokens used: 50K (49,792) tokens
|
|
65
|
+
## Tasks
|
|
66
|
+
|
|
67
|
+
<!-- blockCompletion: true -->
|
|
68
|
+
- [x] task-1: Commit the pending validated fix/open-issues work (issues #19–22 fixes, tests, CHANGELOG 0.25.1, spec docs) directly on fix/open-issues — evidence: Direct git commit 9bd218f on fix/open-issues: 12 staged files (4 issue fixes + tests + spec docs + CHANGELOG 0.25.1); working tree clean after commit.
|
|
69
|
+
- [x] task-2: Fix goal-widget.ts Escape handling: live-goal Escape still calls pauseActiveGoal but returns undefined (passes Escape to pi so the running turn stops); confirm paused-goal Escape already passes through; update the handler comments to explain consume-vs-passthrough split — evidence: goal-widget.ts: live-pause branch keeps pauseActiveGoal but returns undefined (Escape passes to pi, aborting the running turn); top comment updated to explain consume-vs-passthrough split; paused-goal
|
|
70
|
+
- [x] task-3: Regression tests in tests/goal-modal-escape.test.ts: live-goal Escape pauses AND is not consumed; paused-goal Escape returns undefined and leaves the goal paused with no state change; existing escape tests still pass — evidence: tests/goal-modal-escape.test.ts: added 2 regression tests (live-goal Escape pauses + returns undefined/passthrough; paused-goal Escape passes through with no re-pause/state change). npx tsx --test tes
|
|
71
|
+
- [x] task-4: Docs + validation + commit: fold the escape fix into the 0.25.1 CHANGELOG entry and the branch's PRODUCT/TECH/MILESTONES docs, npm run check clean, npm test 0 failures, commit on fix/open-issues — evidence: CHANGELOG 0.25.1 + PRODUCT/TECH/MILESTONES docs updated; npm run check clean; npm test 664/664 pass (2 new escape tests); committed ddf4a28 on fix/open-issues, tree clean.
|
|
72
|
+
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"id": "mshk5uvt-nnkztu",
|
|
4
|
+
"objective": "Move goal status information from the bottom of the pi screen into the goal widget: in both the compact and expanded dashboard status lines, replace the \"Focused: yes / Other goals: N\" bits with `goal: <statusLabel> [<elapsed> <tokens>] (+N open)` using the footer-status formatting (statusLabel + usage bracket, no objective preview — the header title already shows it, and the header's right-side usage folds away to avoid duplication), and stop rendering the focused-goal footer line (setStatus(\"goal\", undefined) when a goal is focused) while keeping the unfocused hint — with updated tests/goldens, spec docs, CHANGELOG entry, and a green validation, on a new branch off main.",
|
|
5
|
+
"status": "complete",
|
|
6
|
+
"autoContinue": true,
|
|
7
|
+
"usage": {
|
|
8
|
+
"tokensUsed": 120532,
|
|
9
|
+
"activeSeconds": 517
|
|
10
|
+
},
|
|
11
|
+
"sisyphus": false,
|
|
12
|
+
"skipAuditor": true,
|
|
13
|
+
"revision": 64,
|
|
14
|
+
"createdAt": "2026-08-06T13:35:06.137Z",
|
|
15
|
+
"updatedAt": "2026-08-06T13:44:18.147Z",
|
|
16
|
+
"taskList": {
|
|
17
|
+
"tasks": [
|
|
18
|
+
{
|
|
19
|
+
"id": "task-1",
|
|
20
|
+
"title": "New branch off main (e.g. feat/goal-widget-status) + scaffold specs/YYYY-MM-DD-goal-widget-status/ (PRODUCT.md, TECH.md, MILESTONES.md)",
|
|
21
|
+
"status": "complete",
|
|
22
|
+
"completedAt": "2026-08-06T13:35:37.864Z",
|
|
23
|
+
"evidence": "Branch feat/goal-widget-status created off main (15aa826); specs/2026-08-06-goal-widget-status/ scaffolded with PRODUCT.md, TECH.md, MILESTONES.md (user decisions recorded)."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "task-2",
|
|
27
|
+
"title": "Renderer change: compact + expanded dashboard status lines show `goal: <statusLabel> [<elapsed> <tokens>] (+N open)` (footer-status formatting via statusLabel + usage bits, no objective preview); remove the Focused:/Other goals: bits and the header's right-side usage (now redundant)",
|
|
28
|
+
"status": "complete",
|
|
29
|
+
"completedAt": "2026-08-06T13:40:01.161Z",
|
|
30
|
+
"evidence": "Renderer (compact + expanded) + model updated: status lines now render `goal: <footerLabel> [<footerBits>] (+N open)` via shared statusLine() helper; Focused:/Other goals: bits, STATUS_SYMBOL, and dea"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "task-3",
|
|
34
|
+
"title": "Footer removal: goal-state.ts renderUI stops calling setStatus('goal', ...) when a goal is focused (widget is the single home); keep the unfocused `goal: unfocused [N open]` hint",
|
|
35
|
+
"status": "complete",
|
|
36
|
+
"completedAt": "2026-08-06T13:40:31.928Z",
|
|
37
|
+
"evidence": "goal-state.ts renderUI: focused-goal branch now calls setStatus('goal', undefined) (clears stale unfocused hint); unfocused hint branch untouched; unused footerStatus import removed; tsc clean."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "task-4",
|
|
41
|
+
"title": "Tests + goldens: update pinned assertions (In progress · Focused: yes, Other goals: 2) in goal-widget.test.ts, goal-dashboard-golden.test.ts, goal-status.test.ts; add new assertions pinning the `goal: <status> [<usage>] (+N open)` format in compact + expanded",
|
|
42
|
+
"status": "complete",
|
|
43
|
+
"completedAt": "2026-08-06T13:43:06.406Z",
|
|
44
|
+
"evidence": "Updated pinned assertions in goal-widget.test.ts (7), goal-dashboard-golden.test.ts (6 incl. new expanded status-line pin), goal-status.test.ts (1), goal-dashboard-model.test.ts (2: footerBits usage +"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "task-5",
|
|
48
|
+
"title": "Docs + validation + commit: CHANGELOG Unreleased entry, PRODUCT/TECH/MILESTONES per AGENTS.md, npm run check clean, npm test 0 failures, grep confirms no Focused:/Other goals: text remains, commit on the new branch",
|
|
49
|
+
"status": "complete",
|
|
50
|
+
"completedAt": "2026-08-06T13:44:11.522Z",
|
|
51
|
+
"evidence": "CHANGELOG [Unreleased] entry added; PRODUCT/TECH/MILESTONES updated; npm run check clean; npm test 665/665 pass; grep confirms no functional Focused:/Other goals: remnants and no footerStatus(displayG"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"blockCompletion": true,
|
|
55
|
+
"proposedAt": "2026-08-06T13:33:22.135Z"
|
|
56
|
+
},
|
|
57
|
+
"stopReason": "agent",
|
|
58
|
+
"archivedPath": ".pi/goals/archived/goal_2026080614441814_mshk5uvt-nnkztu.md"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# Goal Prompt
|
|
62
|
+
|
|
63
|
+
Move goal status information from the bottom of the pi screen into the goal widget: in both the compact and expanded dashboard status lines, replace the "Focused: yes / Other goals: N" bits with `goal: <statusLabel> [<elapsed> <tokens>] (+N open)` using the footer-status formatting (statusLabel + usage bracket, no objective preview — the header title already shows it, and the header's right-side usage folds away to avoid duplication), and stop rendering the focused-goal footer line (setStatus("goal", undefined) when a goal is focused) while keeping the unfocused hint — with updated tests/goldens, spec docs, CHANGELOG entry, and a green validation, on a new branch off main.
|
|
64
|
+
|
|
65
|
+
## Progress
|
|
66
|
+
|
|
67
|
+
- Status: complete
|
|
68
|
+
- Auto-continue: on
|
|
69
|
+
- Sisyphus mode: no
|
|
70
|
+
- Time spent: 8m37s
|
|
71
|
+
- Tokens used: 121K (120,532) tokens
|
|
72
|
+
## Tasks
|
|
73
|
+
|
|
74
|
+
<!-- blockCompletion: true -->
|
|
75
|
+
- [x] task-1: New branch off main (e.g. feat/goal-widget-status) + scaffold specs/YYYY-MM-DD-goal-widget-status/ (PRODUCT.md, TECH.md, MILESTONES.md) — evidence: Branch feat/goal-widget-status created off main (15aa826); specs/2026-08-06-goal-widget-status/ scaffolded with PRODUCT.md, TECH.md, MILESTONES.md (user decisions recorded).
|
|
76
|
+
- [x] task-2: Renderer change: compact + expanded dashboard status lines show `goal: <statusLabel> [<elapsed> <tokens>] (+N open)` (footer-status formatting via statusLabel + usage bits, no objective preview); remove the Focused:/Other goals: bits and the header's right-side usage (now redundant) — evidence: Renderer (compact + expanded) + model updated: status lines now render `goal: <footerLabel> [<footerBits>] (+N open)` via shared statusLine() helper; Focused:/Other goals: bits, STATUS_SYMBOL, and dea
|
|
77
|
+
- [x] task-3: Footer removal: goal-state.ts renderUI stops calling setStatus('goal', ...) when a goal is focused (widget is the single home); keep the unfocused `goal: unfocused [N open]` hint — evidence: goal-state.ts renderUI: focused-goal branch now calls setStatus('goal', undefined) (clears stale unfocused hint); unfocused hint branch untouched; unused footerStatus import removed; tsc clean.
|
|
78
|
+
- [x] task-4: Tests + goldens: update pinned assertions (In progress · Focused: yes, Other goals: 2) in goal-widget.test.ts, goal-dashboard-golden.test.ts, goal-status.test.ts; add new assertions pinning the `goal: <status> [<usage>] (+N open)` format in compact + expanded — evidence: Updated pinned assertions in goal-widget.test.ts (7), goal-dashboard-golden.test.ts (6 incl. new expanded status-line pin), goal-status.test.ts (1), goal-dashboard-model.test.ts (2: footerBits usage +
|
|
79
|
+
- [x] task-5: Docs + validation + commit: CHANGELOG Unreleased entry, PRODUCT/TECH/MILESTONES per AGENTS.md, npm run check clean, npm test 0 failures, grep confirms no Focused:/Other goals: text remains, commit on the new branch — evidence: CHANGELOG [Unreleased] entry added; PRODUCT/TECH/MILESTONES updated; npm run check clean; npm test 665/665 pass; grep confirms no functional Focused:/Other goals: remnants and no footerStatus(displayG
|
|
80
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"id": "msilpn44-qqa4fa",
|
|
4
|
+
"objective": "Add task counts and a progress bar to the compact goal dashboard's \"Tasks\" header row, and make subtask progress visible per task row: the header becomes a single row with `✓N done · M open` (skipped counted as done) followed by a compact progress bar at the end of the row, the redundant standalone compact `Tasks [bar] X/Y · %` line is removed (expanded dashboard keeps its Progress section unchanged), task rows with subtasks show a `▸ done/total` marker, and the current-task subtask bar is kept.",
|
|
5
|
+
"status": "complete",
|
|
6
|
+
"autoContinue": true,
|
|
7
|
+
"usage": {
|
|
8
|
+
"tokensUsed": 113743,
|
|
9
|
+
"activeSeconds": 421
|
|
10
|
+
},
|
|
11
|
+
"sisyphus": false,
|
|
12
|
+
"skipAuditor": true,
|
|
13
|
+
"revision": 69,
|
|
14
|
+
"createdAt": "2026-08-07T07:06:14.980Z",
|
|
15
|
+
"updatedAt": "2026-08-07T07:14:04.254Z",
|
|
16
|
+
"taskList": {
|
|
17
|
+
"tasks": [
|
|
18
|
+
{
|
|
19
|
+
"id": "spec-docs",
|
|
20
|
+
"title": "Write spec docs (PRODUCT.md, TECH.md, MILESTONES.md) under specs/2026-08-07-compact-task-counts/",
|
|
21
|
+
"status": "complete",
|
|
22
|
+
"verificationContract": "Spec dir exists per AGENTS.md convention; PRODUCT.md documents the header row (counts then bar at the end), removal of the standalone compact progress line, and subtask markers; TECH.md covers model/renderer changes; MILESTONES.md updated throughout implementation.",
|
|
23
|
+
"completedAt": "2026-08-07T07:08:11.771Z",
|
|
24
|
+
"evidence": "specs/2026-08-07-compact-task-counts/ created with PRODUCT.md (header row counts+bar-at-end, standalone-line removal, subtask markers), TECH.md (model/renderer/test changes), MILESTONES.md."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "model",
|
|
28
|
+
"title": "Extend the dashboard model so each task node carries subtask counts (total + completed) for per-row markers; keep top-level progress derivation for the header bar/counts",
|
|
29
|
+
"status": "complete",
|
|
30
|
+
"verificationContract": "DashboardTaskNode gains subtask fields populated by flattenTaskTree (or equivalent); unit tests in goal-dashboard-model.test.ts pin the new fields; tsc clean.",
|
|
31
|
+
"completedAt": "2026-08-07T07:09:05.403Z",
|
|
32
|
+
"evidence": "DashboardTaskNode gains required totalSubtasks/completedSubtasks populated by flattenTaskTree (direct children, skipped=done); model tests pin parent 2/3, leaves 0, skipped-as-done; npm run check clea"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "renderer",
|
|
36
|
+
"title": "Compact dashboard: single Tasks header row with `✓N done · M open` first and a compact progress bar at the end of the row, remove the standalone compact progress line, add per-row subtask markers in the windowed list without breaking width bounds",
|
|
37
|
+
"status": "complete",
|
|
38
|
+
"verificationContract": "Compact render shows a single `├─ Tasks …` header containing `✓N done · M open` (skipped counts as done) followed by a progress bar at the end of the row before the closing frame; the standalone `Tasks [bar]` line is gone from compact; rows with subtasks show `▸ done/total`; tasks without subtasks show no marker; current-task subtask bar intact; expanded dashboard unchanged; header/rows truncate safely within the bounded width across wide/medium/narrow/minimal modes.",
|
|
39
|
+
"completedAt": "2026-08-07T07:13:51.345Z",
|
|
40
|
+
"evidence": "Compact header is `├─ Tasks · ✓3 done · 2 open ──... [█████░░░] ┤` (counts then bar at end, skipped=done); standalone compact progress line removed; `▸ done/total` markers on rows with subtasks (leaf "
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "tests-docs",
|
|
44
|
+
"title": "Update unit + golden tests, run full validation, update CHANGELOG",
|
|
45
|
+
"status": "complete",
|
|
46
|
+
"verificationContract": "npm run check (tsc --noEmit) clean; npm test full suite green with goldens pinned to the new header format and subtask markers; grep confirms no standalone compact progress-line format remains; CHANGELOG entry added.",
|
|
47
|
+
"completedAt": "2026-08-07T07:13:51.346Z",
|
|
48
|
+
"evidence": "npm run check clean; npm test 667/667 green; test:integration 28/28 green; goldens pinned to new header/marker formats; grep: no `Tasks [` in extensions/tests; README + docs/unified-dashboard.md exam"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"blockCompletion": false,
|
|
52
|
+
"proposedAt": "2026-08-07T07:05:48.948Z"
|
|
53
|
+
},
|
|
54
|
+
"stopReason": "agent",
|
|
55
|
+
"archivedPath": ".pi/goals/archived/goal_2026080708140425_msilpn44-qqa4fa.md"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# Goal Prompt
|
|
59
|
+
|
|
60
|
+
Add task counts and a progress bar to the compact goal dashboard's "Tasks" header row, and make subtask progress visible per task row: the header becomes a single row with `✓N done · M open` (skipped counted as done) followed by a compact progress bar at the end of the row, the redundant standalone compact `Tasks [bar] X/Y · %` line is removed (expanded dashboard keeps its Progress section unchanged), task rows with subtasks show a `▸ done/total` marker, and the current-task subtask bar is kept.
|
|
61
|
+
|
|
62
|
+
## Progress
|
|
63
|
+
|
|
64
|
+
- Status: complete
|
|
65
|
+
- Auto-continue: on
|
|
66
|
+
- Sisyphus mode: no
|
|
67
|
+
- Time spent: 7m01s
|
|
68
|
+
- Tokens used: 114K (113,743) tokens
|
|
69
|
+
## Tasks
|
|
70
|
+
|
|
71
|
+
<!-- blockCompletion: false -->
|
|
72
|
+
- [x] spec-docs: Write spec docs (PRODUCT.md, TECH.md, MILESTONES.md) under specs/2026-08-07-compact-task-counts/ — evidence: specs/2026-08-07-compact-task-counts/ created with PRODUCT.md (header row counts+bar-at-end, standalone-line removal, subtask markers), TECH.md (model/renderer/test changes), MILESTONES.md.
|
|
73
|
+
- [x] model: Extend the dashboard model so each task node carries subtask counts (total + completed) for per-row markers; keep top-level progress derivation for the header bar/counts — evidence: DashboardTaskNode gains required totalSubtasks/completedSubtasks populated by flattenTaskTree (direct children, skipped=done); model tests pin parent 2/3, leaves 0, skipped-as-done; npm run check clea
|
|
74
|
+
- [x] renderer: Compact dashboard: single Tasks header row with `✓N done · M open` first and a compact progress bar at the end of the row, remove the standalone compact progress line, add per-row subtask markers in the windowed list without breaking width bounds — evidence: Compact header is `├─ Tasks · ✓3 done · 2 open ──... [█████░░░] ┤` (counts then bar at end, skipped=done); standalone compact progress line removed; `▸ done/total` markers on rows with subtasks (leaf
|
|
75
|
+
- [x] tests-docs: Update unit + golden tests, run full validation, update CHANGELOG — evidence: npm run check clean; npm test 667/667 green; test:integration 28/28 green; goldens pinned to new header/marker formats; grep: no `Tasks [` in extensions/tests; README + docs/unified-dashboard.md exam
|
|
76
|
+
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"id": "msim9m81-5aa98r",
|
|
4
|
+
"objective": "Move the compact dashboard's subtask progress bar next to the task progress bar in the Tasks header row: the header becomes a single row with `✓N done · M open` (skipped counted as done), the task progress bar, then a short `Sub done/total` label with the subtask bar beside it (e.g. `├─ Tasks · ✓3 done · 2 open ─ [█████░░░] · Sub 2/3 [██░░] ┤`, shown only when the current task has subtasks); the standalone `Subtasks [bar] done/total · %` line is removed from the compact view; per-row `▸ done/total` markers and the expanded dashboard's Progress/current-task sections stay unchanged; the header remains width-safe in every layout mode.\n\nSuccess criteria:\n- The compact dashboard's Tasks section rule renders as one row: counts first (`✓N done · M open`, skipped counted as done), then a dash run, then the task progress bar, then ` · Sub done/total ` and the subtask progress bar beside it — only when the current task has subtasks; when the current task is a leaf (or there is no current task), the subtask segment is omitted.\n- The standalone compact `Subtasks [bar] done/total · %` line is gone from the compact dashboard; the current task's subtask data now lives only in the header segment and the per-row `▸ done/total` markers.\n- Per-row `▸ done/total` markers on tasks with direct subtasks remain; leaf rows show none.\n- The expanded dashboard is byte-identical to today: its Progress section and the Current-task block's `Subtasks [bar] 2/3 · 67%` line are unchanged.\n- The header truncates width-safely across all layout modes (wide/medium/narrow/minimal): the counts and both bars always survive; only the label/dash run may shrink.\n\nBoundaries:\n- In scope: extensions/widgets/goal-dashboard-renderer.ts (compact header rendering, removal of the standalone Subtasks line), spec docs under specs/2026-08-07-compact-task-counts/, golden/unit/e2e tests, README.md, docs/unified-dashboard.md, CHANGELOG.md.\n- Out of scope: the model layer (DashboardTaskNode subtask counts and taskProgress already provide everything needed), the expanded dashboard, per-row marker semantics, current-task block content, and any other widget.\n\nConstraints:\n- Follow AGENTS.md: spec docs live in specs/2026-08-07-compact-task-counts/ with MILESTONES.md updated throughout.\n- No new dependencies; no changes to expanded-dashboard output.\n- Header/rows must stay within bounded widths in every layout mode; bars use per-mode widths from LayoutSpec (task bar = headerBarWidth; subtask bar shorter, clamped to a readable minimum).\n- Keep the muted frame-tone styling of the counts/`Sub` segment consistent with the current header.\n\nVerification contract:\n- npm run check (tsc --noEmit) clean; npm test (667 cases) and npm run test:integration (28) green.\n- Golden tests pin the new header format (`· Sub 2/3 [bar]`) and the absence of the standalone compact Subtasks line.\n- grep/rg over extensions/tests confirms no `Subtasks \\[` compact standalone line remains (the expanded Current-task line and per-row markers are allowed to match only their own patterns).\n- README.md and docs/unified-dashboard.md compact examples refreshed to the new header; CHANGELOG entry added under [Unreleased].\n\nIf blocked: stop and ask the user.",
|
|
5
|
+
"status": "complete",
|
|
6
|
+
"autoContinue": true,
|
|
7
|
+
"usage": {
|
|
8
|
+
"tokensUsed": 170005,
|
|
9
|
+
"activeSeconds": 595
|
|
10
|
+
},
|
|
11
|
+
"sisyphus": false,
|
|
12
|
+
"skipAuditor": true,
|
|
13
|
+
"revision": 54,
|
|
14
|
+
"createdAt": "2026-08-07T07:21:46.945Z",
|
|
15
|
+
"updatedAt": "2026-08-07T07:32:27.376Z",
|
|
16
|
+
"taskList": {
|
|
17
|
+
"tasks": [
|
|
18
|
+
{
|
|
19
|
+
"id": "spec-docs",
|
|
20
|
+
"title": "Update spec docs (PRODUCT.md, TECH.md, MILESTONES.md) under specs/2026-08-07-compact-task-counts/ for the header layout change",
|
|
21
|
+
"status": "complete",
|
|
22
|
+
"verificationContract": "PRODUCT.md documents the header row carrying the task bar plus the `Sub done/total` subtask segment (current task only, omitted for leaf/no-current-task) and removal of the standalone compact Subtasks line; TECH.md covers the renderer change, per-mode subtask-bar widths, and truncation rules; MILESTONES.md gains the new milestone.",
|
|
23
|
+
"completedAt": "2026-08-07T07:26:30.409Z",
|
|
24
|
+
"evidence": "PRODUCT.md documents the header row with counts + task bar + `Sub done/total` subtask segment (current task only, omitted for leaf/minimal), narrow short form, and removal of both standalone compact l"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "renderer",
|
|
28
|
+
"title": "Compact Tasks header: render task bar + `Sub done/total` + subtask bar beside it (current task with subtasks only), remove the standalone compact Subtasks line, keep expanded unchanged, stay width-safe",
|
|
29
|
+
"status": "complete",
|
|
30
|
+
"verificationContract": "Compact render shows `├─ Tasks · ✓N done · M open ─ [task bar] · Sub done/total [subtask bar] ┤` when the current task has subtasks; no subtask segment when the current task is a leaf or absent; the `Subtasks [bar] …` line is gone from compact; per-row `▸ done/total` markers intact; expanded dashboard's Progress + Current-task blocks byte-identical; header truncates width-safely across wide/medium/narrow/minimal with counts and both bars surviving.",
|
|
31
|
+
"completedAt": "2026-08-07T07:32:11.976Z",
|
|
32
|
+
"evidence": "Compact header is now `├─ Tasks · ✓N done · M open ─ [task bar] · Sub done/total [subtask bar] ┤` (wide/medium labeled, narrow short `· 2/3`, minimal omits segment); no segment for leaf/absent current"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "tests-docs",
|
|
36
|
+
"title": "Update golden/unit/e2e tests, README + docs examples, CHANGELOG; run full validation",
|
|
37
|
+
"status": "complete",
|
|
38
|
+
"verificationContract": "npm run check clean; npm test (667) and npm run test:integration (28) green; goldens pin the new header segment and absence of the standalone compact Subtasks line; grep confirms no `Subtasks [` compact line remains in extensions/tests; README.md and docs/unified-dashboard.md compact examples and CHANGELOG updated.",
|
|
39
|
+
"completedAt": "2026-08-07T07:32:11.977Z",
|
|
40
|
+
"evidence": "npm run check clean; npm test 667/667; test:integration 28/28; goldens pin `· Sub 2/3 [bar]` and absence of standalone compact Subtasks line; grep: zero `Subtasks [` and zero `Tasks [` in extensions"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"blockCompletion": false,
|
|
44
|
+
"proposedAt": "2026-08-07T07:21:38.166Z"
|
|
45
|
+
},
|
|
46
|
+
"stopReason": "agent",
|
|
47
|
+
"archivedPath": ".pi/goals/archived/goal_2026080708322737_msim9m81-5aa98r.md"
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# Goal Prompt
|
|
51
|
+
|
|
52
|
+
Move the compact dashboard's subtask progress bar next to the task progress bar in the Tasks header row: the header becomes a single row with `✓N done · M open` (skipped counted as done), the task progress bar, then a short `Sub done/total` label with the subtask bar beside it (e.g. `├─ Tasks · ✓3 done · 2 open ─ [█████░░░] · Sub 2/3 [██░░] ┤`, shown only when the current task has subtasks); the standalone `Subtasks [bar] done/total · %` line is removed from the compact view; per-row `▸ done/total` markers and the expanded dashboard's Progress/current-task sections stay unchanged; the header remains width-safe in every layout mode.
|
|
53
|
+
|
|
54
|
+
Success criteria:
|
|
55
|
+
- The compact dashboard's Tasks section rule renders as one row: counts first (`✓N done · M open`, skipped counted as done), then a dash run, then the task progress bar, then ` · Sub done/total ` and the subtask progress bar beside it — only when the current task has subtasks; when the current task is a leaf (or there is no current task), the subtask segment is omitted.
|
|
56
|
+
- The standalone compact `Subtasks [bar] done/total · %` line is gone from the compact dashboard; the current task's subtask data now lives only in the header segment and the per-row `▸ done/total` markers.
|
|
57
|
+
- Per-row `▸ done/total` markers on tasks with direct subtasks remain; leaf rows show none.
|
|
58
|
+
- The expanded dashboard is byte-identical to today: its Progress section and the Current-task block's `Subtasks [bar] 2/3 · 67%` line are unchanged.
|
|
59
|
+
- The header truncates width-safely across all layout modes (wide/medium/narrow/minimal): the counts and both bars always survive; only the label/dash run may shrink.
|
|
60
|
+
|
|
61
|
+
Boundaries:
|
|
62
|
+
- In scope: extensions/widgets/goal-dashboard-renderer.ts (compact header rendering, removal of the standalone Subtasks line), spec docs under specs/2026-08-07-compact-task-counts/, golden/unit/e2e tests, README.md, docs/unified-dashboard.md, CHANGELOG.md.
|
|
63
|
+
- Out of scope: the model layer (DashboardTaskNode subtask counts and taskProgress already provide everything needed), the expanded dashboard, per-row marker semantics, current-task block content, and any other widget.
|
|
64
|
+
|
|
65
|
+
Constraints:
|
|
66
|
+
- Follow AGENTS.md: spec docs live in specs/2026-08-07-compact-task-counts/ with MILESTONES.md updated throughout.
|
|
67
|
+
- No new dependencies; no changes to expanded-dashboard output.
|
|
68
|
+
- Header/rows must stay within bounded widths in every layout mode; bars use per-mode widths from LayoutSpec (task bar = headerBarWidth; subtask bar shorter, clamped to a readable minimum).
|
|
69
|
+
- Keep the muted frame-tone styling of the counts/`Sub` segment consistent with the current header.
|
|
70
|
+
|
|
71
|
+
Verification contract:
|
|
72
|
+
- npm run check (tsc --noEmit) clean; npm test (667 cases) and npm run test:integration (28) green.
|
|
73
|
+
- Golden tests pin the new header format (`· Sub 2/3 [bar]`) and the absence of the standalone compact Subtasks line.
|
|
74
|
+
- grep/rg over extensions/tests confirms no `Subtasks \[` compact standalone line remains (the expanded Current-task line and per-row markers are allowed to match only their own patterns).
|
|
75
|
+
- README.md and docs/unified-dashboard.md compact examples refreshed to the new header; CHANGELOG entry added under [Unreleased].
|
|
76
|
+
|
|
77
|
+
If blocked: stop and ask the user.
|
|
78
|
+
|
|
79
|
+
## Progress
|
|
80
|
+
|
|
81
|
+
- Status: complete
|
|
82
|
+
- Auto-continue: on
|
|
83
|
+
- Sisyphus mode: no
|
|
84
|
+
- Time spent: 9m55s
|
|
85
|
+
- Tokens used: 170K (170,005) tokens
|
|
86
|
+
## Tasks
|
|
87
|
+
|
|
88
|
+
<!-- blockCompletion: false -->
|
|
89
|
+
- [x] spec-docs: Update spec docs (PRODUCT.md, TECH.md, MILESTONES.md) under specs/2026-08-07-compact-task-counts/ for the header layout change — evidence: PRODUCT.md documents the header row with counts + task bar + `Sub done/total` subtask segment (current task only, omitted for leaf/minimal), narrow short form, and removal of both standalone compact l
|
|
90
|
+
- [x] renderer: Compact Tasks header: render task bar + `Sub done/total` + subtask bar beside it (current task with subtasks only), remove the standalone compact Subtasks line, keep expanded unchanged, stay width-safe — evidence: Compact header is now `├─ Tasks · ✓N done · M open ─ [task bar] · Sub done/total [subtask bar] ┤` (wide/medium labeled, narrow short `· 2/3`, minimal omits segment); no segment for leaf/absent current
|
|
91
|
+
- [x] tests-docs: Update golden/unit/e2e tests, README + docs examples, CHANGELOG; run full validation — evidence: npm run check clean; npm test 667/667; test:integration 28/28; goldens pin `· Sub 2/3 [bar]` and absence of standalone compact Subtasks line; grep: zero `Subtasks [` and zero `Tasks [` in extensions
|
|
92
|
+
|
|
@@ -50,3 +50,73 @@
|
|
|
50
50
|
{"type":"task_complete","goalId":"mshg3jex-svqfyt","taskId":"task-3","evidence":"AFTER run regenerated (87 rows, agent-free). BENCH-AFTER.md + BENCH-DIFF.md + HEADROOM.md regenerated and committed (5bc2d3f). b6-gate.mjs is campaign-aware: no-regression rule for ALL rows (p50 + ops","at":"2026-08-06T12:21:11.193Z"}
|
|
51
51
|
{"type":"task_started","goalId":"mshg3jex-svqfyt","taskId":"task-4","at":"2026-08-06T12:21:13.775Z"}
|
|
52
52
|
{"type":"goal_paused","goalId":"mshg3jex-svqfyt","reason":"All deliverables verified and committed; the goal cannot complete without the user's signoff (criterion 7) and their acceptance of the documented B4 content-floor exemption (recommendation (a)). Presenting for review in the terminal.","suggestedAction":"Open specs/2026-08-06-non-agent-flow-optimization/BENCH-DIFF.md + HEADROOM.md and sign off: confirm the B4 content-floor exemption (or run /goal-tweak to relax targets / authorize guidance removal instead). Then tell me to complete the goal.","source":"agent","at":"2026-08-06T12:21:22.570Z"}
|
|
53
|
+
{"type":"goal_created","goalId":"mshisjml-bl1gar","objective":"On a new branch off main (proposed name: fix/open-issues), fix the four actionable open issues on tmonk/pi-goal-x — #19 (settings menu positive-integer rows: row-driven lower bound so stall timeout can be set), #20 (parseAuditorDecision: verdict marker must be the final line, not anywhere in the report), #21 (auditor prompt: delimiter-safe interpolation of objective/completion summary), #22 (update_goal blocked/paused flows must surface failure instead of reporting success) — with regression tests, a spec dir (specs/2026-08-06-fix-open-issues/ with MILESTONES.md, plus PRODUCT.md/TECH.md as needed per AGENTS.md), a CHANGELOG entry with patch bump (0.25.1), and the full test suite + typecheck green. Also close the four junk issues #15–18 via gh with an explanatory comment (user-confirmed).","sisyphus":false,"autoContinue":true,"at":"2026-08-06T12:56:45.405Z"}
|
|
54
|
+
{"type":"task_list_set","goalId":"mshisjml-bl1gar","taskCount":6,"blockCompletion":true,"at":"2026-08-06T12:56:45.405Z"}
|
|
55
|
+
{"type":"task_started","goalId":"mshisjml-bl1gar","taskId":"task-1","at":"2026-08-06T12:56:52.283Z"}
|
|
56
|
+
{"type":"task_complete","goalId":"mshisjml-bl1gar","taskId":"task-1","at":"2026-08-06T12:58:01.791Z"}
|
|
57
|
+
{"type":"task_started","goalId":"mshisjml-bl1gar","taskId":"task-2","at":"2026-08-06T12:58:01.792Z"}
|
|
58
|
+
{"type":"task_complete","goalId":"mshisjml-bl1gar","taskId":"task-2","at":"2026-08-06T12:59:12.353Z"}
|
|
59
|
+
{"type":"task_started","goalId":"mshisjml-bl1gar","taskId":"task-3","at":"2026-08-06T12:59:12.355Z"}
|
|
60
|
+
{"type":"task_complete","goalId":"mshisjml-bl1gar","taskId":"task-3","at":"2026-08-06T13:01:27.636Z"}
|
|
61
|
+
{"type":"task_started","goalId":"mshisjml-bl1gar","taskId":"task-4","at":"2026-08-06T13:01:27.637Z"}
|
|
62
|
+
{"type":"task_complete","goalId":"mshisjml-bl1gar","taskId":"task-4","at":"2026-08-06T13:03:18.851Z"}
|
|
63
|
+
{"type":"task_started","goalId":"mshisjml-bl1gar","taskId":"task-5","at":"2026-08-06T13:03:18.852Z"}
|
|
64
|
+
{"type":"task_complete","goalId":"mshisjml-bl1gar","taskId":"task-5","at":"2026-08-06T13:03:37.231Z"}
|
|
65
|
+
{"type":"task_started","goalId":"mshisjml-bl1gar","taskId":"task-6","at":"2026-08-06T13:03:37.232Z"}
|
|
66
|
+
{"type":"goal_paused","goalId":"mshisjml-bl1gar","reason":"user","status":"paused","at":"2026-08-06T13:05:26.541Z"}
|
|
67
|
+
{"type":"goal_created","goalId":"mshjewld-9z3e9p","objective":"Fix the goal-widget Escape handling so that pressing Escape stops the working as well as pausing: on a live (active + autoContinue) goal, Escape still pauses the goal but is no longer consumed — it is passed back to pi so the running tool execution / current turn is aborted too — and on an already-paused goal, Escape is passed back to pi to stop the current turn without changing goal state (restoring the pre-fix behavior). Continue on the existing fix/open-issues branch: first commit the validated pending issue fixes (#19–#22 + tests + CHANGELOG + spec docs) directly, then implement the escape fix with regression tests, spec-doc updates, and a full green validation.","sisyphus":false,"autoContinue":true,"at":"2026-08-06T13:14:08.641Z"}
|
|
68
|
+
{"type":"task_list_set","goalId":"mshjewld-9z3e9p","taskCount":4,"blockCompletion":true,"at":"2026-08-06T13:14:08.641Z"}
|
|
69
|
+
{"type":"task_started","goalId":"mshjewld-9z3e9p","taskId":"task-1","at":"2026-08-06T13:15:33.912Z"}
|
|
70
|
+
{"type":"task_complete","goalId":"mshjewld-9z3e9p","taskId":"task-1","evidence":"Direct git commit 9bd218f on fix/open-issues: 12 staged files (4 issue fixes + tests + spec docs + CHANGELOG 0.25.1); working tree clean after commit.","at":"2026-08-06T13:15:43.315Z"}
|
|
71
|
+
{"type":"task_started","goalId":"mshjewld-9z3e9p","taskId":"task-2","at":"2026-08-06T13:15:43.317Z"}
|
|
72
|
+
{"type":"task_complete","goalId":"mshjewld-9z3e9p","taskId":"task-2","evidence":"goal-widget.ts: live-pause branch keeps pauseActiveGoal but returns undefined (Escape passes to pi, aborting the running turn); top comment updated to explain consume-vs-passthrough split; paused-goal","at":"2026-08-06T13:16:04.725Z"}
|
|
73
|
+
{"type":"task_started","goalId":"mshjewld-9z3e9p","taskId":"task-3","at":"2026-08-06T13:16:04.726Z"}
|
|
74
|
+
{"type":"task_complete","goalId":"mshjewld-9z3e9p","taskId":"task-3","evidence":"tests/goal-modal-escape.test.ts: added 2 regression tests (live-goal Escape pauses + returns undefined/passthrough; paused-goal Escape passes through with no re-pause/state change). npx tsx --test tes","at":"2026-08-06T13:16:32.821Z"}
|
|
75
|
+
{"type":"task_started","goalId":"mshjewld-9z3e9p","taskId":"task-4","at":"2026-08-06T13:16:32.823Z"}
|
|
76
|
+
{"type":"task_complete","goalId":"mshjewld-9z3e9p","taskId":"task-4","evidence":"CHANGELOG 0.25.1 + PRODUCT/TECH/MILESTONES docs updated; npm run check clean; npm test 664/664 pass (2 new escape tests); committed ddf4a28 on fix/open-issues, tree clean.","at":"2026-08-06T13:17:29.781Z"}
|
|
77
|
+
{"type":"completion_requested","goalId":"mshjewld-9z3e9p","at":"2026-08-06T13:17:34.171Z"}
|
|
78
|
+
{"type":"audit_skipped","goalId":"mshjewld-9z3e9p","reason":"disabled","at":"2026-08-06T13:17:34.172Z"}
|
|
79
|
+
{"type":"goal_completed","goalId":"mshjewld-9z3e9p","archivePath":".pi/goals/archived/goal_2026080614173417_mshjewld-9z3e9p.md","at":"2026-08-06T13:17:34.177Z"}
|
|
80
|
+
{"type":"goal_archived","goalId":"mshjewld-9z3e9p","archivePath":".pi/goals/archived/goal_2026080614173417_mshjewld-9z3e9p.md","at":"2026-08-06T13:17:34.178Z"}
|
|
81
|
+
{"type":"goal_focused","goalId":"mshg3jex-svqfyt","reason":"selected","at":"2026-08-06T13:26:27.232Z"}
|
|
82
|
+
{"type":"goal_focused","goalId":"mshisjml-bl1gar","reason":"selected","at":"2026-08-06T13:26:31.604Z"}
|
|
83
|
+
{"type":"goal_created","goalId":"mshk5uvt-nnkztu","objective":"Move goal status information from the bottom of the pi screen into the goal widget: in both the compact and expanded dashboard status lines, replace the \"Focused: yes / Other goals: N\" bits with `goal: <statusLabel> [<elapsed> <tokens>] (+N open)` using the footer-status formatting (statusLabel + usage bracket, no objective preview — the header title already shows it, and the header's right-side usage folds away to avoid duplication), and stop rendering the focused-goal footer line (setStatus(\"goal\", undefined) when a goal is focused) while keeping the unfocused hint — with updated tests/goldens, spec docs, CHANGELOG entry, and a green validation, on a new branch off main.","sisyphus":false,"autoContinue":true,"at":"2026-08-06T13:35:06.137Z"}
|
|
84
|
+
{"type":"task_list_set","goalId":"mshk5uvt-nnkztu","taskCount":5,"blockCompletion":true,"at":"2026-08-06T13:35:06.137Z"}
|
|
85
|
+
{"type":"task_started","goalId":"mshk5uvt-nnkztu","taskId":"task-1","at":"2026-08-06T13:35:13.881Z"}
|
|
86
|
+
{"type":"task_complete","goalId":"mshk5uvt-nnkztu","taskId":"task-1","evidence":"Branch feat/goal-widget-status created off main (15aa826); specs/2026-08-06-goal-widget-status/ scaffolded with PRODUCT.md, TECH.md, MILESTONES.md (user decisions recorded).","at":"2026-08-06T13:35:37.865Z"}
|
|
87
|
+
{"type":"task_started","goalId":"mshk5uvt-nnkztu","taskId":"task-2","at":"2026-08-06T13:35:37.866Z"}
|
|
88
|
+
{"type":"task_complete","goalId":"mshk5uvt-nnkztu","taskId":"task-2","evidence":"Renderer (compact + expanded) + model updated: status lines now render `goal: <footerLabel> [<footerBits>] (+N open)` via shared statusLine() helper; Focused:/Other goals: bits, STATUS_SYMBOL, and dea","at":"2026-08-06T13:40:01.162Z"}
|
|
89
|
+
{"type":"task_started","goalId":"mshk5uvt-nnkztu","taskId":"task-3","at":"2026-08-06T13:40:01.162Z"}
|
|
90
|
+
{"type":"task_complete","goalId":"mshk5uvt-nnkztu","taskId":"task-3","evidence":"goal-state.ts renderUI: focused-goal branch now calls setStatus('goal', undefined) (clears stale unfocused hint); unfocused hint branch untouched; unused footerStatus import removed; tsc clean.","at":"2026-08-06T13:40:31.928Z"}
|
|
91
|
+
{"type":"task_started","goalId":"mshk5uvt-nnkztu","taskId":"task-4","at":"2026-08-06T13:40:31.928Z"}
|
|
92
|
+
{"type":"task_complete","goalId":"mshk5uvt-nnkztu","taskId":"task-4","evidence":"Updated pinned assertions in goal-widget.test.ts (7), goal-dashboard-golden.test.ts (6 incl. new expanded status-line pin), goal-status.test.ts (1), goal-dashboard-model.test.ts (2: footerBits usage +","at":"2026-08-06T13:43:06.406Z"}
|
|
93
|
+
{"type":"task_started","goalId":"mshk5uvt-nnkztu","taskId":"task-5","at":"2026-08-06T13:43:06.407Z"}
|
|
94
|
+
{"type":"task_complete","goalId":"mshk5uvt-nnkztu","taskId":"task-5","evidence":"CHANGELOG [Unreleased] entry added; PRODUCT/TECH/MILESTONES updated; npm run check clean; npm test 665/665 pass; grep confirms no functional Focused:/Other goals: remnants and no footerStatus(displayG","at":"2026-08-06T13:44:11.522Z"}
|
|
95
|
+
{"type":"completion_requested","goalId":"mshk5uvt-nnkztu","at":"2026-08-06T13:44:18.145Z"}
|
|
96
|
+
{"type":"audit_skipped","goalId":"mshk5uvt-nnkztu","reason":"disabled","at":"2026-08-06T13:44:18.145Z"}
|
|
97
|
+
{"type":"goal_completed","goalId":"mshk5uvt-nnkztu","archivePath":".pi/goals/archived/goal_2026080614441814_mshk5uvt-nnkztu.md","at":"2026-08-06T13:44:18.148Z"}
|
|
98
|
+
{"type":"goal_archived","goalId":"mshk5uvt-nnkztu","archivePath":".pi/goals/archived/goal_2026080614441814_mshk5uvt-nnkztu.md","at":"2026-08-06T13:44:18.148Z"}
|
|
99
|
+
{"type":"goal_created","goalId":"msilpn44-qqa4fa","objective":"Add task counts and a progress bar to the compact goal dashboard's \"Tasks\" header row, and make subtask progress visible per task row: the header becomes a single row with `✓N done · M open` (skipped counted as done) followed by a compact progress bar at the end of the row, the redundant standalone compact `Tasks [bar] X/Y · %` line is removed (expanded dashboard keeps its Progress section unchanged), task rows with subtasks show a `▸ done/total` marker, and the current-task subtask bar is kept.","sisyphus":false,"autoContinue":true,"at":"2026-08-07T07:06:14.980Z"}
|
|
100
|
+
{"type":"task_list_set","goalId":"msilpn44-qqa4fa","taskCount":4,"blockCompletion":false,"at":"2026-08-07T07:06:14.980Z"}
|
|
101
|
+
{"type":"task_started","goalId":"msilpn44-qqa4fa","taskId":"spec-docs","at":"2026-08-07T07:06:20.796Z"}
|
|
102
|
+
{"type":"task_complete","goalId":"msilpn44-qqa4fa","taskId":"spec-docs","evidence":"specs/2026-08-07-compact-task-counts/ created with PRODUCT.md (header row counts+bar-at-end, standalone-line removal, subtask markers), TECH.md (model/renderer/test changes), MILESTONES.md.","at":"2026-08-07T07:08:11.771Z"}
|
|
103
|
+
{"type":"task_started","goalId":"msilpn44-qqa4fa","taskId":"model","at":"2026-08-07T07:08:11.773Z"}
|
|
104
|
+
{"type":"task_complete","goalId":"msilpn44-qqa4fa","taskId":"model","evidence":"DashboardTaskNode gains required totalSubtasks/completedSubtasks populated by flattenTaskTree (direct children, skipped=done); model tests pin parent 2/3, leaves 0, skipped-as-done; npm run check clea","at":"2026-08-07T07:09:05.403Z"}
|
|
105
|
+
{"type":"task_started","goalId":"msilpn44-qqa4fa","taskId":"renderer","at":"2026-08-07T07:09:05.405Z"}
|
|
106
|
+
{"type":"task_complete","goalId":"msilpn44-qqa4fa","taskId":"renderer","evidence":"Compact header is `├─ Tasks · ✓3 done · 2 open ──... [█████░░░] ┤` (counts then bar at end, skipped=done); standalone compact progress line removed; `▸ done/total` markers on rows with subtasks (leaf ","at":"2026-08-07T07:13:51.346Z"}
|
|
107
|
+
{"type":"task_complete","goalId":"msilpn44-qqa4fa","taskId":"tests-docs","evidence":"npm run check clean; npm test 667/667 green; test:integration 28/28 green; goldens pinned to new header/marker formats; grep: no `Tasks [` in extensions/tests; README + docs/unified-dashboard.md exam","at":"2026-08-07T07:13:51.347Z"}
|
|
108
|
+
{"type":"completion_requested","goalId":"msilpn44-qqa4fa","at":"2026-08-07T07:14:04.248Z"}
|
|
109
|
+
{"type":"audit_skipped","goalId":"msilpn44-qqa4fa","reason":"disabled","at":"2026-08-07T07:14:04.249Z"}
|
|
110
|
+
{"type":"goal_completed","goalId":"msilpn44-qqa4fa","archivePath":".pi/goals/archived/goal_2026080708140425_msilpn44-qqa4fa.md","at":"2026-08-07T07:14:04.255Z"}
|
|
111
|
+
{"type":"goal_archived","goalId":"msilpn44-qqa4fa","archivePath":".pi/goals/archived/goal_2026080708140425_msilpn44-qqa4fa.md","at":"2026-08-07T07:14:04.255Z"}
|
|
112
|
+
{"type":"goal_created","goalId":"msim9m81-5aa98r","objective":"Move the compact dashboard's subtask progress bar next to the task progress bar in the Tasks header row: the header becomes a single row with `✓N done · M open` (skipped counted as done), the task progress bar, then a short `Sub done/total` label with the subtask bar beside it (e.g. `├─ Tasks · ✓3 done · 2 open ─ [█████░░░] · Sub 2/3 [██░░] ┤`, shown only when the current task has subtasks); the standalone `Subtasks [bar] done/total · %` line is removed from the compact view; per-row `▸ done/total` markers and the expanded dashboard's Progress/current-task sections stay unchanged; the header remains width-safe in every layout mode.\n\nSuccess criteria:\n- The compact dashboard's Tasks section rule renders as one row: counts first (`✓N done · M open`, skipped counted as done), then a dash run, then the task progress bar, then ` · Sub done/total ` and the subtask progress bar beside it — only when the current task has subtasks; when the current task is a leaf (or there is no current task), the subtask segment is omitted.\n- The standalone compact `Subtasks [bar] done/total · %` line is gone from the compact dashboard; the current task's subtask data now lives only in the header segment and the per-row `▸ done/total` markers.\n- Per-row `▸ done/total` markers on tasks with direct subtasks remain; leaf rows show none.\n- The expanded dashboard is byte-identical to today: its Progress section and the Current-task block's `Subtasks [bar] 2/3 · 67%` line are unchanged.\n- The header truncates width-safely across all layout modes (wide/medium/narrow/minimal): the counts and both bars always survive; only the label/dash run may shrink.\n\nBoundaries:\n- In scope: extensions/widgets/goal-dashboard-renderer.ts (compact header rendering, removal of the standalone Subtasks line), spec docs under specs/2026-08-07-compact-task-counts/, golden/unit/e2e tests, README.md, docs/unified-dashboard.md, CHANGELOG.md.\n- Out of scope: the model layer (DashboardTaskNode subtask counts and taskProgress already provide everything needed), the expanded dashboard, per-row marker semantics, current-task block content, and any other widget.\n\nConstraints:\n- Follow AGENTS.md: spec docs live in specs/2026-08-07-compact-task-counts/ with MILESTONES.md updated throughout.\n- No new dependencies; no changes to expanded-dashboard output.\n- Header/rows must stay within bounded widths in every layout mode; bars use per-mode widths from LayoutSpec (task bar = headerBarWidth; subtask bar shorter, clamped to a readable minimum).\n- Keep the muted frame-tone styling of the counts/`Sub` segment consistent with the current header.\n\nVerification contract:\n- npm run check (tsc --noEmit) clean; npm test (667 cases) and npm run test:integration (28) green.\n- Golden tests pin the new header format (`· Sub 2/3 [bar]`) and the absence of the standalone compact Subtasks line.\n- grep/rg over extensions/tests confirms no `Subtasks \\[` compact standalone line remains (the expanded Current-task line and per-row markers are allowed to match only their own patterns).\n- README.md and docs/unified-dashboard.md compact examples refreshed to the new header; CHANGELOG entry added under [Unreleased].\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-08-07T07:21:46.945Z"}
|
|
113
|
+
{"type":"task_list_set","goalId":"msim9m81-5aa98r","taskCount":3,"blockCompletion":false,"at":"2026-08-07T07:21:46.945Z"}
|
|
114
|
+
{"type":"task_started","goalId":"msim9m81-5aa98r","taskId":"spec-docs","at":"2026-08-07T07:21:53.250Z"}
|
|
115
|
+
{"type":"task_complete","goalId":"msim9m81-5aa98r","taskId":"spec-docs","evidence":"PRODUCT.md documents the header row with counts + task bar + `Sub done/total` subtask segment (current task only, omitted for leaf/minimal), narrow short form, and removal of both standalone compact l","at":"2026-08-07T07:26:30.410Z"}
|
|
116
|
+
{"type":"task_started","goalId":"msim9m81-5aa98r","taskId":"renderer","at":"2026-08-07T07:26:30.410Z"}
|
|
117
|
+
{"type":"task_complete","goalId":"msim9m81-5aa98r","taskId":"renderer","evidence":"Compact header is now `├─ Tasks · ✓N done · M open ─ [task bar] · Sub done/total [subtask bar] ┤` (wide/medium labeled, narrow short `· 2/3`, minimal omits segment); no segment for leaf/absent current","at":"2026-08-07T07:32:11.976Z"}
|
|
118
|
+
{"type":"task_complete","goalId":"msim9m81-5aa98r","taskId":"tests-docs","evidence":"npm run check clean; npm test 667/667; test:integration 28/28; goldens pin `· Sub 2/3 [bar]` and absence of standalone compact Subtasks line; grep: zero `Subtasks [` and zero `Tasks [` in extensions","at":"2026-08-07T07:32:11.977Z"}
|
|
119
|
+
{"type":"completion_requested","goalId":"msim9m81-5aa98r","at":"2026-08-07T07:32:27.371Z"}
|
|
120
|
+
{"type":"audit_skipped","goalId":"msim9m81-5aa98r","reason":"disabled","at":"2026-08-07T07:32:27.371Z"}
|
|
121
|
+
{"type":"goal_completed","goalId":"msim9m81-5aa98r","archivePath":".pi/goals/archived/goal_2026080708322737_msim9m81-5aa98r.md","at":"2026-08-07T07:32:27.377Z"}
|
|
122
|
+
{"type":"goal_archived","goalId":"msim9m81-5aa98r","archivePath":".pi/goals/archived/goal_2026080708322737_msim9m81-5aa98r.md","at":"2026-08-07T07:32:27.378Z"}
|