@tea-agent/loop-agent 0.25.6 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +1020 -1006
  3. package/bin/loop-agent.js +21 -21
  4. package/dist/commands/cursor-prompt.js +6 -6
  5. package/dist/commands/loop-benchmark.js +11 -11
  6. package/dist/commands/pi-reuse-benchmark.js +16 -16
  7. package/dist/executors/dag-pi-executor.js +26 -20
  8. package/dist/executors/model-routing.js +34 -18
  9. package/dist/governance/manifest-types.js +33 -5
  10. package/dist/sidecars/cursor-prompt/executor.js +1 -1
  11. package/dist/task/task-demand-routing.js +3 -1
  12. package/dist/worker/console/chat/model-resolver.js +15 -3
  13. package/dist/worker/observe/static/constants.js +3 -2
  14. package/dist/worker/observe/static/copy.js +67 -67
  15. package/dist/worker/observe/static/dag-layout.d.ts +31 -31
  16. package/dist/worker/observe/static/dag-layout.js +83 -83
  17. package/dist/worker/observe/static/dag-model.js +1 -0
  18. package/dist/worker/observe/static/dom.js +220 -220
  19. package/dist/worker/observe/static/relations.js +133 -133
  20. package/dist/worker/observe/static/router.js +93 -93
  21. package/dist/worker/observe/static/run-processing.js +148 -148
  22. package/dist/worker/observe/static/styles.css +182 -42
  23. package/dist/worker/observe/static/views/batch.js +227 -227
  24. package/dist/worker/observe/static/views/dag-graph.js +172 -172
  25. package/dist/worker/observe/static/views/failures.js +143 -143
  26. package/dist/worker/observe/static/views/feature.js +492 -492
  27. package/dist/worker/observe/static/views/run.js +453 -453
  28. package/dist/worker/observe/static/views/shell.js +7 -7
  29. package/dist/worker/observe/static/views/timeline.js +163 -163
  30. package/dist/workflows/dag/canvas-observer.js +275 -275
  31. package/dist/workflows/dag/lifecycle.js +40 -30
  32. package/dist/workflows/dag/node-execution.js +13 -0
  33. package/dist/workflows/dag/types.js +59 -19
  34. package/docs/skills/README.md +7 -7
  35. package/docs/templates/adr.md +60 -60
  36. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  37. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  38. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  39. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  40. package/docs/templates/agent-dag-report.schema.json +473 -473
  41. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  42. package/docs/templates/backend-test-result.schema.json +99 -99
  43. package/docs/templates/feature-spec.md +53 -53
  44. package/docs/templates/frontend-design-contract.md +42 -42
  45. package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -17
  46. package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -16
  47. package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -16
  48. package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -16
  49. package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -16
  50. package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -16
  51. package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -21
  52. package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -29
  53. package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -28
  54. package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -28
  55. package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -29
  56. package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -27
  57. package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -28
  58. package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -28
  59. package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -27
  60. package/docs/templates/frontend-eval/metrics.md +138 -138
  61. package/docs/templates/frontend-eval/smoke-targets.md +53 -53
  62. package/docs/templates/frontend-task-constraints.md +35 -35
  63. package/docs/templates/frontend-task-requirement.md +70 -70
  64. package/docs/templates/harness.schema.json +29 -7
  65. package/docs/templates/init-evolution-review.md +35 -35
  66. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  67. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -118
  68. package/docs/templates/knowledge-sync-dag.json +178 -178
  69. package/docs/templates/knowledge-sync-draft.schema.json +71 -71
  70. package/docs/templates/product-line/closeout.yaml +9 -9
  71. package/docs/templates/product-line/design.md +13 -13
  72. package/docs/templates/product-line/links.md +10 -10
  73. package/docs/templates/product-line/requirement.md +17 -17
  74. package/docs/templates/product-line/test-plan.md +7 -7
  75. package/docs/templates/production-readiness-checklist.md +57 -57
  76. package/docs/templates/project-start-checklist.md +9 -9
  77. package/docs/templates/qa-report.md +48 -48
  78. package/docs/templates/sprint-contract.md +29 -29
  79. package/docs/templates/worker-dogfood-evidence.md +80 -80
  80. package/docs/templates/worker-dogfood-setup.md +68 -68
  81. package/harness.json +1 -2
  82. package/package.json +1 -1
  83. package/scripts/kb-bootstrap-init-skeleton.sh +0 -0
  84. package/scripts/kb-graph-incremental-prepare.mjs +386 -386
  85. package/scripts/kb-graph-materialize.mjs +105 -105
  86. package/scripts/kb-graph-promote.mjs +164 -164
  87. package/scripts/kb-query.mjs +554 -554
  88. package/skills/ai-engineering-context/SKILL.md +48 -48
  89. package/skills/analyze-product-dependencies/SKILL.md +67 -67
  90. package/skills/analyze-product-dependencies/agents/openai.yaml +4 -4
  91. package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -30
  92. package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -28
  93. package/skills/analyze-product-dependencies/references/example.md +76 -76
  94. package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -35
  95. package/skills/analyze-product-dependencies/references/input-contract.md +11 -11
  96. package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -61
  97. package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -267
  98. package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -101
  99. package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -142
  100. package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -76
  101. package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -146
  102. package/skills/analyze-product-requirements/SKILL.md +90 -90
  103. package/skills/analyze-product-requirements/agents/openai.yaml +4 -4
  104. package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -91
  105. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -56
  106. package/skills/analyze-product-requirements/references/example.md +86 -86
  107. package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -66
  108. package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -32
  109. package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -33
  110. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -35
  111. package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -193
  112. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -69
  113. package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -97
  114. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -98
  115. package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -156
  116. package/skills/browser-tools/browser-content.js +103 -103
  117. package/skills/browser-tools/browser-cookies.js +35 -35
  118. package/skills/browser-tools/browser-eval.js +53 -53
  119. package/skills/browser-tools/browser-hn-scraper.js +108 -108
  120. package/skills/browser-tools/browser-nav.js +44 -44
  121. package/skills/browser-tools/browser-pick.js +162 -162
  122. package/skills/browser-tools/browser-screenshot.js +34 -34
  123. package/skills/browser-tools/browser-start.js +86 -86
  124. package/skills/browser-tools/package-lock.json +2556 -2556
  125. package/skills/browser-tools/package.json +19 -19
  126. package/skills/code-review-core/SKILL.md +20 -20
  127. package/skills/codebase-scout/SKILL.md +19 -19
  128. package/skills/grill-me/SKILL.md +10 -10
  129. package/skills/loop-agent/references/README.md +67 -67
  130. package/skills/loop-agent/references/docs-converge.md +126 -126
  131. package/skills/loop-agent/references/hybrid-dag.md +2 -2
  132. package/skills/loop-agent/references/learned/README.md +21 -21
  133. package/skills/loop-agent/references/long-running-loop.md +57 -57
  134. package/skills/loop-agent/references/model-routing.md +2 -0
  135. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  136. package/skills/loop-agent/references/pi-prompt.md +23 -23
  137. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
  138. package/skills/playwright-cli/SKILL.md +420 -420
  139. package/skills/playwright-cli/references/element-attributes.md +23 -23
  140. package/skills/playwright-cli/references/playwright-tests.md +39 -39
  141. package/skills/playwright-cli/references/request-mocking.md +87 -87
  142. package/skills/playwright-cli/references/running-code.md +241 -241
  143. package/skills/playwright-cli/references/session-management.md +225 -225
  144. package/skills/playwright-cli/references/storage-state.md +275 -275
  145. package/skills/playwright-cli/references/test-generation.md +433 -433
  146. package/skills/playwright-cli/references/tracing.md +139 -139
  147. package/skills/playwright-cli/references/video-recording.md +143 -143
  148. package/skills/requesting-code-review/SKILL.md +101 -101
  149. package/skills/requesting-code-review/code-reviewer.md +168 -168
  150. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  151. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  152. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  153. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  154. package/skills/systematic-debugging/find-polluter.sh +63 -63
  155. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  156. package/skills/systematic-debugging/test-academic.md +14 -14
  157. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  158. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  159. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  160. package/skills/using-git-worktrees/SKILL.md +215 -215
  161. package/skills/verification-before-completion/SKILL.md +154 -154
  162. package/skills/webapp-testing/SKILL.md +19 -19
