@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.
- package/CHANGELOG.md +19 -3
- package/dist/application/task-lifecycle/advance.js +9 -4
- package/dist/build-stamp.json +3 -3
- package/dist/commands/task-source-prepare.js +3 -1
- package/dist/executors/dag-pi-executor.js +1437 -154
- package/dist/executors/shell-executor.js +107 -35
- package/dist/shared/dag-failure-category.js +6 -0
- package/dist/task/contract/apply.js +36 -2
- package/dist/task/source-prepare/parse-intent.js +7 -0
- package/dist/worker/console/chat/pi-runtime.js +45 -2
- package/dist/worker/console/chat/resource-loader.js +4 -1
- package/dist/worker/console/chat/routes.js +8 -0
- package/dist/worker/console/chat/subagents/agent-tool.js +62 -0
- package/dist/worker/console/chat/subagents/explore-agent.js +169 -0
- package/dist/worker/console/chat/subagents/index.js +5 -0
- package/dist/worker/console/chat/subagents/orchestrator.js +273 -0
- package/dist/worker/console/chat/subagents/tool-policy.js +53 -0
- package/dist/worker/console/chat/subagents/types.js +13 -0
- package/dist/worker/console/chat/tool-preview.js +10 -0
- package/dist/worker/console/chat/tools.js +11 -1
- package/dist/worker/console/interview/tools.js +1 -0
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BGMbAdAG.js → abnfDiagram-N423BO3Z-CgXb0EVO.js} +1 -1
- package/dist/worker/console/static/assets/{arc-CJu1LND8.js → arc-DN59MZqN.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-BmJh9gMQ.js → architectureDiagram-T3A2C74G-BUk3sWpn.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-BWjaX3ZF.js → blockDiagram-VBNYF7ZC-IH-cPBFE.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-CLEOAxLB.js → c4Diagram-5PPSVZJV-BJWf1nGo.js} +1 -1
- package/dist/worker/console/static/assets/channel-i1DjpDIw.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-CydnyQUX.js → chunk-2GRJ4B5K-BCPb5H0y.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-tjJ1IoZ1.js → chunk-2Q5K7J3B-Cfs3jeW2.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DR358Phd.js → chunk-5RXB4S5H-BhQI1B_T.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-B-LuWFZD.js → chunk-5VM5RSS4-Cc_m4gyV.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-FG53fA6v.js → chunk-6Q2QTUOP-JPqDS3IV.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Bkt-w8SZ.js → chunk-GF5L2VYU-AeGX6EAg.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-WxHo0z2I.js → chunk-JWPE2WC7-pEyTjekV.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-CqHrBJhp.js → chunk-KBJHAD2P-Bi5UopKd.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-D4MVae_f.js → chunk-RYQCIY6F-FkGFJxgQ.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CamBh0Ll.js → chunk-XXDRQBXY-D-7LGrV2.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DgDRdE1V.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DgDRdE1V.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-C3qheCuW.js → cose-bilkent-JH36ORCC-CCEDNDaX.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DQlWfkS7.js → cynefin-VYW2F7L2-DDd-t7fm.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-BAxa9rFb.js → cynefinDiagram-MW4NZA55-LWe4Ikzr.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-YM09nLJw.js → dagre-VZM6K2ZE-BBCZScc-.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-I4W9EJj2.js → diagram-7IWD3JNH-B6liRVig.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-DH8eJ8Ff.js → diagram-B4RE2ZJO-DO_hIrpW.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-D0D0ntDW.js → diagram-LBJQPF4R-dmCy93uR.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-BIISKq1s.js → diagram-Q27KOJAE-D6mFTIxP.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3--xyAWj0w.js → diagram-UB23O5K3-DCteVUfY.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-B3sYXLJ4.js → ebnfDiagram-BXEA7PRR-DTv530VK.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-zRSYWhJP.js → erDiagram-JOGREHBK-DCXDMxCr.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-BUYlie03.js → flowDiagram-UKHOOZJN-BwEBLOJh.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-DP4kzzrM.js → ganttDiagram-PKOTCBZU-Ck-Vymjm.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-CAPoUxTF.js → gitGraphDiagram-DS77QQ5N-Hqs6X_3L.js} +1 -1
- package/dist/worker/console/static/assets/{index-CWhTyxvc.js → index-BmMi-Bve.js} +71 -71
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-BXPfjekV.js → infoDiagram-6WML65LV-Cjc6M9eg.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-aOI3pV6t.js → ishikawaDiagram-WSZJBQD7-CPchYZMl.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DAPZuvi4.js → journeyDiagram-NVQOT4AX-BABdJNNC.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-atwDzL3C.js → kanban-definition-27J2QSJJ-1oXhbM4j.js} +1 -1
- package/dist/worker/console/static/assets/{linear-D5E09qji.js → linear-PTmQ9LkV.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-CE4idY-s.js → mermaid.core-B6Lxil0V.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CbZxtPca.js → mindmap-definition-FAOFIHXS-BUqjNGEw.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-De-FYEte.js → pegDiagram-VL7TDLO6-8D1N-orJ.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-Bs0USobz.js → pieDiagram-7S7Q4E2Y-BlPMN9d9.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-Bq3ZrGCJ.js → quadrantDiagram-CIZ2JOQS-BIL5YDes.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Bk8ojyIj.js → railroadDiagram-AXF67PYL-Dqmil3ie.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-CGhoyws1.js → requirementDiagram-LRYGKXZP-C_-Dp4mH.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-DmVSQs3b.js → sankeyDiagram-W5VNT64P-C0s5-bQS.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-C80h1u0Q.js → sequenceDiagram-SI44F4Z6-DiVCHPfi.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CcbksQVZ.js → sizeCapture-X5ZJPWSS-CxQ9WVvx.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-CFTTTQKj.js → stateDiagram-OKZ733FA-D9mFHA-Y.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BqXQxfFC.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-Cw7Jr7Tg.js → swimlanes-SLNWSIFB-DDnC5l-M.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CXwWNRJl.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CVcdTVa5.js → timeline-definition-Z64GVDOM-C8QySPC-.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-BpLbmWp9.js → vennDiagram-T6HMQDX7-BeYdDiz6.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-6PXfbwj-.js → wardleyDiagram-T6FBY63Y-D8hjFWLH.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-Bjkcz4ih.js → xychartDiagram-ELKLHX3M-ClqG_JGK.js} +1 -1
- package/dist/worker/console/static/index.html +1 -1
- package/dist/worker/console/static-src/operator-chat/tools-catalog.js +21 -2
- package/dist/workflows/dag/dag-retry-schema.js +3 -0
- package/dist/workflows/dag/frontend-contract-facts.js +130 -0
- package/dist/workflows/dag/frontend-design-policy.js +100 -15
- package/dist/workflows/dag/frontend-implementation-contract.js +56 -8
- package/dist/workflows/dag/frontend-plan-render.js +13 -2
- package/dist/workflows/dag/frontend-risk.js +2 -0
- package/dist/workflows/dag/frontend-shadow-dual-write.js +17 -1
- package/dist/workflows/dag/frontend-shape.js +16 -6
- package/dist/workflows/dag/frontend-test-execution-evidence.js +48 -0
- package/dist/workflows/dag/frontend-typed-event-store.js +3 -0
- package/dist/workflows/dag/frontend-verification-trace.js +32 -0
- package/dist/workflows/dag/init-hybrid.js +16 -13
- package/dist/workflows/dag/node-execution.js +178 -88
- package/dist/workflows/dag/rerun-feedback.js +1 -0
- package/dist/workflows/dag/rerun-plan.js +90 -4
- package/dist/workflows/dag/rerun-run.js +7 -0
- package/dist/workflows/dag/retry-policy.js +16 -10
- package/dist/workflows/dag/runner-exit-diagnostics.js +125 -0
- package/dist/workflows/dag/runner.js +67 -7
- package/dist/workflows/dag/structured-output-repair.js +4 -1
- package/dist/workflows/dag/validate.js +10 -8
- package/dist/workflows/dag/workspace-checkpoint.js +66 -0
- package/docs/operations/README.md +1 -0
- package/docs/templates/agent-dag.schema.json +2 -2
- package/docs/templates/frontend-implementation-contract.schema.json +34 -2
- package/package.json +2 -3
- package/skills/frontend-plan/SKILL.md +14 -1
- package/skills/frontend-plan/references/decision-contract.md +84 -10
- package/skills/frontend-plan/references/design-decisions.md +32 -0
- package/dist/worker/console/static/assets/channel-DOsaUk1k.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-D4-D49vY.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-D4-D49vY.js +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-C4YCesmi.js +0 -1
- 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.
|
|
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:
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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
|
|
58
|
-
editable decision facts, then call `finalize_plan` exactly
|
|
59
|
-
design policy materializes the canonical implementation
|
|
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};
|