@kylecheng3146/agent-ops 0.8.5 → 0.9.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 (33) hide show
  1. package/dist/packages/cli/src/args.js +11 -3
  2. package/dist/packages/cli/src/cli.js +3 -1
  3. package/dist/packages/cli/src/commands/parallel.js +5 -0
  4. package/dist/packages/cli/src/commands/review.js +92 -1
  5. package/dist/packages/cli/src/commands/task.js +17 -4
  6. package/dist/packages/cli/src/debug-intake.js +2 -2
  7. package/dist/packages/cli/src/run-entry.js +7 -5
  8. package/dist/runtime/src/install/harness.js +1 -1
  9. package/dist/runtime/src/logging/local-log.js +17 -0
  10. package/dist/runtime/src/parallel/finish.js +20 -3
  11. package/dist/runtime/src/parallel/receipt.js +6 -0
  12. package/dist/runtime/src/review/packet.js +13 -1
  13. package/dist/runtime/src/review/runner.js +24 -0
  14. package/dist/runtime/src/run/authorization.js +8 -4
  15. package/dist/runtime/src/run/planning.js +5 -2
  16. package/dist/runtime/src/schema/validate.js +12 -1
  17. package/dist/runtime/src/surface/discovery.js +221 -0
  18. package/dist/runtime/src/surface/schema.js +127 -0
  19. package/dist/runtime/src/task/contract.js +3 -1
  20. package/dist/runtime/src/task/debug-intake.js +3 -0
  21. package/dist/runtime/src/task/debug-user-event.js +4 -2
  22. package/dist/runtime/src/task/debug.js +4 -1
  23. package/dist/runtime/src/task/service.js +17 -2
  24. package/docs/en/spec/acceptance-and-evidence.md +54 -0
  25. package/docs/en/spec/judgment.md +7 -0
  26. package/docs/en/spec/loop-engineering.md +2 -2
  27. package/docs/en/spec/review.md +5 -0
  28. package/docs/zh-TW/spec/acceptance-and-evidence.md +48 -0
  29. package/docs/zh-TW/spec/judgment.md +6 -0
  30. package/docs/zh-TW/spec/loop-engineering.md +2 -2
  31. package/docs/zh-TW/spec/review.md +1 -0
  32. package/package.json +1 -1
  33. package/schemas/task.schema.json +7 -0
@@ -42,6 +42,54 @@ English source version: 2026-10-06. Revalidate: when the English specification c
42
42
  - Positive: `子 agent 先記錄預定 API 修改、提交程式碼,最後完成紀錄包含該意圖與整合後驗證。`
43
43
  - Negative: `先修改程式碼,交付時才補寫一行事後意圖。`
44
44
 
45
+ ## EVIDENCE-SURFACE-001
46
+
47
+ 每個新 task MUST 在寫驗收條件前記錄變更還會影響哪些位置(surface audit);discovery 找到未分類位置時,review MUST NOT 執行。
48
+
49
+ - Trigger: 建立 task(`task create`、run plan,或 DEBUG task 第一次修復之前)、修訂 surface,或審查 task。
50
+ - Action: 以記錄下來的固定字串查詢或 `n/a: 理由` 搜尋四個軸向,把每個命中分類為 included、excluded(glob + 理由)或 UNKNOWN,每列 surface 都寫出可觀察的 `behavior`,並宣告每個共享契約為 compatible 或 breaking。以 `task create|revise --surface-file <json>` 提交。
51
+ - Evidence: surface 存在 task 上、綁進 contract hash 並保留修訂歷史,review 前以 `git grep -F` 重放,並以 `surface-coverage` 條件交給兩位 reviewer。
52
+ - Positive: `diff token 命中三個複製貼上的同類頁面;review 前 audit 已把它們連同行為列入 included。`
53
+ - Negative: `以「out of scope」排除 src/**,或只列 diff 已修改的檔案。`
54
+
55
+ - 軸向:`dependents`(import、呼叫者、讀取者)、`duplicates`(複製的 markup、
56
+ 字串或不 import 任何東西的邏輯)、`otherPaths`(同一概念的其他路由、模式、
57
+ 入口或重新進入點)、`sharedState`(storage、cache、訊息、外部 API、client
58
+ storage、已發出的 URL)。設計與技術棧無關:相同軸向涵蓋前端、後端、資料庫、
59
+ cache 與訊息流。
60
+ - `included` 列含 `id`、`path` glob 與 `behavior`;`excluded` 列含 `glob` 與說明
61
+ 該 surface 為何不受影響的理由(「out of scope」不是理由);`unknown` 列記錄
62
+ repository 看不到的讀取者。`contracts` 宣告 `compatible` 或 `breaking`。只有單一
63
+ surface 也可以。
64
+ - 值的語意改變(clear、redact、default、normalize、unit/format)時,
65
+ `valueChanges` `[{producer, kind, change, consumers, indirectConsumers}]` 列出兩層
66
+ consumer。
67
+ - `scenarios` 涵蓋五個通用維度:`initialState`(空 vs 既有)、`redo`(重新載入、
68
+ 重試、重送、冪等)、`timeBoundary`(日界、TTL、時區)、`identitySwitch`(門市、
69
+ 角色、租戶)與 `concurrency`,每項為 `{applies: true, behavior}` 或 `{na: 理由}`。
70
+ - 父 task 持有 surface;子 task 宣告 `{"covers": [surface-id]}`,聯集必須等於父
71
+ task 的 included 清單。
72
+ - 任何 reviewer 執行前,discovery 以 argv 執行 `git grep -F`(絕不經過 shell,也
73
+ 不以 task 文字組 regex),由便宜的來源先跑:記錄的查詢;diff hunk header 的外層
74
+ 函式名;template literal 固定片段(至少 4 字元且以分隔符界定,例如 `order:`、
75
+ `user_`、`menu.`);新增與刪除行的複合識別字(snake_case、camelCase 或含數字,
76
+ 因此一般文字單字不會成為查詢)與字串常值(至少 6 字元;命中超過 30 個檔案視為
77
+ 太通用而略過)。diff 與 surface 清單之外的任何命中都會擋下 review。
78
+ 結果以 HEAD、base、diff、查詢集合與 config hash 快取。
79
+ - Review 以 NOT_RUN 回報:`SURFACE_MISSING`(沒有或無法解析的 surface;非 DEBUG
80
+ task 建立時也會拒絕)、`SURFACE_UNCLASSIFIED`、`SURFACE_QUERY_TOO_BROAD`(單一
81
+ 記錄查詢超過 200 個檔案)、`SURFACE_EXCLUSION_TOO_BROAD`(單一 glob 超過 10 個
82
+ 檔案,或包含 diff 內的檔案)、`SCENARIO_MISSING`、`SURFACE_BUDGET_EXCEEDED`
83
+ (總計 120 秒,絕不默默略過)或 `SURFACE_UNASSIGNED`(子 task covers 與父 task
84
+ included 不一致;每次 review 都檢查,包含 advance 與 batch)。
85
+ - 修訂 surface 等同修訂 contract:需要新的證據與兩次新的 review。在
86
+ `SURFACE_UNCLASSIFIED` 阻擋之後才加入的排除,會以 post-block exclusion 標示給
87
+ reviewer。
88
+ - 本規則上線前建立的 task 不受影響。每個 discovery 來源的 local-log 指標僅供參考、
89
+ fail-open,絕不作為證據。
90
+ - 一般 `worktree finish` 也會寫入與 advance 相同的本機 receipt,包含兩輪的 residual
91
+ risks 與 non-blocking findings,在 git note 引用它並印出 residual risks。
92
+
45
93
  ## EVIDENCE-AGGREGATE-001
46
94
 
47
95
  驗證器 MUST 在條件缺少、重複、未知或證據為空時回傳 FAIL。
@@ -12,6 +12,12 @@ English source version: 2026-07-23. Revalidate: when the English specification c
12
12
  - Positive: `套用安裝前詢問要 project 或 user scope。`
13
13
  - Negative: `因為方便就假設 project scope。`
14
14
 
15
+ Surface audit 觸發條件([EVIDENCE-SURFACE-001](acceptance-and-evidence.md#evidence-surface-001))同樣要在編輯前停止:
16
+
17
+ - 共享契約有 `breaking` 變更,且存在任何 UNKNOWN 讀取者。
18
+ - 發現的 surface 以「刻意不同」為由排除:交給使用者一張整合的行為表(surface、
19
+ 目前行為、提議行為、理由)並等待決定。
20
+
15
21
  ## JUDGMENT-RETRY-001
16
22
 
17
23
  相同失敗在沒有新資訊時重複發生,操作者 MUST 改變方法。
@@ -26,10 +26,10 @@ English source version: 2026-07-23. Revalidate: when the English specification c
26
26
 
27
27
  ## LOOP-START-001
28
28
 
29
- 操作者 MUST 在編輯前列出驗收條件,並在每項條件都有證據時停止。
29
+ 操作者 MUST 先盤點變更影響的 surface,再於編輯前列出驗收條件,並在每項條件都有證據時停止。
30
30
 
31
31
  - Trigger: 開始多步驟實作或除錯迴圈。
32
- - Action: 記錄 2–5 個可觀察條件,只檢查目前步驟所需檔案。
32
+ - Action: 記錄 surface audit([EVIDENCE-SURFACE-001](acceptance-and-evidence.md#evidence-surface-001)),再記錄 2–5 個可觀察條件,只檢查已盤點範圍內、目前步驟所需的檔案。
33
33
  - Evidence: 任務紀錄與最終報告把每項條件連到命令或讀回內容。
34
34
  - Positive: `條件:測試通過;套件建置;讀回變更檔案。`
35
35
  - Negative: `先修改,再決定成功標準。`
@@ -77,6 +77,7 @@ PASS MUST 交給第二個規劃的 target 嘗試反駁,且反駁成立時 MUST
77
77
  - Positive: `codex 判 PASS,claude 找到 blocking 缺陷,整體判定 FAIL。`
78
78
  - Negative: `為了讓複查看起來有效而編造反駁。`
79
79
  - Note: 只有一個設定 target 時,會在全新 session 再呼叫同一 target。FAIL 已是終局,不再複查。
80
+ - Note: 有 surface 的 task,第二輪也會在 `surface-coverage` 下搜尋未列出的 surface 與情境:檢查五個固定情境維度,每個軸向最多可新增 3 個 `git grep -F` 查詢。第一輪重放記錄的查詢並閱讀每個列出的 `valueChanges` consumer;這是「不要普查 repository」唯一的例外。
80
81
 
81
82
  ## REVIEW-HOST-001
82
83
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kylecheng3146/agent-ops",
3
- "version": "0.8.5",
3
+ "version": "0.9.0",
4
4
  "description": "Evidence-driven development loops for agy, Codex, Claude Code, and opencode",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -281,6 +281,13 @@
281
281
  "type": "integer",
282
282
  "minimum": 0
283
283
  },
284
+ "surface": {
285
+ "description": "EVIDENCE-SURFACE-001 audit (axes, included, excluded, unknown, contracts, valueChanges, scenarios) or a child's covers list; validated strictly by the runtime.",
286
+ "type": "object"
287
+ },
288
+ "surfaceRequired": {
289
+ "const": true
290
+ },
284
291
  "debug": {
285
292
  "type": "object",
286
293
  "additionalProperties": false,