@tea-agent/loop-agent 0.42.0-next.14 → 0.42.0-next.16

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 (113) hide show
  1. package/CHANGELOG.md +19 -3
  2. package/dist/application/task-lifecycle/advance.js +9 -4
  3. package/dist/build-stamp.json +3 -3
  4. package/dist/commands/task-source-prepare.js +3 -1
  5. package/dist/executors/dag-pi-executor.js +1437 -154
  6. package/dist/executors/shell-executor.js +107 -35
  7. package/dist/shared/dag-failure-category.js +6 -0
  8. package/dist/task/contract/apply.js +36 -2
  9. package/dist/task/source-prepare/parse-intent.js +7 -0
  10. package/dist/worker/console/chat/pi-runtime.js +45 -2
  11. package/dist/worker/console/chat/resource-loader.js +4 -1
  12. package/dist/worker/console/chat/routes.js +8 -0
  13. package/dist/worker/console/chat/subagents/agent-tool.js +62 -0
  14. package/dist/worker/console/chat/subagents/explore-agent.js +169 -0
  15. package/dist/worker/console/chat/subagents/index.js +5 -0
  16. package/dist/worker/console/chat/subagents/orchestrator.js +273 -0
  17. package/dist/worker/console/chat/subagents/tool-policy.js +53 -0
  18. package/dist/worker/console/chat/subagents/types.js +13 -0
  19. package/dist/worker/console/chat/tool-preview.js +10 -0
  20. package/dist/worker/console/chat/tools.js +11 -1
  21. package/dist/worker/console/interview/tools.js +1 -0
  22. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BGMbAdAG.js → abnfDiagram-N423BO3Z-CgXb0EVO.js} +1 -1
  23. package/dist/worker/console/static/assets/{arc-CJu1LND8.js → arc-DN59MZqN.js} +1 -1
  24. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-BmJh9gMQ.js → architectureDiagram-T3A2C74G-BUk3sWpn.js} +1 -1
  25. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-BWjaX3ZF.js → blockDiagram-VBNYF7ZC-IH-cPBFE.js} +1 -1
  26. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-CLEOAxLB.js → c4Diagram-5PPSVZJV-BJWf1nGo.js} +1 -1
  27. package/dist/worker/console/static/assets/channel-i1DjpDIw.js +1 -0
  28. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-CydnyQUX.js → chunk-2GRJ4B5K-BCPb5H0y.js} +1 -1
  29. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-tjJ1IoZ1.js → chunk-2Q5K7J3B-Cfs3jeW2.js} +1 -1
  30. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DR358Phd.js → chunk-5RXB4S5H-BhQI1B_T.js} +1 -1
  31. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-B-LuWFZD.js → chunk-5VM5RSS4-Cc_m4gyV.js} +1 -1
  32. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-FG53fA6v.js → chunk-6Q2QTUOP-JPqDS3IV.js} +1 -1
  33. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Bkt-w8SZ.js → chunk-GF5L2VYU-AeGX6EAg.js} +1 -1
  34. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-WxHo0z2I.js → chunk-JWPE2WC7-pEyTjekV.js} +1 -1
  35. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-CqHrBJhp.js → chunk-KBJHAD2P-Bi5UopKd.js} +1 -1
  36. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-D4MVae_f.js → chunk-RYQCIY6F-FkGFJxgQ.js} +1 -1
  37. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CamBh0Ll.js → chunk-XXDRQBXY-D-7LGrV2.js} +1 -1
  38. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DgDRdE1V.js +1 -0
  39. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DgDRdE1V.js +1 -0
  40. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-C3qheCuW.js → cose-bilkent-JH36ORCC-CCEDNDaX.js} +1 -1
  41. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DQlWfkS7.js → cynefin-VYW2F7L2-DDd-t7fm.js} +1 -1
  42. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-BAxa9rFb.js → cynefinDiagram-MW4NZA55-LWe4Ikzr.js} +1 -1
  43. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-YM09nLJw.js → dagre-VZM6K2ZE-BBCZScc-.js} +1 -1
  44. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-I4W9EJj2.js → diagram-7IWD3JNH-B6liRVig.js} +1 -1
  45. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-DH8eJ8Ff.js → diagram-B4RE2ZJO-DO_hIrpW.js} +1 -1
  46. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-D0D0ntDW.js → diagram-LBJQPF4R-dmCy93uR.js} +1 -1
  47. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-BIISKq1s.js → diagram-Q27KOJAE-D6mFTIxP.js} +1 -1
  48. package/dist/worker/console/static/assets/{diagram-UB23O5K3--xyAWj0w.js → diagram-UB23O5K3-DCteVUfY.js} +1 -1
  49. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-B3sYXLJ4.js → ebnfDiagram-BXEA7PRR-DTv530VK.js} +1 -1
  50. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-zRSYWhJP.js → erDiagram-JOGREHBK-DCXDMxCr.js} +1 -1
  51. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-BUYlie03.js → flowDiagram-UKHOOZJN-BwEBLOJh.js} +1 -1
  52. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-DP4kzzrM.js → ganttDiagram-PKOTCBZU-Ck-Vymjm.js} +1 -1
  53. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-CAPoUxTF.js → gitGraphDiagram-DS77QQ5N-Hqs6X_3L.js} +1 -1
  54. package/dist/worker/console/static/assets/{index-CWhTyxvc.js → index-BmMi-Bve.js} +71 -71
  55. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-BXPfjekV.js → infoDiagram-6WML65LV-Cjc6M9eg.js} +1 -1
  56. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-aOI3pV6t.js → ishikawaDiagram-WSZJBQD7-CPchYZMl.js} +1 -1
  57. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DAPZuvi4.js → journeyDiagram-NVQOT4AX-BABdJNNC.js} +1 -1
  58. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-atwDzL3C.js → kanban-definition-27J2QSJJ-1oXhbM4j.js} +1 -1
  59. package/dist/worker/console/static/assets/{linear-D5E09qji.js → linear-PTmQ9LkV.js} +1 -1
  60. package/dist/worker/console/static/assets/{mermaid.core-CE4idY-s.js → mermaid.core-B6Lxil0V.js} +5 -5
  61. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CbZxtPca.js → mindmap-definition-FAOFIHXS-BUqjNGEw.js} +1 -1
  62. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-De-FYEte.js → pegDiagram-VL7TDLO6-8D1N-orJ.js} +1 -1
  63. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-Bs0USobz.js → pieDiagram-7S7Q4E2Y-BlPMN9d9.js} +1 -1
  64. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-Bq3ZrGCJ.js → quadrantDiagram-CIZ2JOQS-BIL5YDes.js} +1 -1
  65. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Bk8ojyIj.js → railroadDiagram-AXF67PYL-Dqmil3ie.js} +1 -1
  66. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-CGhoyws1.js → requirementDiagram-LRYGKXZP-C_-Dp4mH.js} +1 -1
  67. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-DmVSQs3b.js → sankeyDiagram-W5VNT64P-C0s5-bQS.js} +1 -1
  68. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-C80h1u0Q.js → sequenceDiagram-SI44F4Z6-DiVCHPfi.js} +1 -1
  69. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CcbksQVZ.js → sizeCapture-X5ZJPWSS-CxQ9WVvx.js} +1 -1
  70. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-CFTTTQKj.js → stateDiagram-OKZ733FA-D9mFHA-Y.js} +1 -1
  71. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BqXQxfFC.js +1 -0
  72. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-Cw7Jr7Tg.js → swimlanes-SLNWSIFB-DDnC5l-M.js} +2 -2
  73. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CXwWNRJl.js +8 -0
  74. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CVcdTVa5.js → timeline-definition-Z64GVDOM-C8QySPC-.js} +1 -1
  75. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-BpLbmWp9.js → vennDiagram-T6HMQDX7-BeYdDiz6.js} +1 -1
  76. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-6PXfbwj-.js → wardleyDiagram-T6FBY63Y-D8hjFWLH.js} +1 -1
  77. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-Bjkcz4ih.js → xychartDiagram-ELKLHX3M-ClqG_JGK.js} +1 -1
  78. package/dist/worker/console/static/index.html +1 -1
  79. package/dist/worker/console/static-src/operator-chat/tools-catalog.js +21 -2
  80. package/dist/workflows/dag/dag-retry-schema.js +3 -0
  81. package/dist/workflows/dag/frontend-contract-facts.js +130 -0
  82. package/dist/workflows/dag/frontend-design-policy.js +100 -15
  83. package/dist/workflows/dag/frontend-implementation-contract.js +56 -8
  84. package/dist/workflows/dag/frontend-plan-render.js +13 -2
  85. package/dist/workflows/dag/frontend-risk.js +2 -0
  86. package/dist/workflows/dag/frontend-shadow-dual-write.js +17 -1
  87. package/dist/workflows/dag/frontend-shape.js +16 -6
  88. package/dist/workflows/dag/frontend-test-execution-evidence.js +48 -0
  89. package/dist/workflows/dag/frontend-typed-event-store.js +3 -0
  90. package/dist/workflows/dag/frontend-verification-trace.js +32 -0
  91. package/dist/workflows/dag/init-hybrid.js +16 -13
  92. package/dist/workflows/dag/node-execution.js +178 -88
  93. package/dist/workflows/dag/rerun-feedback.js +1 -0
  94. package/dist/workflows/dag/rerun-plan.js +90 -4
  95. package/dist/workflows/dag/rerun-run.js +7 -0
  96. package/dist/workflows/dag/retry-policy.js +16 -10
  97. package/dist/workflows/dag/runner-exit-diagnostics.js +125 -0
  98. package/dist/workflows/dag/runner.js +67 -7
  99. package/dist/workflows/dag/structured-output-repair.js +4 -1
  100. package/dist/workflows/dag/validate.js +10 -8
  101. package/dist/workflows/dag/workspace-checkpoint.js +66 -0
  102. package/docs/operations/README.md +1 -0
  103. package/docs/templates/agent-dag.schema.json +2 -2
  104. package/docs/templates/frontend-implementation-contract.schema.json +34 -2
  105. package/package.json +2 -3
  106. package/skills/frontend-plan/SKILL.md +14 -1
  107. package/skills/frontend-plan/references/decision-contract.md +84 -10
  108. package/skills/frontend-plan/references/design-decisions.md +32 -0
  109. package/dist/worker/console/static/assets/channel-DOsaUk1k.js +0 -1
  110. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-D4-D49vY.js +0 -1
  111. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-D4-D49vY.js +0 -1
  112. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-C4YCesmi.js +0 -1
  113. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-lN2U_DLl.js +0 -8