@@ -1,138 +1,138 @@
1
- # Frontend-implementation Eval 指标合同(M0)
2
-
3
- 状态:M0 冻结定义;M3 前部分指标仅定义不采集。
4
- 边界:**不包含 Browser / 视觉 / 真实页面启动**;Browser 相关一律记 `not-run` 或从分母排除(见下)。
5
-
6
- ## 通用规则
7
-
8
- ### 样本量
9
-
10
- - **功能通过率类**:以选定 functional fixture 集为分母单元(每个 fixture × 每个 smoke target 记一次 trial,或按计划固定 trial 表)。
11
- - **失败行为类**:以 failure fixture 集为单元;期望「正确阻断 / 正确分类」为成功,误放行为失败。
12
- - **基线批次**:记录 `sampleSetId`、fixture 列表 hash、controller 版本、commit SHA。无记录则整批指标 `unavailable`。
13
-
14
- ### 缺失数据
15
-
16
- | 符号 | 含义 |
17
- |------|------|
18
- | `N/A` | 能力尚未实现,指标定义保留但**禁止填 0** 伪装基线(例:M3 前 repair 后通过率) |
19
- | `unavailable` | 实现已存在但本批 run 未记录分子或分母所需字段(例:无 token 账本) |
20
- | `not-run` | 明确未执行的检查(例:Browser);不得计入「通过」 |
21
- | `0` | 仅当分子与分母均有完整证据且分子确实为零 |
22
-
23
- 报告必须同时写出 **分子、分母、比率、样本量 n、缺失原因**。禁止只写百分比。
24
-
25
- ### 耗时 / token 来源
26
-
27
- | 字段 | 来源(优先序) |
28
- |------|----------------|
29
- | 墙钟耗时 | DAG run 起止时间戳(run.json / harness run record);否则 shell `date` 外包测量 |
30
- | 节点耗时 | 各 node start/end;缺失则节点级 `unavailable`,仅汇总 run 级 |
31
- | token | executor / model usage 汇总(若 run 记录 `tokensUsed`);否则 `unavailable`,**不得估计** |
32
-
33
- ### Browser 边界
34
-
35
- - 任何指标不得因「未跑浏览器」而扣分或加分。
36
- - 不得将 Mock-backed 或 component test 记为 Browser pass。
37
- - 指标表中 Browser 行固定 `not-run`(本计划范围内)。
38
-
39
- ---
40
-
41
- ## 最低指标集
42
-
43
- ### 1. 首次静态通过率
44
-
45
- - **名称**:`first_static_pass_rate`
46
- - **分子**:第一次执行 `frontend-static-verify-shell` 即 exit 0 的 trial 数
47
- - **分母**:完成到 static verify 的 trial 数(writer 已跑且 static 已调度)
48
- - **排除**:DAG 在 writer 前被 Mock/design gate 阻断的 trial(记入 gate 阻断类,不进分母)
49
- - **M0**:定义 + 手工/脚本采集方式;基线可 `unavailable` 直至有 fixture dogfood
50
-
51
- ### 2. 首次行为通过率
52
-
53
- - **名称**:`first_behavior_pass_rate`
54
- - **分子**:第一次执行 `frontend-behavior-verify-shell` 即 exit 0 的 trial 数
55
- - **分母**:完成到 behavior verify 的 trial 数
56
- - **说明**:行为通过不等于真实 API 联调;Mock-backed 仍可计入 behavior pass,但须另计「误报」指标
57
-
58
- ### 3. repair 后最终通过率
59
-
60
- - **名称**:`post_repair_final_pass_rate`
61
- - **分子**:在 ≤ max repair attempts 后 static+behavior+review gate 均通过的 trial 数
62
- - **分母**:进入 repair 资格判定的 trial 数(repairable 失败)
63
- - **M0–M2**:固定记 **`N/A`**(无 frontend repair runtime)
64
- - **M3+**:按 failure taxonomy 采集
65
-
66
- ### 4. 需求追踪完整率
67
-
68
- - **名称**:`requirement_trace_completeness_rate`
69
- - **M0 分子**:`frontend-requirement-coverage-shell` 通过(或无显式 ID 时记 `not-applicable-trial`)且 closeout/plan 仍含全部绑定 ID 的 trial 数
70
- - **M0 分母**:含显式 REQ/BR/AC 的 trial 数
71
- - **语义**:M0 为 **identifier-presence**,不是文件/UI state 完整映射
72
- - **M1+**:改为 validated contract 中每条 ID → target/state/test 映射完整率(届时更新本文件版本)
73
-
74
- ### 5. 越界写入次数
75
-
76
- - **名称**:`forbidden_write_count`
77
- - **分子**:write-guard / exclusive writeSet 拒绝次数 + review 确认的越界路径写入次数(按 trial 计数事件,可 >1)
78
- - **分母**:含 writer 的 trial 数(用于率:`forbidden_write_rate = 分子/分母`)
79
- - **期望基线**:治理应使成功 closeout 的 trial 分子为 0
80
-
81
- ### 6. 错误依赖次数
82
-
83
- - **名称**:`unapproved_dependency_count`
84
- - **分子**:未批准新增 dependency(package.json 变更未授权、review 标记 Important 等)事件数
85
- - **分母**:含 writer 的 trial 数
86
- - **采集**:diff 检查 + review findings 标签(需约定 finding code,M0 用人工标注)
87
-
88
- ### 7. Mock / 真实联调误报次数
89
-
90
- - **名称**:`mock_real_integration_false_claim_count`
91
- - **分子**:closeout 或报告将 Mock-backed 证据描述为真实 API 已联通,或省略 `Real integration: pending` 的 trial 数
92
- - **分母**:`MOCK_STRATEGY` 为 native | browser-intercept | request-adapter 且无真实后端证据的 trial 数
93
- - **期望**:0
94
-
95
- ### 8. 节点数 / 模型节点数
96
-
97
- - **名称**:`node_count`, `model_node_count`
98
- - **定义**:
99
- - `node_count` = `spec.tasks.length`
100
- - `model_node_count` = `executor === "pi"`(或非 shell/static)的节点数
101
- - **报告**:按 topology 变体分别记录(standard / +coverage / +mock-verify / blocked)
102
- - **M0 基线参考(standard 无 optional)**:`node_count=16`;模型节点含 contract/scout/mock-assess/plan/design/plan-revision/final-design-review/implement/review/closeout(以 builder 为准,测试锁定 id 列表)
103
-
104
- ### 9. 墙钟耗时
105
-
106
- - **名称**:`wall_clock_ms`
107
- - **分子/分母**:不适用;报告 **p50 / p95 / max** 与 **n**
108
- - **来源**:见通用规则;缺失 → `unavailable`
109
-
110
- ### 10. Token
111
-
112
- - **名称**:`tokens_total`
113
- - **报告**:sum 与 per-role breakdown(若可得);缺失 → `unavailable`
114
- - **禁止**:用字符数或经验公式估算后当作实测
115
-
116
- ---
117
-
118
- ## 建议采集表头(CSV / Markdown)
119
-
120
- ```text
121
- sampleSetId, trialId, fixtureId, targetId, controllerVersion, commitSha,
122
- topologyVariant, mockStrategy,
123
- first_static_pass (0|1|unavailable),
124
- first_behavior_pass (0|1|unavailable),
125
- post_repair_final_pass (0|1|N/A|unavailable),
126
- requirement_trace_ok (0|1|not-applicable|unavailable),
127
- forbidden_write_count,
128
- unapproved_dependency_count,
129
- mock_real_false_claim (0|1|n/a),
130
- node_count, model_node_count,
131
- wall_clock_ms, tokens_total,
132
- browser_status (not-run)
133
- ```
134
-
135
- ## 与 M1+ 的关系
136
-
137
- - 指标名称稳定;分子定义可在 M1(contract)、M3(repair)版本化增补,须在 CHANGELOG/本文件注明 **metrics schema version**。
138
- - 当前 **metrics schema version: m0.1**。
1
+ # Frontend-implementation Eval 指标合同(M0)
2
+
3
+ 状态:M0 冻结定义;M3 前部分指标仅定义不采集。
4
+ 边界:**不包含 Browser / 视觉 / 真实页面启动**;Browser 相关一律记 `not-run` 或从分母排除(见下)。
5
+
6
+ ## 通用规则
7
+
8
+ ### 样本量
9
+
10
+ - **功能通过率类**:以选定 functional fixture 集为分母单元(每个 fixture × 每个 smoke target 记一次 trial,或按计划固定 trial 表)。
11
+ - **失败行为类**:以 failure fixture 集为单元;期望「正确阻断 / 正确分类」为成功,误放行为失败。
12
+ - **基线批次**:记录 `sampleSetId`、fixture 列表 hash、controller 版本、commit SHA。无记录则整批指标 `unavailable`。
13
+
14
+ ### 缺失数据
15
+
16
+ | 符号 | 含义 |
17
+ |------|------|
18
+ | `N/A` | 能力尚未实现,指标定义保留但**禁止填 0** 伪装基线(例:M3 前 repair 后通过率) |
19
+ | `unavailable` | 实现已存在但本批 run 未记录分子或分母所需字段(例:无 token 账本) |
20
+ | `not-run` | 明确未执行的检查(例:Browser);不得计入「通过」 |
21
+ | `0` | 仅当分子与分母均有完整证据且分子确实为零 |
22
+
23
+ 报告必须同时写出 **分子、分母、比率、样本量 n、缺失原因**。禁止只写百分比。
24
+
25
+ ### 耗时 / token 来源
26
+
27
+ | 字段 | 来源(优先序) |
28
+ |------|----------------|
29
+ | 墙钟耗时 | DAG run 起止时间戳(run.json / harness run record);否则 shell `date` 外包测量 |
30
+ | 节点耗时 | 各 node start/end;缺失则节点级 `unavailable`,仅汇总 run 级 |
31
+ | token | executor / model usage 汇总(若 run 记录 `tokensUsed`);否则 `unavailable`,**不得估计** |
32
+
33
+ ### Browser 边界
34
+
35
+ - 任何指标不得因「未跑浏览器」而扣分或加分。
36
+ - 不得将 Mock-backed 或 component test 记为 Browser pass。
37
+ - 指标表中 Browser 行固定 `not-run`(本计划范围内)。
38
+
39
+ ---
40
+
41
+ ## 最低指标集
42
+
43
+ ### 1. 首次静态通过率
44
+
45
+ - **名称**:`first_static_pass_rate`
46
+ - **分子**:第一次执行 `frontend-static-verify-shell` 即 exit 0 的 trial 数
47
+ - **分母**:完成到 static verify 的 trial 数(writer 已跑且 static 已调度)
48
+ - **排除**:DAG 在 writer 前被 Mock/design gate 阻断的 trial(记入 gate 阻断类,不进分母)
49
+ - **M0**:定义 + 手工/脚本采集方式;基线可 `unavailable` 直至有 fixture dogfood
50
+
51
+ ### 2. 首次行为通过率
52
+
53
+ - **名称**:`first_behavior_pass_rate`
54
+ - **分子**:第一次执行 `frontend-behavior-verify-shell` 即 exit 0 的 trial 数
55
+ - **分母**:完成到 behavior verify 的 trial 数
56
+ - **说明**:行为通过不等于真实 API 联调;Mock-backed 仍可计入 behavior pass,但须另计「误报」指标
57
+
58
+ ### 3. repair 后最终通过率
59
+
60
+ - **名称**:`post_repair_final_pass_rate`
61
+ - **分子**:在 ≤ max repair attempts 后 static+behavior+review gate 均通过的 trial 数
62
+ - **分母**:进入 repair 资格判定的 trial 数(repairable 失败)
63
+ - **M0–M2**:固定记 **`N/A`**(无 frontend repair runtime)
64
+ - **M3+**:按 failure taxonomy 采集
65
+
66
+ ### 4. 需求追踪完整率
67
+
68
+ - **名称**:`requirement_trace_completeness_rate`
69
+ - **M0 分子**:`frontend-requirement-coverage-shell` 通过(或无显式 ID 时记 `not-applicable-trial`)且 closeout/plan 仍含全部绑定 ID 的 trial 数
70
+ - **M0 分母**:含显式 REQ/BR/AC 的 trial 数
71
+ - **语义**:M0 为 **identifier-presence**,不是文件/UI state 完整映射
72
+ - **M1+**:改为 validated contract 中每条 ID → target/state/test 映射完整率(届时更新本文件版本)
73
+
74
+ ### 5. 越界写入次数
75
+
76
+ - **名称**:`forbidden_write_count`
77
+ - **分子**:write-guard / exclusive writeSet 拒绝次数 + review 确认的越界路径写入次数(按 trial 计数事件,可 >1)
78
+ - **分母**:含 writer 的 trial 数(用于率:`forbidden_write_rate = 分子/分母`)
79
+ - **期望基线**:治理应使成功 closeout 的 trial 分子为 0
80
+
81
+ ### 6. 错误依赖次数
82
+
83
+ - **名称**:`unapproved_dependency_count`
84
+ - **分子**:未批准新增 dependency(package.json 变更未授权、review 标记 Important 等)事件数
85
+ - **分母**:含 writer 的 trial 数
86
+ - **采集**:diff 检查 + review findings 标签(需约定 finding code,M0 用人工标注)
87
+
88
+ ### 7. Mock / 真实联调误报次数
89
+
90
+ - **名称**:`mock_real_integration_false_claim_count`
91
+ - **分子**:closeout 或报告将 Mock-backed 证据描述为真实 API 已联通,或省略 `Real integration: pending` 的 trial 数
92
+ - **分母**:`MOCK_STRATEGY` 为 native | browser-intercept | request-adapter 且无真实后端证据的 trial 数
93
+ - **期望**:0
94
+
95
+ ### 8. 节点数 / 模型节点数
96
+
97
+ - **名称**:`node_count`, `model_node_count`
98
+ - **定义**:
99
+ - `node_count` = `spec.tasks.length`
100
+ - `model_node_count` = `executor === "pi"`(或非 shell/static)的节点数
101
+ - **报告**:按 topology 变体分别记录(standard / +coverage / +mock-verify / blocked)
102
+ - **M0 基线参考(standard 无 optional)**:`node_count=16`;模型节点含 contract/scout/mock-assess/plan/design/plan-revision/final-design-review/implement/review/closeout(以 builder 为准,测试锁定 id 列表)
103
+
104
+ ### 9. 墙钟耗时
105
+
106
+ - **名称**:`wall_clock_ms`
107
+ - **分子/分母**:不适用;报告 **p50 / p95 / max** 与 **n**
108
+ - **来源**:见通用规则;缺失 → `unavailable`
109
+
110
+ ### 10. Token
111
+
112
+ - **名称**:`tokens_total`
113
+ - **报告**:sum 与 per-role breakdown(若可得);缺失 → `unavailable`
114
+ - **禁止**:用字符数或经验公式估算后当作实测
115
+
116
+ ---
117
+
118
+ ## 建议采集表头(CSV / Markdown)
119
+
120
+ ```text
121
+ sampleSetId, trialId, fixtureId, targetId, controllerVersion, commitSha,
122
+ topologyVariant, mockStrategy,
123
+ first_static_pass (0|1|unavailable),
124
+ first_behavior_pass (0|1|unavailable),
125
+ post_repair_final_pass (0|1|N/A|unavailable),
126
+ requirement_trace_ok (0|1|not-applicable|unavailable),
127
+ forbidden_write_count,
128
+ unapproved_dependency_count,
129
+ mock_real_false_claim (0|1|n/a),
130
+ node_count, model_node_count,
131
+ wall_clock_ms, tokens_total,
132
+ browser_status (not-run)
133
+ ```
134
+
135
+ ## 与 M1+ 的关系
136
+
137
+ - 指标名称稳定;分子定义可在 M1(contract)、M3(repair)版本化增补,须在 CHANGELOG/本文件注明 **metrics schema version**。
138
+ - 当前 **metrics schema version: m0.1**。
@@ -1,53 +1,53 @@
1
- # Frontend-implementation Smoke Targets 策略(M0)
2
-
3
- ## 原则
4
-
5
- 1. **仅使用平台临时目录**(`os.tmpdir()` / CI runner temp),**不得**在 loop-agent 仓库根写入可运行 app、`node_modules` 或构建产物。
6
- 2. **不启动浏览器**;不安装 Playwright/Cypress;不声明 Browser verification。
7
- 3. M0 只冻结**目标描述与生成约定**;真正从 fixture 物化临时项目在 **M1+ dogfood** 时实施。
8
- 4. 临时项目生命周期:创建 → 最小依赖安装(仅 temp)→ 跑冻结 static/behavior 命令 → 删除;失败日志可复制到 run-owned harness 目录,不进 git。
9
-
10
- ## 三类可控目标
11
-
12
- | targetId | 栈 | 最小信号 | 建议 static | 建议 behavior | Browser |
13
- |----------|----|----------|-------------|---------------|---------|
14
- | `react-vitest-min` | React + Vitest + TypeScript | `package.json` scripts: `typecheck`, `build`/`vite build`, `test`;`src/**/*.tsx` | `npm run typecheck`(+ build 若存在) | `npm test` / `npx vitest run` | not-run |
15
- | `nextjs-min` | Next.js(App Router 信号) | `app/` 或 `pages/` + `"next"` dependency;`"use client"` 边界样例 | `npm run typecheck` / `next build`(temp only) | 聚焦 unit/component test,**不** `next start` 作完成证据 | not-run |
16
- | `vue-vitest-min` | Vue 3 + Vitest | `*.vue` + vitest config | `npm run typecheck` 或 `vue-tsc` | `npm test` | not-run |
17
-
18
- ## 临时项目生成约定(M1+ 实施)
19
-
20
- ```text
21
- ROOT="$(mktemp -d "${TMPDIR:-/tmp}/fe-eval-XXXXXX")"
22
- # 从 docs/templates/frontend-eval/fixtures/... 渲染 package.json / 源文件骨架
23
- # npm install --prefix "$ROOT" # 仅 temp
24
- # 在 $ROOT 执行冻结 verify 命令
25
- # rm -rf "$ROOT"
26
- ```
27
-
28
- 约束:
29
-
30
- - fixture **不得**内嵌密钥、真实 PII、恶意脚本。
31
- - 依赖版本钉死在 fixture 清单,避免 eval 漂移。
32
- - 不得 `npm link` 工作区 loop-agent 作为被测 app 依赖(controller 版本另按任务约束)。
33
-
34
- ## 与 functional / failure fixtures 映射
35
-
36
- | fixture 类别 | 优先 target |
37
- |--------------|-------------|
38
- | simple component / style | react-vitest-min, vue-vitest-min |
39
- | form validation | react-vitest-min |
40
- | list/detail | react-vitest-min, nextjs-min |
41
- | API + Mock | react-vitest-min(+ MSW 骨架) |
42
- | permission UI | react-vitest-min, nextjs-min |
43
- | SSR / server-client boundary | nextjs-min |
44
- | shared component API | react-vitest-min |
45
- | pure local no-remote | 任一 |
46
- | failure: type/build | 任一 |
47
- | failure: mock production-on | react-vitest-min + mock 骨架 |
48
-
49
- ## 明确不做
50
-
51
- - 不在本仓库 `website/**` 或 examples 中落永久 dogfood app 作为 M0 必需项。
52
- - 不把 `scripts/check-repo.sh` 全量当作前端 app 验证。
53
- - 不提交 temp 安装树或截图基线。
1
+ # Frontend-implementation Smoke Targets 策略(M0)
2
+
3
+ ## 原则
4
+
5
+ 1. **仅使用平台临时目录**(`os.tmpdir()` / CI runner temp),**不得**在 loop-agent 仓库根写入可运行 app、`node_modules` 或构建产物。
6
+ 2. **不启动浏览器**;不安装 Playwright/Cypress;不声明 Browser verification。
7
+ 3. M0 只冻结**目标描述与生成约定**;真正从 fixture 物化临时项目在 **M1+ dogfood** 时实施。
8
+ 4. 临时项目生命周期:创建 → 最小依赖安装(仅 temp)→ 跑冻结 static/behavior 命令 → 删除;失败日志可复制到 run-owned harness 目录,不进 git。
9
+
10
+ ## 三类可控目标
11
+
12
+ | targetId | 栈 | 最小信号 | 建议 static | 建议 behavior | Browser |
13
+ |----------|----|----------|-------------|---------------|---------|
14
+ | `react-vitest-min` | React + Vitest + TypeScript | `package.json` scripts: `typecheck`, `build`/`vite build`, `test`;`src/**/*.tsx` | `npm run typecheck`(+ build 若存在) | `npm test` / `npx vitest run` | not-run |
15
+ | `nextjs-min` | Next.js(App Router 信号) | `app/` 或 `pages/` + `"next"` dependency;`"use client"` 边界样例 | `npm run typecheck` / `next build`(temp only) | 聚焦 unit/component test,**不** `next start` 作完成证据 | not-run |
16
+ | `vue-vitest-min` | Vue 3 + Vitest | `*.vue` + vitest config | `npm run typecheck` 或 `vue-tsc` | `npm test` | not-run |
17
+
18
+ ## 临时项目生成约定(M1+ 实施)
19
+
20
+ ```text
21
+ ROOT="$(mktemp -d "${TMPDIR:-/tmp}/fe-eval-XXXXXX")"
22
+ # 从 docs/templates/frontend-eval/fixtures/... 渲染 package.json / 源文件骨架
23
+ # npm install --prefix "$ROOT" # 仅 temp
24
+ # 在 $ROOT 执行冻结 verify 命令
25
+ # rm -rf "$ROOT"
26
+ ```
27
+
28
+ 约束:
29
+
30
+ - fixture **不得**内嵌密钥、真实 PII、恶意脚本。
31
+ - 依赖版本钉死在 fixture 清单,避免 eval 漂移。
32
+ - 不得 `npm link` 工作区 loop-agent 作为被测 app 依赖(controller 版本另按任务约束)。
33
+
34
+ ## 与 functional / failure fixtures 映射
35
+
36
+ | fixture 类别 | 优先 target |
37
+ |--------------|-------------|
38
+ | simple component / style | react-vitest-min, vue-vitest-min |
39
+ | form validation | react-vitest-min |
40
+ | list/detail | react-vitest-min, nextjs-min |
41
+ | API + Mock | react-vitest-min(+ MSW 骨架) |
42
+ | permission UI | react-vitest-min, nextjs-min |
43
+ | SSR / server-client boundary | nextjs-min |
44
+ | shared component API | react-vitest-min |
45
+ | pure local no-remote | 任一 |
46
+ | failure: type/build | 任一 |
47
+ | failure: mock production-on | react-vitest-min + mock 骨架 |
48
+
49
+ ## 明确不做
50
+
51
+ - 不在本仓库 `website/**` 或 examples 中落永久 dogfood app 作为 M0 必需项。
52
+ - 不把 `scripts/check-repo.sh` 全量当作前端 app 验证。
53
+ - 不提交 temp 安装树或截图基线。
@@ -1,35 +1,35 @@
1
- # 前端任务执行约束模板
2
-
3
- ## 技术约束
4
-
5
- TODO
6
-
7
- ## 代码风格约束
8
-
9
- TODO
10
-
11
- ## 设计约束
12
-
13
- TODO
14
-
15
- ## 验证约束
16
-
17
- TODO
18
-
19
- ## Mock 约束(数据型任务)
20
-
21
- - Mock/API/schema 规范路径:TODO
22
- - 既有 Mock service root、handler/fixture/bootstrap:TODO
23
- - 既有 browser/e2e interception 或 request adapter/DI seam:TODO
24
- - 启动、健康检查和专项验证命令:TODO
25
- - production 禁用边界:TODO
26
- - 真实请求默认路径与 Mock 显式启用方式:TODO
27
- - `task.json.frontendMock.policy`:`auto | required | disabled`
28
-
29
- ## allowedPaths
30
-
31
- TODO
32
-
33
- ## forbiddenPaths
34
-
35
- TODO
1
+ # 前端任务执行约束模板
2
+
3
+ ## 技术约束
4
+
5
+ TODO
6
+
7
+ ## 代码风格约束
8
+
9
+ TODO
10
+
11
+ ## 设计约束
12
+
13
+ TODO
14
+
15
+ ## 验证约束
16
+
17
+ TODO
18
+
19
+ ## Mock 约束(数据型任务)
20
+
21
+ - Mock/API/schema 规范路径:TODO
22
+ - 既有 Mock service root、handler/fixture/bootstrap:TODO
23
+ - 既有 browser/e2e interception 或 request adapter/DI seam:TODO
24
+ - 启动、健康检查和专项验证命令:TODO
25
+ - production 禁用边界:TODO
26
+ - 真实请求默认路径与 Mock 显式启用方式:TODO
27
+ - `task.json.frontendMock.policy`:`auto | required | disabled`
28
+
29
+ ## allowedPaths
30
+
31
+ TODO
32
+
33
+ ## forbiddenPaths
34
+
35
+ TODO
@@ -1,70 +1,70 @@
1
- # 前端任务需求模板
2
-
3
- ## 用户目标
4
-
5
- TODO
6
-
7
- ## 目标页面/组件/路由
8
-
9
- TODO
10
-
11
- ## 用户流程
12
-
13
- TODO
14
-
15
- ## 必须状态
16
-
17
- ### loading
18
-
19
- TODO
20
-
21
- ### empty
22
-
23
- TODO
24
-
25
- ### error
26
-
27
- TODO
28
-
29
- ### success
30
-
31
- TODO
32
-
33
- ### disabled
34
-
35
- TODO
36
-
37
- ## 目标运行环境
38
-
39
- ### desktop
40
-
41
- TODO
42
-
43
- ### mobile
44
-
45
- TODO
46
-
47
- ### tablet
48
-
49
- TODO
50
-
51
- ## 交互要求
52
-
53
- TODO
54
-
55
- ## 接口与 Mock 输入
56
-
57
- - 接口文档/schema:TODO
58
- - endpoint、method、关键请求/响应字段:TODO
59
- - 是否允许依赖真实后端:TODO
60
- - 是否要求离线或独立行为验证:TODO
61
- - success/empty/error/permission 状态:TODO
62
- - 后端当前就绪状态与 Real Integration Gap:TODO
63
-
64
- ## 验收标准
65
-
66
- TODO
67
-
68
- ## 非目标
69
-
70
- TODO
1
+ # 前端任务需求模板
2
+
3
+ ## 用户目标
4
+
5
+ TODO
6
+
7
+ ## 目标页面/组件/路由
8
+
9
+ TODO
10
+
11
+ ## 用户流程
12
+
13
+ TODO
14
+
15
+ ## 必须状态
16
+
17
+ ### loading
18
+
19
+ TODO
20
+
21
+ ### empty
22
+
23
+ TODO
24
+
25
+ ### error
26
+
27
+ TODO
28
+
29
+ ### success
30
+
31
+ TODO
32
+
33
+ ### disabled
34
+
35
+ TODO
36
+
37
+ ## 目标运行环境
38
+
39
+ ### desktop
40
+
41
+ TODO
42
+
43
+ ### mobile
44
+
45
+ TODO
46
+
47
+ ### tablet
48
+
49
+ TODO
50
+
51
+ ## 交互要求
52
+
53
+ TODO
54
+
55
+ ## 接口与 Mock 输入
56
+
57
+ - 接口文档/schema:TODO
58
+ - endpoint、method、关键请求/响应字段:TODO
59
+ - 是否允许依赖真实后端:TODO
60
+ - 是否要求离线或独立行为验证:TODO
61
+ - success/empty/error/permission 状态:TODO
62
+ - 后端当前就绪状态与 Real Integration Gap:TODO
63
+
64
+ ## 验收标准
65
+
66
+ TODO
67
+
68
+ ## 非目标
69
+
70
+ TODO
@@ -187,10 +187,32 @@
187
187
  "enum": ["standard-dag", "review-gated-dag", "supervised-implementation"],
188
188
  "description": "某个治理 profile 选择的 DAG 生成模板。"
189
189
  },
190
+ "executorTierModel": {
191
+ "oneOf": [
192
+ { "type": "string" },
193
+ {
194
+ "type": "object",
195
+ "additionalProperties": false,
196
+ "required": ["model"],
197
+ "properties": {
198
+ "model": {
199
+ "type": "string",
200
+ "minLength": 1,
201
+ "description": "模型 id 或 provider/model 限定引用。"
202
+ },
203
+ "thinking": {
204
+ "type": "string",
205
+ "description": "可选 Pi thinking level(如 max/low)。省略时不强制覆盖 Pi 默认。"
206
+ }
207
+ }
208
+ }
209
+ ],
210
+ "description": "executor 复杂度档模型:字符串 model id,或 { model, thinking? }。字面值 default 表示不覆盖。"
211
+ },
190
212
  "executor": {
191
213
  "type": "object",
192
214
  "additionalProperties": false,
193
- "description": "executor 设置。DAG 模型选择优先读取 LOW/MED/HIGH,其次读取 defaultModel,最后回退到 loop-agent runtime 默认矩阵。字面值 default 表示不覆盖。",
215
+ "description": "executor 设置。DAG 模型选择优先读取 LOW/MED/HIGH,其次读取 defaultModel,最后回退到 loop-agent runtime 默认矩阵。字面值 default 表示不覆盖。LOW/MED/HIGH 可为字符串或 { model, thinking? } 对象。",
194
216
  "properties": {
195
217
  "description": { "type": "string" },
196
218
  "enabled": { "type": "boolean" },
@@ -200,16 +222,16 @@
200
222
  "default": "default"
201
223
  },
202
224
  "LOW": {
203
- "type": "string",
204
- "description": "LOW 复杂度 DAG task 的模型覆盖值,优先级高于 defaultModel"
225
+ "$ref": "#/$defs/executorTierModel",
226
+ "description": "LOW 复杂度 DAG task 的模型覆盖值,优先级高于 defaultModel。可为模型字符串,或 { model, thinking? } 对象。"
205
227
  },
206
228
  "MED": {
207
- "type": "string",
208
- "description": "MED 复杂度 DAG task 的模型覆盖值,优先级高于 defaultModel"
229
+ "$ref": "#/$defs/executorTierModel",
230
+ "description": "MED 复杂度 DAG task 的模型覆盖值,优先级高于 defaultModel。可为模型字符串,或 { model, thinking? } 对象。"
209
231
  },
210
232
  "HIGH": {
211
- "type": "string",
212
- "description": "HIGH 复杂度 DAG task 的模型覆盖值,优先级高于 defaultModel"
233
+ "$ref": "#/$defs/executorTierModel",
234
+ "description": "HIGH 复杂度 DAG task 的模型覆盖值,优先级高于 defaultModel。可为模型字符串,或 { model, thinking? } 对象。"
213
235
  },
214
236
  "requiresApiKey": {
215
237
  "type": "string",