@tea-agent/loop-agent 0.43.0-next.17 → 0.43.0-next.19

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 (236) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +68 -2309
  3. package/README.md +7 -0
  4. package/dist/application/dag/args.js +8 -0
  5. package/dist/application/task-lifecycle/advance.js +38 -7
  6. package/dist/build-stamp.json +3 -3
  7. package/dist/cli/command-definitions.js +2 -0
  8. package/dist/cli/program.js +3 -1
  9. package/dist/cli/update/init-surface-notifier.js +2 -0
  10. package/dist/cli/update/policy.js +2 -0
  11. package/dist/commands/cursor-prompt.js +2 -0
  12. package/dist/commands/dag-approve.js +2 -0
  13. package/dist/commands/dag-final-verification.js +2 -0
  14. package/dist/commands/dag-init-hybrid.js +2 -0
  15. package/dist/commands/dag-reconcile-tasks.js +2 -0
  16. package/dist/commands/dag-reject.js +2 -0
  17. package/dist/commands/dag-report.js +2 -0
  18. package/dist/commands/dag-rerun.js +2 -0
  19. package/dist/commands/dag-resume.js +2 -0
  20. package/dist/commands/dag-workflow-compile.js +2 -0
  21. package/dist/commands/dag-workflow-plan.js +2 -0
  22. package/dist/commands/dag-workflow-validate.js +2 -0
  23. package/dist/commands/delegate.js +2 -0
  24. package/dist/commands/examples.js +2 -0
  25. package/dist/commands/import-prd.js +2 -0
  26. package/dist/commands/init-model-catalog.js +2 -0
  27. package/dist/commands/init.js +19 -13
  28. package/dist/commands/instructions.js +2 -0
  29. package/dist/commands/knowledge.js +2 -0
  30. package/dist/commands/loop-benchmark.js +2 -0
  31. package/dist/commands/pi-prompt.js +2 -0
  32. package/dist/commands/pi-reuse-benchmark.js +2 -0
  33. package/dist/commands/promote-run.js +2 -0
  34. package/dist/commands/stats.js +1 -1
  35. package/dist/commands/study-init.js +2 -0
  36. package/dist/commands/task-advance.js +34 -0
  37. package/dist/commands/task-source-prepare.js +2 -0
  38. package/dist/commands/worktree-create.js +2 -0
  39. package/dist/commands/worktree-remove.js +2 -0
  40. package/dist/executors/dag-pi-executor.js +1640 -194
  41. package/dist/executors/pi-executor.js +85 -3
  42. package/dist/executors/pi-sdk-executor.js +18 -0
  43. package/dist/executors/shell-executor.js +92 -7
  44. package/dist/executors/shell-verification.js +3 -0
  45. package/dist/governance/exec-plans.js +6 -3
  46. package/dist/infrastructure/console/app-data.js +6 -0
  47. package/dist/shared/artifacts-core.js +2 -0
  48. package/dist/shared/backend-dogfood-preflight.js +47 -0
  49. package/dist/shared/dag-failure-category.js +3 -0
  50. package/dist/shared/git-progress.js +2 -0
  51. package/dist/shared/one-shot-prompt-args.js +2 -0
  52. package/dist/shared/operator/capabilities.js +180 -0
  53. package/dist/shared/package-metadata.js +6 -4
  54. package/dist/shared/pi-context-pressure/sift-bridge.js +1 -1
  55. package/dist/shared/reference-context.js +2 -0
  56. package/dist/task/config-types.js +29 -0
  57. package/dist/task/contract/project.js +9 -0
  58. package/dist/task/contract/recover.js +6 -0
  59. package/dist/task/contract/schema.js +17 -0
  60. package/dist/task/source-prepare/artifact-meta.js +9 -2
  61. package/dist/task/source-prepare/build-draft.js +60 -0
  62. package/dist/task/source-prepare/fragment-inventory.js +4 -1
  63. package/dist/task/source-prepare/parse-intent.js +36 -11
  64. package/dist/task/task-demand-routing.js +5 -2
  65. package/dist/worker/console/chat/browser-automation.js +468 -308
  66. package/dist/worker/console/chat/browser-routes.js +175 -57
  67. package/dist/worker/console/chat/explore-tools.js +5 -2
  68. package/dist/worker/console/chat/pi-mode-loop-isolation.js +155 -0
  69. package/dist/worker/console/chat/pi-runtime/custom-tools/browser-tools.js +115 -20
  70. package/dist/worker/console/chat/pi-runtime/custom-tools/operator-tools.js +24 -16
  71. package/dist/worker/console/chat/pi-runtime/custom-tools/scheduled-goal-tools.js +22 -0
  72. package/dist/worker/console/chat/pi-runtime/progressive-tools.js +195 -0
  73. package/dist/worker/console/chat/pi-runtime.js +95 -28
  74. package/dist/worker/console/chat/routes.js +20 -1
  75. package/dist/worker/console/chat/scheduled-goal-booking.js +59 -0
  76. package/dist/worker/console/chat/scheduled-goal-delivery.js +27 -0
  77. package/dist/worker/console/chat/scheduled-goal-request.js +190 -0
  78. package/dist/worker/console/chat/sdd-data-alignment.js +1 -1
  79. package/dist/worker/console/chat/session-mode.js +8 -4
  80. package/dist/worker/console/chat/session-store.js +42 -9
  81. package/dist/worker/console/chat/tool-preview.js +115 -0
  82. package/dist/worker/console/chat/tools.js +7 -1
  83. package/dist/worker/console/chat/turn-order.js +13 -0
  84. package/dist/worker/console/chat/turn-process.js +32 -30
  85. package/dist/worker/console/operator-actions.js +50 -0
  86. package/dist/worker/console/prd-intake-bridge.js +54 -1
  87. package/dist/worker/console/scheduled-goal-host.js +98 -0
  88. package/dist/worker/console/scheduled-goal-operation-adapter.js +127 -0
  89. package/dist/worker/console/server.js +15 -0
  90. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-C4NXyedy.js → abnfDiagram-N423BO3Z-8-j6y-sd.js} +1 -1
  91. package/dist/worker/console/static/assets/{arc-NZ3qXvBI.js → arc-eoQiMvuk.js} +1 -1
  92. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-COZSRvml.js → architectureDiagram-T3A2C74G-C4A3uMcI.js} +1 -1
  93. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-Ck0Gxi9C.js → blockDiagram-VBNYF7ZC-D4zD2F-Q.js} +1 -1
  94. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BX5HQ4Ox.js → c4Diagram-5PPSVZJV-j1RkJziL.js} +1 -1
  95. package/dist/worker/console/static/assets/channel-ChE7y-cx.js +1 -0
  96. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-CoviemSL.js → chunk-2GRJ4B5K-YBHmhik1.js} +1 -1
  97. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DbOdOkbZ.js → chunk-2Q5K7J3B-COfWyo9P.js} +1 -1
  98. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BsG2pmdQ.js → chunk-5RXB4S5H-I99OUkHY.js} +1 -1
  99. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-DGdvrNm8.js → chunk-5VM5RSS4-XKxoJNJ4.js} +1 -1
  100. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BAy7Yd6y.js → chunk-6Q2QTUOP-DLT_cYx1.js} +1 -1
  101. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-D9UA7hUb.js → chunk-GF5L2VYU-CxcKZ9mV.js} +1 -1
  102. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-DPz7SZ8V.js → chunk-JWPE2WC7-V1EqXdjY.js} +1 -1
  103. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-BmuEOIh7.js → chunk-KBJHAD2P-DebTtdFp.js} +1 -1
  104. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-CIhBWnd8.js → chunk-RYQCIY6F-B-ivNRDf.js} +1 -1
  105. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CScR6mDD.js → chunk-XXDRQBXY-DC_Ds11b.js} +1 -1
  106. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C01TCf2X.js +1 -0
  107. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C01TCf2X.js +1 -0
  108. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BjpfWaUr.js → cose-bilkent-JH36ORCC-sWEqKwIb.js} +1 -1
  109. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BFQohJgT.js → cynefin-VYW2F7L2-BXa_dcu4.js} +1 -1
  110. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-D3gzRJnS.js → cynefinDiagram-MW4NZA55-C-Mle84F.js} +1 -1
  111. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-5eojkhoA.js → dagre-VZM6K2ZE-CXPDBITe.js} +1 -1
  112. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-CpD8LWu_.js → diagram-7IWD3JNH-CC-WJQfa.js} +1 -1
  113. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-B8_4qJ2a.js → diagram-B4RE2ZJO-CDAV5Vs4.js} +1 -1
  114. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-HOsXf0eu.js → diagram-LBJQPF4R-CmFiAcNz.js} +1 -1
  115. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-BqwRwiWP.js → diagram-Q27KOJAE-DPBZHuyn.js} +1 -1
  116. package/dist/worker/console/static/assets/{diagram-UB23O5K3-BRVCNZe1.js → diagram-UB23O5K3-jUlm_Ds3.js} +1 -1
  117. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-Cvb1TgGh.js → ebnfDiagram-BXEA7PRR-DWhQ3mfY.js} +1 -1
  118. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DS0O0qG9.js → erDiagram-JOGREHBK-Tr2gMqet.js} +1 -1
  119. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-BHIRvRr3.js → flowDiagram-UKHOOZJN-DJjVQHPA.js} +1 -1
  120. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-DcCJ1JWx.js → ganttDiagram-PKOTCBZU-D74dQ4u0.js} +1 -1
  121. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-B9ia5ony.js → gitGraphDiagram-DS77QQ5N-DwW0tZ0X.js} +1 -1
  122. package/dist/worker/console/static/assets/index-BWkIfcrK.css +1 -0
  123. package/dist/worker/console/static/assets/{index-wXlQohNs.js → index-Cdkvw_H6.js} +97 -97
  124. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-3ogpgegn.js → infoDiagram-6WML65LV-ILCbxJyb.js} +1 -1
  125. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-4tgpQ5SL.js → ishikawaDiagram-WSZJBQD7-DeuWBQ89.js} +1 -1
  126. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DNfgHqFx.js → journeyDiagram-NVQOT4AX-CF5ih8Fk.js} +1 -1
  127. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-Dz7ngC8z.js → kanban-definition-27J2QSJJ-C7yOSuRO.js} +1 -1
  128. package/dist/worker/console/static/assets/{linear-DI7Jv62E.js → linear-BDZ9riWi.js} +1 -1
  129. package/dist/worker/console/static/assets/{mermaid.core-CQA4Nzmo.js → mermaid.core-7pKqYtpZ.js} +5 -5
  130. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CtsMc8Mf.js → mindmap-definition-FAOFIHXS-LeJDybSU.js} +1 -1
  131. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-ByppE9yH.js → pegDiagram-VL7TDLO6-BJvT3pMD.js} +1 -1
  132. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-B5PtgFgt.js → pieDiagram-7S7Q4E2Y-_rGqpMan.js} +1 -1
  133. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-Cq4p0k2K.js → quadrantDiagram-CIZ2JOQS-DPcSv5aA.js} +1 -1
  134. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-DjfkyljN.js → railroadDiagram-AXF67PYL-Drxx4hkJ.js} +1 -1
  135. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DzynNRSl.js → requirementDiagram-LRYGKXZP-BCTUdU4z.js} +1 -1
  136. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Cj7TCpTJ.js → sankeyDiagram-W5VNT64P-B6wzbZmB.js} +1 -1
  137. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-C73C6ykA.js → sequenceDiagram-SI44F4Z6-BGt8d3QQ.js} +1 -1
  138. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-BiNLgN2x.js → sizeCapture-X5ZJPWSS-7nlhJKo7.js} +1 -1
  139. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-UwvjS64-.js → stateDiagram-OKZ733FA-Cv2stqMA.js} +1 -1
  140. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DC7V5vcq.js +1 -0
  141. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-CC7DH98r.js → swimlanes-SLNWSIFB-qDAo4Yc1.js} +2 -2
  142. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bwy4QUTO.js +8 -0
  143. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-LSBXTR70.js → timeline-definition-Z64GVDOM-CKbDNKTr.js} +1 -1
  144. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-BAuxWwGP.js → vennDiagram-T6HMQDX7-DI-9EHic.js} +1 -1
  145. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y--E5_gjZx.js → wardleyDiagram-T6FBY63Y-BrzzRDpX.js} +1 -1
  146. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-dJWNmyzF.js → xychartDiagram-ELKLHX3M-BclH5hGh.js} +1 -1
  147. package/dist/worker/console/static/index.html +2 -2
  148. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +41 -11
  149. package/dist/worker/console/static-src/operator-chat/compaction-message.js +3 -17
  150. package/dist/worker/console/static-src/operator-chat/slash-palette-nav.js +15 -5
  151. package/dist/worker/console/static-src/operator-chat/timeline-merge.js +29 -0
  152. package/dist/worker/console/static-src/operator-chat/useChatThread.js +2 -5
  153. package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +2 -0
  154. package/dist/worker/console/static-src/prd-file-import.js +3 -1
  155. package/dist/worker/console/workspace-context.js +17 -1
  156. package/dist/worker/delivery/git-transaction.js +2 -0
  157. package/dist/worker/feature/fullstack-validate.js +2 -0
  158. package/dist/worker/loop-agent/loop-agent-client.js +8 -2
  159. package/dist/worker/materialize/harness-task-materializer.js +4 -1
  160. package/dist/worker/metrics/projector.js +1 -1
  161. package/dist/worker/observability/event-store.js +4 -1
  162. package/dist/worker/observability/read-model.js +4 -1
  163. package/dist/worker/observe/node-transparency.js +23 -1
  164. package/dist/worker/observe/routes.js +4 -0
  165. package/dist/worker/observe/static/operator-chrome.js +3 -1
  166. package/dist/worker/outcomes/declared-artifacts.js +2 -0
  167. package/dist/worker/preflight.js +3 -0
  168. package/dist/worker/scheduler/scheduled-goal-dispatch.js +117 -0
  169. package/dist/worker/scheduler/scheduled-goal-evidence.js +167 -0
  170. package/dist/worker/scheduler/scheduled-goal-recovery.js +62 -0
  171. package/dist/worker/scheduler/scheduled-goal-store.js +699 -0
  172. package/dist/worker/scheduler/scheduled-goal-supervisor.js +132 -0
  173. package/dist/worker/scheduler/scheduled-goal-time.js +102 -0
  174. package/dist/worker/scheduler/scheduled-goal-types.js +95 -0
  175. package/dist/worker/task-spec/validate.js +4 -1
  176. package/dist/workflows/dag/backend-test-markdown-workflow.js +6 -24
  177. package/dist/workflows/dag/backend-test-plan-protocol.js +82 -5
  178. package/dist/workflows/dag/dag-retry-schema.js +11 -0
  179. package/dist/workflows/dag/decision-envelope.js +2 -0
  180. package/dist/workflows/dag/dynamic-runtime/shared.js +2 -2
  181. package/dist/workflows/dag/frontend-closeout.js +4 -2
  182. package/dist/workflows/dag/frontend-committed-facts.js +461 -0
  183. package/dist/workflows/dag/frontend-durable-tools.js +15 -3
  184. package/dist/workflows/dag/frontend-implementation-contract.js +365 -8
  185. package/dist/workflows/dag/frontend-plan-canary.js +53 -0
  186. package/dist/workflows/dag/frontend-plan-decision-contract.js +803 -0
  187. package/dist/workflows/dag/frontend-plan-render.js +0 -2
  188. package/dist/workflows/dag/frontend-prewrite-gate.js +3 -3
  189. package/dist/workflows/dag/frontend-provider-capability-matrix.js +8 -61
  190. package/dist/workflows/dag/frontend-recovery-run.js +57 -0
  191. package/dist/workflows/dag/frontend-review-context.js +43 -70
  192. package/dist/workflows/dag/frontend-risk.js +92 -10
  193. package/dist/workflows/dag/frontend-session-budget.js +117 -3
  194. package/dist/workflows/dag/frontend-shape.js +11 -55
  195. package/dist/workflows/dag/frontend-test-execution-evidence.js +35 -10
  196. package/dist/workflows/dag/frontend-typed-event-store.js +32 -25
  197. package/dist/workflows/dag/frontend-verification-trace.js +25 -12
  198. package/dist/workflows/dag/frontend-writer-admission.js +3 -47
  199. package/dist/workflows/dag/frontend-writer-status.js +0 -23
  200. package/dist/workflows/dag/init-hybrid.js +202 -111
  201. package/dist/workflows/dag/interrupt-request.js +2 -0
  202. package/dist/workflows/dag/lifecycle.js +11 -2
  203. package/dist/workflows/dag/node-execution.js +50 -13
  204. package/dist/workflows/dag/reconcile-run.js +2 -0
  205. package/dist/workflows/dag/repair-artifact.js +3 -1
  206. package/dist/workflows/dag/report.js +2 -0
  207. package/dist/workflows/dag/rerun-plan.js +10 -0
  208. package/dist/workflows/dag/rerun-task.js +79 -1
  209. package/dist/workflows/dag/retry-policy.js +18 -0
  210. package/dist/workflows/dag/scheduler.js +2 -4
  211. package/dist/workflows/dag/types.js +44 -6
  212. package/dist/workflows/dag/validate.js +4 -0
  213. package/docs/README.md +1 -0
  214. package/docs/governance/README.md +1 -0
  215. package/docs/init-surface.manifest.json +1 -0
  216. package/docs/operations/README.md +2 -0
  217. package/docs/templates/README.md +1 -1
  218. package/docs/templates/agent-dag.schema.json +2 -2
  219. package/docs/templates/backend-test-dag.json +14 -10
  220. package/docs/templates/frontend-implementation-contract.schema.json +0 -7
  221. package/docs/templates/frontend-implementation-dag.json +8 -9
  222. package/package.json +8 -3
  223. package/skills/frontend-bounded-implement/SKILL.md +3 -4
  224. package/skills/frontend-design-review/SKILL.md +7 -12
  225. package/skills/frontend-design-review/references/review-checklist.md +7 -7
  226. package/skills/frontend-plan/SKILL.md +8 -18
  227. package/skills/frontend-plan/references/decision-contract.md +19 -26
  228. package/skills/frontend-review/SKILL.md +21 -25
  229. package/skills/frontend-review/references/review-findings.md +48 -24
  230. package/dist/worker/console/static/assets/channel-BxdTlb_5.js +0 -1
  231. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-_ByA1Nf8.js +0 -1
  232. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-_ByA1Nf8.js +0 -1
  233. package/dist/worker/console/static/assets/index-B9goN3S5.css +0 -1
  234. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-nLgMZ0D3.js +0 -1
  235. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BcYqTady.js +0 -8
  236. package/dist/workflows/dag/frontend-shadow-dual-write.js +0 -975