@@ -58,6 +58,12 @@
58
58
  "type": "string",
59
59
  "minLength": 1
60
60
  }
61
+ },
62
+ "requiredDeliverables": {
63
+ "type": "array",
64
+ "items": {
65
+ "$ref": "#/$defs/path"
66
+ }
61
67
  }
62
68
  }
63
69
  },
@@ -433,8 +439,7 @@
433
439
  "required": [
434
440
  "purpose",
435
441
  "component",
436
- "decision",
437
- "rationale"
442
+ "decision"
438
443
  ],
439
444
  "properties": {
440
445
  "purpose": {
@@ -465,6 +470,16 @@
465
470
  "rationale": {
466
471
  "type": "string",
467
472
  "minLength": 1
473
+ },
474
+ "covers": {
475
+ "type": "array",
476
+ "items": {
477
+ "type": "string",
478
+ "minLength": 1
479
+ }
480
+ },
481
+ "evidencePath": {
482
+ "$ref": "#/$defs/path"
468
483
  }
469
484
  },
470
485
  "allOf": [
@@ -511,6 +526,23 @@
511
526
  }
512
527
  }
513
528
  }
529
+ },
530
+ {
531
+ "if": {
532
+ "properties": {
533
+ "decision": {
534
+ "const": "reuse-existing"
535
+ }
536
+ },
537
+ "required": [
538
+ "decision"
539
+ ]
540
+ },
541
+ "then": {
542
+ "required": [
543
+ "evidencePath"
544
+ ]
545
+ }
514
546
  }
