sillyspec × OpenSpec 对撞结果

同任务 · 同基线 · 全新会话 · 同机同模型 —— 受控对照

2026-09-20/21
大任务 + 小任务 · 5 会话
db 硬账 + 全量记录深读
小任务成本真持平tokens 8.97 vs 9.33M · 账单当量 ~1.0×
全场唯一硬缺陷在对方错键生产 no-op,测试全绿掩护
交付厚度 2.4×2,909 vs 1,193 行测试
墙钟慢 1.3× / 2×差距全在非模型时间
子代理扇出贵43% tokens / 68% 请求
定位:用等待换防线砍仪式=砍防线

1核心数据对比

小任务 —— 给 Claude 的自动压缩加三个界面开关(autocompact 三键 · sillyspec 走 quick 轻通道)

sillyspec
墙钟28min*
tokens 新入/缓存/输出0.2M / 8.7M / 0.05M
请求87
代码量+516 行
新增测试22
OpenSpec
墙钟21.5min
tokens 新入/缓存/输出0.1M / 9.2M / 0.05M
请求85
代码量+539 行
新增测试15

大任务 —— 把 AI 干活的日志变成可回放的聊天记录(会话回放 · 跨三端 · sillyspec 走全流程)

sillyspec
墙钟156min*
tokens 新入/缓存/输出2.4M / 96.1M / 0.64M
请求767
代码(源码+测试)7.2K 行
流程文档10.9K 行(84% CLI 生成)
子代理 / 测试行19 / 2,909
OpenSpec
墙钟80min
tokens 新入/缓存/输出0.3M / 51.6M / 0.14M
请求251
代码(源码+测试)3.3K 行
流程文档0.6K 行(全 agent 写)
子代理 / 测试行0 / 1,193

* sillyspec 墙钟为稳态口径(门禁单轮);tokens / 请求 / 代码量两侧均实测。模型时间两侧同量级(13.3 vs 13.1min)——差距不在模型,在流程。tokens 三分(新输入 / 缓存读 / 输出):大任务 2.4/96.1/0.64M vs 0.3/51.6/0.14M。按计价折算(新入 1× / 缓存 ~0.1× / 输出 3–5×):大任务账单当量比 ≈ 2.4×(区间 2.1–2.8×),略高于面值 1.9×——两侧命中率都 97%+,缓存救不了比值,且输出差恰好落在最贵计价档。差额构成:缓存体量差 55% + 冷启动新输入 26%(扇出签名,子代理新鲜上下文首读打不中缓存)+ 输出差 19%;输出 4.6× 中 77%(0.49M)是子代理代码/测试产出(交付厚度),主会话编排输出仅 0.14M。小任务账单当量 ~1.0×(三段 0.2/8.7/0.05 vs 0.1/9.2/0.05,真持平)。
大任务构成拆解:手写源码 4.3K vs 2.1K(功能对齐,我们组件更厚)· 测试 2.9K vs 1.2K · 流程文档 10.9K vs 0.6K——但其中 84%(8.8K)是 CLI 机械生成的 diff 快照(scope-audit.patch,零 token),agent 实写文档仅 ~1.75K vs 0.6K(2.9×,与代码 2× 同量级);写作窗口 token 4.2M vs 1.5M,只占大任务 token 差的 ~6%——token 差主因是执行段子代理扇出,不是写文档;小任务两侧基本持平。

任务画像:小任务=照既有先例加三键的局部修补(简单,轻通道的适用对象);大任务=三端五层契约对齐(daemon→RPC→backend→生成类型→前端),难度在广度与一致性、不在单点深度——每条字段映射都是一次「错键型」失败的机会,防线价值随接缝数放大。

2我们的亮点

1 vs 0

全场唯一硬缺陷,出现在对方侧

对方把第三键写错(autoCompactPreCompute):27/27 测试全绿 → 干净归档 → 错键进规格库 → 预计算开关生产 no-op。我们的 agent 联网核验官方文档后落码,多花 2.5 分钟拦下静默缺陷。

同一个错误

两边 agent 都猜了错键名——差别只在验证步

深读记录实证:我们的 agent 最初猜的也是那个错名,但先搜官方文档、拿到真名才写码。错误生成是确定性的,拦截是结构性的——这是流程属性,不是运气。

写码之前

独立设计审查拦下架构级错误(B1)

初版设计与 registry 源码契约矛盾,审查员独立核对源码后首轮打回、强制改设计。零代码浪费。对方流程无任何独立审查环节。

4 道防线

缺陷类覆盖:结构化 vs 全靠自觉

域事实核验 · 设计-源码一致性 · 声明-实测对账 · 资产正典校验,四类各有机制;对方四类全押 agent 自觉。历史数据:测试门两个月 12 次真拦「声称完成但测试挂」。

可检索资产

做完即沉淀

4 条决策 + 7 条 FR 索引 + ROADMAP + 模块文档 + 归档 15 件——下次变更直接复用。对方的规格库同样留资产,但本轮把错键典藏成了「正典」。

