sillyspec 3.29.5 → 3.30.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.
- package/.claude/skills/sillyspec-auto/SKILL.md +54 -54
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +2 -2
- package/.claude/skills/sillyspec-commit/SKILL.md +1 -1
- package/.claude/skills/sillyspec-flow/SKILL.md +57 -0
- package/.claude/skills/sillyspec-quick/SKILL.md +18 -116
- package/AGENTS.md +38 -20
- package/SKILL.md +9 -3
- package/assets/command-cards/flow.md +32 -0
- package/assets/command-cards/run-brainstorm.md +1 -1
- package/assets/command-cards/run-quick.md +8 -25
- package/package.json +2 -1
- package/packages/dashboard/server/executor.js +2 -1
- package/packages/dashboard/server/parser.js +7 -7
- package/r7-test-env/README-R7-TEST.md +93 -0
- package/r7-test-env/demo-project/lib/calc.js +6 -0
- package/r7-test-env/demo-project/package.json +1 -0
- package/r7-test-env/demo-project/test.js +10 -0
- package/r7-test-env/prompt-R7-SMOKE.md +41 -0
- package/r7-test-env/sillyspec-r7.cmd +3 -0
- package/round4/account.mjs +18 -5
- package/round4/b1-analyze-task08.mjs +40 -0
- package/round4/b1-b1-target-validation.md +32 -0
- package/round4/b3a-prompt-audit-result.md +66 -0
- package/round4/b3a-prompt-audit.mjs +89 -0
- package/round4/optimization-plan.md +165 -0
- package/round4/r4-final-report.html +347 -0
- package/round4/r5-scenario-matrix.md +46 -0
- package/src/change-list.js +9 -0
- package/src/classify-change.js +6 -0
- package/src/command-cards.js +2 -1
- package/src/commit-guard.js +2 -0
- package/src/config-schema.js +64 -12
- package/src/db.js +35 -4
- package/src/decision-distill.js +9 -3
- package/src/docs-check.js +1 -1
- package/src/doctor-diagnostics.js +44 -2
- package/src/flow-draft.js +748 -0
- package/src/flow-parity.js +236 -0
- package/src/flow-review.js +184 -0
- package/src/flow.js +1492 -0
- package/src/foreign-declared.js +17 -1
- package/src/fr-index.js +396 -22
- package/src/fs-atomic.js +5 -1
- package/src/git-helper.js +2 -2
- package/src/greenfield-bootstrap.js +98 -0
- package/src/handoff.js +120 -7
- package/src/hunk-attribution.js +191 -0
- package/src/index.js +570 -16
- package/src/knowledge-classify.js +47 -1
- package/src/knowledge-digest.js +162 -0
- package/src/knowledge-quicklog.js +246 -0
- package/src/machine-draft.js +128 -0
- package/src/machine-interface.js +107 -5
- package/src/mcp-server.js +1 -0
- package/src/module-resolve.js +3 -1
- package/src/preview-progress.js +160 -0
- package/src/progress/change-registry.js +11 -3
- package/src/progress/shared.js +3 -2
- package/src/progress.js +56 -13
- package/src/quicklog.js +44 -6
- package/src/redomain.js +147 -0
- package/src/review-material-pack.js +204 -1
- package/src/run/archive-distill.js +4 -2
- package/src/run/bg-sync.js +67 -0
- package/src/run/command.js +123 -10
- package/src/run/complete-handlers.js +327 -72
- package/src/run/complete.js +350 -71
- package/src/run/gate-snapshot-ledger.js +213 -0
- package/src/run/gate-snapshot.js +250 -34
- package/src/run/gates.js +370 -233
- package/src/run/green-cache.js +123 -0
- package/src/run/junction-rm.js +70 -0
- package/src/run/next.js +14 -0
- package/src/run/prompt.js +185 -55
- package/src/run/quick-audit.js +185 -12
- package/src/run/shared.js +120 -3
- package/src/run/stage.js +182 -216
- package/src/run/test-ledger.js +264 -0
- package/src/run/verify-quality-scan.js +84 -7
- package/src/scope-audit.js +6 -1
- package/src/sentinel-assertions.js +114 -0
- package/src/setup.js +3 -3
- package/src/spec-sync.js +41 -1
- package/src/stage-contract.js +26 -8
- package/src/stage-review-checklist.js +2 -0
- package/src/stage-review.js +7 -2
- package/src/stage-templates.js +157 -0
- package/src/stages/archive.js +2 -0
- package/src/stages/brainstorm.js +24 -106
- package/src/stages/execute.js +221 -84
- package/src/stages/knowledge.js +74 -1
- package/src/stages/plan-postcheck.js +352 -1
- package/src/stages/plan.js +23 -1
- package/src/stages/quick.js +10 -2
- package/src/stages/verify.js +4 -2
- package/src/sync.js +81 -23
- package/src/task-done.js +181 -0
- package/src/task-review.js +8 -55
- package/src/test-bindings.js +549 -0
- package/src/timeline.js +218 -0
- package/src/ui-visual.js +175 -0
- package/src/verify-draft.js +214 -0
- package/src/verify-postcheck.js +860 -158
- package/src/verify-probes.js +59 -3
- package/src/watcher.js +1031 -0
- package/src/worktree-apply.js +44 -4
- package/src/worktree-deps.js +22 -8
- package/src/worktree-policy.js +42 -0
- package/src/worktree.js +102 -15
- package/templates/agents-instruction.md +37 -18
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# sillyspec 效率优化整体方案 v3(2026-09-21 整合版)
|
|
2
|
+
|
|
3
|
+
> 靶子(R4 实测,账单当量口径 = 新入 1× / 缓存 ~0.1× / 输出 3–5× 折算):
|
|
4
|
+
> **大任务账单当量 2.4×(8.04 当量差)= 缓存体量差 55%(4.45)+ 扇出冷启动 26%(2.09)+ 输出差 19%(1.50,其中 77% 是子代理代码/测试产出=交付厚度,不砍)**。
|
|
5
|
+
> 墙钟:大 2×、小 1.3×,差距全在非模型时间(门禁循环 + 编排等待)。
|
|
6
|
+
> 红线:**不动四道防线**(审查/门禁/核验/资产);不砍交付厚度(输出差是产品)。所有优化只打三样:冗余重读、冷启动、等待。
|
|
7
|
+
|
|
8
|
+
## 战线 A:已落地,待 R5 验收(不重规划)
|
|
9
|
+
|
|
10
|
+
| 项 | 状态 |
|
|
11
|
+
|---|---|
|
|
12
|
+
| 门禁四项:模块粒度范围化 / fail-fast 前置 / lint 归属降档两门 / 超时帽 | 已提交(83d91cd4 / 2eba595c,模块粒度 v3.24 在场) |
|
|
13
|
+
| ~~增量复用~~ | **正式摘出(2026-09-21 R5 准备核对)**:src/ROADMAP/终报/batch2 四处查无落码与定义,承办无着落;疑即 ROADMAP 延后项「探针增量缓存」(quick-4af1acc3 D②:失效面广需独立失效契约)——按延后项处理,不计入战线 A,R5 验收不背此项 |
|
|
14
|
+
| gate verify lint parity / module-impact 引号+多map / Wave 并发帽 ≤3 | 已提交 61995a32 |
|
|
15
|
+
| 缺陷 A/B(资产尾 export + --linked-changes 管道) | 已提交 954946ae |
|
|
16
|
+
|
|
17
|
+
**R5 前置核对(2026-09-21 落盘)**:①对撞仓基线 50736b6ef / 53c67e02a 经 git cat-file 实证均在(multi-agent-platform 主树干净);Temp 残留一批 prunable gate worktree——R5 跑前 `git worktree prune`。②account.mjs 已加三分+当量列(v2),基线钉死:R4-L 当量@3× 13.89M / R4-O-L 5.87M / **比值 2.37×**(@5× 口径 2.47×,复现终报 2.4×);R5 判定一律用同脚本同口径复算,不比绝对值。③**B-④ 接线缺口**:材料包机制已落地但 execute 主链未主动生成(task-02 接线最小化,仅 options.materials 传入时渲染)——R5 的 B-④ on/off 对照前需补接线(小 quick 一项,或并入 batch2 M3 派发分组落点)。
|
|
18
|
+
|
|
19
|
+
**R5 验收点**:门禁轮次 ≤2;模块粒度下真拦率不降(用 gate-value-audit 的 12 次真拦案例回归);大任务墙钟无额度事故(并发帽生效)。前置对账(v3.2):五项中四项已核已交(模块粒度 v3.24 在场 / fail-fast+lint 归属 83d91cd4 / 超时降档 2eba595c),「增量复用」src 与终报均无落码痕迹——详 v3.2 第 4 条,R5 前与承办会话对齐状态,勿按「已在办」默认计入。
|
|
20
|
+
|
|
21
|
+
## 战线 B:扇出账单治理(打 55%+26% 的差额)
|
|
22
|
+
|
|
23
|
+
### B-① 读取范围引导(打冷启动 + 重读体量)——**已验靶:不实,实现项砍(2026-09-21,详 round4/b1-b1-target-validation.md)**
|
|
24
|
+
- **前置验证(先做,30min)**:读 task-08 的 transcript,判定 8.6M 是越界读还是任务规模相称——**靶子不实不立项**。
|
|
25
|
+
- **验靶结论**:越界读零发生(62 次调用全在契约链内);8.6M = 58 轮 × 148K 轮均上下文的缓存重发(新鲜输入仅 186K);全扇出 19 子代理名义 41.77M 中新鲜仅 1.34M(3.2%)。读上界太小,读清单注入无钱可省——**第 2 批实现项下线**,allowed_paths 现状约束维持。
|
|
26
|
+
- 杠杆换位到 **B-⑥ 轮数纪律**(见下)与 B-④。
|
|
27
|
+
|
|
28
|
+
### B-② 调研摘要共享(打实现侧重读)
|
|
29
|
+
- **做法**:调研产出追加一份 CLI 盖章 digest(两页,**每条契约事实带 file:line 锚点 + 「关键契约回源核对」条款**);实现子代理读 digest 替代重读原始源码。
|
|
30
|
+
- **红线**:digest 转错一处 = 内部版错键正典(我们刚批判完的模式)——**走完整流程**,设计决策落盘(锚点格式 / 失效时机 / 回源义务)。
|
|
31
|
+
- 预期:实现侧重读降(调研段自身的 9.4M 压不动,靠 B-③ 摊)。
|
|
32
|
+
|
|
33
|
+
### B-③ batch 默认前置到 plan(打重复重建)
|
|
34
|
+
- **证据**:R4-S-F 5 任务 2 batch → execute 仅 6M/17min。
|
|
35
|
+
- **做法**:batch 粒度决策放 **plan 阶段**(文件正交 + 无契约链的任务默认并批,2–4/批);execute 不加推力——**保 Wave 内并发 ≥3 的墙钟亮点**,不拿墙钟换 token。
|
|
36
|
+
- 属性:提示词级 + plan-postcheck 可加机械提醒。
|
|
37
|
+
|
|
38
|
+
### B-④ 材料包机制扩展到 execute(打冷启动)
|
|
39
|
+
- 复用 `assembleStageReviewMaterials` 基建:实现子代理拿 CLI 裁好的合同摘录(design 相关节 + 接口签名 + 目标文件锚点),不自行通读全量文档。
|
|
40
|
+
- **加分机制**:统一材料包 = 统一前缀 → 缓存命中更稳(面值之外的真实账单收益)。
|
|
41
|
+
- **装配顺序契约(v3.2)**:跨任务稳定内容(design 通摘 / 接口签名)在前、任务专属内容(任务卡 / 变更面摘录)在后——统一前缀的缓存命中依赖稳定段先行,混排则任务差异打断前缀、面值收益折半。
|
|
42
|
+
- 可直接进(机制在,低风险)。
|
|
43
|
+
|
|
44
|
+
### B-⑤ 子代理模型分级(打单价,不动 token)
|
|
45
|
+
- **必须先 A/B**:同任务双档各跑——便宜档若多轮返工(turn↑→重发↑)token 反升,且核验行为可能弱化(错键正是核验拦的)。**审查/verify 保持旗舰档是红线**。
|
|
46
|
+
- 只在 A/B 证实「实现档返工率不升」后启用。
|
|
47
|
+
|
|
48
|
+
### B-⑥ 轮数纪律(打轮数乘数;B-① 验靶换位新增,2026-09-21)
|
|
49
|
+
- **证据**:扇出名义体量 = Σ(轮数 × 轮均上下文),新鲜内容仅 3.2%——轮数是另一半杠杆。task-08 的 58 轮里 Edit×7(相邻同文件逐个改)+ TodoWrite×4(每条占一轮重发全上下文)+ 测试 Bash 多次循环。
|
|
50
|
+
- **做法**(提示词级,execute 派发 prompt 两三行):① 相邻同文件的多个改动合并为一次 Edit 批量提交;② TodoWrite 降频(阶段边界用,不在实现中途连发);③ 测试验证合并跑(一次 Bash 串行多查),不逐文件跑。
|
|
51
|
+
- 属性:提示词级;R5 用子代理请求数验收(扇出 522req 基线)。
|
|
52
|
+
|
|
53
|
+
### 战线 B 预期(保守)
|
|
54
|
+
扇出段 42.3M → **28–32M**(上界 25M 需 ①②③ 全中且提示词被遵守);账单当量比 2.4× → **~1.7–1.9×**。到不了 parity 也不该到——剩余差额 = 上下文保险 + 独立审查 + 交付厚度的价格。
|
|
55
|
+
|
|
56
|
+
## 战线 C:编排会话上下文治理(打主会话 56.8M 的一部分)
|
|
57
|
+
|
|
58
|
+
### C-1(P1,quick 可落)
|
|
59
|
+
- **B1 子代理返回契约**:返回体 ≤25 行结构化摘要(verdict / 触碰文件数 / 测试一行 / 偏差),细节落盘按需 Read——真相由门禁对账,不靠返回体转述。
|
|
60
|
+
- **B2 审查回收瘦身**:verdict 回一行 + blockers + review.json 路径(稳定路径已在),主代理按需 Read 工件。
|
|
61
|
+
- **B3a prompt 审计先行**:只读脚本统计 R4 五份 transcript 各步 prompt 规则的「引用/遵守/从未触发」,产出瘦身候选——**测量完再删**(四律这轮刚实证有效,承重规则不动)。
|
|
62
|
+
|
|
63
|
+
### C-2(P2,CLI 小刀)
|
|
64
|
+
- **B4a `sillyspec handoff --change <名>`**:进度库机械生成 ≤80 行交接包(阶段/Wave 状态/blockers/决策 ID/下一步命令)——把「任务太大爆窗」从硬墙变成操作规程。零状态机改动。
|
|
65
|
+
- B3b 依据 B3a 审计瘦身步骤 prompt。
|
|
66
|
+
|
|
67
|
+
### C-3(P3,立项评估,勿直接开码)
|
|
68
|
+
- B4b 编排自动分段:先让 B4a 人工规程跑两个真实超大变更,再决定自动化。
|
|
69
|
+
- 目标:R4-L 量级任务主会话峰值 **377K → <250K**,>150K 请求占比 81% → <50%。
|
|
70
|
+
|
|
71
|
+
## 执行顺序(依赖排序)
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
第 1 批(并行,本周):
|
|
75
|
+
B-①前置验证(30min) ──不实则砍①
|
|
76
|
+
B-③ plan batch 默认(提示词+postcheck 提醒)
|
|
77
|
+
B-④ 材料包扩展(复用基建,含装配顺序契约)
|
|
78
|
+
C-1 B1/B2 返回契约+回收瘦身(提示词)
|
|
79
|
+
C-1 B3a prompt 审计(只读脚本)
|
|
80
|
+
R5 探针套件:错键类+审查钳用例(verify-probes 基建增量造)──防线回归硬门的判法依赖(v3.2)
|
|
81
|
+
第 2 批(依据第 1 批):
|
|
82
|
+
B-⑥ 轮数纪律(提示词,B-① 验靶换位顶替原「读清单注入」)
|
|
83
|
+
C-2 B4a handoff 命令
|
|
84
|
+
B-⑤ 模型分级 A/B
|
|
85
|
+
第 3 批(完整流程立项):
|
|
86
|
+
B-② 调研 digest(锚点/失效/回源契约设计)
|
|
87
|
+
C-2 B3b prompt 瘦身(依据审计)
|
|
88
|
+
C-3 自动分段评估
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## R5 验收协议(一等指标升级)
|
|
92
|
+
|
|
93
|
+
| 指标 | R4 基线 | 目标 | 判法 | 依赖批次 |
|
|
94
|
+
|---|---|---|---|---|
|
|
95
|
+
| **账单当量比(大任务)** | 2.4× | ≤1.8×(拉伸) | account.mjs 加折算列(三分已有查询) | ④ 机制 + ①②③ 概率 |
|
|
96
|
+
| 扇出段 tokens | 42.3M | ≤32M(硬门) | 子会话聚合 | ④ 机制 + ①③ 概率 |
|
|
97
|
+
| 门禁轮次 | 9(S-F 病理)/ 2(稳态) | ≤2(硬门) | 进度库 | 战线 A |
|
|
98
|
+
| 大任务墙钟·不劣化 | 156min | ≤156min(硬门) | 会话时间戳 | 全体——「不拿墙钟换 token」可检化 |
|
|
99
|
+
| 大任务墙钟·进取 | 156min | ≤120min(拉伸) | 会话时间戳 + **阶段级拆账** | ①④+C-1,概率项无机制保票 |
|
|
100
|
+
| 主会话峰值单请求 | 377K | <250K | MAX() 查询 | 第 3 批 B3b——R5 只记录不判罚 |
|
|
101
|
+
| >150K 请求占比 | 81% | <50% | 计数查询 | 第 3 批 B3b——R5 只记录不判罚 |
|
|
102
|
+
| 防线回归 | — | 错键类案例仍被拦;审查钳仍达标 | **探针套件(第 1 批交付)** + transcript | 第 1 批探针 |
|
|
103
|
+
|
|
104
|
+
场景:50736b6ef / 53c67e02a 同基线重放(两 SHA 是对撞仓 multi-agent-platform 的基线、非本仓对象——跑前核那边基线与 worktree 卫生),小 ×2 + 大 ×1,版本钉死首步回显。**R5 时点 = 第 1+2 批完成后**;250K / 50% 两行押第 3 批 B3b,R5 只记录不判罚,第 3 批后复测。**2 跑取分布,不外推;提示词级项不达标即升级机制化(路径:CLI 截断注入/机械组装)。** 墙钟 ≤120min 无 per-item 机制预算——R5 必须落盘阶段级墙钟拆账(调研 / plan / execute 扇出 / verify / 归档 / 门禁等待),作为 R6 的预算基线,先测后诺(同 B3a 纪律)。
|
|
105
|
+
|
|
106
|
+
## 诚实边界
|
|
107
|
+
|
|
108
|
+
- B-①②③⑤ 全含概率性或前提验证,百分比是方向估计,唯一承诺是 R5 可测;
|
|
109
|
+
- 55% 的缓存体量差不可能清零——隔离上下文的语义就是重读,治理目标是「去冗余」不是「去重读」;
|
|
110
|
+
- 剩余 ~1.7× 账单差 + 墙钟差里,含交付厚度(输出 19% 差额)与独立审查的固定成本——这部分是定价,不是缺陷,对外口径已按此表述。
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
# 评审修订 v3.1(2026-09-21,外部评审采纳记录)
|
|
115
|
+
|
|
116
|
+
## 采纳并修订的六处
|
|
117
|
+
|
|
118
|
+
1. **B4a 改为 enrich handoff(已验证属实)**:`src/handoff.js` 已存在(113 行,`buildHandoff`/`nextStageSuggestion`),现产出为 session 导出 + 下一阶段建议的瘦包。C-2 第 2 批工作量修正为「进度库多抽几段进现有 buildHandoff」(Wave 状态 / 未决 blockers / 决策 ID / 下一步命令行,≤80 行封顶),**不是新命令立项**。
|
|
119
|
+
2. **R5 验收拆硬门/拉伸**:
|
|
120
|
+
- **硬门**(不达标即失败):扇出 ≤32M · 门禁轮次 ≤2 · 防线回归(错键类仍被拦 + 审查钳达标)· 大任务墙钟 ≤120min(稳态口径)
|
|
121
|
+
- **拉伸**(①②全中才承诺):账单当量 ≤1.8×
|
|
122
|
+
- 对外口径维持 1.7–1.9×;不再把拉伸当硬门。
|
|
123
|
+
3. **墙钟基线钉死**:比较一律用**稳态 156min**(门禁单轮重构口径),毛墙钟 185min 仅作背景。「额度事故不再发生」是并发帽的验收项(R5 零事故),不从基线剔除。
|
|
124
|
+
4. **判定路径统一显式勾掉**:gate verify PASS vs verify --done FAIL 的口径矛盾**已修**(61995a32:runGate verify 补 verify-lint,与 --done 同引擎同归属降档);tail 截断→失败明细稳定路径**已修**(794529e5)。两项归战线 A 待 R5 验收,第 1 批不重开。
|
|
125
|
+
5. **B-③ 加并发护栏**:plan-postcheck 增机械提醒——**并批后单 Wave 在飞子代理数 ≥ min(3, 该 Wave 任务数)**;batch 决策只在 plan 定,execute 不加推力。外推边界写明:S-F 5→2 batch/6M 是小任务证据;大任务 12 实现代理并批**收益在 token、成本在墙钟**,R5 大任务跑单独归因。
|
|
126
|
+
6. **B-④ 预期收窄 + 升第 1 批必达**:材料包只压「design/合同文档通读」,压不动「要改的源码本身」——与 B-① 互补但**不得双重算账**。
|
|
127
|
+
|
|
128
|
+
## 优先级调换(接受)
|
|
129
|
+
|
|
130
|
+
**第 1 批必达改为:B-④ 材料包扩面 + C-1(B1 返回契约 / B2 回收瘦身 / B3a 审计)+ B-③(plan 默认 + postcheck 护栏)**——机制确定收益优先于又一条 hint。**B-① 降级为仅保留 30min 验靶**,验证属实再排实现。
|
|
131
|
+
|
|
132
|
+
## 新增纪律(三条,全部采纳)
|
|
133
|
+
|
|
134
|
+
- **prompt 注入上限**:每加一段注入必须写明「替换哪段旧文」或配 CLI 截断上限——防优化文案自己吃掉 377K→250K 指标。
|
|
135
|
+
- **互斥实验标签**:①②④ 都声称「少读」,R5 至少 B-④ on/off 同基线各一跑,归因可分。
|
|
136
|
+
- **A 先于 B**:R5 小任务两跑**先判门禁 ≤2**,再谈扇出 tokens——门禁稳态前账单优化会被墙钟噪声淹没。
|
|
137
|
+
|
|
138
|
+
## B-⑤ 验收补一维(采纳)
|
|
139
|
+
|
|
140
|
+
A/B 双档除返工率外,加测**事实核验类工具调用密度**(联网搜真名 / 读 SDK d.ts 的次数)——错键故事里「会不会核验」比「会不会写完」更关键;便宜档核验密度显著下降即否决。
|
|
141
|
+
|
|
142
|
+
## 对反馈的一处澄清(非驳回)
|
|
143
|
+
|
|
144
|
+
反馈第 4 条「第 1 批缺确定 ROI 墙钟项」的时态已过:判定路径统一与 tail 稳定路径在评审前已提交(61995a32 / 794529e5),本次修订将其从隐含改为显式勾掉(见上第 4 条)。其余五处修订 + 优先级调换 + 三条纪律全部接受。
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
# 评审修订 v3.2(2026-09-21,第二外部评审采纳记录——验收协议三硬伤修复)
|
|
149
|
+
|
|
150
|
+
前置:本轮评审先核事实后评方案,承重声明全部属实——handoff.js 113 行(buildHandoff/nextStageSuggestion,src/handoff.js:23/48)、assembleStageReviewMaterials 复用面(review-material-pack.js,plan/execute/brainstorm 三处引用)、account.mjs 三分查询 + db.model_usage 本有 cache_creation/cache_read 列(折算列是小改)、review.json 稳定路径(src/index.js:664)、gate-value-audit 12 真拦/36 超时 34%/227 门禁、42.3M/156min 在 r4-final-report.html 落盘、三提交号(61995a32/954946ae/794529e5)在。方案地基为实,三红线与三纪律不动。与 v3.1 的纯追加不同,本次对 R5 验收表与执行顺序**就地重写**(表是操作性章节,留旧表加补丁会迫使读者自行对账),修订记录在此。
|
|
151
|
+
|
|
152
|
+
## 三处验收协议修复
|
|
153
|
+
|
|
154
|
+
1. **墙钟 ≤120min 从硬门降为拉伸,换入「不劣化 ≤156min」硬门**。依据:基线 156 本是门禁单轮重构口径(v3.1 第 3 条),门禁收益已折入基线;B-③ 明确不拿墙钟换 token,B-①/④/C-1 全为概率项——120 无任何 per-item 机制保票,硬门失败时无法区分「方案失效」与「归一化基线乐观」。不劣化硬门把「不拿墙钟换 token」从口号变成可检承诺;R5 落盘阶段级墙钟拆账(六段),R6 才有真预算基线。**硬门集合相应改定:扇出 ≤32M · 门禁轮次 ≤2 · 防线回归 · 墙钟不劣化 ≤156min(另:并发帽 R5 零事故维持);拉伸:账单当量 ≤1.8× + 墙钟进取 ≤120min。**对外口径同步。
|
|
155
|
+
2. **防线探针套件排入第 1 批**。「探针 + transcript」判法依赖的用例集原先不在任何批次——12 次真拦来自两个月 227 次历史门禁,R5 三跑自然撞不到。基于 verify-probes 基建(src/verify-probes.js 在场)增量造错键类 + 审查钳用例,硬门才有可执行判法。错键形态以 r4-final-report「错键生产 no-op、测试全绿掩护」为准。
|
|
156
|
+
3. **验收表增「依赖批次」列 + R5 时点钉死**。377K→<250K、81%→<50% 实押第 3 批 B3b(B3a 只审计不删)——R5 时点定为第 1+2 批完成后,此两行只记录不判罚,第 3 批后复测;消除「表行达标承诺」与「批次排期」的错位。
|
|
157
|
+
|
|
158
|
+
## 两处状态对账(操作性,非方案缺陷)
|
|
159
|
+
|
|
160
|
+
4. **战线 A「增量复用」状态存疑**:五项中四项已核已交(模块粒度 v3.24 在场 / fail-fast+lint 归属 83d91cd4 / 超时降档 2eba595c),唯「增量复用」在 src 与 r4-final-report 均无落码/定义痕迹,changes/ 亦无活跃变更;ROADMAP 登记的延后项「探针增量缓存」(quick-4af1acc3 D②:失效面广需独立失效契约)疑为同物——若同物则已延后,应从战线 A 摘出重归属。R5 前与承办会话对齐,勿按「已在办」默认计入(已同步批注到战线 A 验收点)。
|
|
161
|
+
5. **重放基线在对撞仓**:50736b6ef / 53c67e02a 经 git cat-file 验证非本仓对象;worktree 路径实证基线在 multi-agent-platform 仓——R5 跑前核那边基线 SHA 与 worktree 卫生(防未来提交泄露规则沿用 R4 prompt 既有一套)。
|
|
162
|
+
|
|
163
|
+
## 一处实现注记
|
|
164
|
+
|
|
165
|
+
6. **B-④ 装配顺序契约**(已写入 B-④ 条目):统一前缀的缓存命中依赖稳定段先行——跨任务稳定内容(design 通摘/接口签名)在前、任务专属内容(任务卡/变更面摘录)在后;混排则任务差异打断前缀,面值收益折半。
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>sillyspec × OpenSpec 对撞结果</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
--ink:#1a2233; --sub:#64708a; --line:#e4e8ef; --card:#fff;
|
|
10
|
+
--green:#16a34a; --green-bg:#f0fdf4; --green-bd:#bbe7c9;
|
|
11
|
+
--red:#dc2626; --red-bg:#fef2f2; --red-bd:#f5c2c2;
|
|
12
|
+
--amber:#d97706; --amber-bg:#fffbeb; --amber-bd:#f3ddad;
|
|
13
|
+
--blue:#2563eb; --blue-bg:#eff6ff;
|
|
14
|
+
--mono:"Cascadia Code",Consolas,monospace;
|
|
15
|
+
}
|
|
16
|
+
*{box-sizing:border-box;margin:0;padding:0}
|
|
17
|
+
body{font-family:"Microsoft YaHei UI","PingFang SC","Segoe UI",sans-serif;background:#f2f4f7;color:var(--ink);font-size:15px;line-height:1.6;padding:26px 18px 70px}
|
|
18
|
+
.wrap{max-width:1000px;margin:0 auto}
|
|
19
|
+
header{background:linear-gradient(135deg,#0f172a,#1e3a5f);color:#fff;border-radius:14px;padding:26px 30px;margin-bottom:16px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px}
|
|
20
|
+
header h1{font-size:22px}
|
|
21
|
+
header p{color:#aebbd2;font-size:13px;margin-top:4px}
|
|
22
|
+
header .tags{font-size:12px;color:#8ea3c4;text-align:right}
|
|
23
|
+
/* 结论条 */
|
|
24
|
+
.verdict{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:16px}
|
|
25
|
+
.chip{border-radius:10px;padding:12px 14px;font-size:13.5px;font-weight:600;border:1px solid;text-align:center}
|
|
26
|
+
.chip small{display:block;font-weight:400;font-size:11.5px;color:var(--sub);margin-top:2px}
|
|
27
|
+
.chip.g{background:var(--green-bg);border-color:var(--green-bd);color:#14532d}
|
|
28
|
+
.chip.r{background:var(--red-bg);border-color:var(--red-bd);color:#7f1d1d}
|
|
29
|
+
.chip.a{background:var(--amber-bg);border-color:var(--amber-bd);color:#78350f}
|
|
30
|
+
section{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:20px 24px;margin-bottom:16px}
|
|
31
|
+
h2{font-size:17px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
|
|
32
|
+
h2 .n{background:var(--ink);color:#fff;border-radius:7px;font-size:12px;padding:1px 8px}
|
|
33
|
+
h2.win{color:#14532d} h2.gap{color:#7f1d1d}
|
|
34
|
+
/* 数字对比 */
|
|
35
|
+
.duel{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
|
36
|
+
.duel .col{border:1px solid var(--line);border-radius:10px;overflow:hidden}
|
|
37
|
+
.duel .col .hd{padding:8px;text-align:center;font-weight:700;font-size:14px;color:#fff}
|
|
38
|
+
.col.silly .hd{background:#1d4ed8} .col.open .hd{background:#b45309}
|
|
39
|
+
.duel .row{display:flex;justify-content:space-between;padding:8px 14px;border-top:1px solid var(--line);font-size:13.5px}
|
|
40
|
+
.duel .row b{font-family:var(--mono);font-size:15px}
|
|
41
|
+
.duel .row.hl b{color:var(--blue)} .col.open .row.hl b{color:var(--amber)}
|
|
42
|
+
.duel .foot{padding:6px 14px 10px;font-size:11.5px;color:var(--sub);border-top:1px dashed var(--line)}
|
|
43
|
+
.cols2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
|
44
|
+
@media(max-width:720px){.duel,.cols2{grid-template-columns:1fr}}
|
|
45
|
+
/* 亮点/差距卡 */
|
|
46
|
+
.cards{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
|
47
|
+
@media(max-width:720px){.cards{grid-template-columns:1fr}}
|
|
48
|
+
.card{border-radius:10px;padding:14px 16px;border:1px solid}
|
|
49
|
+
.card h3{font-size:15px;margin-bottom:6px}
|
|
50
|
+
.card p{font-size:13px;color:#3a465c}
|
|
51
|
+
.card .big{font-size:26px;font-weight:800;font-family:var(--mono);line-height:1.2;margin-bottom:4px}
|
|
52
|
+
.card.win{background:linear-gradient(180deg,#f4fdf6,#fff);border-color:var(--green-bd)}
|
|
53
|
+
.card.win h3{color:#14532d} .card.win .big{color:var(--green)}
|
|
54
|
+
.card.gap{background:linear-gradient(180deg,#fef5f5,#fff);border-color:var(--red-bd)}
|
|
55
|
+
.card.gap h3{color:#7f1d1d} .card.gap .big{color:var(--red)}
|
|
56
|
+
code{font-family:var(--mono);background:#eef1f6;border-radius:4px;padding:0 5px;font-size:12px;color:#b3244a}
|
|
57
|
+
/* 错键对比 */
|
|
58
|
+
.vs{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:10px}
|
|
59
|
+
.vs .box{border-radius:10px;padding:12px 14px;font-size:13px;border:1px solid var(--line)}
|
|
60
|
+
.vs .box b{display:block;font-size:13.5px;margin-bottom:4px}
|
|
61
|
+
.vs .ok{background:var(--green-bg);border-color:var(--green-bd)} .vs .bad{background:var(--red-bg);border-color:var(--red-bd)}
|
|
62
|
+
/* 条形图 */
|
|
63
|
+
.bar-row{margin:12px 0}
|
|
64
|
+
.bar-row .lbl{font-size:12.5px;font-weight:600;display:flex;justify-content:space-between;margin-bottom:3px}
|
|
65
|
+
.bar-row .lbl span:last-child{color:var(--sub);font-family:var(--mono)}
|
|
66
|
+
.bar{display:flex;height:26px;border-radius:6px;overflow:hidden;color:#fff;font-size:10.5px;font-family:var(--mono)}
|
|
67
|
+
.seg{display:flex;align-items:center;justify-content:center;min-width:0;white-space:nowrap;overflow:hidden}
|
|
68
|
+
.s1{background:#3b82f6}.s2{background:#8b5cf6}.s3{background:#f59e0b}.s4{background:#ef4444}.s5{background:#0ea5e9}.s6{background:#10b981}
|
|
69
|
+
.legend{display:flex;flex-wrap:wrap;gap:8px 16px;font-size:11.5px;color:var(--sub);margin:4px 0 8px}
|
|
70
|
+
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}
|
|
71
|
+
.note{font-size:12px;color:var(--sub);margin-top:6px}
|
|
72
|
+
.tok{font-size:11.5px;color:var(--sub);font-family:var(--mono);margin:2px 0 3px}
|
|
73
|
+
.tok b{color:var(--ink);font-weight:600}
|
|
74
|
+
.sample{border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:#fafbfd}
|
|
75
|
+
.sample .cap{font-size:12.5px;font-weight:700;margin-bottom:2px}
|
|
76
|
+
.sample .cap small{font-weight:400;color:var(--sub)}
|
|
77
|
+
.sample pre{font-family:var(--mono);font-size:11.5px;line-height:1.6;color:#333d52;white-space:pre-wrap;word-break:break-all;margin-top:6px}
|
|
78
|
+
.sample pre em{color:#b3244a;font-style:normal}
|
|
79
|
+
.tbl{width:100%;border-collapse:collapse;font-size:13px;margin:10px 0 4px}
|
|
80
|
+
.tbl th,.tbl td{border:1px solid var(--line);padding:7px 12px;text-align:left}
|
|
81
|
+
.tbl th.cat{background:#f0f3f8;width:88px;font-size:12.5px}
|
|
82
|
+
.tbl th.a{background:#1d4ed8;color:#fff} .tbl th.b{background:#b45309;color:#fff}
|
|
83
|
+
.tbl td.a{background:#f8faff;width:41%} .tbl td.b{background:#fffdf5;width:41%}
|
|
84
|
+
.tbl .y{color:var(--green);font-weight:700} .tbl .n{color:#b6bfce} .tbl .w{color:var(--red);font-weight:700}
|
|
85
|
+
.side-hd{padding:6px;text-align:center;font-weight:700;font-size:13px;color:#fff;border-radius:8px}
|
|
86
|
+
.side-hd.a{background:#1d4ed8} .side-hd.b{background:#b45309}
|
|
87
|
+
.stack{display:flex;flex-direction:column;gap:10px;margin-top:10px}
|
|
88
|
+
.one{background:var(--blue-bg);border:1px solid #c3d7fb;border-radius:10px;padding:14px 18px;font-size:15px;font-weight:600;text-align:center}
|
|
89
|
+
.small{font-size:11.5px;color:var(--sub)}
|
|
90
|
+
footer{text-align:center;color:var(--sub);font-size:11.5px;margin-top:22px}
|
|
91
|
+
</style>
|
|
92
|
+
</head>
|
|
93
|
+
<body>
|
|
94
|
+
<div class="wrap">
|
|
95
|
+
|
|
96
|
+
<header>
|
|
97
|
+
<div>
|
|
98
|
+
<h1>sillyspec × OpenSpec 对撞结果</h1>
|
|
99
|
+
<p>同任务 · 同基线 · 全新会话 · 同机同模型 —— 受控对照</p>
|
|
100
|
+
</div>
|
|
101
|
+
<div class="tags">2026-09-20/21<br>大任务 + 小任务 · 5 会话<br>db 硬账 + 全量记录深读</div>
|
|
102
|
+
</header>
|
|
103
|
+
|
|
104
|
+
<!-- 一页结论 -->
|
|
105
|
+
<div class="verdict">
|
|
106
|
+
<div class="chip g">小任务成本真持平<small>tokens 8.97 vs 9.33M · 账单当量 ~1.0×</small></div>
|
|
107
|
+
<div class="chip g">全场唯一硬缺陷在对方<small>错键生产 no-op,测试全绿掩护</small></div>
|
|
108
|
+
<div class="chip g">交付厚度 2.4×<small>2,909 vs 1,193 行测试</small></div>
|
|
109
|
+
<div class="chip r">墙钟慢 1.3× / 2×<small>差距全在非模型时间</small></div>
|
|
110
|
+
<div class="chip r">子代理扇出贵<small>43% tokens / 68% 请求</small></div>
|
|
111
|
+
<div class="chip a">定位:用等待换防线<small>砍仪式=砍防线</small></div>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<!-- ① 数据 -->
|
|
115
|
+
<section>
|
|
116
|
+
<h2><span class="n">1</span>核心数据对比</h2>
|
|
117
|
+
<div class="cols2">
|
|
118
|
+
<div>
|
|
119
|
+
<p style="font-size:13px;color:var(--sub);margin-bottom:6px"><b style="color:var(--ink)">小任务</b> —— 给 Claude 的自动压缩加三个界面开关<span class="small">(autocompact 三键 · sillyspec 走 quick 轻通道)</span></p>
|
|
120
|
+
<div class="duel">
|
|
121
|
+
<div class="col silly"><div class="hd">sillyspec</div>
|
|
122
|
+
<div class="row hl"><span>墙钟</span><b>28min*</b></div>
|
|
123
|
+
<div class="row"><span>tokens 新入/缓存/输出</span><b>0.2M / 8.7M / 0.05M</b></div>
|
|
124
|
+
<div class="row"><span>请求</span><b>87</b></div>
|
|
125
|
+
<div class="row"><span>代码量</span><b>+516 行</b></div>
|
|
126
|
+
<div class="row"><span>新增测试</span><b>22</b></div>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="col open"><div class="hd">OpenSpec</div>
|
|
129
|
+
<div class="row hl"><span>墙钟</span><b>21.5min</b></div>
|
|
130
|
+
<div class="row"><span>tokens 新入/缓存/输出</span><b>0.1M / 9.2M / 0.05M</b></div>
|
|
131
|
+
<div class="row"><span>请求</span><b>85</b></div>
|
|
132
|
+
<div class="row"><span>代码量</span><b>+539 行</b></div>
|
|
133
|
+
<div class="row"><span>新增测试</span><b>15</b></div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
<div>
|
|
138
|
+
<p style="font-size:13px;color:var(--sub);margin-bottom:6px"><b style="color:var(--ink)">大任务</b> —— 把 AI 干活的日志变成可回放的聊天记录<span class="small">(会话回放 · 跨三端 · sillyspec 走全流程)</span></p>
|
|
139
|
+
<div class="duel">
|
|
140
|
+
<div class="col silly"><div class="hd">sillyspec</div>
|
|
141
|
+
<div class="row hl"><span>墙钟</span><b>156min*</b></div>
|
|
142
|
+
<div class="row"><span>tokens 新入/缓存/输出</span><b>2.4M / 96.1M / 0.64M</b></div>
|
|
143
|
+
<div class="row"><span>请求</span><b>767</b></div>
|
|
144
|
+
<div class="row"><span>代码(源码+测试)</span><b>7.2K 行</b></div>
|
|
145
|
+
<div class="row"><span>流程文档</span><b>10.9K 行<span style="font-size:11px;color:var(--sub)">(84% CLI 生成)</span></b></div>
|
|
146
|
+
<div class="row"><span>子代理 / 测试行</span><b>19 / 2,909</b></div>
|
|
147
|
+
</div>
|
|
148
|
+
<div class="col open"><div class="hd">OpenSpec</div>
|
|
149
|
+
<div class="row hl"><span>墙钟</span><b>80min</b></div>
|
|
150
|
+
<div class="row"><span>tokens 新入/缓存/输出</span><b>0.3M / 51.6M / 0.14M</b></div>
|
|
151
|
+
<div class="row"><span>请求</span><b>251</b></div>
|
|
152
|
+
<div class="row"><span>代码(源码+测试)</span><b>3.3K 行</b></div>
|
|
153
|
+
<div class="row"><span>流程文档</span><b>0.6K 行<span style="font-size:11px;color:var(--sub)">(全 agent 写)</span></b></div>
|
|
154
|
+
<div class="row"><span>子代理 / 测试行</span><b>0 / 1,193</b></div>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
<p class="small">* sillyspec 墙钟为稳态口径(门禁单轮);tokens / 请求 / 代码量两侧均实测。模型时间两侧同量级(13.3 vs 13.1min)——<b>差距不在模型,在流程</b>。<b>tokens 三分(新输入 / 缓存读 / 输出)</b>:大任务 2.4/96.1/0.64M vs 0.3/51.6/0.14M。按计价折算(新入 1× / 缓存 ~0.1× / 输出 3–5×):<b>大任务账单当量比 ≈ 2.4×(区间 2.1–2.8×),略高于面值 1.9×</b>——两侧命中率都 97%+,缓存救不了比值,且输出差恰好落在最贵计价档。差额构成:<b>缓存体量差 55% + 冷启动新输入 26%(扇出签名,子代理新鲜上下文首读打不中缓存)+ 输出差 19%</b>;输出 4.6× 中 77%(0.49M)是子代理代码/测试产出(交付厚度),主会话编排输出仅 0.14M。小任务账单当量 ~1.0×(三段 0.2/8.7/0.05 vs 0.1/9.2/0.05,真持平)。<br>大任务构成拆解:手写源码 4.3K vs 2.1K(功能对齐,我们组件更厚)· 测试 2.9K vs 1.2K · 流程文档 10.9K vs 0.6K——但其中 <b>84%(8.8K)是 CLI 机械生成的 diff 快照(scope-audit.patch,零 token)</b>,agent 实写文档仅 ~1.75K vs 0.6K(2.9×,与代码 2× 同量级);写作窗口 token 4.2M vs 1.5M,<b>只占大任务 token 差的 ~6%</b>——token 差主因是执行段子代理扇出,不是写文档;小任务两侧基本持平。</p>
|
|
160
|
+
<p class="small"><b>任务画像</b>:小任务=照既有先例加三键的局部修补(简单,轻通道的适用对象);大任务=三端五层契约对齐(daemon→RPC→backend→生成类型→前端),<b>难度在广度与一致性、不在单点深度</b>——每条字段映射都是一次「错键型」失败的机会,防线价值随接缝数放大。</p>
|
|
161
|
+
</section>
|
|
162
|
+
|
|
163
|
+
<!-- ② 亮点 -->
|
|
164
|
+
<section>
|
|
165
|
+
<h2 class="win"><span class="n">2</span>我们的亮点</h2>
|
|
166
|
+
<div class="cards">
|
|
167
|
+
<div class="card win">
|
|
168
|
+
<div class="big">1 vs 0</div>
|
|
169
|
+
<h3>全场唯一硬缺陷,出现在对方侧</h3>
|
|
170
|
+
<p>对方把第三键写错(<code>autoCompactPreCompute</code>):<b>27/27 测试全绿 → 干净归档 → 错键进规格库</b> → 预计算开关生产 no-op。我们的 agent 联网核验官方文档后落码,多花 2.5 分钟拦下静默缺陷。</p>
|
|
171
|
+
</div>
|
|
172
|
+
<div class="card win">
|
|
173
|
+
<div class="big">同一个错误</div>
|
|
174
|
+
<h3>两边 agent 都猜了错键名——差别只在验证步</h3>
|
|
175
|
+
<p>深读记录实证:我们的 agent <b>最初猜的也是那个错名</b>,但先搜官方文档、拿到真名才写码。<b>错误生成是确定性的,拦截是结构性的</b>——这是流程属性,不是运气。</p>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="card win">
|
|
178
|
+
<div class="big">写码之前</div>
|
|
179
|
+
<h3>独立设计审查拦下架构级错误(B1)</h3>
|
|
180
|
+
<p>初版设计与 registry 源码契约矛盾,审查员独立核对源码后首轮打回、强制改设计。<b>零代码浪费</b>。对方流程无任何独立审查环节。</p>
|
|
181
|
+
</div>
|
|
182
|
+
<div class="card win">
|
|
183
|
+
<div class="big">4 道防线</div>
|
|
184
|
+
<h3>缺陷类覆盖:结构化 vs 全靠自觉</h3>
|
|
185
|
+
<p>域事实核验 · 设计-源码一致性 · 声明-实测对账 · 资产正典校验,四类各有机制;对方四类全押 agent 自觉。历史数据:测试门两个月 <b>12 次真拦「声称完成但测试挂」</b>。</p>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="card win">
|
|
188
|
+
<div class="big">可检索资产</div>
|
|
189
|
+
<h3>做完即沉淀</h3>
|
|
190
|
+
<p>4 条决策 + 7 条 FR 索引 + ROADMAP + 模块文档 + 归档 15 件——<b>下次变更直接复用</b>。对方的规格库同样留资产,但本轮把错键典藏成了「正典」。</p>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="card win">
|
|
193
|
+
<div class="big">真并发</div>
|
|
194
|
+
<h3>机制不是纸面</h3>
|
|
195
|
+
<p>Wave 内 4 个子代理同窗并行(时间戳实证);审查请求钳 3/3 阶段达标(11/6/6 ≤ 12/10/15);进度库 / 边界审计 / 防作弊全程有效,<b>双方 agent 零违反</b>。</p>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
<div class="callout" style="background:var(--blue-bg);border:1px solid #c3d7fb;border-radius:10px;padding:12px 16px;margin-top:12px;font-size:13px">
|
|
199
|
+
<b style="display:block;margin-bottom:4px">测试逻辑对比:两边测试都是 agent 写的,差在依据链与强制面</b>
|
|
200
|
+
🅰 <b>测试=契约的执行形态</b>:requirements 的 GWT 场景直接翻译成断言(如「230000 成功标准场景」用例)· 任务卡写死 verify 命令 · 存量测试当契约(改契约必须显式);五层执行:子代理自跑 → 主代理复跑 → <b>QA 独立复跑全量</b> → <b>verify 门禁机器实测</b> → 相邻面回归。<br>
|
|
201
|
+
🅱 <b>测试=agent 自觉</b>:specs 与测试无强制映射(validate 只查格式),写多少凭理解、跑不跑无人拦——全绿可能是<b>自指测试</b>(断言自己写的实现,错键照样 27/27)。<br>
|
|
202
|
+
<span class="small">诚实边界:测试防「实现与声明不符」,不防「声明与事实不符」——若我们写错键名,13 个用例同样全绿。拦错键的是<b>联网核验</b>不是测试:测试管一致性,核验管事实性。</span>
|
|
203
|
+
</div>
|
|
204
|
+
</section>
|
|
205
|
+
|
|
206
|
+
<!-- ③ 产物与资产 -->
|
|
207
|
+
<section>
|
|
208
|
+
<h2 class="win"><span class="n">3</span>执行完成后,你拿到什么(产物与项目资产)</h2>
|
|
209
|
+
<table class="tbl">
|
|
210
|
+
<tr><th class="cat">资产</th><th class="a">🅰 sillyspec</th><th class="b">🅱 OpenSpec</th></tr>
|
|
211
|
+
<tr><td class="cat">决策知识</td><td class="a"><span class="y">✓</span> 决策 <b>4 条</b>(含理由 / 故障面 / 退役判据)</td><td class="b"><span class="n">—</span></td></tr>
|
|
212
|
+
<tr><td class="cat">特性索引</td><td class="a"><span class="y">✓</span> FR <b>7 条</b>(承接链可回溯)</td><td class="b"><span class="n">—</span></td></tr>
|
|
213
|
+
<tr><td class="cat">行为规格</td><td class="a"><span class="y">✓ 替代形态</span> FR 索引 + 模块卡(GWT 场景体,台账式承接链)</td><td class="b"><span class="y">✓</span> 活规格 <b>3 capability · 215 行</b> WHEN/SHALL</td></tr>
|
|
214
|
+
<tr><td class="cat">路线 / 文档</td><td class="a"><span class="y">✓</span> ROADMAP 里程碑 + 模块文档 ×2</td><td class="b"><span class="n">—</span></td></tr>
|
|
215
|
+
<tr><td class="cat">变更账目</td><td class="a"><span class="y">✓</span> 四字段账目 + <b>sha256</b> 范围快照</td><td class="b">git 提交历史</td></tr>
|
|
216
|
+
<tr><td class="cat">过程留痕</td><td class="a"><span class="y">✓</span> 归档 <b>15 件</b> + verify 双证 + 审查 verdict</td><td class="b">归档变更夹</td></tr>
|
|
217
|
+
<tr><td class="cat">下次消费</td><td class="a"><span class="y">✓</span> 自动注入下一次变更的上下文</td><td class="b">靠 agent 主动读</td></tr>
|
|
218
|
+
<tr><td class="cat">正确性</td><td class="a"><span class="y">✓</span> 来源经实证核验</td><td class="b"><span class="w">⚠</span> 本轮错键写入 5 条 requirement</td></tr>
|
|
219
|
+
</table>
|
|
220
|
+
<p class="small">形态差异:OpenSpec 活规格=<b>改写式正典</b>(后续变更直接改文本,像 API 文档好读,但改错即正典错);sillyspec FR 索引=<b>台账式承接链</b>(追加+取代,演进史可见,当前态靠 active 过滤)。</p>
|
|
221
|
+
<h3 style="font-size:14px;margin:14px 0 0">实物抽样(两条任务的真实产物原文摘录)</h3>
|
|
222
|
+
<div class="vs" style="margin-top:0">
|
|
223
|
+
<div class="stack">
|
|
224
|
+
<div class="side-hd a">🅰 sillyspec 实物</div>
|
|
225
|
+
<div class="sample"><div class="cap">📐 决策库条目 <small>· 大任务 D-001,归档自动提炼</small></div>
|
|
226
|
+
<pre>## D-001@v1 回放形态=前端适配器复用 TurnTimeline 真组件(方案 A)
|
|
227
|
+
状态:implemented | 变更:2026-09-20-r4-session-replay | 最近确认:66636108c
|
|
228
|
+
理由:任务书点名「适配器 → TurnTimeline 真组件复用」,用户已定案
|
|
229
|
+
故障面:适配器与 TurnTimeline 契约耦合;靠既有测试族守护
|
|
230
|
+
退役判据:多 harness 形态差异大到 SessionTurnView 表达不下 → 复议方案 B</pre></div>
|
|
231
|
+
<div class="sample"><div class="cap">🔢 FR 索引条目 <small>· 大任务 FR-host-fs-handler-002(GWT 行为场景)</small></div>
|
|
232
|
+
<pre>## FR-host-fs-handler-002 轮次与 token 可见
|
|
233
|
+
状态:active | 最近确认:66636108c(归档时 HEAD)
|
|
234
|
+
场景:Given 数据源含 usage/turn_id(zcode/claude-code)——
|
|
235
|
+
Then 每轮轮尾显示输入/输出 token 徽标,头部显示会话累计;
|
|
236
|
+
无 token 数据源(cursor-agent/老 daemon)→ 显示「未知」
|
|
237
|
+
全文回链:changes/archive/…/requirements.md#FR-02(承接链可翻旧账)</pre></div>
|
|
238
|
+
<div class="sample"><div class="cap">📒 quick 结构化账目 <small>· 小任务 ql-20260920-007-ec47</small></div>
|
|
239
|
+
<pre>## ql-20260920-007-ec47 | claude 引擎 autocompact 三键 provider 级配置
|
|
240
|
+
状态:已完成 | 文件:8 行括注
|
|
241
|
+
需求:三键 provider 级配置(白名单透传 + 前端表单 + 文档)
|
|
242
|
+
根因:settings_config→白名单→settings.json 链路不含 autocompact 键,
|
|
243
|
+
配置写了也不生效;用户只能手改数据库 JSON
|
|
244
|
+
方案:TOP_LEVEL_KEYS 加三键 + AUTO_COMPACT_VALIDATORS 值守护…
|
|
245
|
+
结果:门禁实测 test 545.5s + lint 双 PASS;定向 31/31 + 相邻 93/93
|
|
246
|
+
+ 范围快照 ql-*.patch(sha256 锚定,可回放当时 diff)</pre></div>
|
|
247
|
+
</div>
|
|
248
|
+
<div class="stack">
|
|
249
|
+
<div class="side-hd b">🅱 OpenSpec 实物</div>
|
|
250
|
+
<div class="sample"><div class="cap">📘 活规格条目(正面)<small>· 大任务 agent-log-parsers</small></div>
|
|
251
|
+
<pre>openspec/specs/agent-log-parsers/spec.md
|
|
252
|
+
### Requirement: 归一化消息携带轮次与用量元数据
|
|
253
|
+
每条消息 SHALL 携带 turn_id / usage(五项)/ model / duration_ms /
|
|
254
|
+
sender,全部可缺省,缺失按「未知」呈现,不影响既有九字段
|
|
255
|
+
#### Scenario: 数据源无用量时元字段为 null
|
|
256
|
+
WHEN 数据源不含 token(如 cursor-agent transcript)
|
|
257
|
+
THEN 全部段 usage=null,RPC totalUsage=null</pre></div>
|
|
258
|
+
<div class="sample"><div class="cap">🚫 活规格条目(反例)<small>· 小任务 spec.md 原文,4 处错键</small></div>
|
|
259
|
+
<pre>openspec/specs/claude-autocompact-config/spec.md
|
|
260
|
+
- `autoCompactPreCompute`:布尔(压缩摘要预计算开关) ← <em>键名错误</em>
|
|
261
|
+
- WHEN 配 {"autoCompactPreCompute": true}
|
|
262
|
+
THEN settings.json 含该键 ← <em>正确键:precomputeCompactionEnabled</em>
|
|
263
|
+
5 条 requirement 把错键记为系统行为契约——
|
|
264
|
+
后续变更将信任并传播它(错误被典藏为「正典」)</pre></div>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
<div class="one" style="margin-top:12px">都真资产:<b>sillyspec 沉淀「为什么 + 下次注意什么」并自动注入</b> · OpenSpec 沉淀「系统该怎么表现」 · 行为规格两边都有(台账式 vs 正典式)——但<b>资产带错,复利变负</b>(见右侧实物 ⚠)</div>
|
|
268
|
+
</section>
|
|
269
|
+
|
|
270
|
+
<!-- ④ 差距 -->
|
|
271
|
+
<section>
|
|
272
|
+
<h2 class="gap"><span class="n">4</span>目前的差距(不回避)</h2>
|
|
273
|
+
<div class="cards">
|
|
274
|
+
<div class="card gap">
|
|
275
|
+
<div class="big">1.3× / 2×</div>
|
|
276
|
+
<h3>墙钟落后(小 / 大任务)</h3>
|
|
277
|
+
<p>28 vs 21.5min;156 vs 80min。模型算力同量级,<b>差距全部在非模型时间</b>——门禁 + 编排等待,见下节拆解。</p>
|
|
278
|
+
</div>
|
|
279
|
+
<div class="card gap">
|
|
280
|
+
<div class="big">43% / 68%</div>
|
|
281
|
+
<h3>子代理扇出的成本倍增</h3>
|
|
282
|
+
<p>19 个子代理各自重建上下文,吃掉 42.3M tokens(43%)+ 522 请求(68%)。但这笔钱同时是<b>上下文保险</b>:每个子代理新鲜窗口(峰值 219K、用完即释),实现体量不进主会话——对方单会话上下文线性涨,爆了靠 auto-compact 硬扛(压缩丢细节)。<br><b>诚实注</b>:我们的主会话峰值 377K 反高于对方 317K——编排侧自己也会胖,超大任务需派发瘦身。</p>
|
|
283
|
+
</div>
|
|
284
|
+
<div class="card gap">
|
|
285
|
+
<div class="big">~60%</div>
|
|
286
|
+
<h3>大任务时间在等待</h3>
|
|
287
|
+
<p>子代理执行 / 门禁运行 / 审查回收占六成墙钟,主代理生成不足三分之一。<b>慢=编排深度</b>,但对外表现就是慢。</p>
|
|
288
|
+
</div>
|
|
289
|
+
<div class="card gap">
|
|
290
|
+
<div class="big">40% 假拦</div>
|
|
291
|
+
<h3>门禁噪声真实存在(历史)</h3>
|
|
292
|
+
<p>两个月 106 次门禁失败中:真拦 12、超时 36、环境 6。治理方向已定:<b>按触碰模块收敛范围</b>(文件级会漏真拦,有实证)+ 超时帽。</p>
|
|
293
|
+
</div>
|
|
294
|
+
</div>
|
|
295
|
+
<div class="one" style="margin-top:12px">差距定性:等待与假拦是<b>优化项</b>;审查与扇出是<b>防线的价格</b>——砍掉它=砍掉第 2 节的亮点。当前策略:保防线,砍等待。</div>
|
|
296
|
+
<div class="callout" style="background:var(--blue-bg);border:1px solid #c3d7fb;border-radius:10px;padding:12px 16px;margin-top:10px;font-size:13px">
|
|
297
|
+
<b style="display:block;margin-bottom:4px">扇出优化路线(砍冗余读取,不砍隔离与独立审查)</b>
|
|
298
|
+
① 读取范围约束——allowed_paths 兼作读范围 + symbol-impact 符号锚点注入(直打 task-08 型 8.6M over-reading)<br>
|
|
299
|
+
② 调研消化物共享——探索摘要落盘,实现子代理读两页 digest 替代重读源码(调研段 9.4M → ~5M)<br>
|
|
300
|
+
③ batch 激进化——R4-S-F 实证 5 任务 2 batch 仅 6M:文件正交即并批,摊平 design/plan 重复重建<br>
|
|
301
|
+
④ 派发材料包扩展——复用审查侧 assembleStageReviewMaterials 有界组装基建<br>
|
|
302
|
+
⑤ 子代理模型分级——实现跑便宜档、审查保持旗舰(砍账单不砍 token)<br>
|
|
303
|
+
<span class="small">预期 ①+②+③ 把子代理段 42M → 20-25M,大任务 99M → ~78M(差距 1.9×→~1.5×);剩余差额=上下文保险 + 独立审查的价格。</span>
|
|
304
|
+
</div>
|
|
305
|
+
</section>
|
|
306
|
+
|
|
307
|
+
<!-- ④ 时间去哪了 -->
|
|
308
|
+
<section>
|
|
309
|
+
<h2><span class="n">5</span>时间去哪了(时间戳级分解)</h2>
|
|
310
|
+
<div class="legend">
|
|
311
|
+
<span><i class="s1"></i>探索</span><span><i class="s2"></i>实现+定向测试</span><span><i class="s3"></i>编排/子代理</span><span><i class="s4"></i>门禁</span><span><i class="s5"></i>独立审查</span><span><i class="s6"></i>收尾</span>
|
|
312
|
+
</div>
|
|
313
|
+
<div class="bar-row"><div class="lbl"><span>小任务 · OpenSpec</span><span>21.5min</span></div>
|
|
314
|
+
<div class="tok">⚡ 探索 <b>2.0M</b> · 四件套 <b>1.3M</b> · 实现 <b>4.9M</b> · 归档 <b>1.0M</b></div>
|
|
315
|
+
<div class="bar" style="width:77%"><div class="seg s1" style="width:28%">探索 6</div><div class="seg s2" style="width:14%">四件套 3</div><div class="seg s3" style="width:38%">实现 8</div><div class="seg s6" style="width:20%">归档 4.5</div></div></div>
|
|
316
|
+
<div class="bar-row"><div class="lbl"><span>小任务 · sillyspec quick</span><span>28min</span></div>
|
|
317
|
+
<div class="tok">⚡ 引导+核验 <b>2.1M</b> · 实现 <b>4.4M</b> · 门禁期 <b>1.3M</b> · 收尾 <b>1.2M</b></div>
|
|
318
|
+
<div class="bar"><div class="seg s1" style="width:22%">核验 6</div><div class="seg s2" style="width:32%">实现 9</div><div class="seg s4" style="width:36%">门禁 10</div><div class="seg s6" style="width:10%">收尾 3</div></div></div>
|
|
319
|
+
<p class="note">小任务差 6.5min ≈ <b>一轮门禁 + 域事实核验</b>——正是两道防线的价格。<b>quick 无四件套=轻通道设计</b>:无落盘设计决策的小修补不写流程文档,代之以 CLI 合成的四字段账目(近零写作成本,含在收尾段);对方无论任务多小都写四件套(3min / 1.3M)。(组内同尺度,条长∝墙钟;⚡为各阶段实测 tokens)</p>
|
|
320
|
+
<div class="bar-row"><div class="lbl"><span>大任务 · OpenSpec</span><span>80min</span></div>
|
|
321
|
+
<div class="tok">⚡ 探查 <b>5.6M</b> · 四件套 <b>1.5M</b> · 单会话实现 <b>42.6M</b> · 归档 <b>2.2M</b></div>
|
|
322
|
+
<div class="bar" style="width:51%"><div class="seg s1" style="width:24%">探查 19</div><div class="seg s2" style="width:4%">3</div><div class="seg s3" style="width:68%">单会话实现+回归 55</div><div class="seg s6" style="width:4%">3</div></div></div>
|
|
323
|
+
<div class="bar-row"><div class="lbl"><span>大任务 · sillyspec</span><span>156min</span></div>
|
|
324
|
+
<div class="tok">⚡ 调研 <b>10.6M</b> · 四件套 <b>4.2M</b> · 审查 <b>7.8M</b> · 六波执行(含子代理)<b>56.6M</b> · verify+收尾 <b>19.9M</b></div>
|
|
325
|
+
<div class="bar"><div class="seg s1" style="width:13%">调研 20</div><div class="seg s2" style="width:13%">四件套 20</div><div class="seg s5" style="width:11%">审查 17</div><div class="seg s3" style="width:46%">六波执行 73</div><div class="seg s4" style="width:11%">门禁 17</div><div class="seg s6" style="width:13%">收尾 20</div></div></div>
|
|
326
|
+
<p class="note">大任务差 76min = 审查 17 + 门禁 17(<b>质量溢价</b>)+ 编排开销 ~42(<b>扇出成本,优化候选</b>)。(组内同尺度,条长∝墙钟;⚡为各阶段实测 tokens——sillyspec 执行段 56.6M 里约 42M 是 19 个子代理的上下文重建,见差距卡 43%)</p>
|
|
327
|
+
</section>
|
|
328
|
+
|
|
329
|
+
<!-- ⑤ 一句话 -->
|
|
330
|
+
<section>
|
|
331
|
+
<h2><span class="n">6</span>一句话总结与选型</h2>
|
|
332
|
+
<div class="vs">
|
|
333
|
+
<div class="box ok"><b>🅰 sillyspec = 机器侧验证</b>声称完成必须过实测对账;四类缺陷有结构化防线。代价:等待与仪式。</div>
|
|
334
|
+
<div class="box bad"><b>🅱 OpenSpec = 模型侧自觉</b>快、轻、零等待;防线全靠 agent 自觉——格式校验不校验事实。</div>
|
|
335
|
+
</div>
|
|
336
|
+
<ul style="margin-top:12px;font-size:14px">
|
|
337
|
+
<li><b>小任务 → sillyspec quick</b>:28min、token 持平略优、一次过 + 资产落盘</li>
|
|
338
|
+
<li><b>大任务 → 按缺陷成本选</b>:生产平台(错一次贵)选全流程;原型快跑选轻流程</li>
|
|
339
|
+
<li><b>互相借鉴</b>:轻流程补「外部契约事实来源强制」;重流程做门禁模块粒度收敛</li>
|
|
340
|
+
</ul>
|
|
341
|
+
</section>
|
|
342
|
+
|
|
343
|
+
<p class="small" style="text-align:center">口径:sillyspec 墙钟为稳态(门禁单轮),OpenSpec 实测;tokens/请求均实测硬账 · n=1 对撞,墙钟按量级解读 · 底稿 sillyspec 仓 round4/</p>
|
|
344
|
+
<footer>2026-09-21</footer>
|
|
345
|
+
</div>
|
|
346
|
+
</body>
|
|
347
|
+
</html>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# R5 场景矩阵与执行协议(2026-09-21 落盘,依据 optimization-plan.md v3.2 + 第 1 批交付态)
|
|
2
|
+
|
|
3
|
+
## 场景与臂
|
|
4
|
+
|
|
5
|
+
| 场景 | 基线(对撞仓 multi-agent-platform) | 跑法 | 备注 |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| 大任务(session-replay 同款) | 53c67e02a | ×2 跑 | 一跑 B-④ 材料包 OFF(缺省)、一跑 ON——互斥归因标签(v3.2 纪律二) |
|
|
8
|
+
| 小任务全流程(autocompact 同款) | 50736b6ef | ×2 跑 | |
|
|
9
|
+
| 小任务 quick(同款) | 50736b6ef | ×1 跑 | 门禁轮次 ≤2 判定主力场景(A 先于 B 纪律) |
|
|
10
|
+
| (可选)B-⑤ A/B | 50736b6ef | 小任务便宜档 ×1 | 与旗舰档同任务对照;返工率+核验密度双维否决线;审慎起见可推迟 R6 |
|
|
11
|
+
|
|
12
|
+
版本钉死首步回显:受试会话第一步输出回显 sillyspec 版本 + 已落地批次(batch1 e49a7ce0 前序 / batch2 若已入库记录其 HEAD)——**M3(派发分组预计算)若在 R5 前落地,B-③ 归因必须与 M3 分开记**(提示词级 vs 机制化,v3.2 换位说明)。
|
|
13
|
+
|
|
14
|
+
## 跑前清单(按序)
|
|
15
|
+
|
|
16
|
+
1. `git -C multi-agent-platform worktree prune`(Temp 残留 prunable gate worktree 清理;基线 SHA 50736b6ef/53c67e02a 已 2026-09-21 cat-file 实证在场,主树干净)。
|
|
17
|
+
2. **B-④ 接线补齐**:execute 主链材料包生成未接(batch1 task-02 接线最小化)——小 quick 一项(assembleExecuteTaskMaterials 调用点 + options.materials 装配)或并入 batch2 M3;不接则 ON 臂无法跑,矩阵降级为 OFF-only。
|
|
18
|
+
3. R4 prompt 卫生沿用:受试会话任务书钉死「禁捞未来提交/版本首步回显/全流程勿降级」三律(prompt-R4-*.md 直接复用改版本号)。
|
|
19
|
+
4. 探针套件预跑:`node --test test/probe-suite/wrong-key.test.mjs` 在受试 sillyspec 版本上绿——防线敏感性前置自证。
|
|
20
|
+
|
|
21
|
+
## 指标判法(account.mjs v2 同口径,只比比值不比绝对值)
|
|
22
|
+
|
|
23
|
+
| 硬门 | 判法 | R4 基线(2026-09-21 钉死) |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| 扇出 tokens ≤32M | account.mjs 子会话聚合 totTok(子代列) | 42.26M |
|
|
26
|
+
| 门禁轮次 ≤2 | 进度库 gate 记录计数 | 9(S-F 病理)/ 2(稳态) |
|
|
27
|
+
| 防线回归 | probe-suite 绿 + 受试 transcript 错键类仍被拦 | — |
|
|
28
|
+
| 墙钟不劣化 ≤156min | 会话时间戳(跨度列) | 184.5min 毛口径 / 156min 稳态重构口径 |
|
|
29
|
+
| 额度零事故 | 受试过程无整 Wave 中断 | R4-L 有(并发帽前) |
|
|
30
|
+
|
|
31
|
+
拉伸(不判罚):账单当量比 ≤1.8× —— `node round4/account.mjs --title R5-<臂> --since <日>` 的 当量@3× 列对同名对照臂取比;基线 2.37×(@3×)/2.47×(@5×),R4-L 13.89M / R4-O-L 5.87M。记录不判罚行:主会话峰值单请求 <250K(MAX 查询)、>150K 占比 <50%(计数查询)——依赖第 3 批 B3b,R5 只落基线。
|
|
32
|
+
|
|
33
|
+
**阶段级墙钟拆账(每跑必落)**:用 round4/extract-timeline.mjs 抽受试主会话时间线,按 CLI 阶段标记切六段(调研/plan/execute 扇出/verify/归档/门禁等待),落 r5-wall-accounting 表——R6 per-item 时间预算的唯一数据源(v3.2 先测后诺)。
|
|
34
|
+
|
|
35
|
+
## 归因标签(防混账)
|
|
36
|
+
|
|
37
|
+
- B-④ ON/OFF 臂差 = 材料包贡献(上下文乘数)。
|
|
38
|
+
- 门禁轮次改善归战线 A(已提交四项),**不记 B-③ 提示词**;M3 若在场单列。
|
|
39
|
+
- 轮数纪律(B-⑥)效果看子代理请求数列(基线大任务 522req),与扇出 tokens 分列记录。
|
|
40
|
+
- batch2 M1(指令指纹增量)若在场:主会话 CLI 渲染体量单列(B3a 口径复跑),不并入扇出账。
|
|
41
|
+
|
|
42
|
+
## 诚实边界
|
|
43
|
+
|
|
44
|
+
- 2 跑取分布不外推;提示词级项不达标即升级机制化(路径:CLI 截断注入/机械组装)。
|
|
45
|
+
- B-⑤ 若推迟,对外口径维持「模型分级未启用」。
|
|
46
|
+
- 墙钟 156min 为重构口径,毛口径 184.5min 一并记录防口径混用。
|
package/src/change-list.js
CHANGED
|
@@ -316,6 +316,15 @@ function _parseFileListDetailed(designMdPath, { keepSillyspecDocs = false, repoK
|
|
|
316
316
|
const head = rawItem.slice(0, colonIdx).trim()
|
|
317
317
|
if (looksLikePath(head)) rawItem = head
|
|
318
318
|
}
|
|
319
|
+
// 「路径 ——尾注」同族(坑 thin-flow-freeze-foreign-declared-hijack 建议1,2026-09-25
|
|
320
|
+
// 实测:`- path ——说明` 整行 looksLikePath 不过被丢弃 → 自声明缺失 → 冻结面被他侧
|
|
321
|
+
// 陈旧声明劫持)。同冒号剥的口径:仅列表分支、前段须 looksLikePath(合法路径不含
|
|
322
|
+
// 双 em-dash,误伤面为零)。
|
|
323
|
+
const dashIdx = rawItem.search(/——/)
|
|
324
|
+
if (dashIdx > 0) {
|
|
325
|
+
const head = rawItem.slice(0, dashIdx).trim()
|
|
326
|
+
if (looksLikePath(head)) rawItem = head
|
|
327
|
+
}
|
|
319
328
|
}
|
|
320
329
|
const itemNorm = normalizePath(rawItem)
|
|
321
330
|
const itemCross = preCross || splitCrossRepoPrefix(itemNorm, repoKeys)
|
package/src/classify-change.js
CHANGED
|
@@ -26,6 +26,12 @@ const FORCE_QUICK_PATTERNS = [
|
|
|
26
26
|
/更新文案|改文案|文案修改/i,
|
|
27
27
|
/样式调整|style.*tweak/i,
|
|
28
28
|
/修复.*\s*\bbug\b.*\bfix\b/i,
|
|
29
|
+
// R16 减负批次(2026-09-24,R5R 对撞实证 quick≈OS:8.3M vs 6.4M——判规模选道倾向 quick):
|
|
30
|
+
// 补充明确无设计决策密度的常规任务面
|
|
31
|
+
/补注释|加注释|注释补充/i,
|
|
32
|
+
/重命名|rename\s+(变量|函数|文件|目录)/i,
|
|
33
|
+
/升级依赖|依赖升级|bump\s+(版本|deps|dependencies)/i,
|
|
34
|
+
/配置微调|配置小改|改配置项/i,
|
|
29
35
|
]
|
|
30
36
|
|
|
31
37
|
/**
|