515
547
  ]
516
548
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tea-agent/loop-agent",
3
- "version": "0.42.0-next.14",
3
+ "version": "0.42.0-next.16",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "loop-agent": "bin/loop-agent.js",
@@ -107,6 +107,5 @@
107
107
  "typescript": "^5.9.3",
108
108
  "vite": "^7.0.0",
109
109
  "vitest": "^4.1.11"
110
- },
111
- "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319"
110
+ }
112
111
  }
@@ -4,7 +4,7 @@ description: Use only for the tool-only frontend decision planning node.
4
4
  references:
5
5
  - path: references/decision-contract.md
6
6
  required: true
7
- maxChars: 5200
7
+ maxChars: 5600
8
8
  - path: references/design-decisions.md
9
9
  required: true
10
10
  maxChars: 3400
@@ -21,6 +21,19 @@ requirement coverage, component/styling choices, applicable states and interacti
21
21
  data/Mock strategy, deviations, and dependency policy. Process a bounded requirement
22
22
  slice and record facts immediately rather than reasoning over the whole task first.
23
23
 
24
+ UX vocabulary is global, not per-requirement: commit `record_state_registry`
25
+ (one stable behavior-domain name per state/interaction) before any
26
+ `record_state_flow`, bind UI states to the contract's declared authoritative ids,
27
+ and let one component choice cover many ids via `covers`. `reuse-existing` must
28
+ cite `evidencePath` of an existing file; greenfield is `decision=new`.
29
+ Bind every file in the Contract-owned `requiredDeliverables` inventory. It records
30
+ explicit source obligations, not every path mentioned by a requirement.
31
+
32
+ Cross-slice citations must close in the same session: when a requirement cites a
33
+ verification target committed in another slice's session, re-commit that target
34
+ here with the same id and `replace=true` (union backfill) before finalize. A
35
+ `duplicate` receipt is a correction invitation, not a prohibition.
36
+
24
37
  The runtime owns protected skeleton fields, path/command validation, materialization,
25
38
  and final schema checks. Finish with exactly one `finalize_plan`; return no Markdown
26
39
  narrative. Record a genuine evidence gap when frozen facts are insufficient.
@@ -16,11 +16,9 @@
16
16
 
17
17
  ### Behavior target shape (canonical example)
18
18
 
19
- Behavior targets are machine-traced evidence: each one must name the requirements
20
- it proves and the declared UI states it exercises. Empty `requirementIds` or empty
21
- `uiStates` (when the contract declares any UI state or interaction) is rejected at
22
- plan validation — fix the mapping, do not resubmit unchanged. State names must be
23
- copied verbatim from the declared `uiStates`; never invent synonyms.
19
+ Each behavior target names the requirements it proves and declared UI states it
20
+ exercises. Empty `requirementIds`, or empty `uiStates` when any state/interaction
21
+ is declared, is rejected. Copy state names verbatim; never invent synonyms.
24
22
 
25
23
  ```json
26
24
  {
@@ -36,11 +34,81 @@ the task's declared scope. Capabilities the task source lists as non-goals (e.g.
36
34
  responsive/mobile layout, animations) must not be promised here, and themes or
37
35
  CSS conventions must not be claimed without a Scout-confirmed repository fact.
38
36
 
37
+ ### UI state declaration shape (canonical example)
38
+
39
+ Use the exact state names referenced by behavior targets. Each applicable state
40
+ carries behavior, implementation targets, and verification target ids:
41
+
42
+ ```json
43
+ {
44
+ "uiStates": [
45
+ {
46
+ "name": "disabled-minus",
47
+ "applicable": true,
48
+ "expectedBehavior": "minus button disabled at count 0",
49
+ "implementationTargets": ["src/components/SmokeCounter.tsx"],
50
+ "verificationTargetIds": ["VT-COUNTER-LOCAL-CONSTRAINTS"]
51
+ }
52
+ ],
53
+ "interactions": [
54
+ {
55
+ "name": "refresh",
56
+ "trigger": "User clicks refresh",
57
+ "expectedBehavior": "reloads runs",
58
+ "implementationTargets": ["src/App.tsx"],
59
+ "verificationTargetIds": ["VT-SMOKE-COUNTER-BEHAVIOR"]
60
+ }
61
+ ]
62
+ }
63
+ ```
64
+
65
+ ### Implementation target coverage (canonical example)
66
+
67
+ `targets.files` is the union of every requirement's `implementationTargets`; list
68
+ each required component, integration point, and sibling source. Admission adds
69
+ non-static verification target files to the writer writeSet separately.
70
+
71
+ ```json
72
+ {
73
+ "id": "AC-FE-001",
74
+ "implementationTargets": [
75
+ "src/components/SmokeCounter.tsx",
76
+ "src/App.tsx"
77
+ ],
78
+ "verificationTargetIds": [
79
+ "VT-SMOKE-COUNTER-BEHAVIOR",
80
+ "VT-COUNTER-LOCAL-CONSTRAINTS"
81
+ ]
82
+ }
83
+ ```
84
+
85
+ ### Bidirectional VT cross-reference invariant
86
+
87
+ Every requirement → VT citation must close in both directions: the cited VT's
88
+ `requirementIds` must list the citing requirement back. The checker reports the
89
+ missing direction; fix it in-node by re-submitting the corrected VT entry with
90
+ the same id and `replace=true`. `replace` is a full replacement: the latest
91
+ submission under an id becomes the authoritative entry (a subset re-submission
92
+ is the new rule). A `duplicate` receipt is a correction invitation, not a
93
+ prohibition, and a reverse-reference backfill is not "re-deriving committed
94
+ facts".
95
+
96
+ ## UX vocabulary (registry first)
97
+
98
+ - Record `record_state_registry` BEFORE `record_state_flow`: one global vocabulary.
99
+ Coverage may slice by requirement; UX must not. Use stable kebab-case behavior
100
+ names, never AC-number-derived names or renamed committed concepts.
101
+ - UI states use the contract's declared authoritative ids (`declaredUiStates`
102
+ in the plan input) when the source declares a state table.
103
+ - Retry slices see `committedUx` in the plan input: reuse those exact names.
104
+
39
105
  ## Global decisions
40
106
 
41
107
  Keep route/component placement, Mock/data strategy, and dependency/deviation policy
42
- as explicit global decisions rather than duplicating them across each requirement.
43
- Use only frozen command labels and Scout-confirmed paths.
108
+ global. Use only frozen command labels and Scout-confirmed paths.
109
+
110
+ One component choice may cover many states/interactions via `covers`.
111
+ `reuse-existing` requires an existing-file `evidencePath`; greenfield uses `new`.
44
112
 
45
113
  For Mock/API, keep the real request path enabled by default. Select only a strategy
46
114
  allowed by the frozen task capability. Active Mock requires deterministic Mock-backed
@@ -54,6 +122,12 @@ widen the write set.
54
122
  ## Runtime-owned fields and terminal
55
123
 
56
124
  The runtime owns `schemaVersion`, `sourceBinding`, risk, canonical target files,
57
- aliases, command allowlisting, path containment, and final validation. Submit only
58
- editable decision facts, then call `finalize_plan` exactly once. The deterministic
59
- design policy materializes the canonical implementation contract.
125
+ `requiredDeliverables`, aliases, command allowlisting, path containment, and final
126
+ validation. Submit only editable decision facts, then call `finalize_plan` exactly
127
+ once. The deterministic design policy materializes the canonical implementation
128
+ contract: every file in the Contract's explicit source-bound delivery inventory
129
+ must be planned (`requiredDeliverables` gate). Permissions, prohibitions, examples
130
+ and read-only references do not create delivery obligations. Plan receives this
131
+ inventory as `requiredDeliverables`; it cannot add, remove or reinterpret it.
132
+ Missing files and UX name collisions are reported by finalize_plan before commit
133
+ and checked again by the policy shell.
@@ -15,3 +15,35 @@ Contract. Do not search specification roots or nearby code from Plan.
15
15
  responsive, and accessibility behavior; use not-applicable only with a reason.
16
16
  - Record styling strategy, deviations, conflicts, and unresolved gaps explicitly.
17
17
  Never silently replace a spec-defined component or claim unread evidence.
18
+
19
+ ### Component choice shape (canonical example)
20
+
21
+ `purpose` must exactly match a declared UI state or interaction name — it is the
22
+ coverage key the deterministic policy checks. Do not invent synonyms, and never
23
+ swap a task-mandated component for another name without recording a deviation.
24
+
25
+ ```json
26
+ [
27
+ {
28
+ "purpose": "disabled-minus",
29
+ "component": "SmokeCounter",
30
+ "decision": "new",
31
+ "sourceRequirementIds": ["AC-FE-001"],
32
+ "sourceFragmentId": "REQ-SRC-AC-FE-001",
33
+ "rationale": "task mandates a new SmokeCounter card on the home surface"
34
+ },
35
+ {
36
+ "purpose": "refresh",
37
+ "component": "RunFilterBar",
38
+ "decision": "reuse-existing",
39
+ "rationale": "reuses the Scout-confirmed filter bar for the refresh interaction"
40
+ }
41
+ ]
42
+ ```
43
+
44
+ For `decision: "new"`, pass `sourceRequirementIds` + `sourceFragmentId` and let
45
+ the runtime derive the exact task-source citation — never hand-write a
46
+ `specReference`. A `reuse-existing` choice covers behavioural interactions
47
+ without one row per interaction; each applicable visual UI state still needs its
48
+ own `purpose` match (or an explicitly scoped stylingStrategy covering the visual
49
+ dimension).
@@ -1 +0,0 @@
1
- import{ag as o,ah as n}from"./mermaid.core-CE4idY-s.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-GF5L2VYU-Bkt-w8SZ.js";import{_ as i}from"./mermaid.core-CE4idY-s.js";import"./chunk-5VM5RSS4-B-LuWFZD.js";import"./chunk-XXDRQBXY-CamBh0Ll.js";import"./chunk-KBJHAD2P-CqHrBJhp.js";import"./chunk-2GRJ4B5K-CydnyQUX.js";import"./index-CWhTyxvc.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-GF5L2VYU-Bkt-w8SZ.js";import{_ as i}from"./mermaid.core-CE4idY-s.js";import"./chunk-5VM5RSS4-B-LuWFZD.js";import"./chunk-XXDRQBXY-CamBh0Ll.js";import"./chunk-KBJHAD2P-CqHrBJhp.js";import"./chunk-2GRJ4B5K-CydnyQUX.js";import"./index-CWhTyxvc.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as r,b as e,a,S as s}from"./chunk-5RXB4S5H-DR358Phd.js";import{_ as i}from"./mermaid.core-CE4idY-s.js";import"./chunk-XXDRQBXY-CamBh0Ll.js";import"./chunk-KBJHAD2P-CqHrBJhp.js";import"./chunk-2GRJ4B5K-CydnyQUX.js";import"./index-CWhTyxvc.js";var u={parser:a,get db(){return new s(2)},renderer:e,styles:r,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1,8 +0,0 @@
1
- import{c as r,s as e}from"./flowDiagram-UKHOOZJN-BUYlie03.js";import{_ as a}from"./mermaid.core-CE4idY-s.js";import"./chunk-5VM5RSS4-B-LuWFZD.js";import"./chunk-XXDRQBXY-CamBh0Ll.js";import"./chunk-KBJHAD2P-CqHrBJhp.js";import"./chunk-2GRJ4B5K-CydnyQUX.js";import"./channel-DOsaUk1k.js";import"./index-CWhTyxvc.js";var o=a(t=>`${e(t)}
2
- .swimlane.cluster rect {
3
- stroke: ${t.clusterBorder} !important;
4
- }
5
- [data-look="neo"].cluster rect {
6
- filter: none;
7
- }
8
- `,"getStyles"),s=o,n=r({defaultLayout:"swimlane",styles:s});export{n as diagram};