真并发

机制不是纸面

Wave 内 4 个子代理同窗并行(时间戳实证);审查请求钳 3/3 阶段达标(11/6/6 ≤ 12/10/15);进度库 / 边界审计 / 防作弊全程有效,双方 agent 零违反。

测试逻辑对比:两边测试都是 agent 写的,差在依据链与强制面 🅰 测试=契约的执行形态:requirements 的 GWT 场景直接翻译成断言(如「230000 成功标准场景」用例)· 任务卡写死 verify 命令 · 存量测试当契约(改契约必须显式);五层执行:子代理自跑 → 主代理复跑 → QA 独立复跑全量 → verify 门禁机器实测 → 相邻面回归。
🅱 测试=agent 自觉:specs 与测试无强制映射(validate 只查格式),写多少凭理解、跑不跑无人拦——全绿可能是自指测试(断言自己写的实现,错键照样 27/27)。
诚实边界:测试防「实现与声明不符」,不防「声明与事实不符」——若我们写错键名,13 个用例同样全绿。拦错键的是联网核验不是测试:测试管一致性,核验管事实性。

3执行完成后,你拿到什么(产物与项目资产)

资产🅰 sillyspec🅱 OpenSpec
决策知识✓ 决策 4 条(含理由 / 故障面 / 退役判据)—
特性索引✓ FR 7 条(承接链可回溯)—
行为规格✓ 替代形态 FR 索引 + 模块卡(GWT 场景体,台账式承接链)✓ 活规格 3 capability · 215 行 WHEN/SHALL
路线 / 文档✓ ROADMAP 里程碑 + 模块文档 ×2—
变更账目✓ 四字段账目 + sha256 范围快照git 提交历史
过程留痕✓ 归档 15 件 + verify 双证 + 审查 verdict归档变更夹
下次消费✓ 自动注入下一次变更的上下文靠 agent 主动读
正确性✓ 来源经实证核验⚠ 本轮错键写入 5 条 requirement

形态差异:OpenSpec 活规格=改写式正典(后续变更直接改文本,像 API 文档好读,但改错即正典错);sillyspec FR 索引=台账式承接链(追加+取代,演进史可见,当前态靠 active 过滤)。

实物抽样(两条任务的真实产物原文摘录)

🅰 sillyspec 实物
📐 决策库条目 · 大任务 D-001,归档自动提炼
## D-001@v1 回放形态=前端适配器复用 TurnTimeline 真组件(方案 A)
状态:implemented | 变更:2026-09-20-r4-session-replay | 最近确认:66636108c
理由:任务书点名「适配器 → TurnTimeline 真组件复用」,用户已定案
故障面:适配器与 TurnTimeline 契约耦合;靠既有测试族守护
退役判据:多 harness 形态差异大到 SessionTurnView 表达不下 → 复议方案 B
🔢 FR 索引条目 · 大任务 FR-host-fs-handler-002(GWT 行为场景)
## FR-host-fs-handler-002 轮次与 token 可见
状态:active | 最近确认:66636108c(归档时 HEAD)
场景:Given 数据源含 usage/turn_id(zcode/claude-code)——
Then 每轮轮尾显示输入/输出 token 徽标,头部显示会话累计;
无 token 数据源(cursor-agent/老 daemon)→ 显示「未知」
全文回链:changes/archive/…/requirements.md#FR-02(承接链可翻旧账)
📒 quick 结构化账目 · 小任务 ql-20260920-007-ec47
## ql-20260920-007-ec47 | claude 引擎 autocompact 三键 provider 级配置
状态:已完成 | 文件:8 行括注
需求:三键 provider 级配置(白名单透传 + 前端表单 + 文档)
根因:settings_config→白名单→settings.json 链路不含 autocompact 键,
配置写了也不生效;用户只能手改数据库 JSON
方案:TOP_LEVEL_KEYS 加三键 + AUTO_COMPACT_VALIDATORS 值守护…
结果:门禁实测 test 545.5s + lint 双 PASS;定向 31/31 + 相邻 93/93
+ 范围快照 ql-*.patch(sha256 锚定,可回放当时 diff)
🅱 OpenSpec 实物
📘 活规格条目(正面)· 大任务 agent-log-parsers
openspec/specs/agent-log-parsers/spec.md
### Requirement: 归一化消息携带轮次与用量元数据
每条消息 SHALL 携带 turn_id / usage(五项)/ model / duration_ms /
sender,全部可缺省,缺失按「未知」呈现,不影响既有九字段
#### Scenario: 数据源无用量时元字段为 null
WHEN 数据源不含 token(如 cursor-agent transcript)
THEN 全部段 usage=null,RPC totalUsage=null
🚫 活规格条目(反例)· 小任务 spec.md 原文,4 处错键
openspec/specs/claude-autocompact-config/spec.md
- `autoCompactPreCompute`:布尔(压缩摘要预计算开关) ← 键名错误
- WHEN 配 {"autoCompactPreCompute": true}
  THEN settings.json 含该键        ← 正确键:precomputeCompactionEnabled
5 条 requirement 把错键记为系统行为契约——
后续变更将信任并传播它(错误被典藏为「正典」)
都真资产:sillyspec 沉淀「为什么 + 下次注意什么」并自动注入 · OpenSpec 沉淀「系统该怎么表现」 · 行为规格两边都有(台账式 vs 正典式)——但资产带错,复利变负(见右侧实物 ⚠)

4目前的差距(不回避)

1.3× / 2×

墙钟落后(小 / 大任务)

28 vs 21.5min;156 vs 80min。模型算力同量级,差距全部在非模型时间——门禁 + 编排等待,见下节拆解。

43% / 68%

子代理扇出的成本倍增

19 个子代理各自重建上下文,吃掉 42.3M tokens(43%)+ 522 请求(68%)。但这笔钱同时是上下文保险:每个子代理新鲜窗口(峰值 219K、用完即释),实现体量不进主会话——对方单会话上下文线性涨,爆了靠 auto-compact 硬扛(压缩丢细节)。
诚实注:我们的主会话峰值 377K 反高于对方 317K——编排侧自己也会胖,超大任务需派发瘦身。

~60%

大任务时间在等待

子代理执行 / 门禁运行 / 审查回收占六成墙钟,主代理生成不足三分之一。慢=编排深度,但对外表现就是慢。

40% 假拦

门禁噪声真实存在(历史)

两个月 106 次门禁失败中:真拦 12、超时 36、环境 6。治理方向已定:按触碰模块收敛范围(文件级会漏真拦,有实证)+ 超时帽。

差距定性:等待与假拦是优化项;审查与扇出是防线的价格——砍掉它=砍掉第 2 节的亮点。当前策略:保防线,砍等待。
扇出优化路线(砍冗余读取,不砍隔离与独立审查) ① 读取范围约束——allowed_paths 兼作读范围 + symbol-impact 符号锚点注入(直打 task-08 型 8.6M over-reading)
② 调研消化物共享——探索摘要落盘,实现子代理读两页 digest 替代重读源码(调研段 9.4M → ~5M)
③ batch 激进化——R4-S-F 实证 5 任务 2 batch 仅 6M:文件正交即并批,摊平 design/plan 重复重建
④ 派发材料包扩展——复用审查侧 assembleStageReviewMaterials 有界组装基建
⑤ 子代理模型分级——实现跑便宜档、审查保持旗舰(砍账单不砍 token)
预期 ①+②+③ 把子代理段 42M → 20-25M,大任务 99M → ~78M(差距 1.9×→~1.5×);剩余差额=上下文保险 + 独立审查的价格。

5时间去哪了(时间戳级分解)

探索实现+定向测试编排/子代理门禁独立审查收尾
小任务 · OpenSpec21.5min
⚡ 探索 2.0M · 四件套 1.3M · 实现 4.9M · 归档 1.0M
探索 6
四件套 3
实现 8
归档 4.5
小任务 · sillyspec quick28min
⚡ 引导+核验 2.1M · 实现 4.4M · 门禁期 1.3M · 收尾 1.2M
核验 6
实现 9
门禁 10
收尾 3

小任务差 6.5min ≈ 一轮门禁 + 域事实核验——正是两道防线的价格。quick 无四件套=轻通道设计:无落盘设计决策的小修补不写流程文档,代之以 CLI 合成的四字段账目(近零写作成本,含在收尾段);对方无论任务多小都写四件套(3min / 1.3M)。(组内同尺度,条长∝墙钟;⚡为各阶段实测 tokens)

大任务 · OpenSpec80min
⚡ 探查 5.6M · 四件套 1.5M · 单会话实现 42.6M · 归档 2.2M
探查 19
3
单会话实现+回归 55
3
大任务 · sillyspec156min
⚡ 调研 10.6M · 四件套 4.2M · 审查 7.8M · 六波执行(含子代理)56.6M · verify+收尾 19.9M
调研 20
四件套 20
审查 17
六波执行 73
门禁 17
收尾 20

大任务差 76min = 审查 17 + 门禁 17(质量溢价)+ 编排开销 ~42(扇出成本,优化候选)。(组内同尺度,条长∝墙钟;⚡为各阶段实测 tokens——sillyspec 执行段 56.6M 里约 42M 是 19 个子代理的上下文重建,见差距卡 43%)

6一句话总结与选型

🅰 sillyspec = 机器侧验证声称完成必须过实测对账;四类缺陷有结构化防线。代价:等待与仪式。
🅱 OpenSpec = 模型侧自觉快、轻、零等待;防线全靠 agent 自觉——格式校验不校验事实。

口径:sillyspec 墙钟为稳态(门禁单轮),OpenSpec 实测;tokens/请求均实测硬账 · n=1 对撞,墙钟按量级解读 · 底稿 sillyspec 仓 round4/