@@ -6,22 +6,24 @@
6
6
  implementation paths and verification target IDs.
7
7
  - Record observable state and interaction behavior, including trigger and expected
8
8
  behavior. IDs and paths alone are not behavioral coverage.
9
- - Use a shared static build target for requirement coverage; build does not prove behavior.
10
- - List affected existing tests in implementation steps and update their assertions.
11
- No separate test plan or per-AC test titles are required; frozen test commands must pass.
9
+ - One behavior target may cover multiple related requirements when one observable
10
+ test behavior proves them together.
11
+ - Every non-static verification target `id` is the stable identifier of that
12
+ contract entry only; it never needs to appear in test titles. Do not add tests
13
+ or rename titles to carry generated ids.
12
14
  - Static targets are for project-wide commands and are traced by file and command
13
15
  only.
14
16
 
15
- ### Build target mapping
17
+ ### Behavior target shape (canonical example)
16
18
 
17
- Static build targets map requirements to files using the frozen commandId; they
18
- do not prove tested behavior.
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.
19
22
 
20
23
  ```json
21
24
  {
22
- "id": "VT-BUILD",
23
- "commandId": "<frozen-build-commandId>",
24
- "file": "src/App.tsx",
25
+ "id": "VT-COUNTER-LOCAL-CONSTRAINTS",
26
+ "file": "src/App.test.tsx",
25
27
  "requirementIds": ["AC-FE-001", "AC-FE-005"],
26
28
  "uiStates": ["disabled-minus", "default"]
27
29
  }
@@ -45,7 +47,7 @@ carries behavior, implementation targets, and verification target ids:
45
47
  "applicable": true,
46
48
  "expectedBehavior": "minus button disabled at count 0",
47
49
  "implementationTargets": ["src/components/SmokeCounter.tsx"],
48
- "verificationTargetIds": ["VT-BUILD"]
50
+ "verificationTargetIds": ["VT-COUNTER-LOCAL-CONSTRAINTS"]
49
51
  }
50
52
  ],
51
53
  "interactions": [
@@ -54,7 +56,7 @@ carries behavior, implementation targets, and verification target ids:
54
56
  "trigger": "User clicks refresh",
55
57
  "expectedBehavior": "reloads runs",
56
58
  "implementationTargets": ["src/App.tsx"],
57
- "verificationTargetIds": ["VT-BUILD"]
59
+ "verificationTargetIds": ["VT-SMOKE-COUNTER-BEHAVIOR"]
58
60
  }
59
61
  ]
60
62
  }
@@ -74,7 +76,8 @@ non-static verification target files to the writer writeSet separately.
74
76
  "src/App.tsx"
75
77
  ],
76
78
  "verificationTargetIds": [
77
- "VT-BUILD"
79
+ "VT-SMOKE-COUNTER-BEHAVIOR",
80
+ "VT-COUNTER-LOCAL-CONSTRAINTS"
78
81
  ]
79
82
  }
80
83
  ```
