@mstar-harness/dsh 3.6.3 → 3.7.0

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.
Files changed (69) hide show
  1. package/README.md +4 -6
  2. package/README.zh.md +3 -3
  3. package/dist/client/panel/PanelView.d.ts +8 -11
  4. package/dist/client/panel/TabNav.d.ts +2 -2
  5. package/dist/client/panel/graph/event-log.d.ts +5 -9
  6. package/dist/client/panel/graph/project-graph.d.ts +53 -72
  7. package/dist/client/panel/graph/schema.d.ts +31 -37
  8. package/dist/client/panel/locale.d.ts +19 -19
  9. package/dist/client/panel/pages/AgentCanvasPage.d.ts +40 -58
  10. package/dist/client/panel/pages/EventLogPage.d.ts +6 -6
  11. package/dist/client/panel/pages/IterationInfoSection.d.ts +9 -11
  12. package/dist/client/panel/pages/IterationTaskPage.d.ts +3 -3
  13. package/dist/client/panel/plan-sort.d.ts +3 -6
  14. package/dist/client/panel/state-section.d.ts +1 -1
  15. package/dist/client/panel/zones/Legend.d.ts +2 -2
  16. package/dist/client/panel/zones/ProjectRollup.d.ts +1 -2
  17. package/dist/client/panel/zones/TaskBoard.d.ts +1 -2
  18. package/dist/gates/_shared.d.ts +7 -10
  19. package/dist/gates/adapter.d.ts +6 -9
  20. package/dist/gates/agent-flow.d.ts +49 -59
  21. package/dist/gates/agent-personas.d.ts +1 -2
  22. package/dist/gates/catalog.d.ts +2 -5
  23. package/dist/gates/dispatch.d.ts +9 -11
  24. package/dist/gates/fallbacks-advisory.d.ts +2 -3
  25. package/dist/gates/fallbacks-probe.d.ts +2 -2
  26. package/dist/gates/fallbacks-seeds.d.ts +1 -1
  27. package/dist/gates/fallbacks-structural.d.ts +1 -1
  28. package/dist/gates/goal-bridge.d.ts +6 -9
  29. package/dist/gates/role-persona.d.ts +2 -3
  30. package/dist/gates/skill-lint.d.ts +19 -2
  31. package/dist/gates/system-prompt.d.ts +7 -11
  32. package/dist/gates/tools.d.ts +1 -1
  33. package/dist/gates/workflow-ledger.d.ts +21 -28
  34. package/dist/gates/workflow-policy.d.ts +15 -19
  35. package/dist/gates/workflow-selection.d.ts +3 -3
  36. package/dist/index.js +215 -33
  37. package/dist/types.d.ts +4 -7
  38. package/harness-commands/iteration-drive.md +6 -6
  39. package/harness-commands/iteration-loop.md +7 -7
  40. package/harness-commands/iteration-start.md +8 -8
  41. package/harness-skills/mstar-coding-behavior/SKILL.md +3 -20
  42. package/harness-skills/mstar-dispatch-gates/SKILL.md +7 -13
  43. package/harness-skills/mstar-dispatch-gates/references/leaf-executor-checklist.md +1 -1
  44. package/harness-skills/mstar-harness-core/SKILL.md +9 -53
  45. package/harness-skills/mstar-host/references/zcode.md +1 -0
  46. package/harness-skills/mstar-iteration/SKILL.md +32 -318
  47. package/harness-skills/mstar-iteration/references/command-shared-invariants.md +1 -1
  48. package/harness-skills/mstar-iteration/references/phase-1-prepare.md +155 -0
  49. package/harness-skills/mstar-iteration/references/phase-2-worktree-lease.md +113 -3
  50. package/harness-skills/mstar-iteration/references/phase5-helper-discovery.md +1 -1
  51. package/harness-skills/mstar-roles/SKILL.md +14 -12
  52. package/harness-skills/mstar-roles/references/_shared/leaf-executor-core.md +5 -6
  53. package/harness-skills/mstar-roles/references/architect.md +1 -1
  54. package/harness-skills/mstar-roles/references/code-reviewer.md +11 -1
  55. package/harness-skills/mstar-roles/references/frontend-dev.md +1 -1
  56. package/harness-skills/mstar-roles/references/fullstack-dev-shared.md +1 -1
  57. package/harness-skills/mstar-roles/references/ops-engineer.md +1 -1
  58. package/harness-skills/mstar-roles/references/product-manager.md +1 -1
  59. package/harness-skills/mstar-roles/references/project-manager/dispatch-and-assignment.md +4 -0
  60. package/harness-skills/mstar-roles/references/project-manager.md +6 -4
  61. package/harness-skills/mstar-roles/references/prompt-engineer.md +1 -1
  62. package/harness-skills/mstar-roles/references/qa-engineer.md +1 -1
  63. package/harness-skills/mstar-roles/references/qc-specialist-shared.md +1 -1
  64. package/harness-skills/mstar-roles/references/writing-specialist.md +1 -1
  65. package/harness-skills/mstar-sdd/references/file-handoffs.md +40 -7
  66. package/harness-skills/mstar-sdd/references/implementer-continuation-prompt.md +9 -0
  67. package/harness-skills/mstar-sdd/references/implementer-prompt.md +9 -0
  68. package/harness-skills/mstar-sdd/references/task-reviewer-prompt.md +7 -0
  69. package/package.json +1 -1
@@ -10,7 +10,7 @@
10
10
  * engine phase gate only evaluates Phase 2→3→4, so the catalog never emits
11
11
  * `merge-ready` as current — Step 5 stays schema-only idle. Step 1
12
12
  * (`iteration-start`) IS compass-driven current during Phase 1 — the
13
- * `compassStatus: 'active'` field (plan 20260811-panel-f4-iteration-zone)
13
+ * `compassStatus: 'active'` field
14
14
  * lights it, so it is NOT a "never current" node; only Step 5 has no source
15
15
  * that can light it. The loop edge is planning semantics (one iteration
16
16
  * closes, the next begins).
@@ -19,7 +19,7 @@
19
19
  export declare const PHASE_IDS: readonly ["iteration-start", "autonomous-execute", "iteration-close", "pr-delivery", "merge-ready"];
20
20
  export type PhaseId = (typeof PHASE_IDS)[number];
21
21
  /** Plan state machine bucket ids (spec §2.4): 4 known states + the merged
22
- * `blocked-unknown` catch-all (plan 20260813-panel-quick-fixes Task 1 — the
22
+ * `blocked-unknown` catch-all (the
23
23
  * `Blocked` state and the former `unknown` catch-all fold into ONE column). */
24
24
  export declare const PLAN_STATE_IDS: readonly ["Todo", "InProgress", "InReview", "Done", "blocked-unknown"];
25
25
  export type PlanStateId = (typeof PLAN_STATE_IDS)[number];
@@ -32,7 +32,7 @@ export interface PhaseEdge {
32
32
  export declare const PHASE_EDGES: PhaseEdge[];
33
33
  /** Plan state machine edges (spec §2.4): `Done` is terminal (no out-edges);
34
34
  * `blocked-unknown` keeps the InProgress↔Blocked recovery back-edge (plan
35
- * 20260813-panel-quick-fixes Task 1 — the merged column docks the Blocked ⇄). */
35
+ * Task 1 — the merged column docks the Blocked ⇄). */
36
36
  export declare const PLAN_STATE_EDGES: {
37
37
  source: PlanStateId;
38
38
  target: PlanStateId;
@@ -62,29 +62,27 @@ export declare const TRANSITION_TO_PHASE: Readonly<Record<string, PhaseId>>;
62
62
  * - Phase 3–5 (iteration-close / pr-delivery / merge-ready) dispatch no
63
63
  * routine subagents → no stages (spec §2.3).
64
64
  *
65
- * Off-pipeline roles (plan 20260811-panel-f3-agent-general) live in the
65
+ * Off-pipeline roles live in the
66
66
  * KNOWN_AGENTS roster with `zone` markers, NOT here: `ops-engineer` and
67
67
  * `prompt-engineer` are on-demand dispatches (mstar-roles routing table,
68
68
  * as needed) — they stay OUTSIDE this union (their event-log `unexpected`
69
69
  * badge is unchanged; bucket membership and expectedness are ORTHOGONAL
70
- * dimensions — plan 20260812-panel-f5-agent-layout Task 1, see
70
+ * dimensions, see
71
71
  * SDD_BUCKET_ROLES). The single `general` bucket (plan
72
- * 20260811-panel-f3-agent-general) collects every unmatched / anonymous
72
+ * collects every unmatched / anonymous
73
73
  * dispatch (role ''), plus stray off-roster roles like `scout`; the SDD
74
74
  * per-task reviewer is now the PIPELINE role `code-reviewer` (v2.1.1 — the
75
75
  * former `generalPurpose` seat), so the `general` bucket no longer
76
76
  * describes a pipeline seat.
77
77
  *
78
- * General-bucket PLACEMENT (plan 20260812-panel-f5-agent-layout Task 1 —
79
- * user 2026-08-12 decision): the `general` bucket moves to its OWN rightmost
78
+ * General-bucket PLACEMENT: the `general` bucket moves to its OWN rightmost
80
79
  * UNKNOWN column — the projection still emits `zone: 'general'` entities
81
80
  * (semantics unchanged, placement is a RENDER-layer decision), and the
82
- * render (Task 2) places them in that rightmost column. The earlier F4.2
81
+ * render places them in that rightmost column. The earlier
83
82
  * placement (BOTTOM INSIDE the `sdd-implement` column bucket) is
84
- * superseded by the F5 user decision; the former SDD implement ↔ review
83
+ * superseded by the F5; the former SDD implement ↔ review
85
84
  * skeleton EDGE (sdd-implement → general back-edge, the `loop: true` arrow)
86
- * stays REMOVED from the projection (plan 20260811-panel-f4-agent-view Task
87
- * 1); the F5 supervise line is a SEPARATE sub-bucket edge (see
85
+ * stays REMOVED from the projection ; the F5 supervise line is a SEPARATE sub-bucket edge (see
88
86
  * project-graph.ts `superviseEdges`).
89
87
  *
90
88
  * Matching rules (spec §2.3 — implemented by `projectGraph`'s flow
@@ -103,15 +101,14 @@ export interface ExpectedRoleStage {
103
101
  roles: readonly string[];
104
102
  }
105
103
  /** Expected role pipeline skeleton: 4 stages (spec agent-flow-catalog-graph
106
- * §2.3; plan 20260812-panel-f5-agent-layout Task 1 — `code-reviewer` joins
104
+ * §2.3; — `code-reviewer` joins
107
105
  * the sdd-implement stage: v2.1.1 makes the SDD L2 task reviewer a routine
108
106
  * pipeline role, the former `generalPurpose` seat; ops-engineer /
109
107
  * prompt-engineer stay OFF the pipeline — on-demand; qa-gate is the
110
108
  * terminal stage). */
111
109
  export declare const EXPECTED_ROLE_FLOW: readonly ExpectedRoleStage[];
112
110
  /**
113
- * SDD sub-bucket membership (plan 20260812-panel-f5-agent-layout Task 1 —
114
- * CLIENT-SIDE DESIGN KNOWLEDGE): which roles live in which sub-bucket of the
111
+ * SDD sub-bucket membership : which roles live in which sub-bucket of the
115
112
  * `sdd-implement` column — `implementor` (the implementer roles PLUS the
116
113
  * on-demand ops-engineer / prompt-engineer: they are implementor-family
117
114
  * dispatches, not a separate stage) and `reviewer` (code-reviewer, the SDD
@@ -132,7 +129,7 @@ export declare const SDD_BUCKET_ROLES: {
132
129
  };
133
130
  /**
134
131
  * The known-agent roster (spec §4 / §6.2 / decision point D3 + plan
135
- * 20260811-panel-f3-agent-general + plan 20260812-panel-f5-agent-layout Task
132
+ * Task
136
133
  * 1): the static FULL set of ASSIGNABLE roles the panel may ever show —
137
134
  * every EXPECTED_ROLE_FLOW role PLUS the off-pipeline roles `prompt-engineer`
138
135
  * (in the mstar-roles table but not in the pipeline) and `ops-engineer`
@@ -142,13 +139,13 @@ export declare const SDD_BUCKET_ROLES: {
142
139
  * the SDD L2 task reviewer, to reach 14).
143
140
  *
144
141
  * `explore` is DELIBERATELY NOT in the roster (plan
145
- * 20260811-panel-f3-agent-general — user F3 feedback): it is a scouting
142
+ * : it is a scouting
146
143
  * adjunct role with no standalone presentation value, so it is removed from
147
144
  * the canvas (a stray `explore` dispatch still folds into the `general`
148
145
  * bucket — it is not a KNOWN_AGENTS id).
149
146
  *
150
147
  * `project-manager` is deliberately NOT in the roster (plan
151
- * 20260811-panel-f2-quickfix Item 2 — user F2 feedback): it is the PRIMARY
148
+ * Item 2): it is the PRIMARY
152
149
  * orchestration agent (mstar-roles mapping `mode: primary`), the seat that
153
150
  * DISPATCHES subagents — never an assignable subagent itself, so it must
154
151
  * not appear as a dispatchable entity in the 代理执行 tab.
@@ -160,16 +157,14 @@ export declare const SDD_BUCKET_ROLES: {
160
157
  * carry an explicit `zone` — `on-demand` (ops-engineer / prompt-engineer:
161
158
  * implementor-sub-bucket dispatches with an on-demand badge — the render
162
159
  * places them inside the `sdd-implement` column's implementor partition,
163
- * Task 2) or `general` (the general bucket = ANY unmatched / anonymous
160
+ * or `general` (the general bucket = ANY unmatched / anonymous
164
161
  * dispatch (role '') in the projection — the rightmost UNKNOWN column,
165
- * Task 2).
166
- *
167
- * General-bucket placement (plan 20260812-panel-f5-agent-layout Task 1,
168
- * user 2026-08-12): the `general` bucket gets its OWN rightmost unknown
162
+ *. *
163
+ * General-bucket placement : the `general` bucket gets its OWN rightmost unknown
169
164
  * column — the projection keeps emitting `zone: 'general'` entities (the
170
- * zone VALUE is unchanged — placement is a render-layer decision, Task 2).
165
+ * zone VALUE is unchanged — placement is a render-layer decision).
171
166
  */
172
- /** The general-bucket id (plan 20260811-panel-f3-agent-general): the single
167
+ /** The general-bucket id : the single
173
168
  * bucket every off-roster / anonymous dispatch folds into — the former SDD
174
169
  * per-task reviewer seat is now the PIPELINE role `code-reviewer` (v2.1.1),
175
170
  * so `general` is purely the unmatched/anonymous catch-all (role '' +
@@ -178,24 +173,23 @@ export declare const SDD_BUCKET_ROLES: {
178
173
  * KNOWN_AGENTS roster id ALL derive from it — renaming the bucket changes
179
174
  * exactly one constant.
180
175
  *
181
- * Placement (plan 20260812-panel-f5-agent-layout Task 1, user 2026-08-12):
176
+ * Placement:
182
177
  * the bucket gets its OWN rightmost UNKNOWN canvas column — the render
183
- * (Task 2) places `zone: 'general'` entities there; the former F4.2
178
+ * places `zone: 'general'` entities there; the former
184
179
  * placement (BOTTOM INSIDE the `sdd-implement` column) is superseded. The
185
180
  * `'general'` literal in the `AgentZone` / `KnownAgent.zone` unions below
186
181
  * is the type-level binding (a union member cannot reference a value) —
187
182
  * keep them in sync with this constant. */
188
183
  export declare const GENERAL_BUCKET: "general";
189
184
  /**
190
- * Agent-entity column zone (plan 20260811-panel-f3-agent-general + plan
191
- * 20260812-panel-f5-agent-layout Task 1): `'flow'` (stage columns),
185
+ * Agent-entity column zone : `'flow'` (stage columns),
192
186
  * `'on-demand'` (ops-engineer / prompt-engineer — implementor-sub-bucket
193
187
  * dispatches, rendered inside the `sdd-implement` column's implementor
194
188
  * partition with an on-demand badge; the standalone on-demand column is
195
- * REMOVED — Task 2) or `'general'` (the general bucket). Placement
196
- * semantics (user 2026-08-12 decision): `'general'` renders in its OWN
197
- * rightmost UNKNOWN column (Task 2). The zone VALUE is projection-owned and
198
- * unchanged; only the render layout (Task 2) changes.
189
+ * REMOVED ) or `'general'` (the general bucket). Placement
190
+ * semantics ( decision): `'general'` renders in its OWN
191
+ * rightmost UNKNOWN column . The zone VALUE is projection-owned and
192
+ * unchanged; only the render layout changes.
199
193
  */
200
194
  export type AgentZone = 'flow' | 'on-demand' | 'general';
201
195
  export interface KnownAgent {
@@ -208,17 +202,17 @@ export interface KnownAgent {
208
202
  phase: PhaseId;
209
203
  stage: string;
210
204
  } | null;
211
- /** Off-pipeline zone (plan 20260811-panel-f3-agent-general): 'on-demand'
205
+ /** Off-pipeline zone : 'on-demand'
212
206
  * for the implementor-sub-bucket on-demand roles (ops-engineer /
213
207
  * prompt-engineer — rendered inside the `sdd-implement` column's
214
208
  * implementor partition with an on-demand badge, plan
215
- * 20260812-panel-f5-agent-layout Task 1 / Task 2), 'general' (the default
209
+ * ), 'general' (the default
216
210
  * when omitted) for the general bucket. The `'general'` literal is the
217
211
  * type-level binding of `GENERAL_BUCKET` (see above) — a union member
218
212
  * cannot reference a value. */
219
213
  zone?: 'on-demand' | 'general';
220
214
  }
221
215
  /** Known-agent roster — 14 roles, spec §4 order (project-manager + explore
222
- * excluded; `code-reviewer` added by plan 20260812-panel-f5-agent-layout
223
- * Task 1 — upstream v2.1.1 roles.ts is the semantic SSOT). */
216
+ * excluded; `code-reviewer` added by
217
+ * — upstream v2.1.1 roles.ts is the semantic SSOT). */
224
218
  export declare const KNOWN_AGENTS: readonly KnownAgent[];
@@ -5,41 +5,41 @@
5
5
  * a typed `t` seat for the panel component (dictionary keys are checked
6
6
  * against the union by `LocaleDictOf`).
7
7
  *
8
- * T2 (spec panel-zones §2, plan 20260810-panel-canvas-zones): the react-flow
8
+ * (spec panel-zones §2): the react-flow
9
9
  * graph is replaced by the zone dashboard — the `graph.phase.*` /
10
10
  * `graph.state.*` / react-flow `graph.legend.*` key families are gone with
11
11
  * the graph library; only `graph.pass` / `graph.fail` remain (the
12
- * gate-verdict labels reused by the tabs-shell IterationTaskPage head), and
12
+ * gate-verdict labels reused by the IterationTaskPage head), and
13
13
  * the new `zone.*` family covers the three zone titles/placeholders + the
14
14
  * zone-semantic legend. The `flow.*` key family (agent-flow event dock) is
15
15
  * unchanged. The old footer's violations copy (`graph.violations` /
16
16
  * `graph.no-violations`) is carried by the event-log plan — it adds its own
17
17
  * dedicated keys when that page lands, NOT reserved in this union.
18
18
  *
19
- * T3 (spec panel-zones §3): the iteration zone is filled in — `zone.phase.*`
19
+ * (spec panel-zones §3): the iteration zone is filled in — `zone.phase.*`
20
20
  * (the 5 PHASE_IDS names, the `graph.phase.*` wording moved into the zone
21
21
  * namespace), `zone.iteration.*` (Step N/5 label, Step N badge, step-state
22
22
  * chips) and `zone.branches.*` (the branch panel
23
23
  * moved from the sidebar). `zone.iteration.placeholder` is gone with the
24
24
  * placeholder.
25
25
  *
26
- * T4 (spec panel-zones §3): the task board kanban is filled in —
26
+ * (spec panel-zones §3): the task board kanban is filled in —
27
27
  * `zone.state.*` (the 5 PLAN_STATE_IDS column names — en is the raw status
28
28
  * word, zh the localized name; `blocked-unknown` is the merged
29
- * Blocked/unknown column, plan 20260813-panel-quick-fixes Task 1),
29
+ * Blocked/unknown column),
30
30
  * `zone.tasks.total` (zone header plan total), `zone.tasks.no-plans` (the
31
31
  * muted empty note), `zone.tasks.more` (the per-column `+N more` expand
32
32
  * affordance) and `zone.tasks.collapse` (the 「收起」 collapse label).
33
33
  * `zone.tasks.placeholder` is gone with the placeholder.
34
34
  *
35
- * T2 (spec panel-zones §4, plan 20260810-panel-agent-flow-zone): the agents
35
+ * (spec panel-zones §4): the agents
36
36
  * zone is filled in — `zone.agents.summary` (`N executing · M pending`).
37
37
  * `zone.agents.placeholder` is gone with the placeholder; the dashed
38
38
  * "待执行" chip (`pending-label`) and the animated next-edge label (`next`)
39
- * keys were removed with the AgentFlowZone in the agent-canvas QC wave
40
- * (S-001 — the free canvas renders neither, so they had zero consumers).
39
+ * keys were removed with the AgentFlowZone (the free canvas renders neither,
40
+ * so they had zero consumers).
41
41
  *
42
- * T3 (same plan): the dock is collapsible (the frame is a native <details>,
42
+ * (same plan): the dock is collapsible (the frame is a native <details>,
43
43
  * header = <summary>) and the legend gains the entity-status swatches —
44
44
  * `zone.legend.agent-running` / `zone.legend.agent-settled` (the status-dot
45
45
  * treatments of the entity cards; the `zone.agents.*` family itself stays
@@ -49,38 +49,38 @@
49
49
  * would conflate event status words (dispatched/settled ok) with entity
50
50
  * status words).
51
51
  *
52
- * T1 (spec panel-tabs §2/§6.1, plan 20260811-panel-tabs-shell): the panel is
52
+ * (spec panel-tabs §2/§6.1): the panel is
53
53
  * re-laid-out as Tabs + Content — `tab.*` covers the 3 fixed MenuTab labels
54
54
  * (任务迭代 / 代理执行 / 事件记录) and `page.*.placeholder` the muted
55
55
  * placeholder copy for the agents/events tabs (the real pages land with the
56
56
  * agent-canvas / event-log plans; Task 3 refines the placeholders).
57
57
  *
58
- * T2 (spec panel-tabs §3, plan 20260811-panel-tabs-shell Task 2): the
58
+ * (spec panel-tabs §3): the
59
59
  * IterationTaskPage head copy — `page.iteration.*` (the collapsed one-line
60
60
  * "not started" note + the expand/collapse toggle hints). The head reuses the
61
61
  * existing `zone.iteration.*` (step badge / Step n/5 label / step-state
62
62
  * chips), `zone.phase.*` (the 5 PHASE_IDS names) and `zone.branches.*`
63
63
  * (branch panel) keys; the kanban reuses `zone.tasks.*` / `zone.state.*`.
64
64
  *
65
- * T3 (spec panel-tabs §4, plan 20260811-panel-agent-canvas Task 3): the
65
+ * (spec panel-tabs §4): the
66
66
  * legend re-mounts on the agent canvas — `zone.legend.agent-idle` (the idle
67
67
  * card treatment) joins the swatch family and the collaboration-edge labels
68
68
  * (flow-expected / flow-actual / general) now describe the canvas rendering
69
69
  * (dashed/solid lines + the general bucket — plan
70
- * 20260811-panel-f3-agent-general replaced the former flow-unexpected entry)
70
+ * replaced the former flow-unexpected entry)
71
71
  * instead of the retired zone-dashboard stages; `flow.settle-only` is the
72
72
  * distinct muted copy for the settle-only canvas note (review T2-Imp-2
73
73
  * restored the old zone's separate anchor).
74
74
  *
75
- * T2 (plan 20260811-panel-f4-agent-view): the general bucket has NO column
75
+ * T2 : the general bucket has NO column
76
76
  * of its own anymore — `zone.agents.general` is REPURPOSED as the small
77
77
  * in-bucket label on the general card (which sinks to the bottom of the
78
78
  * `sdd-implement` column — the value stays the user-fixed literal 'general'
79
79
  * in both locales); `zone.legend.general` rewords to the sink semantics
80
80
  * (「general 位于 sdd-implement 桶内底部」).
81
81
  *
82
- * T2 (plan 20260812-panel-f5-agent-layout Task 2 — the layout rework
83
- * supersedes the F4.2 sink): the general bucket moves to its OWN rightmost
82
+ * (the layout rework
83
+ * supersedes the earlier sink): the general bucket moves to its OWN rightmost
84
84
  * UNKNOWN column — `zone.agents.unknown` (the column label, 未知 / unknown);
85
85
  * the in-bucket general tag is gone (the general card's title + the unknown
86
86
  * column label carry it), so `zone.agents.general` is REMOVED. The
@@ -92,7 +92,7 @@
92
92
  * (the former 'general' entry is replaced by 'unknown'); `zone.legend.general`
93
93
  * is REMOVED and `zone.legend.on-demand` rewords to the badge semantics.
94
94
  *
95
- * T5 (plan 20260812-panel-f5-design-system Task 5 — the 2026-08-12 edge
95
+ * (the 2026-08-12 edge
96
96
  * rework supersedes the Task-2 unknown COLUMN): the standalone rightmost
97
97
  * unknown column is REMOVED (user feedback #3 — FOUR columns total) — the
98
98
  * general bucket sinks into an unknown SUB-PARTITION at the bottom of the
@@ -104,13 +104,13 @@
104
104
  * `unknown` reword to the bezier / port-anchored / side-gap / sub-partition
105
105
  * semantics.
106
106
  *
107
- * T3 (plan 20260812-panel-f5-agent-layout Task 3): the no-harness branch
107
+ * T3 : the no-harness branch
108
108
  * renders a CENTERED inactive-state card (icon + title + hint, no tabs /
109
109
  * no sidebar) instead of the left-aligned hint — `empty.no-harness-hint`
110
110
  * is the explanatory secondary copy under the reused `empty.no-harness`
111
111
  * title.
112
112
  *
113
- * T1 (plan 20260813-panel-agent-canvas-legend-layout Task 1 — 图例精简): the
113
+ * (图例精简): the
114
114
  * legend narrows to the 3 role-card status entries —
115
115
  * `zone.legend.flow-actual` / `port` / `group` / `sub-bucket` / `supervise` /
116
116
  * `on-demand` / `unknown` are REMOVED (the collaboration-edge / layout tech
@@ -1,7 +1,7 @@
1
1
  /**
2
- * AgentCanvasPage (spec panel-tabs §4/§6.2, plan 20260811-panel-agent-canvas
3
- * Task 2) — the 代理执行 tab: a DRAGGABLE agent canvas. Replaces the muted
4
- * placeholder page (tabs-shell Task 3) and the stage-column AgentFlowZone
2
+ * AgentCanvasPage (spec panel-tabs §4/§6.2
3
+ * — the 代理执行 tab: a DRAGGABLE agent canvas. Replaces the muted
4
+ * placeholder page and the stage-column AgentFlowZone
5
5
  * (deleted by this plan — the free canvas supersedes it).
6
6
  *
7
7
  * Canvas contract (spec §6.2 — zero third-party deps):
@@ -29,28 +29,28 @@
29
29
  * `data-agent-record` (never the title). Idle (no dispatch evidence) cards
30
30
  * are muted (`data-agent-idle`); lit cards follow the projection's status
31
31
  * priority (running/settled/error/denied/advisory). Settled cards get a
32
- * standalone GREEN DONE FRAME + green ✓ (Task 8 — user feedback #1/#3:
32
+ * standalone GREEN DONE FRAME + green ✓ (
33
33
  * `data-agent-done="true"`, the frame is a full-strength success ring on the
34
34
  * rounded card body) ONLY when `emphasis !== 'off'` — an off-tier role
35
35
  * (already-passed / stage-less on-demand + general) never shows the
36
36
  * completion marker (the v3 leak: the ✓ survived the off-tier low
37
37
  * transparency).
38
38
  *
39
- * Shared iteration section (Task 8 — user feedback #4): the page renders the
39
+ * Shared iteration section : the page renders the
40
40
  * SAME `IterationInfoSection` the tasks tab uses, from the SAME
41
41
  * `view.iteration` data — 两个 tab 显示同一迭代信息块.
42
42
  *
43
- * Edges (spec §4 + plan 20260812-panel-f5-design-system Task 5 — the
43
+ * Edges (spec §4 — the
44
44
  * finalized 2026-08-12 line semantics, design doc §2): ONLY the actual
45
45
  * handoffs (business entity→entity — role-keyed, general endpoints
46
46
  * filtered, one edge per pair) and the supervise line (plan
47
- * 20260812-panel-f5-agent-layout Task 2 — the static bidirectional
47
+ * Task 2 — the static bidirectional
48
48
  * implementor ↔ sdd-reviewer sub-bucket line inside the `sdd-implement`
49
49
  * column, dim dashed by default, lit business when the projected
50
50
  * `evidenced` flag is true — never a fabricated activation) — all drawn as
51
51
  * SVG bezier `C` paths (design doc §2.6) over the layout computed by the
52
52
  * exported pure `layoutAgents`. The `expected` stage skeleton and the
53
- * animated `next` edge are REMOVED (user feedback #1/#5 — the column order
53
+ * animated `next` edge are REMOVED ( — the column order
54
54
  * implies the flow, the running card glow + status point carry the
55
55
  * position). Every line anchors to a CARD PORT (4 fixed edge-midpoint
56
56
  * ports, design doc §2.5 — hover-visible dots, static-invisible) or the
@@ -58,22 +58,17 @@
58
58
  * at the STANDOFF point 10px off the target port (arrow along the endpoint
59
59
  * tangent — H1) and no line crosses text (H2: standoff + side-gap routing
60
60
  * for caption-crossing same-column flows + column-gap crossings). Col-skip
61
- * cross-column edges (plan QC tri R1 — a source/target pair whose columns
62
- * are separated by an intermediate column, e.g. writing-specialist →
63
- * qc-specialist) reroute via a multi-`L` side-gap DETOUR below the
61
+ * cross-column edges reroute via a multi-`L` side-gap DETOUR below the
64
62
  * intermediate card band instead of a direct bezier through the card bodies
65
63
  * (H1).
66
64
  *
67
- * Layout (plan 20260812-panel-f5-agent-layout Task 2 + plan
68
- * 20260812-panel-f5-design-system Task 5 + Task 8 — the F5 rework; plan
69
- * 20260813-panel-agent-canvas-legend-layout Task 2 — the left-right
70
- * rework): deterministic columns per EXPECTED_ROLE_FLOW stage
65
+ * Layout : deterministic columns per EXPECTED_ROLE_FLOW stage
71
66
  * (review-edit-chain → sdd-implement → qc-tri → qa-gate) — FOUR columns
72
- * total (user 2026-08-12 feedback #3: the standalone rightmost UNKNOWN
67
+ * total (: the standalone rightmost UNKNOWN
73
68
  * column is REMOVED; `zone: 'general'` entities render in an "unknown /
74
69
  * 未匹配角色" SUB-PARTITION at the bottom of the LAST column,
75
70
  * `data-sub-bucket="unknown"`), laid out in TWO SIDE-BY-SIDE PHASE GROUPS
76
- * (Task 8 — user feedback #2; Task 2 — user 2026-08-13 feedback #2): the
71
+ * — the
77
72
  * Phase 1 group LEFTMOST (review-edit-chain — the sequential Review & Edit
78
73
  * chain: product-manager → architect → writing-specialist) and the Phase 2
79
74
  * group to its RIGHT (sdd-implement → qc-tri → qa-gate — the iterative plan
@@ -87,9 +82,9 @@
87
82
  * reviewer partition (code-reviewer, idle included) below, with the
88
83
  * implementor / sdd-reviewer caption labels. `zone: 'on-demand'` entities
89
84
  * have NO standalone column anymore — they live in the implementor
90
- * partition. The former F4.2 "general sinks to the bottom of
91
- * the sdd-implement column" placement is superseded (Task 2), as is the
92
- * Task-2 rightmost unknown column (Task 5); the former
85
+ * partition. The former "general sinks to the bottom of
86
+ * the sdd-implement column" placement is superseded, as is the
87
+ * rightmost unknown column; the former
93
88
  * sdd-implement → general SDD loop back-edge stays REMOVED (the render
94
89
  * draws no loop branch).
95
90
  *
@@ -97,10 +92,9 @@
97
92
  * yields the full idle roster, so the canvas renders it with the muted
98
93
  * `data-canvas-note` (degraded = ledger missing; empty = no events;
99
94
  * settle-only = events but no dispatch rows — review T2-Imp-2 restored the
100
- * old zone's distinct settle-only anchor; F-002: the empty/settle-only note
95
+ * old zone's distinct settle-only anchor; the empty/settle-only note
101
96
  * is PROJECTED metadata, never inferred from the entity list). The Legend
102
- * (idle / collaboration swatches, plan Task 3) sits BELOW the viewport
103
- * (plan 20260813-panel-quick-fixes Task 3 — user 2026-08-13 feedback).
97
+ * (idle / collaboration swatches) sits BELOW the viewport.
104
98
  * `initialPan` is a deterministic SSR/test seed — the live page starts at the
105
99
  * origin.
106
100
  */
@@ -112,8 +106,7 @@ export interface AgentCanvasPageProps {
112
106
  /** The projected agents zone (spec §6.2 — `ZoneView['agents']`). */
113
107
  view: ZoneView['agents'];
114
108
  /** The projected iteration zone (spec §3) — the SHARED iteration info
115
- * block (plan 20260812-panel-f5-design-system Task 8, user 2026-08-12
116
- * feedback #4): BOTH the tasks tab and this page render the SAME
109
+ * block : BOTH the tasks tab and this page render the SAME
117
110
  * `IterationInfoSection` from the SAME `view.iteration` data. */
118
111
  iteration: ZoneView['iteration'];
119
112
  t: TranslateNS<'mstar-panel'>;
@@ -151,10 +144,7 @@ export interface CanvasColumn extends CanvasBox {
151
144
  id: string;
152
145
  }
153
146
  /**
154
- * One PHASE group of the canvas (plan 20260812-panel-f5-design-system Task 8
155
- * — user 2026-08-12 feedback #2; plan
156
- * 20260813-panel-agent-canvas-legend-layout Task 2 — the left-right
157
- * rework): the stage columns split into two SIDE-BY-SIDE groups by iteration
147
+ * One PHASE group of the canvas : the stage columns split into two SIDE-BY-SIDE groups by iteration
158
148
  * phase — **Phase 1** (review-edit-chain, the sequential Review & Edit
159
149
  * chain: product-manager → architect → writing-specialist) LEFTMOST,
160
150
  * **Phase 2** (sdd-implement → qc-tri → qa-gate, the iterative plan loop) to
@@ -180,7 +170,7 @@ export interface CanvasGroup {
180
170
  };
181
171
  /** The stage column ids of this group, stage order. */
182
172
  columnIds: readonly string[];
183
- /** Current-plan annotation host (design doc §1.2 — user feedback #2):
173
+ /** Current-plan annotation host (design doc §1.2 —):
184
174
  * true for the `autonomous-execute` phase group (the iterative plan loop)
185
175
  * only. */
186
176
  planNote: boolean;
@@ -191,34 +181,31 @@ export interface CanvasLayout {
191
181
  height: number;
192
182
  columns: readonly CanvasColumn[];
193
183
  cards: ReadonlyMap<string, CanvasBox>;
194
- /** Sub-bucket geometry per column id (plan 20260812-panel-f5-agent-layout
195
- * Task 2): the `sdd-implement` column's implementor/reviewer caption seats
196
- * + card bands — the supervise line anchors to the band edges (the
184
+ /** Sub-bucket geometry per column id (the supervise line anchors to the band edges (the
197
185
  * inter-partition gap; QC W-001).
198
186
  * Columns without sub-buckets are absent from the map. */
199
187
  subBuckets: ReadonlyMap<string, SubBucketGeometry>;
200
188
  /** The unknown sub-partition at the bottom of the LAST column (plan
201
- * 20260812-panel-f5-design-system Task 5 — user 2026-08-12 feedback #3:
189
+ * Task 5 —:
202
190
  * `zone: 'general'` entities sink into a qa-gate-column-bottom sub-partition
203
191
  * instead of a standalone fifth column). The caption seat + card band;
204
192
  * null when the layout has no columns (total function — never a throw). */
205
193
  unknown: UnknownSubPartition | null;
206
- /** The Phase groups (plan 20260812-panel-f5-design-system Task 8 — user
194
+ /** The Phase groups (user
207
195
  * 2026-08-12 feedback #2; plan
208
- * 20260813-panel-agent-canvas-legend-layout Task 2): Phase 1 leftmost /
196
+ * Phase 1 leftmost /
209
197
  * Phase 2 right, top-aligned, each with its label seat; empty when the
210
198
  * layout has no columns. */
211
199
  groups: readonly CanvasGroup[];
212
200
  }
213
- /** The unknown sub-partition id (plan 20260812-panel-f5-design-system Task 5
214
- * — design doc §1.2): `zone: 'general'` entities render in a bottom
201
+ /** The unknown sub-partition id : `zone: 'general'` entities render in a bottom
215
202
  * sub-partition of the LAST column titled「unknown / 未匹配角色」and marked
216
203
  * `data-sub-bucket="unknown"`. The former standalone rightmost UNKNOWN column
217
- * (plan 20260812-panel-f5-agent-layout Task 2) is REMOVED — the constant
204
+ * is REMOVED — the constant
218
205
  * value survives as the sub-partition bucket id. */
219
206
  export declare const UNKNOWN_COLUMN = "unknown";
220
207
  /** One sub-bucket partition inside the `sdd-implement` column (plan
221
- * 20260812-panel-f5-agent-layout Task 2): the caption seat + the cards'
208
+ * the caption seat + the cards'
222
209
  * band — the supervise line anchors to the band's edge (implementor:
223
210
  * bottom edge; reviewer: top edge — the inter-partition gap; QC W-001). */
224
211
  export interface SubBucketPartition {
@@ -234,15 +221,14 @@ export interface SubBucketPartition {
234
221
  * line skip). */
235
222
  band: CanvasBox | null;
236
223
  }
237
- /** The sub-bucket geometry of one column (plan f5 Task 2): implementor +
224
+ /** The sub-bucket geometry of one column : implementor +
238
225
  * reviewer partitions. Present ONLY for the `sdd-implement` column — the
239
226
  * supervise anchors read the bands. */
240
227
  export interface SubBucketGeometry {
241
228
  implementor: SubBucketPartition;
242
229
  reviewer: SubBucketPartition;
243
230
  }
244
- /** The unknown sub-partition of the LAST column (plan 20260812-panel-f5-design-system
245
- * Task 5 — design doc §1.2): the caption seat + the general cards' band. The
231
+ /** The unknown sub-partition of the LAST column : the caption seat + the general cards' band. The
246
232
  * caption row (SUB_LABEL_H) sits ROW_GAP below the last flow card; the
247
233
  * general cards follow SUB_GAP below it. */
248
234
  export interface UnknownSubPartition {
@@ -258,19 +244,18 @@ export interface UnknownSubPartition {
258
244
  band: CanvasBox | null;
259
245
  }
260
246
  /**
261
- * Deterministic canvas layout (spec §4 + plan 20260812-panel-f5-agent-layout
262
- * Task 2 + plan 20260812-panel-f5-design-system Task 5 + Task 8 + plan
263
- * 20260813-panel-agent-canvas-legend-layout Task 2 — the F5 rework + the
247
+ * Deterministic canvas layout (spec §4
248
+ * + Task 8 + plan
249
+ * Task 2 — the F5 rework + the
264
250
  * left-right rework): one column per EXPECTED_ROLE_FLOW stage (view order:
265
251
  * review-edit-chain → sdd-implement → qc-tri → qa-gate) — FOUR columns
266
- * total, laid out in TWO SIDE-BY-SIDE PHASE GROUPS (Task 8, user 2026-08-12
267
- * feedback #2; Task 2, user 2026-08-13 feedback #2): the **Phase 1 group
252
+ * total, laid out in TWO SIDE-BY-SIDE PHASE GROUPS (the **Phase 1 group
268
253
  * LEFTMOST** (review-edit-chain — the sequential Review & Edit chain:
269
254
  * product-manager → architect → writing-specialist) and the **Phase 2 group
270
255
  * to its RIGHT** (sdd-implement → qc-tri → qa-gate — the iterative plan
271
256
  * loop, annotated with the current `activePlanId`), every group label row
272
257
  * TOP-ALIGNED at PAD_Y (design doc §1.2; the standalone rightmost unknown
273
- * column is REMOVED — Task 5, user feedback #3). The `sdd-implement` column
258
+ * column is REMOVED ). The `sdd-implement` column
274
259
  * is split into sub-buckets by the
275
260
  * PROJECTED `entity.bucket` (never a render-side guess): the implementor
276
261
  * partition above — flow roles in the stage's original EXPECTED_ROLE_FLOW
@@ -300,7 +285,7 @@ export type PortId = 'north' | 'south' | 'west' | 'east';
300
285
  export interface EdgeGeometry {
301
286
  /** The SVG path `d` — a single `C` cubic-bezier command for the standard
302
287
  * curves, or the multi-command `M … L … L … L … L … L …` side-gap detour
303
- * polyline for col-skip cross-column edges (plan QC tri R1). The render
288
+ * polyline for col-skip cross-column edges . The render
304
289
  * passes `d` through verbatim; `marker-end orient="auto"` follows the
305
290
  * FINAL segment, so the arrow always rides the endpoint tangent (H1). */
306
291
  d: string;
@@ -310,19 +295,18 @@ export interface EdgeGeometry {
310
295
  y2: number;
311
296
  }
312
297
  /**
313
- * One edge's SVG bezier geometry (plan 20260812-panel-f5-design-system Task
314
- * 5 — design doc §2.5/§2.6); null when an anchor is missing (total
298
+ * One edge's SVG bezier geometry ; null when an anchor is missing (total
315
299
  * function).
316
300
  *
317
301
  * Port selection (design doc §2.5 — lines connect ports only, never through
318
302
  * a card): forward (source column < target column) → source EAST → target
319
303
  * WEST; reverse (source column > target column) → source WEST → target
320
- * EAST; same column → the vertical flow (direction-aware, QC W-001). The
304
+ * EAST; same column → the vertical flow (direction-aware. The
321
305
  * path END stands off STANDOFF px from the target port along the endpoint
322
306
  * tangent (arrow tip off the card, H1); the source starts AT its port (no
323
307
  * arrow there).
324
308
  *
325
- * Direction-aware vertical endpoints (plan QC tri qc3 W-001): a same-column
309
+ * Direction-aware vertical endpoints : a same-column
326
310
  * (or side-gap) flow whose SOURCE sits BELOW the target — the implement →
327
311
  * review → rework cycle collapses to `code-reviewer → fullstack-dev` (the
328
312
  * projection pair-dedupe keeps the LATEST direction) — must approach the
@@ -344,13 +328,11 @@ export interface EdgeGeometry {
344
328
  * bezier hangs at `card left edge − SIDE_GAP`, clear of every text (H2) and
345
329
  * every card body (H1).
346
330
  *
347
- * Inter-phase flows (plan 20260812-panel-f5-design-system Task 8 + plan
348
- * 20260813-panel-agent-canvas-legend-layout Task 2 — the left-right
349
- * layout): a Phase 1 → Phase 2 handoff (e.g. writing-specialist →
331
+ * Inter-phase flows : a Phase 1 → Phase 2 handoff (e.g. writing-specialist →
350
332
  * fullstack-dev — a real same-plan Review&Edit→implement transfer) is a
351
333
  * normal FORWARD horizontal bezier (source east → target west) — the groups
352
334
  * sit side-by-side at one top-aligned y band, so no label row lies between
353
- * the cards. The CARD-AWARE guard (plan QC tri R1 — 绕行策略 ③): a
335
+ * the cards. The CARD-AWARE guard : a
354
336
  * cross-column edge whose columns SKIP an intermediate column (e.g.
355
337
  * writing-specialist → qc-specialist — a real docs-only / inline / QA-gate
356
338
  * ledger chain) would run its direct horizontal bezier THROUGH the
@@ -1,16 +1,16 @@
1
1
  /**
2
- * EventLogPage (spec panel-tabs §5, plan 20260811-panel-event-log Task 2) —
2
+ * EventLogPage (spec panel-tabs §5) —
3
3
  * the 事件记录 tab: a NON-canvas log page. Two partitions (spec §5):
4
4
  * Agent 流转事件 (`view.events` ≤50 latest-first — unexpected dispatches
5
5
  * fold in via the `expected` flag, NEVER double-appended; the unexpected
6
6
  * badge is DISPATCH-only — settle rows are completion records whose
7
7
  * projected `expected` is always false, they never flag as unexpected,
8
- * F-001) and 违规记录
8
+ * and 违规记录
9
9
  * (`view.violations`). Every row is an expandable native `<details>` (no-JS,
10
10
  * keyboard-accessible, SSR-stable) whose body shows the FULL catalog fields;
11
11
  * a missing field renders「—」— never a guessed value (spec §5/§8).
12
12
  *
13
- * Layout (plan 20260811-panel-f3-agent-general Task 2 — user feedback「左右
13
+ * Layout (user feedback「左右
14
14
  * 排两列 + 锁定一个高内部滚动」): the two partitions render side by side in a
15
15
  * locked-height two-column grid; the page never scrolls as a whole — each
16
16
  * partition pins its title and scrolls internally (`event-log.module.css`).
@@ -18,11 +18,11 @@
18
18
  * Dock migration decision (spec §5 — 无双份日志): the AgentEventDock is
19
19
  * REMOVED, not degraded. The dock's content (row layout + status chips)
20
20
  * moved into this page, and its host (the WorkflowCanvas canvas-corner)
21
- * died with the tabs-shell plan — a dock-side "jump to 事件记录" entry would
21
+ * is gone — a dock-side "jump to 事件记录" entry would
22
22
  * only duplicate the header TabNav, which already IS the jump to this tab.
23
- * Zero `data-agent-event-dock` anchors remain repo-wide (Task 2 完成判据).
23
+ * Zero `data-agent-event-dock` anchors remain repo-wide
24
24
  *
25
- * Row data: `eventLogEntries(view)` (Task 1 — pure assembly; every field
25
+ * Row data: `eventLogEntries(view)` (pure assembly; every field
26
26
  * degrades individually). The `<details>` body backfills the FULL source
27
27
  * fields (planId / taskId / taskCategory — not carried by the floor
28
28
  * `EventLogEntry`) through a one-time id → `FlowEventView` map (T1-Min-3: