@tea-agent/loop-agent 0.41.1-beta.0 → 0.41.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/CHANGELOG.md +61 -267
  2. package/dist/application/dag/generate-task-dag.js +19 -75
  3. package/dist/application/task-lifecycle/advance.js +5 -24
  4. package/dist/application/task-lifecycle/observe.js +17 -171
  5. package/dist/application/task-lifecycle/plan-transitions.js +7 -42
  6. package/dist/application/task-lifecycle/recommendations.js +2 -13
  7. package/dist/build-stamp.json +3 -3
  8. package/dist/cli/command-definitions.js +0 -7
  9. package/dist/cli/program.js +0 -5
  10. package/dist/commands/client-recovery.js +0 -3
  11. package/dist/commands/init.js +1 -27
  12. package/dist/commands/task-advance.js +0 -19
  13. package/dist/executors/dag-pi-executor.js +231 -3784
  14. package/dist/executors/pi-executor.js +4 -15
  15. package/dist/executors/pi-extension-resolver.js +14 -2
  16. package/dist/executors/shell-executor.js +217 -945
  17. package/dist/executors/shell-write-guard.js +0 -7
  18. package/dist/shared/dag-failure-category.js +0 -12
  19. package/dist/shared/openspec-spec.js +4 -70
  20. package/dist/shared/operator/capabilities.js +0 -7
  21. package/dist/task/config-types.js +7 -34
  22. package/dist/task/contract/adopt.js +0 -4
  23. package/dist/task/contract/import-revision.js +0 -4
  24. package/dist/task/contract/project.js +0 -3
  25. package/dist/task/contract/schema.js +1 -2
  26. package/dist/task/frontend-project-capability.js +20 -203
  27. package/dist/task/runtime.js +2 -5
  28. package/dist/task/source-prepare/build-draft.js +3 -3
  29. package/dist/task/source-prepare/fragment-inventory.js +9 -15
  30. package/dist/task/source-prepare/prepare.js +1 -89
  31. package/dist/task/source-prepare/semantic-intake.js +2 -6
  32. package/dist/task/source-references.js +1 -22
  33. package/dist/worker/console/chat/chat-ui-policy.js +4 -2
  34. package/dist/worker/console/chat/pi-runtime.js +235 -13
  35. package/dist/worker/console/chat/repo-browser.js +10 -3
  36. package/dist/worker/console/chat/routes.js +86 -44
  37. package/dist/worker/console/chat/semantic-activity.js +12 -11
  38. package/dist/worker/console/chat/session-stats.js +96 -0
  39. package/dist/worker/console/chat/session-store.js +133 -70
  40. package/dist/worker/console/chat/shortcuts.js +1 -1
  41. package/dist/worker/console/chat/turn-process.js +139 -60
  42. package/dist/worker/console/index.js +0 -3
  43. package/dist/worker/console/operation-store.js +6 -226
  44. package/dist/worker/console/operator-actions.js +7 -169
  45. package/dist/worker/console/pi-plugins.js +3 -1
  46. package/dist/worker/console/server.js +19 -4
  47. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-Bho4we4c.js → abnfDiagram-N423BO3Z-DQ5jlYVU.js} +1 -1
  48. package/dist/worker/console/static/assets/{arc-TBDkTeK0.js → arc-BeTVCzH9.js} +1 -1
  49. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-BF_fZrn2.js → architectureDiagram-T3A2C74G-DassREBi.js} +1 -1
  50. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-CCnPgUe2.js → blockDiagram-VBNYF7ZC-DyeNX8Ek.js} +1 -1
  51. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BCYZJLAT.js → c4Diagram-5PPSVZJV-BXb_zxGx.js} +1 -1
  52. package/dist/worker/console/static/assets/channel-B_lofstT.js +1 -0
  53. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-D8K6adhU.js → chunk-2GRJ4B5K-B9F9gxGC.js} +1 -1
  54. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DkT1Q78b.js → chunk-2Q5K7J3B-Byd5zHEQ.js} +1 -1
  55. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DuhvpIr7.js → chunk-5RXB4S5H-BqoxMJk9.js} +1 -1
  56. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-BnK6dC49.js → chunk-5VM5RSS4-CT7d6YZw.js} +1 -1
  57. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DPz__z7r.js → chunk-6Q2QTUOP-CdiNyN0N.js} +1 -1
  58. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-0kkppM2j.js → chunk-GF5L2VYU-BGw9bpVc.js} +1 -1
  59. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-BB41iK5t.js → chunk-JWPE2WC7-DiDVlVB1.js} +1 -1
  60. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-CiVrxKHU.js → chunk-KBJHAD2P-BhHf-4yK.js} +1 -1
  61. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-C2h9Xje1.js → chunk-RYQCIY6F-B79pEgwv.js} +1 -1
  62. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-3iOSHdbM.js → chunk-XXDRQBXY-Cb70EcUV.js} +1 -1
  63. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-ieUI0-eY.js +1 -0
  64. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-ieUI0-eY.js +1 -0
  65. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BN3A7tkk.js → cose-bilkent-JH36ORCC-DBHLnAf1.js} +1 -1
  66. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-CTuBy0Or.js → cynefin-VYW2F7L2-BT_JRsOH.js} +1 -1
  67. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-wb6tUlMN.js → cynefinDiagram-MW4NZA55-Bss-msa3.js} +1 -1
  68. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-GP1Ivx8B.js → dagre-VZM6K2ZE-B8Gr24pt.js} +1 -1
  69. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-ejrcK6L0.js → diagram-7IWD3JNH-BrjU70Jw.js} +1 -1
  70. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-YFkCCvUU.js → diagram-B4RE2ZJO-Cp_JpPGd.js} +1 -1
  71. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-B4rrvIaL.js → diagram-LBJQPF4R-BWKICEP-.js} +1 -1
  72. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-C-YIZcUf.js → diagram-Q27KOJAE-D3z_UNR_.js} +1 -1
  73. package/dist/worker/console/static/assets/{diagram-UB23O5K3-BPF5wcL1.js → diagram-UB23O5K3-_Ywm390x.js} +1 -1
  74. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-CU5SzXjO.js → ebnfDiagram-BXEA7PRR-D9QYQQMB.js} +1 -1
  75. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-CpL414DE.js → erDiagram-JOGREHBK-BNgXNKAr.js} +1 -1
  76. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-MrhLzNau.js → flowDiagram-UKHOOZJN-QRLnkPCg.js} +1 -1
  77. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-Bg4qFuUo.js → ganttDiagram-PKOTCBZU-B9fOduNi.js} +1 -1
  78. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-ColxSXLR.js → gitGraphDiagram-DS77QQ5N-FSEdtPN2.js} +1 -1
  79. package/dist/worker/console/static/assets/index-Cs9JUSPs.css +1 -0
  80. package/dist/worker/console/static/assets/index-DtPrwu7M.js +451 -0
  81. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-Czvtm6gc.js → infoDiagram-6WML65LV-D5Bjg9dm.js} +1 -1
  82. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-B7Xp8HyJ.js → ishikawaDiagram-WSZJBQD7-BlNRkWvf.js} +1 -1
  83. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DWYZcvph.js → journeyDiagram-NVQOT4AX-BdJiw3SL.js} +1 -1
  84. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-KTLZRUjx.js → kanban-definition-27J2QSJJ-CsDNlYht.js} +1 -1
  85. package/dist/worker/console/static/assets/{linear-_Exn7bfl.js → linear-8g9dbEmX.js} +1 -1
  86. package/dist/worker/console/static/assets/{mermaid.core-Cxg8kX8V.js → mermaid.core-ChyQH_ut.js} +5 -5
  87. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-oKrlo2Bt.js → mindmap-definition-FAOFIHXS-DwYoCTYt.js} +1 -1
  88. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-XAeteiNd.js → pegDiagram-VL7TDLO6-T_b2rS17.js} +1 -1
  89. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-BTf1K-lp.js → pieDiagram-7S7Q4E2Y-1Cr7WMhH.js} +1 -1
  90. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-C0IlY0Jf.js → quadrantDiagram-CIZ2JOQS-Bq4qM59o.js} +1 -1
  91. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BVbKtZhW.js → railroadDiagram-AXF67PYL-ytFgR1RL.js} +1 -1
  92. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-C5e4JFcr.js → requirementDiagram-LRYGKXZP-CnUdUVYX.js} +1 -1
  93. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Cz30hc29.js → sankeyDiagram-W5VNT64P-_5rJqG6R.js} +1 -1
  94. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DS33n6d0.js → sequenceDiagram-SI44F4Z6-D5imyGbt.js} +1 -1
  95. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-46w7v-9T.js → sizeCapture-X5ZJPWSS-DvgDn3wL.js} +1 -1
  96. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-pbcD5SsZ.js → stateDiagram-OKZ733FA-BViu7duc.js} +1 -1
  97. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-kNxnG4_w.js +1 -0
  98. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-DuivYBSj.js → swimlanes-SLNWSIFB-BcULKg2P.js} +2 -2
  99. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DyTzlcWH.js +8 -0
  100. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-Cb9VZVIl.js → timeline-definition-Z64GVDOM-DmPveIjt.js} +1 -1
  101. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-D2-mfOgR.js → vennDiagram-T6HMQDX7-9r-iFy0R.js} +1 -1
  102. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-DeS2aC76.js → wardleyDiagram-T6FBY63Y-D3fIXdvM.js} +1 -1
  103. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-WGsrFjxH.js → xychartDiagram-ELKLHX3M-BCSS9SBg.js} +1 -1
  104. package/dist/worker/console/static/index.html +2 -2
  105. package/dist/worker/console/static-src/app/useRunProgress.js +9 -2
  106. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +19 -8
  107. package/dist/worker/console/static-src/operator-chat/dag-progress-link.js +22 -0
  108. package/dist/worker/console/static-src/operator-chat/open-preview-in-browser.js +15 -7
  109. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +2 -0
  110. package/dist/worker/console/static-src/operator-chat/useChatThread.js +6 -0
  111. package/dist/worker/console/static-src/operator-chat/useRuntimeControls.js +28 -3
  112. package/dist/worker/console/static-src/pages/tasks/run-panel-progress.js +106 -0
  113. package/dist/worker/console/static-src/shell/workspace-route.js +4 -0
  114. package/dist/worker/console/workspace-context.js +1 -111
  115. package/dist/worker/observability/read-model.js +4 -0
  116. package/dist/worker/observe/routes.js +4 -0
  117. package/dist/worker/observe/static/dag-node-purpose.js +0 -5
  118. package/dist/worker/observe/static/views/dag-inspector.js +2 -7
  119. package/dist/worker/observe/static/views/session-timeline.js +46 -15
  120. package/dist/workflows/dag/backend-test-result-contract.js +1 -1
  121. package/dist/workflows/dag/contract-validator-registrations.js +2 -1
  122. package/dist/workflows/dag/frontend-implementation-contract.js +162 -932
  123. package/dist/workflows/dag/frontend-plan-render.js +1 -2
  124. package/dist/workflows/dag/frontend-prewrite-gate.js +349 -255
  125. package/dist/workflows/dag/frontend-recovery-plan.js +10 -17
  126. package/dist/workflows/dag/frontend-recovery-run.js +20 -33
  127. package/dist/workflows/dag/frontend-repair.js +432 -1
  128. package/dist/workflows/dag/frontend-review-context.js +15 -261
  129. package/dist/workflows/dag/frontend-verification-trace.js +24 -249
  130. package/dist/workflows/dag/frontend-worktree-diff.js +17 -250
  131. package/dist/workflows/dag/init-hybrid.js +494 -685
  132. package/dist/workflows/dag/interrupt-request.js +0 -7
  133. package/dist/workflows/dag/node-execution.js +4 -732
  134. package/dist/workflows/dag/prompt.js +1 -34
  135. package/dist/workflows/dag/report.js +1 -37
  136. package/dist/workflows/dag/rerun-feedback.js +1 -256
  137. package/dist/workflows/dag/rerun-plan.js +2 -10
  138. package/dist/workflows/dag/rerun-run.js +0 -23
  139. package/dist/workflows/dag/rerun-task.js +0 -29
  140. package/dist/workflows/dag/retry-policy.js +104 -214
  141. package/dist/workflows/dag/runner.js +122 -429
  142. package/dist/workflows/dag/scheduler.js +16 -114
  143. package/dist/workflows/dag/types.js +12 -239
  144. package/dist/workflows/dag/validate.js +12 -28
  145. package/docs/init-surface.manifest.json +12 -30
  146. package/docs/skills/vetted-skill-registry.md +2 -4
  147. package/docs/templates/README.md +0 -2
  148. package/docs/templates/agent-dag-report.schema.json +2 -8
  149. package/docs/templates/agent-dag.schema.json +1 -1
  150. package/docs/templates/frontend-implementation-contract.schema.json +1 -4
  151. package/harness.json +3 -3
  152. package/package.json +1 -1
  153. package/skills/frontend-bounded-implement/SKILL.md +14 -15
  154. package/skills/frontend-design-review/SKILL.md +41 -22
  155. package/skills/frontend-implementation/SKILL.md +52 -0
  156. package/skills/frontend-implementation/references/code-standards.md +33 -0
  157. package/skills/frontend-implementation/references/design-spec.md +56 -0
  158. package/skills/frontend-implementation/references/node-contracts.md +31 -0
  159. package/skills/frontend-review/SKILL.md +15 -20
  160. package/skills/frontend-review/references/review-findings.md +7 -6
  161. package/skills/frontend-verification/SKILL.md +1 -1
  162. package/skills/loop-agent/references/command-reference.md +0 -1
  163. package/skills/loop-agent/references/hybrid-dag.md +2 -2
  164. package/dist/commands/dag-follow-up.js +0 -138
  165. package/dist/executors/pi-read-budget-policy.js +0 -239
  166. package/dist/worker/console/frontend-human-decision-adapter.js +0 -19
  167. package/dist/worker/console/frontend-split-operation-adapter.js +0 -20
  168. package/dist/worker/console/static/assets/channel-bnXW0U3C.js +0 -1
  169. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-rZpq_twR.js +0 -1
  170. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-rZpq_twR.js +0 -1
  171. package/dist/worker/console/static/assets/index-D3CC4eUz.css +0 -1
  172. package/dist/worker/console/static/assets/index-DLt4ZFvD.js +0 -437
  173. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-zBMYiUyi.js +0 -1
  174. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-d_rms-5i.js +0 -8
  175. package/dist/worker/console/static-src/active-run-badge.js +0 -17
  176. package/dist/worker/materialize/frontend-split-task-materializer.js +0 -72
  177. package/dist/workflows/dag/dag-retry-schema.js +0 -138
  178. package/dist/workflows/dag/frontend-closeout.js +0 -221
  179. package/dist/workflows/dag/frontend-design-policy.js +0 -400
  180. package/dist/workflows/dag/frontend-human-decision.js +0 -182
  181. package/dist/workflows/dag/frontend-provider-capability-matrix.js +0 -159
  182. package/dist/workflows/dag/frontend-read-budgets.js +0 -12
  183. package/dist/workflows/dag/frontend-recovery-capsule.js +0 -455
  184. package/dist/workflows/dag/frontend-recovery-controller.js +0 -202
  185. package/dist/workflows/dag/frontend-recovery-lineage.js +0 -178
  186. package/dist/workflows/dag/frontend-review-findings.js +0 -270
  187. package/dist/workflows/dag/frontend-shadow-dual-write.js +0 -914
  188. package/dist/workflows/dag/frontend-shape-capsule-store.js +0 -191
  189. package/dist/workflows/dag/frontend-shape-facts.js +0 -409
  190. package/dist/workflows/dag/frontend-shape.js +0 -427
  191. package/dist/workflows/dag/frontend-source-fidelity-ledger.js +0 -108
  192. package/dist/workflows/dag/frontend-split-application-service.js +0 -203
  193. package/dist/workflows/dag/frontend-split-orchestrator.js +0 -899
  194. package/dist/workflows/dag/frontend-typed-event-store.js +0 -452
  195. package/dist/workflows/dag/frontend-typed-event-transaction.js +0 -180
  196. package/dist/workflows/dag/frontend-writer-admission.js +0 -285
  197. package/dist/workflows/dag/frontend-writer-status.js +0 -256
  198. package/dist/workflows/dag/recovery-lease.js +0 -80
  199. package/docs/templates/frontend-implementation-dag.json +0 -89
  200. package/docs/templates/spec-registry.schema.json +0 -45
  201. package/skills/frontend-bounded-implement/references/code-standards.md +0 -19
  202. package/skills/frontend-contract/SKILL.md +0 -23
  203. package/skills/frontend-contract/references/contract-protocol.md +0 -34
  204. package/skills/frontend-plan/SKILL.md +0 -26
  205. package/skills/frontend-plan/references/decision-contract.md +0 -37
  206. package/skills/frontend-plan/references/design-decisions.md +0 -17
  207. package/skills/frontend-scout/SKILL.md +0 -25
  208. package/skills/frontend-scout/references/design-evidence.md +0 -16
  209. package/skills/frontend-scout/references/scout-evidence.md +0 -23
@@ -34,7 +34,6 @@
34
34
  "docs/templates/worker-dogfood-setup.md",
35
35
  "docs/templates/worker-dogfood-evidence.md",
36
36
  "docs/templates/harness.schema.json",
37
- "docs/templates/spec-registry.schema.json",
38
37
  "docs/templates/interactive-ui-round2-experiment.md",
39
38
  "docs/templates/product-line/README.md",
40
39
  "docs/templates/product-line/AGENTS.md",
@@ -78,16 +77,11 @@
78
77
  "skills/webapp-testing/SKILL.md",
79
78
  "skills/playwright-cli/SKILL.md",
80
79
  "skills/playwright-cli-case-generator/SKILL.md",
81
- "skills/frontend-contract/SKILL.md",
82
- "skills/frontend-contract/references/contract-protocol.md",
83
- "skills/frontend-scout/SKILL.md",
84
- "skills/frontend-scout/references/scout-evidence.md",
85
- "skills/frontend-scout/references/design-evidence.md",
86
- "skills/frontend-plan/SKILL.md",
87
- "skills/frontend-plan/references/decision-contract.md",
88
- "skills/frontend-plan/references/design-decisions.md",
80
+ "skills/frontend-implementation/SKILL.md",
81
+ "skills/frontend-implementation/references/node-contracts.md",
82
+ "skills/frontend-implementation/references/design-spec.md",
83
+ "skills/frontend-implementation/references/code-standards.md",
89
84
  "skills/frontend-bounded-implement/SKILL.md",
90
- "skills/frontend-bounded-implement/references/code-standards.md",
91
85
  "skills/frontend-design-review/SKILL.md",
92
86
  "skills/frontend-design-review/references/review-checklist.md",
93
87
  "skills/frontend-review/SKILL.md",
@@ -109,7 +103,6 @@
109
103
  "docs/feature-workflow.md",
110
104
  "docs/verification-matrix.md",
111
105
  "docs/loop-agent-harness.md",
112
- "docs/spec-registry.json",
113
106
  "docs/harness-methodology-tdd.md",
114
107
  "docs/harness-methodology-verification.md",
115
108
  "docs/harness-methodology-debugging.md",
@@ -164,16 +157,11 @@
164
157
  ".agents/skills/webapp-testing/SKILL.md",
165
158
  ".agents/skills/playwright-cli/SKILL.md",
166
159
  ".agents/skills/playwright-cli-case-generator/SKILL.md",
167
- ".agents/skills/frontend-contract/SKILL.md",
168
- ".agents/skills/frontend-contract/references/contract-protocol.md",
169
- ".agents/skills/frontend-scout/SKILL.md",
170
- ".agents/skills/frontend-scout/references/scout-evidence.md",
171
- ".agents/skills/frontend-scout/references/design-evidence.md",
172
- ".agents/skills/frontend-plan/SKILL.md",
173
- ".agents/skills/frontend-plan/references/decision-contract.md",
174
- ".agents/skills/frontend-plan/references/design-decisions.md",
160
+ ".agents/skills/frontend-implementation/SKILL.md",
161
+ ".agents/skills/frontend-implementation/references/node-contracts.md",
162
+ ".agents/skills/frontend-implementation/references/design-spec.md",
163
+ ".agents/skills/frontend-implementation/references/code-standards.md",
175
164
  ".agents/skills/frontend-bounded-implement/SKILL.md",
176
- ".agents/skills/frontend-bounded-implement/references/code-standards.md",
177
165
  ".agents/skills/frontend-design-review/SKILL.md",
178
166
  ".agents/skills/frontend-design-review/references/review-checklist.md",
179
167
  ".agents/skills/frontend-review/SKILL.md",
@@ -190,7 +178,6 @@
190
178
  ".pi/settings.json"
191
179
  ],
192
180
  "initSurface": {
193
- "docs/spec-registry.json": "generated",
194
181
  "README.md": "managed-block",
195
182
  "AGENTS.md": "managed-block",
196
183
  ".gitignore": "managed-block",
@@ -255,16 +242,11 @@
255
242
  ".agents/skills/webapp-testing/SKILL.md": "copied",
256
243
  ".agents/skills/playwright-cli/SKILL.md": "copied",
257
244
  ".agents/skills/playwright-cli-case-generator/SKILL.md": "copied",
258
- ".agents/skills/frontend-contract/SKILL.md": "copied",
259
- ".agents/skills/frontend-contract/references/contract-protocol.md": "copied",
260
- ".agents/skills/frontend-scout/SKILL.md": "copied",
261
- ".agents/skills/frontend-scout/references/scout-evidence.md": "copied",
262
- ".agents/skills/frontend-scout/references/design-evidence.md": "copied",
263
- ".agents/skills/frontend-plan/SKILL.md": "copied",
264
- ".agents/skills/frontend-plan/references/decision-contract.md": "copied",
265
- ".agents/skills/frontend-plan/references/design-decisions.md": "copied",
245
+ ".agents/skills/frontend-implementation/SKILL.md": "copied",
246
+ ".agents/skills/frontend-implementation/references/node-contracts.md": "copied",
247
+ ".agents/skills/frontend-implementation/references/design-spec.md": "copied",
248
+ ".agents/skills/frontend-implementation/references/code-standards.md": "copied",
266
249
  ".agents/skills/frontend-bounded-implement/SKILL.md": "copied",
267
- ".agents/skills/frontend-bounded-implement/references/code-standards.md": "copied",
268
250
  ".agents/skills/frontend-design-review/SKILL.md": "copied",
269
251
  ".agents/skills/frontend-design-review/references/review-checklist.md": "copied",
270
252
  ".agents/skills/frontend-review/SKILL.md": "copied",
@@ -16,13 +16,11 @@ The entries below are local wrappers or existing local skills. They are not whol
16
16
  | `code-review-core` | local wrapper inspired by code review practice | `skills/code-review-core/SKILL.md` | reviewer | reviewer | No external tools or network by default. |
17
17
  | `codebase-scout` | local wrapper | `skills/codebase-scout/SKILL.md` | scout | scout | Read-only reconnaissance guidance. |
18
18
  | `init-capability-evolution` | local wrapper | `skills/init-capability-evolution/SKILL.md` | supervisor, maintenance | optional | Used only when changes may affect target-project initialization, package surface, or init projection rules. |
19
- | `frontend-contract` | local frontend hybrid DAG contract skill | `skills/frontend-contract/SKILL.md` | `frontend-contract-pi` only | frontend-implementation DAG only | Required contract-protocol ref stays complete under the default runtime budget; does not inject design or implementation guidance. |
20
- | `frontend-scout` | local frontend hybrid DAG scouting skill | `skills/frontend-scout/SKILL.md` | `frontend-scout-pi` only | frontend-implementation DAG only | Required target-surface and design-evidence refs are bounded and complete; discovery does not leak into Plan. |
21
- | `frontend-plan` | local frontend hybrid DAG planning skill | `skills/frontend-plan/SKILL.md` | `frontend-plan-pi` and legacy Mock assessment only | frontend-implementation DAG only | Required decision/design refs carry stable trace IDs, Mock/data and dependency decisions without the full lifecycle contract. |
19
+ | `frontend-implementation` | local existing (frontend hybrid DAG) | `skills/frontend-implementation/SKILL.md` | frontend plan / contract / scout / mock nodes (spec-level `skillsByRole`) | frontend-implementation DAG only | Required refs node-contracts / design-spec / code-standards; injected by `init-hybrid.ts` spec generation and `src/adapters/loop-agent.ts`; projected via init-surface manifest. Not in `DEFAULT_SKILLS_BY_ROLE`. |
22
20
  | `frontend-review` | local existing (frontend hybrid DAG) | `skills/frontend-review/SKILL.md` | reviewer (frontend review nodes, spec-level) | frontend-implementation / repair DAGs | Consumed by `init-hybrid.ts` / `frontend-repair.ts` / `shell-executor.ts`; required ref review-findings (maxChars 2800). |
23
21
  | `frontend-verification` | local existing (frontend hybrid DAG) | `skills/frontend-verification/SKILL.md` | verifier / closeout (frontend evidence, spec-level) | frontend DAG closeout | Consumed by `shell-executor.ts` / `frontend-repair.ts` / `frontend-review-context.ts`; required ref verification-checklist. |
24
22
  | `frontend-design-review` | local existing (frontend hybrid DAG) | `skills/frontend-design-review/SKILL.md` | design-gate reviewer (before any writer) | frontend-implementation DAG design gate | Injected by `init-hybrid.ts`; runs before the prewrite gate authorizes writers; required ref review-checklist. |
25
- | `frontend-bounded-implement` | local existing (frontend hybrid DAG) | `skills/frontend-bounded-implement/SKILL.md` | implementer (writer nodes, spec-level) | frontend writers after canonical contract gate | Injected by `init-hybrid.ts`; its required bounded code-standards ref applies only inside canonical targets and does not authorize OpenSpec/source rediscovery. |
23
+ | `frontend-bounded-implement` | local existing (frontend hybrid DAG) | `skills/frontend-bounded-implement/SKILL.md` | implementer (writer nodes, spec-level) | frontend writers after canonical contract gate | Injected by `init-hybrid.ts`; writers run only after the canonical contract gate accepts and only inside the frozen writeSet (ADR 0015/0016 discipline). |
26
24
  | `grill-with-docs` | local operator skill adapted from domain grilling + ADR/glossary discipline | `skills/grill-with-docs/SKILL.md` | explicit interactive operator only | never a default DAG role | Resolves decisions via `harness.json.governanceRoot`; required refs `context-format.md` / `adr-format.md`; respects writeSet; not in `DEFAULT_SKILLS_BY_ROLE`. |
27
25
  | `grill-me` | local interview question engine wrapper | `skills/grill-me/SKILL.md` | interview runtime dependency (not a DAG role) | never a default DAG role | Question engine lives in `src/worker/console/interview/grill-me.ts` (Console interview / operator-actions); intentionally NOT projected by init-surface manifest — runs in this repo's Console only. |
28
26
  | `analyze-product-requirements` | local org-internal Product Analysis V4 skill | `skills/analyze-product-requirements/SKILL.md` | source-prepare dependency (not a DAG role) | never a default DAG role | Loaded by `src/task/source-prepare/prepare.ts` during 任务源 preparation; IRON-LAW freeze semantics on `product-analysis.md`; intentionally NOT projected by init-surface manifest. |
@@ -38,7 +38,6 @@
38
38
 
39
39
  - `frontend-task-requirement.md`、`frontend-task-constraints.md`、`frontend-design-contract.md` — 前端任务输入与设计合同。
40
40
  - `frontend-implementation-contract.schema.json` — 前端实现合同 schema(sourceBinding v2 ledger 字段 all-or-none:任一出现则四项齐全,禁止 v1+optional 冒充 v2)。`requirements[].sourceRefs[].items` 使用合法 `$ref: #/$defs/path`(相对路径、无 `..` 逃逸、无反斜杠),模板 JSON 无非法键,运行时加载器可直接编译(AC-003)。
41
- - `frontend-implementation-dag.json` — 自包含的前端实现 DAG 模板:契约 → 侦察 → 计划 → 设计策略/评审 → writer 准入 → 有界写入 → 验证 → 真实 diff 审查 → closeout。它不依赖 runtime builder 或其他模板;执行前必须将所有 `REPLACE/WITH/...` 路径和确定性命令替换为当前项目的具体值。
42
41
  - `frontend-test-dag.json` — frontend-test DAG 模板;其 deterministic checklist 会拒绝 alternative executable instructions,仅允许 allowlisted `playwright-cli` command。Pi generator/reviser 的 runtime writeSet 仅授权下列目标项目生成路径(不是本仓库文档索引目标):
43
42
 
44
43
  ~~~text
@@ -57,7 +56,6 @@
57
56
  - `knowledge-sync-dag.json`、`knowledge-graph-bootstrap-dag.json` — 知识同步与图谱初始化 DAG。
58
57
  - `knowledge-sync-draft.schema.json` — 知识同步草稿 schema。
59
58
  - `harness.schema.json` — `harness.json` 的 IDE JSON Schema。
60
- - `spec-registry.schema.json` — 项目级 `ai_workspace/loop-agent/spec-registry.json` 的机器校验 schema。
61
59
 
62
60
  ## 子目录
63
61
 
@@ -176,8 +176,7 @@
176
176
  "humanEscalationJson",
177
177
  "humanEscalationMd",
178
178
  "humanApproval",
179
- "humanRejection",
180
- "changeManifest"
179
+ "humanRejection"
181
180
  ],
182
181
  "properties": {
183
182
  "resultSummary": { "$ref": "#/$defs/dagArtifactRef" },
@@ -189,12 +188,7 @@
189
188
  "humanEscalationJson": { "$ref": "#/$defs/dagArtifactRef" },
190
189
  "humanEscalationMd": { "$ref": "#/$defs/dagArtifactRef" },
191
190
  "humanApproval": { "$ref": "#/$defs/dagArtifactRef" },
192
- "humanRejection": { "$ref": "#/$defs/dagArtifactRef" },
193
- "changeManifest": { "$ref": "#/$defs/dagArtifactRef" },
194
- "changeManifestChangedFiles": {
195
- "type": "array",
196
- "items": { "type": "string" }
197
- }
191
+ "humanRejection": { "$ref": "#/$defs/dagArtifactRef" }
198
192
  }
199
193
  },
200
194
  "repairArtifact": {
@@ -466,7 +466,7 @@
466
466
  "retryCategories": {
467
467
  "type": "array",
468
468
  "items": {
469
- "enum": ["timeout", "network", "rate-limit", "unavailable", "empty-output", "output-too-large", "protocol-invalid", "invalid-output", "writer-empty-diff", "incomplete-write-set", "writer-clean-timeout", "read-burst", "context-overflow"]
469
+ "enum": ["timeout", "network", "rate-limit", "unavailable", "empty-output", "output-too-large", "protocol-invalid", "invalid-output", "writer-empty-diff", "incomplete-write-set", "writer-clean-timeout"]
470
470
  },
471
471
  "default": ["timeout", "network", "rate-limit", "unavailable", "empty-output"],
472
472
  "description": "Failure categories eligible for retry. quota/auth/write-guard are never eligible. invalid-output is allowed only on explicit structured/protocol policies; writer-empty-diff and incomplete-write-set are reserved for requireChangedFiles generation/completeness writers; writer-clean-timeout is reserved for standard bounded writers after explicit zero-write-tool-call and empty-diff evidence."
@@ -502,12 +502,9 @@
502
502
  ]
503
503
  },
504
504
  "then": {
505
- "required": [
506
- "specReference"
507
- ],
508
505
  "properties": {
509
506
  "specReference": {
510
- "$ref": "#/$defs/uiComponentSpecReference"
507
+ "type": "null"
511
508
  }
512
509
  }
513
510
  }
package/harness.json CHANGED
@@ -83,8 +83,8 @@
83
83
  "pi": {
84
84
  "description": "Pi 负责规划、评审、诊断;当 DAG toolProfile=write 时也可做有界写入。模型按复杂度三档配置,支持 provider/model 字符串或带 thinking 的对象;斜杠前为 Pi provider,后为 modelId,勿只写裸 modelId。",
85
85
  "LOW": "wizard-local/minimax-m3",
86
- "MED": "wizard-local/gpt-5.5",
87
- "HIGH": "wizard-local/gpt-5.5"
86
+ "MED": "wizard-local/glm-5.3",
87
+ "HIGH": "wizard-local/gpt-5.6-sol"
88
88
  }
89
89
  }
90
- }
90
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tea-agent/loop-agent",
3
- "version": "0.41.1-beta.0",
3
+ "version": "0.41.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "loop-agent": "bin/loop-agent.js",
@@ -1,23 +1,17 @@
1
1
  ---
2
2
  name: frontend-bounded-implement
3
3
  description: >-
4
- Use only for frontend implementation writers after the canonical
4
+ Use only for frontend implementation and repair writers after the canonical
5
5
  contract gate has authorized a bounded write set.
6
- references:
7
- - path: references/code-standards.md
8
- required: true
9
- maxChars: 2600
10
6
  ---
11
7
 
12
8
  # Frontend Bounded Implement
13
9
 
14
- Read the bounded code standards before editing. They apply only inside the
15
- canonical targets and do not authorize additional discovery.
16
-
17
10
  ## Authoritative Inputs
18
11
 
19
12
  - For implementation, use the run-owned
20
13
  `contracts/frontend-implementation-contract.json`.
14
+ - For repair, also use `contracts/frontend-repair-assessment.json`.
21
15
  - Treat requirement `expectedOutcome`, interaction `trigger` /
22
16
  `expectedBehavior`, target files, UI states, Mock/API strategy, and verification
23
17
  targets as closed decisions. Do not rediscover or reinterpret them.
@@ -31,7 +25,7 @@ canonical targets and do not authorize additional discovery.
31
25
  - Start the bounded edit after confirming the contract and targets. Optional
32
26
  context is not a reason to postpone implementation.
33
27
  - If behavior is still ambiguous or a required target is outside `writeSet`, stop
34
- without writing and explain the blocker; do not compensate with broader scouting.
28
+ with `IMPLEMENTATION_OUTCOME: blocked`; do not compensate with broader scouting.
35
29
 
36
30
  ## Implementation Discipline
37
31
 
@@ -45,10 +39,15 @@ canonical targets and do not authorize additional discovery.
45
39
  - Run only the focused checks already frozen by the task. Leave full verification
46
40
  to downstream deterministic nodes.
47
41
 
48
- ## Completion Summary
42
+ ## Required Outcome
43
+
44
+ The first non-empty response line must be exactly one of:
45
+
46
+ - `IMPLEMENTATION_OUTCOME: changed` — a non-empty bounded diff was produced.
47
+ - `IMPLEMENTATION_OUTCOME: already-satisfied` — the contract was already met and
48
+ no file changed.
49
+ - `IMPLEMENTATION_OUTCOME: blocked` — implementation cannot proceed without
50
+ guessing or exceeding the write boundary.
49
51
 
50
- Briefly report changed files, implemented requirements/interactions, focused checks
51
- attempted, blockers, and residual risks. This summary is human-readable only: the
52
- runtime derives implementation state from persisted write events, run delta, write
53
- guard, requirement coverage, and focused checks. Do not use a mandatory
54
- `IMPLEMENTATION_OUTCOME:` response-text protocol.
52
+ Then report changed files, requirements/interactions implemented, tests or focused
53
+ checks attempted, and residual risks. Never report `changed` for an empty diff.
@@ -9,26 +9,31 @@ references:
9
9
 
10
10
  # Frontend Design Review
11
11
 
12
- For frontend design review nodes. Read the checklist and the non-blocking contract
13
- capacity diagnostic first. Audit either the canonical contract or, when the
14
- diagnostic recommends indexed reading, its hash-bound field sections. Check the
15
- bound Mock strategy, task bounds, and traceable design evidence supplied by the
16
- upstream context. Do not rediscover task sources, search specification roots, or
17
- replace frozen evidence with nearby-code conventions. Use only exact, bound evidence
18
- paths when additional reading is necessary; never invent connector results.
12
+ For frontend design review nodes. Read the checklist; audit contract, scout, Mock
13
+ strategy, effective plan, task bounds, and traceable design evidence.
14
+ Knowledge base, OpenSpec, and `ai_workspace/` are parallel sources. Query the
15
+ knowledge-base connector when available; always search/read `openspec/schemas/**`,
16
+ `openspec/project-specs/**`, and `ai_workspace/**` before accepting conventions.
17
+ Connector format is TODO: never invent results.
19
18
 
20
- ## Authoritative Terminal
19
+ ## Verdict Contract
21
20
 
22
- Complete the review with exactly one committed typed tool call:
21
+ First non-empty line: exactly `VERDICT: pass` or `VERDICT: request-revision`.
22
+ Any blocker requires request-revision. An initial pass is the effective verdict;
23
+ there is no intermediate first-design shell gate.
23
24
 
24
- - `approve_design` when no blocking design defect remains;
25
- - `request_design_changes` when a blocker exists. It must include a typed
26
- `issueCategory`, at least one `evidenceRef`, and non-empty findings.
25
+ In standard/full topology, revision and final review run only after initial
26
+ `VERDICT: request-revision`. Verify every Required Plan Correction against the
27
+ complete revision; reject remaining, incomplete, or new gaps. An initial pass uses
28
+ the original plan and skips both conditional nodes.
27
29
 
28
- The typed terminal is the only authoritative outcome. Do not require or emit a
29
- `VERDICT:` line, JSON verdict, revision patch, or a second final-design-review
30
- verdict. A requested design change ends this run; the recovery controller creates
31
- any bounded follow-up run from the appropriate phase.
30
+ Small-risk topology instead removes initial review and revision, then runs
31
+ `frontend-final-design-review-pi` as the sole review of the original plan. Do not
32
+ expect initial findings or a revision there.
33
+
34
+ The deterministic gate prefers final-review output and falls back to initial review
35
+ only when no current-run final output exists. Existing malformed/non-pass primary
36
+ output fails closed.
32
37
 
33
38
  ## Blocking Conditions
34
39
 
@@ -46,15 +51,29 @@ Knowledge-base absence is advisory if relevant rules from either openspec
46
51
  specification directory were read and applied. Block skipped fallback, unresolved
47
52
  conflict, or unresolved UI decisions.
48
53
 
49
- ## Method And Human-readable Output
54
+ ## Method And Output
50
55
 
51
56
  Map criteria to steps/files/states/checks, audit paths/evidence, classify Blocking
52
57
  or Advisory, and never edit files.
53
58
 
54
59
  ### Spec Evidence Rules
55
60
 
56
- Read only the canonical contract (or its indexed, hash-bound sections) and any exact
57
- evidence paths bound in its upstream context. Successful paired reads are the only proof that a specification was read;
58
- summaries do not substitute for them. A concise human-readable summary may list
59
- checked items and findings, but it is never a control protocol. Each requested
60
- change names its criterion/section, gap, and required plan change.
61
+ Run `grep`/`find`, then explicit `read` calls for applicable specs/checklist. Only
62
+ successful paired reads count as “已读取规范文件”; summaries do not. List each path/
63
+ section in `Checked Items`; search/read both openspec specification directories
64
+ before accepting conventions.
65
+
66
+ ```markdown
67
+ VERDICT: pass
68
+
69
+ ## Findings
70
+ - None blocking.
71
+
72
+ ## Required Plan Corrections
73
+ - None.
74
+
75
+ ## Checked Items
76
+ - ...
77
+ ```
78
+
79
+ Each correction names its criterion/section, gap, and exact plan change.
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: frontend-implementation
3
+ description: >-
4
+ Use for frontend contract, scout, mock strategy, and plan DAG nodes.
5
+ references:
6
+ - path: references/node-contracts.md
7
+ required: true
8
+ # Compact contract index must stay under skill total budget (~10k with body + other refs).
9
+ # Headroom above current ~4k file; do not raise alone without checking totalMaxChars.
10
+ maxChars: 6000
11
+ - path: references/design-spec.md
12
+ required: true
13
+ maxChars: 3000
14
+ - path: references/code-standards.md
15
+ required: true
16
+ maxChars: 3000
17
+ ---
18
+
19
+ # Frontend Implementation
20
+
21
+ Read all required references before running any listed frontend node.
22
+
23
+ ## Source And Evidence Rules
24
+
25
+ Use task sources/references, constraints, then `task.json`. Follow `design-spec.md`:
26
+ query the knowledge base when available and always inspect `openspec/schemas/`,
27
+ `openspec/project-specs/`, and `ai_workspace/`; then use repo evidence. Cite tight paths/symbols, and never invent APIs,
28
+ rules, commands, or retrievals. Scout/planners locate and explicitly read applicable
29
+ specs; only successful paired reads count. Lockfile-only, fixture-only, or unread
30
+ search hits do not prove a reusable Mock service.
31
+
32
+ This broad discovery rule applies only to contract, scout, and plan phases.
33
+ Implementation and repair use the separate `frontend-bounded-implement` skill.
34
+
35
+ ## Implementation Discipline
36
+
37
+ - Reuse confirmed specs, components, tokens, helpers, APIs, mocks, schemas, and tests.
38
+ - Keep real requests enabled by default; never comment them out for a mock.
39
+ - Prefer native Mock support; otherwise use existing browser interception for e2e or
40
+ a reversible request adapter/DI seam for local preview.
41
+ - Trace fixtures to API/schema evidence. Activation is explicit, dev/test-only,
42
+ production-off; Mock evidence never proves real API integration.
43
+ - Add dependencies only when approved. Cover applicable success/loading/empty/error/
44
+ permission/boundary states and justify N/A.
45
+ - Keep state testable. Stay in `writeSet`, preserve behavior, and update tests.
46
+ - Never relax lint/type/test/build config or write unauthorized generated output.
47
+
48
+ ## Output And Failure Rules
49
+
50
+ - Follow `node-contracts.md`; read-only nodes never edit. Missing input blocks work
51
+ when proceeding would guess behavior, bounds, or verification.
52
+ - Preserve tokens, commands, paths, IDs, and language. Completion needs fresh shell evidence.
@@ -0,0 +1,33 @@
1
+ # Frontend Code Standards
2
+
3
+ Discover rules from task constraints, `design-spec.md` source order, config, code,
4
+ tests, manifests, and generated types. Regardless of knowledge-base results,
5
+ applicable `openspec/schemas/`, `openspec/project-specs/`, and `ai_workspace/` rules are normative.
6
+ Preferences are not rules, and docs do not override installed APIs without an
7
+ explicit compatibility decision.
8
+
9
+ ## Discover And Cite
10
+
11
+ - Find routing and server/client boundaries; state, forms, data/cache, and errors;
12
+ API/mock/UI/schema/test locations and naming; supported tests; dependency rules.
13
+
14
+ Cite representative files/config for each convention. Describe conflicts instead of
15
+ silently selecting one.
16
+
17
+ ## Plan And Implement
18
+
19
+ - Map criteria to code and checks. Define placement, state ownership, request
20
+ lifecycle, validation/failures, API compatibility, mocks, and fixtures.
21
+ - Trace fixtures to API evidence; label gaps. Prefer native mocks, then browser
22
+ interception for existing e2e, then a reversible request adapter/DI preview seam.
23
+ - Real API stays default; mock activation is explicit, local/test-only,
24
+ non-production, and removable.
25
+ - Reuse helpers/public APIs and preserve out-of-contract behavior. Keep rendering,
26
+ transitions, validation, and side effects testable; cover lifecycle races/bounds
27
+ when relevant. Update supported tests; stay in `writeSet`.
28
+
29
+ ## Prohibited
30
+
31
+ - Do not relax checks, add unapproved dependencies, comment real requests, hardcode
32
+ fixtures in production UI, import test mocks into production, store fixture
33
+ secrets, equate mock evidence with real integration, or report unrun checks as verified.
@@ -0,0 +1,56 @@
1
+ # Frontend Design And Component Specification
2
+
3
+ ## Required Source Sequence
4
+
5
+ Knowledge base, OpenSpec, and `ai_workspace/` are parallel specification sources:
6
+
7
+ 1. Attempt the configured component/design knowledge-base query first when a
8
+ connector is available.
9
+ 2. Regardless of knowledge-base success/failure/timeout/no-match, also
10
+ recursively search `openspec/schemas/`, `openspec/project-specs/`, and
11
+ `ai_workspace/` for index files and relevant content.
12
+ 3. Treat relevant matches from both sources as the current project's
13
+ specification for this run.
14
+ 4. Only then use component source, tokens, stories, tests, and pages as
15
+ non-normative repository fallback.
16
+
17
+ Never skip local OpenSpec or `ai_workspace/` for neighboring-code conventions,
18
+ even when a knowledge-base query returned results. Report source conflicts instead
19
+ of combining them. Explicit task requirements remain the contract.
20
+
21
+ Connector format is TODO; attempt only an available connector, otherwise record
22
+ `not-configured` and run the openspec fallback (never invent a connection).
23
+
24
+ ## openspec Fallback Procedure
25
+
26
+ - Inspect `<repoRoot>/openspec/schemas/`, `<repoRoot>/openspec/project-specs/`,
27
+ and `<repoRoot>/ai_workspace/` when present; enumerate supported files recursively.
28
+ - Read indexes first, then search names/content using task, route, component,
29
+ interaction, theme, token, and state terms.
30
+ - Read matches in context; a filename-only hit is not a rule.
31
+ - Record search terms, inspected/matched paths, headings or tight line ranges,
32
+ applied rules, and conflicts.
33
+ - If both directories or relevant rules are absent, record that before using
34
+ repository fallback.
35
+
36
+ ## Retrieval Evidence
37
+
38
+ Record source as `knowledge-base`, `openspec fallback`, `repository fallback`, or
39
+ `unavailable`. Knowledge-base evidence includes query, source ID/version/time, rules,
40
+ and conflicts. `openspec fallback` includes terms, paths/headings/lines, rules, and conflicts.
41
+
42
+ ## Rules To Retrieve Or Discover
43
+
44
+ - Components, variants, props, composition, accessibility, deprecations, placement, forms, overlays, navigation, and state patterns.
45
+ - Tokens, typography, color, layout, breakpoints, motion, focus/keyboard/contrast, exceptions, design debt, and forbidden patterns.
46
+
47
+ ## Gate Expectations
48
+
49
+ - Reuse confirmed primitives unless a new pattern is authorized.
50
+ - Define applicable states and responsive behavior before implementation.
51
+ - Cite knowledge-base or openspec spec evidence for component/token choices;
52
+ label weaker repo fallback.
53
+ - Make deviations and unresolved gaps explicit.
54
+ - Contract `uiComponentChoices[]` per UI purpose: `specified` needs
55
+ `specReference {path,section,line}`; `new` needs null ref + rationale; never
56
+ silently replace a spec-defined component.
@@ -0,0 +1,31 @@
1
+ # Frontend Node Contracts
2
+
3
+ Pre-write nodes are read-only. Preserve IDs, labels, commands, language, required headings.
4
+
5
+ ## Core nodes
6
+
7
+ - **`frontend-contract-pi`**: `Scope`, `Non-goals`, `Acceptance Criteria`, `UI States`, `Target Runtime Environment`, `Risks`, `Verification Expectations`; no guessed requirements.
8
+ - **`frontend-scout-pi`**: routes, components, tokens, data/API/Mock, scripts, tests, assets; fact vs inference vs gap. Search+read `openspec/schemas/`, `openspec/project-specs/`, `ai_workspace/` first. Output stack, styling, conventions, state/data, test entry points, reuse, risks.
9
+ - **`frontend-plan-pi` + conditional design loop**: AC → observable `expectedOutcome`; interactions → `trigger`+`expectedBehavior`; include steps, in-bound files, UI states, reuse, deps, Mock/API, frozen verify entrypoints and integration gaps. DAG freezes a protected skeleton (`schemaVersion`, `sourceBinding`, `riskLevel`, `targets.files`, `mockApi.productionDefaultOff`). Model returns a **JSON-only** editable RFC 7386 patch (`frontend-implementation-contract-plan-patch-v1`) plus one `openspec-citations` block. Runtime compiles canonical `frontend-implementation-contract-v1` and archives raw/extracted/normalized/validation candidates; unresolved optional symbols are dropped and audited. No plan prose; gate renders plan.md. IDs+paths ≠ behavior semantics. Applicable UI states need behavior/implementation/verification; non-applicable states need reasons. Active Mock needs frozen commands; `auto` without confirmed capability/command → `not-needed`; `required` without command → generation-time blocked. Only `request-revision` runs revision+final review; small-risk gets one review.
10
+ - `uiComponentChoices[]` (optional): `{purpose, component, decision, specReference, rationale}`; `specified` needs `specReference{path,section,line}`; `new` needs null ref+rationale.
11
+ - **`frontend-prewrite-gate-shell`**: sole write authorization. Resolve effective plan (revised if revision ran, else original) + review; require exact pass; retain every REQ/BR/AC id; enforce Mock policy; validate schema/source binding+writeSet containment; materialize `contracts/frontend-implementation-contract.json` from the **single** fenced contract block (multiple candidates fail closed `invalid-output`). Fallback only when conditional primary absent; malformed primary fails closed. Generation-time blocked Mock yields one blocking shell node, no writer.
12
+ - `verificationTarget.commandLabel` must be a **frozen command label** from `verifyEvidence.commandLabels`; others fail closed (`invalid-output`). Empty frozen set (no `run.json`) skips check.
13
+ - `mockApi.strategy !== "not-needed"` fails closed when `mockCommandLabels` empty (`no authorized Mock verification commands`).
14
+ - OpenSpec policy: `task.json.frontendOpenspec.policy` (default `cited`); candidates = `requiredReadPaths` ∪ task-source citations; effective plan must append one fenced `openspec-citations` block (one JSON `{"path","section","line"}` per line). Candidates non-empty but block missing/unparseable → `openspec-citation-block-unparseable`; candidate not cited → `openspec-not-cited`; cited path without read event → `openspec-citation-not-read` (anti-fabrication). Empty candidates skip enforcement. `scan-strict` keeps full-read semantics (`openspec-not-read`); both modes keep `candidate-missing-drift`.
15
+ - Component conformance: missing `uiComponentChoices` (frozen bucket non-empty + UI-visible work) → `component-choices-missing`; bad/uncited `specReference.path` → `component-spec-reference-invalid` / `component-spec-not-cited`.
16
+ - revisionPatch mode: revision output is an RFC 7386 merge-patch delta applied on the original canonical contract node (`planFallbackFromNodeIds[0]`); protected skeleton paths remain immutable. Legacy DAGs keep full-contract semantics. Size guard: canonical serialization >64KB → `retryable-invalid` + `contract-too-large`.
17
+ - **`frontend-implement-pi`**: sole regular exclusive writer; uses `frontend-bounded-implement` (not this skill). Stay in `writeSet`; real requests default-on. Atomic handler/intercept/adapter with tests. Stop on forbidden paths/guesses. First line `IMPLEMENTATION_OUTCOME: changed|already-satisfied|blocked`; runtime checks against attributed diff. Optional mock-verify when frozen; static+behavior always; behavior must prove page consumption. `not-needed` keeps real integration pending unless real backend has fresh evidence.
18
+
19
+ ## Contract / trace / stages (M1–M2)
20
+
21
+ - `frontend-verify-assess-shell` runs Mock/static/behavior groups, binds `verificationTargets` to command labels+evidence, writes `frontend-verification-trace.json`+`frontend-repair-assessment.json`; browser/visual stay `not-run`.
22
+ - `frontend-review-context-shell` captures real diff; combines contract, effective trace, repair assessment, diff into `contracts/frontend-review-context.json`.
23
+ - Implement stages: (1) contract confirm (2) tests sync (3) component/UI (4) API/Mock (5) frozen checks (6) diff cleanup. Summary: Contract Ref, Changed Files, Requirements, UI States, Tests, Verification Attempts, Deviations, Residual Risks.
24
+
25
+ ## Repair (M3)
26
+
27
+ Only `eligible=true` runs `frontend-repair-pi` (same writeSet; no re-spec; max 1 attempt) + `frontend-reverify-shell`. No-failure skips both. Non-repairable contract/path/dependency/credential/deploy/spec-unclear failures fail closed.
28
+
29
+ ## Risk & capability (M4–M6)
30
+
31
+ Deterministic risk, no model; high-risk beats small; supervised never small. Standard/high-risk: 15 top-level nodes; small: 13 (omits revision + final review). Capability seed injects adapters; openspec specs and task sources outrank adapter guidance. A11y: static/component tools only when present; Browser a11y always not-run.
@@ -9,25 +9,17 @@ references:
9
9
 
10
10
  # Frontend Review
11
11
 
12
- Use for `frontend-review-pi`; read the findings guide and capacity diagnostic first.
13
- Inputs are `contracts/frontend-review-context.json`, its hash-bound contract
14
- reference/index and diff fragments, and only source files named by that diff. Use
15
- indexed contract sections when recommended. Do not reopen task sources, plans,
16
- design-review prose, OpenSpec, or `ai_workspace/`; the bound context is authoritative.
12
+ Use for `frontend-review-pi`; read the findings guide first. Required inputs are
13
+ original task/reference material, effective plan/design branch, implementation summary,
14
+ and `contracts/frontend-review-context.json`. That canonical context binds the validated
15
+ implementation contract, effective verification trace, repair assessment, optional
16
+ `frontend-lint-assessment-v1`, and run-owned diff. The diff is authoritative.
17
17
 
18
- ## Authoritative Terminal
18
+ ## Verdict Contract
19
19
 
20
- Complete the review with exactly one committed typed tool call:
21
-
22
- - `approve_review` when no Critical/Important finding remains;
23
- - `request_review_changes` for a defect, missing required evidence, forbidden
24
- write, or unmet acceptance criterion. It must include a typed `issueCategory`,
25
- at least one `evidenceRef`, and non-empty findings.
26
-
27
- The typed terminal is the only authoritative outcome. Do not require or emit a
28
- `VERDICT:` line or response-text JSON verdict. A request for review changes ends
29
- this run and is handled by the recovery controller rather than a same-run repair
30
- branch.
20
+ The first non-empty line must be exactly `VERDICT: pass` or
21
+ `VERDICT: request-revision`. Any Critical/Important finding, failed or missing
22
+ required check, forbidden write, or unmet acceptance criterion forces revision.
31
23
 
32
24
  ## Review Scope
33
25
 
@@ -35,7 +27,7 @@ branch.
35
27
  - Inspect every changed file against allowed, forbidden, and approved write scope.
36
28
  - Map criteria to behavior, applicable UI states, tests, and shell evidence.
37
29
  - Review state/data flow, validation, async/error behavior, design, responsive/a11y,
38
- dependencies, and regression risk when applicable.
30
+ dependencies, maintenance, and regression risk when applicable.
39
31
  - Inspect static, behavior, and available Mock-specific artifacts directly. For Mock
40
32
  strategies, compare the endpoint matrix, handler/fixture/adapter and consumer diff;
41
33
  require the real request as default, contract-aligned fixtures, production isolation,
@@ -46,8 +38,11 @@ branch.
46
38
  baseline-matched diagnostics on unchanged files, and none on writer-changed files.
47
39
  Report debt, never `lint passed`; `failed`/`unavailable` blocks. Typecheck, build,
48
40
  and test still require successful final exits.
49
- - Evaluate component/design claims against bound evidence; do not replace it with a
50
- repository-wide search or connector query.
41
+ - Component/design claims need both knowledge-base and local openspec evidence. Query
42
+ the connector when available and always read task-relevant files under
43
+ `<repoRoot>/openspec/schemas/`, `<repoRoot>/openspec/project-specs/`, and `<repoRoot>/ai_workspace/`.
44
+ Connector format is TODO; never invent evidence. Only successful `read` calls are
45
+ observable as "已读取规范文件".
51
46
  - Treat shell exit status as authoritative. Do not edit files.
52
47
 
53
48
  ## Evidence And Output
@@ -14,23 +14,24 @@
14
14
  `baseline-debt` only with a valid `frontend-lint-assessment-v1`; this is not a
15
15
  passed lint result. A changed-file lint diagnostic, new unmatched diagnostic,
16
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.
17
+ - Treat knowledge base, `openspec/schemas/`, `openspec/project-specs/`, and `ai_workspace/` as
18
+ parallel sources. Record connector/query/source/time plus openspec search terms and
19
+ matched paths/headings; label fallback or unavailable accurately.
21
20
 
22
21
  ## Review Sequence
23
22
 
24
23
  1. Establish changed-file inventory and write boundaries.
25
- 2. Compare the bound contract with the approved constraints and cumulative diff.
24
+ 2. Compare original requirement with derived contract/constraints.
26
25
  3. Map each criterion to code, states, tests, and evidence.
27
26
  4. Inspect interactions, state/data/API behavior, failure paths, and regressions.
28
27
  5. Check mock selection, contract-to-fixture mapping, activation/default path,
29
28
  handler/fixture/adapter and consumer diff, verification, production imports, and
30
29
  the real-integration gap.
31
- 6. Check bound design evidence, responsive/a11y behavior, dependencies, and maintenance.
30
+ 6. Check design evidence, responsive/a11y behavior, dependencies, and maintenance.
32
31
  7. Classify findings and derive the verdict mechanically.
33
32
 
33
+ Skipping either directory is Important when design compliance affects acceptance.
34
+
34
35
  ```text
35
36
  - [Critical|Important|Minor] path:line — Problem; impact; required correction; evidence.
36
37
  ```