@@ -110,8 +113,9 @@ One component choice may cover many states/interactions via `covers`.
110
113
  `reuse-existing` requires an existing-file `evidencePath`; greenfield uses `new`.
111
114
 
112
115
  For Mock/API, keep the real request path enabled by default. Select only a strategy
113
- allowed by the frozen task capability. Active Mock requires production-default-off activation; Mock tests are deferred. `not-needed` records the reason Mock is unnecessary or skipped and any real-integration gap;
114
- no behavior test evidence is required here.
116
+ allowed by the frozen task capability. Active Mock requires deterministic Mock-backed
117
+ verification and production-default-off activation. `not-needed` requires positive
118
+ real/no-remote evidence or records a real-integration gap.
115
119
 
116
120
  Add dependencies only when authorized. Record unsupported dependency, path, API,
117
121
  design, or verification needs as blocking evidence gaps; never invent a command or
@@ -134,20 +138,9 @@ and checked again by the policy shell.
134
138
  Use `record_plan_group_coverage` for a complete declared execution group with shared
135
139
  targets/VTs; runtime expands to all canonical members. Submit individual coverage
136
140
  for differences. Constraints/exclusions create no invented UI or tests; keep genuine
137
- source expectations and affected existing tests; no new framework is required.
141
+ evidence gaps, and never weaken behavior evidence required by the source.
138
142
 
139
143
  Submit Mock policy with `record_mock_api` and empty endpoints, then one endpoint per
140
144
  `record_mock_endpoint`. Use `replace:true` for revisions, plus `remove:true` to
141
145
  withdraw an endpoint. Use stable finding/fact identities; successful receipts mean
142
146
  durable commits. Resume missing work instead of regenerating full JSON or history.
143
-
144
- ## Implementation steps submission
145
-
146
- Submit `finalize_plan` with `implementationSteps: [{requirementIds, action}]`.
147
- Each action says what to change and where within the approved implementation
148
- paths. Cover every frozen requirement ID, including constraints and exclusions
149
- (state what to preserve or avoid). One action may cover several related IDs.
150
- Do not merely repeat file names or AC titles. Missing, unknown or blank steps
151
- return a correctable receipt; fix the steps and call finalize_plan again.
152
- The runtime renders these into canonical `implementationSteps` strings with AC
153
- references. No test plan or new tests are required by this protocol.
@@ -4,7 +4,7 @@ description: Use to review completed frontend code and verification before close
4
4
  references:
5
5
  - path: references/review-findings.md
6
6
  required: true
7
- maxChars: 2800
7
+ maxChars: 3200
8
8
  ---
9
9
 
10
10
  # Frontend Review
@@ -16,9 +16,9 @@ design-review prose or `ai_workspace/`.
16
16
 
17
17
  ## Authoritative Terminal
18
18
 
19
- Submit findings one at a time with `record_review_finding` using stable IDs.
20
- Use `replace:true` for revisions. The terminal automatically includes saved findings;
21
- do not repeat their array. Correct rejected calls, then commit one successful terminal:
19
+ Submit findings one at a time with `record_review_finding` (stable IDs,
20
+ `replace:true` for revisions). The terminal auto-includes saved findings; correct
21
+ rejected calls, then commit one successful terminal:
22
22
 
23
23
  - `approve_review` when no Critical/Important finding remains;
24
24
  - `request_review_changes` for a defect, missing required evidence, forbidden
@@ -30,24 +30,20 @@ Requested changes end this run; the recovery controller owns follow-up.
30
30
 
31
31
  ## Review Scope
32
32
 
33
- - Map every requirement to corresponding implementation in the cumulative diff
34
- and bound target files. Report missing implementation or altered requirements.
35
- - Check allowed paths, forbidden paths, approved dependencies and source-bound
36
- design constraints. Preserve production Mock isolation and real-request defaults.
37
- - Inspect build and frozen existing-test results; required commands must pass.
38
- - Check affected existing tests were maintained with changed behavior/interfaces.
39
- Do not require a new framework or separate test plan when absent.
40
- - Broader browser/visual checks may use the frontend-test handoff. Do not defer
41
- failing existing unit tests or weaken assertions to permit approval.
42
- - Build success proves buildability only. Do not report tested behavior or real
43
- integration without actual evidence. Treat shell exit status as authoritative.
44
- - Do not edit files or perform repository-wide rediscovery.
45
-
46
- ## Evidence And Output
47
-
48
- Findings cite a tight file location, exact command/result, or named DAG artifact.
49
- Separate confirmed defects, missing evidence, and residual risks using Findings,
50
- Verification Assessment, UX Assessment, and Residual Risks headings.
51
-
52
- A pass requires no Critical/Important findings and all required shell checks passed.
53
- Still report knowledge-source status and optional browser/manual gaps.
33
+ Follow the findings guide's review sequence and pass rules. In addition:
34
+
35
+ - Compare intent, contract, plan, diff, and evidence; report altered requirements.
36
+ Check every changed file against allowed/forbidden/approved write scope, and map
37
+ criteria to behavior, applicable UI states, tests, and shell evidence.
38
+ - Mock strategies need the real request as default, contract-aligned fixtures,
39
+ production isolation, and no false real-integration claim; `not-needed` needs
40
+ real/no-remote evidence, or a default-auto skipped-Mock rationale with the Real
41
+ Integration Gap preserved when no project Mock capability is confirmed.
42
+ - Inspect lint only when `lintConfigured: true`; with `lintConfigured: false` there
43
+ is no lint surface — report no lint finding. Typecheck, build, and test still
44
+ require successful exits.
45
+ - Read shell exit status from `verificationEvidence.commands`, not prose or the
46
+ trace: the trace proves binding only, never that a command succeeded. Judge
47
+ whether the tests are sufficient; do not guess whether the commands ran.
48
+ - Evaluate component/design claims against bound evidence; do not replace it with a
49
+ repository-wide search or connector query. Do not edit files.
@@ -1,30 +1,54 @@
1
1
  # Frontend Review Findings Guide
2
2
 
3
- ## Scope and severity
3
+ ## Severity
4
4
 
5
- - **Critical/Important**: missing requirement implementation, unauthorized writes
6
- or dependencies, production Mock isolation violation, altered source requirements,
7
- failed/missing npm run build, or a false verification/integration claim.
8
- - **Advisory**: behavior correctness, edge cases, regression concerns and missing
9
- tests. Record these for later frontend-test work; they do not block implementation.
5
+ - **Critical**: blocks primary flow, corrupts data, violates security/privacy, writes forbidden paths, bypasses required verification.
6
+ - **Important**: acceptance/state/validation gap, material convention drift, missing behavior tests, unauthorized dependency, unsafe mock activation/import, mock-contract drift, misleading real-integration claim, or failed/missing required verification.
7
+ - **Minor**: non-blocking maintainability, copy, layout, or cleanup issue.
10
8
 
11
9
  ## Evidence
12
10
 
13
- Cite the bound contract, actual cumulative diff, tight file locations and archived
14
- build result. Never substitute an implementation summary for the diff or invent
15
- verification results. Use only evidence supplied in the canonical review context.
16
-
17
- ## Review sequence
18
-
19
- 1. Establish changed files and authorized write boundaries.
20
- 2. Map each requirement to corresponding implementation.
21
- 3. Check source-bound design constraints, dependency permission and production Mock isolation.
22
- 4. Confirm build and frozen existing tests passed and classify findings within this scope.
23
-
24
- ## Pass rules
25
-
26
- All requirements have corresponding implementation, changes stay authorized,
27
- production Mock safety is preserved, and build plus frozen existing tests passed.
28
- Affected unit tests must reflect changed behavior; do not remove assertions to pass.
29
- No new framework or separate test plan is required when absent.
30
- Behavior and real integration remain unverified unless separate evidence exists.
11
+ - Cite tight file locations, exact commands/results, or named DAG artifacts.
12
+ - Never invent evidence; name the missing check. An implementation summary is not the actual diff.
13
+ - Failed required static/behavior verification is at least Important. Lint may be
14
+ `baseline-debt` only with a valid `frontend-lint-assessment-v1`; this is not a
15
+ passed lint result. A changed-file lint diagnostic, new unmatched diagnostic,
16
+ command drift, missing baseline, timeout, or unparseable output is Important.
17
+ - Treat the design evidence already bound in the canonical review context as the
18
+ source of truth. Do not launch a connector query or repository-wide OpenSpec/
19
+ `ai_workspace` search to replace frozen evidence; label a missing bound evidence
20
+ reference accurately instead.
21
+
22
+ ## Review Sequence
23
+
24
+ 1. Establish changed-file inventory and write boundaries.
25
+ 2. Compare the bound contract with the approved constraints and cumulative diff.
26
+ 3. Map each criterion to code, states, tests, and evidence.
27
+ 4. Inspect interactions, state/data/API behavior, failure paths, and regressions.
28
+ 5. Check mock selection, contract-to-fixture mapping, activation/default path,
29
+ handler/fixture/adapter and consumer diff, verification, production imports, and
30
+ the real-integration gap.
31
+ 6. Check bound design evidence, responsive/a11y behavior, dependencies, and maintenance.
32
+ 7. Classify findings and derive the verdict mechanically.
33
+
34
+ ```text
35
+ - [Critical|Important|Minor] path:line — Problem; impact; required correction; evidence.
36
+ ```
37
+
38
+ ## Pass Rules
39
+
40
+ - No Critical or Important findings remain.
41
+ - Required static and behavior nodes ran and passed: verify each frozen command through
42
+ `verificationEvidence.commands` (per-command `exitCode`/`ok`) instead of inferring from
43
+ the trace, which only proves binding.
44
+ - When the task declares lint commands (`lintConfigured: true`), lint is `passed` or
45
+ evidence-backed `baseline-debt`; typecheck, build, and test are passed. Any debt count
46
+ and affected unchanged files remain disclosed. A task that declares no lint commands
47
+ reports `lintConfigured: false`: lint is not part of its verification surface, so
48
+ report no lint finding either way.
49
+ - Changed files are authorized.
50
+ - Criteria and applicable states have implementation and evidence.
51
+ - Required Mock-backed behavior passed; any generated Mock-specific verification also
52
+ passed; Mock is not enabled by default in production. For default-auto skipped
53
+ Mock, the real request remains default and the Real Integration Gap is preserved.
54
+ - Optional unavailable knowledge/browser/visual/manual checks remain explicit risks.
@@ -1 +0,0 @@
1
- import{ag as o,ah as n}from"./mermaid.core-CQA4Nzmo.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-D9UA7hUb.js";import{_ as i}from"./mermaid.core-CQA4Nzmo.js";import"./chunk-5VM5RSS4-DGdvrNm8.js";import"./chunk-XXDRQBXY-CScR6mDD.js";import"./chunk-KBJHAD2P-BmuEOIh7.js";import"./chunk-2GRJ4B5K-CoviemSL.js";import"./index-wXlQohNs.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-D9UA7hUb.js";import{_ as i}from"./mermaid.core-CQA4Nzmo.js";import"./chunk-5VM5RSS4-DGdvrNm8.js";import"./chunk-XXDRQBXY-CScR6mDD.js";import"./chunk-KBJHAD2P-BmuEOIh7.js";import"./chunk-2GRJ4B5K-CoviemSL.js";import"./index-wXlQohNs.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};