Skip to content

chore: release 1.9.0 - #172

Merged
dommaker merged 8 commits into
masterfrom
chore/release-1.9.0
Sep 20, 2026
Merged

dommaker merged 8 commits into
masterfrom
chore/release-1.9.0

Conversation

@dommaker

Copy link
Copy Markdown
Owner

🤖 harness-ship

…-0027)

双仓零生产消费者(#169 三项裁决,事实前提 studio#562 已闭环):包根删 4 值符号 +
8 类型,`src/hooks/` 只剩 bootstrap 组合根;`HarnessBootstrap` 删 hooks/pipeline
两字段、`bootstrapHarness*` 删 hookDefinitions/hookConfigs 两参数——唯一生产调用方
无参调用且不访问被删字段,零迁移成本。breaking 记 CHANGELOG Unreleased,发布级别
按 ADR-0027 决策 2 = 下一个 minor。

三道公共面冻结闸条目同步(barrel 源形状负钉 ×2 + 类型清单摘 8 项),4 个管线面测试
文件随迁删除,bootstrap 测试改写为新形状;hooks/CONTEXT.md、src/CONTEXT.md 术语行、
CAPABILITIES.md、CLAUDE.md 随改。
Standards 轴抓到 README.md 核心能力表仍宣称「Hook 管线:注册 → 排序 → 错误隔离 →
采样执行」,是本票改动亲手造出的不实陈述(README 不在 ADR-0022 决策 4 的历史快照
豁免清单内,仓内先例 ADR-0019 的同步文档集含 README)。ADR-0002 按该文件自己的先例
补 hook 侧失效注记:状态行加「2026-09-18 部分失效」+ 文末「后续变更」节,正文既有条
目一字未改。CHANGELOG 的文档清单随之改准。同表既有陈旧行「会话压缩」属 ADR-0022 那
车漏改,不在本票范围。
根因:capabilities-syncer 用 /^…$/gm 匹配幽灵行后 replace(''),`m` 下
^…$ 只框住行内容、不含行尾换行,删完留一个空行;CommonMark 以空行断表,
于是每撤一次登记就多切一刀(studio 存量已攒 40 处)。同函数末尾的
\n{3,}→\n\n 够不着——删一行只产两个换行。

- 删除改按行 split/filter/join,行尾随之消失(CRLF 一并处理,行内正则
  尾上加 \r? 保持与旧 m 标志相同的匹配面)
- 新增排版收拢正本 normalizeCapabilitiesTableLayout:删两侧都是表格行的
  空行段 + 收掉无数据行的表头/分隔行,表格外段落空行不动,幂等
- --check 与写模式共用该正本(判定面 = 返回内容与入参是否不同),故存量
  脏行不再静默放过,且 check 报得出、fix 必清得掉(不重演 check 永不收敛)
- 收拢排在增删之后:本轮要往空表补新行时不误删表头

机器可检:__tests__/sync-docs-table-layout.test.ts(8 例,含中间行/末行/
目录条目行/CRLF 与两条反向闸)
对照 issue AC 与 CONTEXT.md 自述不变式复核 16eaf2c,实测出三条它没做到的:

- 两张空表相邻时一轮收不干净:规则①吃掉两表之间的空行后,规则②在同一轮
  只收得掉后一张,`--check` 报了、写模式修一次仍红(实测需两轮)。改为两条
  规则跑到不动点,计数取各轮合计——「check 报得出、fix 必清得掉」是本票自述
  的不变式,也是 ADR-0009 口径。
- 收拢会新产出 `\n\n\n`(收掉夹在两段散文之间的空表),而既有的 `\n{3,}→\n\n`
  折叠跑在收拢之前,够不着。把折叠移到收拢之后一处,并删掉增删分支内那份重复。
- 排版收拢会删围栏代码块内的表格样式行:一块「表头+分隔行」格式示例被判空表
  收掉(实测 8 行正文收成 6 行),且 `--check` 为此判红。给收拢加 ``` / ~~~
  块内行豁免。

刻意留下的口径不对称:幽灵行删除一侧**不**豁免围栏。登记条目由 capabilities-parser
全文扫描得出(ADR-0009),块内行同样算登记项;把删除也改成认围栏,块内示例引用的
已删文件会永远报成幽灵条目、`--check` 再也修不掉——该半改法实测令收敛闸转红,故
还原。两侧同认围栏属改 ADR-0009 登记面 + 连带 docs_freshness 判定,另票裁决。

另核实两点不属本票:① module 模式下整表收空后下一次写自动补目录表——修复前的
产物形状同样被 parseCapabilitiesFiles 解析为空集,两版行为一致,非本票引入;
② 4 空格缩进代码块(无围栏标记)内的样式行仍会被收拢,缩进 ≥4 与缩进表格本身
歧义,现有豁免取保守侧,记录不修。

测试:sync-docs-table-layout.test.ts 8 → 13 例(不动点、三连换行、两条代码块豁免、
收敛取舍各一)。四条新闸对 16eaf2c 逐条实测转红、改码后复绿;收敛闸另经反证。
验收:npx jest 全量 185 套件 / 2643 passed / 6 skipped、tsc --noEmit 与 eslint src
零错、build 绿、bin/harness.js check 铁律 3/3 + 指导原则 3/3、sync-docs --check
--agents 零漂移;studio 真实 CAPABILITIES.md 过正本函数 40 处 → 0 处、幂等、
非空正文逐字保留,harness 自身文件零误报。CHANGELOG 补 #171 入账(16eaf2c 漏记)。
registry.test.ts 的 bin 端到端冒烟跑 `knowledge ls --json` 时不隔离数据面,
读的是本机真实知识库(实测 221 条 / 1.35MB JSON);CI 全新 checkout 上该库为空。
大的一侧 stdout 越过 spawnSync 缺省缓冲被 ENOBUFS 杀掉,status 变 null、stderr
零解释,报错看着像别名路由崩了(1.9.0 前置测试首跑即以此形状暴露)。

落地:① 用例经既有解析缝 KNOWLEDGE_BASE_DIR 指向临时夹具(FileKnowledgeStore.save
播一条条目),三条断言逐字不变;② runWithModuleProbe 收可选 extraEnv 形参并显式
抬高 maxBuffer——抬高不是本用例的修复手段,它管的是「超限不该以无原因被杀面目出现」。

对外行为变化 0 处:纯测试面,产品代码与包公共面零改动。
@dommaker
dommaker enabled auto-merge September 20, 2026 03:39
@dommaker
dommaker merged commit 76c83ab into master Sep 20, 2026
3 checks passed
@dommaker
dommaker deleted the chore/release-1.9.0 branch September 20, 2026 07:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant