fix(skills): bound project lesson validation

This commit is contained in:
dafang
2026-08-02 14:02:14 +08:00
parent 8d967cb162
commit 3b80297a08
16 changed files with 117 additions and 47 deletions
@@ -61,12 +61,14 @@ canonical guard/knowledge 才是稳定归宿。
### 开工:有效命中必须说明影响
只有 scope 符合、未退役、经当前代码/测试/canonical 文档核实,并真实改变计划或验证的条目才算
有效命中。四个 task skill 必须报告:`经验命中:{path}{status});核验:{fact};影响:
应用前 read-repair 只做一次有界、最低成本的定向核实,优先读取已有代码测试canonical 文档
不得仅为核实 lesson 运行大范围测试或反复复现。一次定向核实仍不足时跳过该 lesson不阻塞正常任务。
只有 scope 符合、未退役、当前事实成立,并真实改变计划或验证,或明确排除一个具体且合理的错误路径
的条目才算有效命中。四个 task skill 必须报告:`经验命中:{path}{status});核验:{fact};影响:
{plan_or_check}`。纯关键词碰撞不报告为有效命中,也不能把“读过”冒充“采用”。
应用前 read-repair`retired` 不应用;`observed` / `validated` 核实再用;只是相关但没有改变
行为时不制造复用证据;当前事实明确反证时立即停止应用并走窄退役,证据不足时不猜。
`retired` 不应用;`observed` / `validated` 经上述核实再用;只是相关但没有改变行为时不制造复用证据;
当前事实明确反证时立即停止应用并走窄退役,证据不足时不猜。
### 任务中:静默识别晶化时刻
@@ -110,7 +112,7 @@ date: YYYY-MM-DD
| status | 判据 |
|---|---|
| `observed` | 单次任务有证据,尚未在独立后续任务验证 |
| `validated` | 非创建该 lesson 的任务和 agent invocation 中有效命中,真实改善行为并验证成功 |
| `validated` | 非创建该 lesson 的任务和 agent invocation 中有效命中,真实改善行为并验证成功;具体表现为改变计划或验证,或明确排除一个具体且合理的错误路径 |
| `retired` | 被事实反证、范围完全失效或已被更强 owner 替代;不得应用且不再复活原结论 |
旧 lesson 缺 `status``observed` 读取,不批量迁移;只有真实状态变化或 `cs-keep` 本来就要更新
@@ -119,7 +121,8 @@ date: YYYY-MM-DD
创建、改写规则/scope、晋升、删除与跨项目反馈仍须用户显式 `cs-keep` 诉求、接受普通候选,或
Epic 最终毕业 gate。为实现不中断的 read-repair仅对已有且有效命中的 lesson 开放两种窄维护:
- `observed -> validated`:独立后续任务确实采用并验证成功,只补一次代表性证据;
- `observed -> validated`:独立后续任务确实采用并验证成功,只补一次代表性证据;必须记录 lesson
实际改变的计划或验证,或明确排除的具体且合理错误路径,以及本次通过的验收证据;
- `observed|validated -> retired`:当前仓库事实直接反证,只写原因与替代/反证指针。
窄维护不新建事实、不改规则、不扩 scope、不新增 gate随当次代码、证据和游标进入同一语义原子
@@ -199,8 +202,10 @@ README 精简结构、全部 Markdown ≤300、plugin/package/distribution tests
## 验收标准
- 四 task skills 对有效命中报告路径、核验与具体影响候选静默、普通最多一条、Epic 最终处理。
- 三态可解析且按需迁移退役不再应用validated 稳定命中无 churn机械化与单一 owner 优先
- 四 task skills 的 read-repair 有界且不阻塞正常任务;有效命中报告路径、核验与具体影响,并允许
“明确排除具体且合理的错误路径”作为真实影响候选静默、普通最多一条、Epic 最终处理
- 三态可解析且按需迁移validated 记录具体行为变化与本次通过的验收证据,退役不再应用,稳定命中
无 churn机械化与单一 owner 优先。
- 新 lesson 与跨项目分享保持显式授权;无 transcript、feedback runtime、global lessons 或新 skill。
- paired 单测证明四类 invocation 独立、B prompt 相同、只有 lesson 差异、半 pair 不完成、成本不低估。
- 冻结实验在两个 model family 上以非 `[underpowered]` 证据满足 verdict否则本 Epic 保持未完成。
@@ -1,7 +1,7 @@
---
epic: ../epics/cs-continuous-learning-lifecycle.md
phase: executing
approved_revision: 4b0b8e8e0596e7ee42611864843512ecd9402970bb3682b5605f0dc0f8dcf01a
approved_revision: 44ae22f3cc8cb675686a143bf0deff5a06bd7231ceb8f92274042e0a4bcd17e7
current_item: LEARN-3
next_action: wait for fresh owner authorization before any real probe; do not resume the interrupted checkpoint
blocked_by: null
@@ -265,3 +265,13 @@ remote_publish: each-milestone
后续真实 probe 与新 identity calibration 均等待 owner 逐次显式授权,不恢复中断 checkpoint。
- pipeline 输入已重置为 `prepared-awaiting-commit` / probe pending / `real_llm_runs_started=false`;该字段只
描述尚未运行的新 source。真实 probe、CLI 或 calibration 均须 owner 重新逐次授权,本流程不自动执行。
- owner 批准持续学习契约澄清方向read-repair 只做一次有界、最低成本的定向核实且不得为 lesson
反复复现或运行大范围测试;排除具体且合理的错误路径也算真实影响;`validated` 必须记录行为变化与
本次通过的验收证据。稳定契约已同步回永久 Epic按 lifecycle 重置批准 revision 并等待 fresh review
后的 owner 确认;目标、范围、验收阈值与子项定义未改变。
- 契约 tests-first 先得 `5 failed, 35 passed`,同步 5 个 shipped Skill、ADR-006 与中英文 WORKFLOW 后
转为 `40 passed`;连同分发/package 测试为 `75 passed, 1 skipped`plugin checker 通过。freeze 仍为
prepared/pending/false33 inputs / 26 external inputs 逐项匹配,未执行真实 CLI、probe 或模型运行。
- 契约澄清 fresh reviewPaseo `c06c2e6a`Opus 5 / high / plan冻结 patch `2ccbaf55...d9619`、
tree `649332c7...293b02``0 blocking / 0 important / 3 nit`,新永久 Epic hash
`44ae22f3...d17e7` 可确认。owner 随后正式确认该 revision三条 nit 均为可选措辞粒度,不影响合入。
+10 -7
View File
@@ -90,16 +90,19 @@ a durable record; remove it when complete unless the owner asks to retain it.
## Project-Local Continuous Learning
- Each task skill observes silently during the task. It reports
`lesson hit: {path} ({status}); check: {fact}; impact: {plan_or_check}` only after current code, tests, or
canonical docs confirm the lesson and it actually changes the plan or verification; keyword overlap alone is
not reuse.
- Each task skill observes silently during the task. Read-repair performs one bounded, lowest-cost targeted check
against existing code, tests, or canonical docs; it must not run broad tests or repeat reproductions solely to
verify a lesson. If that check is insufficient, it skips the lesson without blocking the task. It reports
`lesson hit: {path} ({status}); check: {fact}; impact: {plan_or_check}` only when current facts hold and the
lesson changes the plan or verification, or explicitly rules out a concrete, plausible wrong path; keyword
overlap alone is not reuse.
- A crystallization candidate exists only in the current session. Ordinary work shows at most one candidate and
stays quiet without a strong signal. Epic items add no pause: each may place one deduplicated candidate in the
existing cursor evidence, and the final graduation list handles them together.
- The lesson lifecycle is observed / validated / retired. A new lesson starts observed, reaches validated only
after successful use in an independent later task, and becomes retired when facts contradict it, its scope
expires, or a stronger owner exists.
- The lesson lifecycle is observed / validated / retired. A new lesson starts observed and reaches validated only
after successful use in an independent later task that records the lesson-caused plan or verification change,
or the concrete plausible wrong path it ruled out, together with the task's passing acceptance evidence. It
becomes retired when facts contradict it, its scope expires, or a stronger owner exists.
- Read-repair permits only narrow state maintenance on an existing matched lesson; stable validated hits create
no file churn. New lessons still require explicit authorization, as do rule/scope rewrites, promotion, deletion,
and cross-project sharing; none may be inferred from task-execution authorization.
+6 -4
View File
@@ -56,13 +56,15 @@ bug / 行为异常 -> cs-issue ----------> cs-review高风险或按需
## 项目内持续学习
- 四个 task skill 在任务内静默观察,只把经当前代码、测试或 canonical 文档核实且真实改变计划或
验证的 lesson 报告为 `经验命中:{path}{status});核验:{fact};影响:{plan_or_check}`
纯关键词碰撞不算复用。
- 四个 task skill 在任务内静默观察。lesson 只做一次有界、最低成本的定向核实,不为此运行大范围
测试或反复复现;仍不足时跳过,不阻塞正常任务。只有当前事实成立,且真实改变计划或验证,或
明确排除一个具体且合理的错误路径时,才报告为
`经验命中:{path}{status});核验:{fact};影响:{plan_or_check}`;纯关键词碰撞不算复用。
- 晶化候选只存在于当前会话内。普通任务最多展示一条最高价值候选,无强信号就不显示;
Epic 子项不新增暂停,每项最多把一条去重候选写入既有游标证据区,最终毕业清单统一处理。
- lesson 生命周期为 observed / validated / retired。新条目从 observed 开始,只有独立后续任务中
的有效命中和成功验证才能进入 validated事实反证、scope 失效或已有更强 owner 时进入 retired。
的有效命中和成功验证才能进入 validated,并须记录实际行为变化与本次通过的验收证据;事实反证、
scope 失效或已有更强 owner 时进入 retired。
- read-repair 只允许已有命中条目的窄状态维护;稳定 validated 命中不写文件。
新 lesson 仍需显式授权,规则/scope 改写、晋升、删除和跨项目分享也不能从任务执行授权中推断。
- 机械 guard 优先能在当前任务范围内落成测试、checker、lint、类型或 helper 的错误,不再写重复
+7 -4
View File
@@ -75,7 +75,7 @@ canonical owner。网络波动、拼写、活动记录、泛化口号和已被
| status | 判据 |
|---|---|
| `observed` | 单次任务有证据,尚未在独立后续任务验证 |
| `validated` | 非创建该 lesson 的后续任务和 agent invocation 中有效命中,真实改善行为并验证成功 |
| `validated` | 非创建该 lesson 的后续任务和 agent invocation 中有效命中,真实改善行为并验证成功;具体表现为改变计划或验证,或明确排除一个具体且合理的错误路径 |
| `retired` | 被仓库事实反证、范围完全失效,或已被更强 owner 替代;不得再应用 |
旧 lesson 缺少 `status` 时按 `observed` 读取,不批量迁移;只有真实状态变化或 `cs-keep` 本来就要
@@ -83,8 +83,10 @@ canonical owner。网络波动、拼写、活动记录、泛化口号和已被
### Read-repair 与窄维护授权
task skill 应用 lesson 前必须 read-repair`retired` 不应用;`observed` / `validated` 先用当前代码、
测试或 canonical 文档核实。只有条目 scope 符合、事实仍成立且真实改变计划或验证时,才报告
task skill 应用 lesson 前必须 read-repair`retired` 不应用;`observed` / `validated` 只做一次有界、最低成本的定向核实,
优先读取已有代码、测试或 canonical 文档;不得仅为核实 lesson 运行大范围测试
或反复复现。一次定向核实仍不足时跳过该 lesson不阻塞正常任务。只有条目 scope 符合、事实仍成立,
且真实改变计划或验证,或明确排除一个具体且合理的错误路径时,才报告
`经验命中:{path}{status});核验:{fact};影响:{plan_or_check}`;纯关键词碰撞或只是读过不算
有效命中。
@@ -92,7 +94,8 @@ task skill 应用 lesson 前必须 read-repair`retired` 不应用;`observed
普通任务候选,或 Epic 最终毕业 gate。为使 read-repair 不中断任务,仅对已有且有效命中的 lesson
开放两种无需新增确认的窄维护:
- `observed -> validated`:独立后续任务确实采用并验证成功,只补一次代表性证据;
- `observed -> validated`:独立后续任务确实采用并验证成功,只补一次代表性证据;必须记录 lesson
实际改变的计划或验证,或明确排除的具体且合理错误路径,以及本次通过的验收证据;
- `observed|validated -> retired`:当前仓库事实直接反证,或发现已有 canonical owner只写退役原因
与替代/反证指针。
+3 -2
View File
@@ -59,8 +59,9 @@ Only active cross-session state uses a temporary work cursor. Ordinary work reli
## Experience Evolves Through Verification
Experience is not an activity log. CodeStable silently recognizes crystallization moments that truly change a
plan, root cause, or verification, and keeps a candidate only when it has evidence, applies beyond the exact diff,
and has no stronger owner. Without a strong signal, completion gains no extra ritual.
plan, root cause, or verification, or explicitly rules out a concrete, plausible wrong path. It keeps a candidate
only when it has evidence, applies beyond the exact diff, and has no stronger owner. Without a strong signal,
completion gains no extra ritual.
A lesson is staging, not a permanent archive. An independent later task validates it; changed facts retire it;
and mechanizable failures move into tests or checkers. The project accumulates methods that reduce failure instead
+2 -2
View File
@@ -56,8 +56,8 @@ CodeStable 坚持一个事实只有一个 canonical owner稳定产品事实
## 经验通过验证演化
经验不是活动日志。CodeStable 在任务中静默识别真正改变方案、根因或验证的晶化时刻,只把有证据、
适用于本次精确 diff 之外且尚无更强 owner 的结论作为候选。没有强信号时不增加收尾仪式。
经验不是活动日志。CodeStable 在任务中静默识别真正改变方案、根因或验证,或明确排除一个具体且合理的错误路径
的晶化时刻,只把有证据、适用于本次精确 diff 之外且尚无更强 owner 的结论作为候选。没有强信号时不增加收尾仪式。
lesson 是 staging不是永久档案。它先被观察再由独立后续任务验证事实变化时会退役能机械化
时则进入测试或 checker。这样项目积累的是降低失败率的方法而不是不断增长的文字规则。
@@ -61,11 +61,11 @@
".claude/skills/eval-cs-skill/scripts/scorers/learning_transfer.py": "d34ba315c065b880c0043af94a9ca87bd275d7b18e4ee3d8346858d33fdbebce",
".claude/skills/eval-cs-skill/scripts/sequence.py": "c4059892481527bce85964b80375f23524b4427b3d879fa84e7b99c821e958b5",
"experiments/seeds/dispatchboard-learning/build-seed.py": "4c7f7090abe69aca0b6be2a3568c85a91345374a4879f94da9f6704f028689b1",
"plugins/codestable/skills/cs-epic/SKILL.md": "4f67e0efc6aa446eceaf3e57bf31b4fcc18af7ba87ce927be6b4bbb0d35407aa",
"plugins/codestable/skills/cs-feat/SKILL.md": "54261caf4d0cb8f01b225c3041d41476691efbaa29a5390e7f9887c9cbfb70ff",
"plugins/codestable/skills/cs-issue/SKILL.md": "203ca2710355a56a12236c2d55f57e7264b744be4f13edd633af4f352be1b707",
"plugins/codestable/skills/cs-keep/SKILL.md": "3d2d2cbb0114b963b1847f3d2caaa2d58db193cbf1cf38039d5b52044d3dd6ca",
"plugins/codestable/skills/cs-refactor/SKILL.md": "a225c692ce7776f9305b14cbb7c424656304cbe2b59c0a70aeedb3802e5b01b8"
"plugins/codestable/skills/cs-epic/SKILL.md": "e3f4c89ce04e41db022935bf251a012fe2cf613226d24f339569ef9d65e510dd",
"plugins/codestable/skills/cs-feat/SKILL.md": "df8d3de6f7bb4925024f24d93290c9a644bf24b2359588eeee51cc57ce9c7047",
"plugins/codestable/skills/cs-issue/SKILL.md": "fa36e43ff0785e13fcfdc222fd87b15fb22a38bbb5e9872c338a401a1320e88a",
"plugins/codestable/skills/cs-keep/SKILL.md": "1d8f56aae90ab45b0ab966ae15c42d8d958e1a3a1a29ca2e196871afda90354d",
"plugins/codestable/skills/cs-refactor/SKILL.md": "a3b5e29ae6919969e659799faed8513dbd8dad7b3713cee09aae1edcf35e7871"
},
"inputs": {
"_asset_mutations.py": "fe952ddc35ddc1fd0976627043383f9b4d4ec05fd8202ac5fe963bdd0b904210",
+6 -3
View File
@@ -20,8 +20,10 @@ argument-hint: "[大需求描述]"
## 持续学习
检索到 lesson 后先做 read-repair。只有 scope 符合、未退役、经当前代码/测试/canonical 文档核实,
并真实改变计划或验证的条目才算有效命中;按
检索到 lesson 后先做 read-repair。只做一次有界、最低成本的定向核实,优先读取已有代码测试
canonical 文档;不得仅为核实 lesson 运行大范围测试或反复复现。仍不足时跳过该 lesson不阻塞正常任务。
只有 scope 符合、未退役、当前事实成立,并真实改变计划或验证,或明确排除一个具体且合理的错误路径
的条目才算有效命中;按
`经验命中:{path}{status});核验:{fact};影响:{plan_or_check}` 报告。`retired` 不应用;
`observed` / `validated` 先核实再用;旧 lesson 缺 `status``observed` 读取,不批量迁移。只是相关
但没有改变行为时不制造复用证据;当前事实明确反证时立即停止应用,证据不足时不猜。
@@ -36,7 +38,8 @@ owner。网络波动、拼写、泛化口号、活动记录以及已被机械
创建、改写规则/scope、晋升、删除与跨项目反馈仍须用户显式授权。为不中断 read-repair仅对已有且
有效命中的 lesson 开放两种窄维护:`observed -> validated` 仅在独立后续任务确实采用并验证成功时
发生,只补一次代表性证据;`observed|validated -> retired` 仅在当前仓库事实直接反证或发现已有
发生,只补一次代表性证据;必须记录 lesson 实际改变的计划或验证,或明确排除的具体且合理错误路径,
以及本次通过的验收证据。`observed|validated -> retired` 仅在当前仓库事实直接反证或发现已有
canonical owner 时发生,只写原因与替代/反证指针。窄维护不新建事实、不改规则、不扩 scope、不新增
gate随当次代码、证据和
游标进入同一语义原子 milestone稳定 validated 命中不写文件。需要改写结论或证据不足时只给
+6 -3
View File
@@ -20,8 +20,10 @@ argument-hint: "[功能描述]"
## 持续学习
检索到 lesson 后先做 read-repair。只有 scope 符合、未退役、经当前代码/测试/canonical 文档核实,
并真实改变计划或验证的条目才算有效命中;按
检索到 lesson 后先做 read-repair。只做一次有界、最低成本的定向核实,优先读取已有代码测试
canonical 文档;不得仅为核实 lesson 运行大范围测试或反复复现。仍不足时跳过该 lesson不阻塞正常任务。
只有 scope 符合、未退役、当前事实成立,并真实改变计划或验证,或明确排除一个具体且合理的错误路径
的条目才算有效命中;按
`经验命中:{path}{status});核验:{fact};影响:{plan_or_check}` 报告。`retired` 不应用;
`observed` / `validated` 先核实再用;旧 lesson 缺 `status``observed` 读取,不批量迁移。只是相关
但没有改变行为时不制造复用证据;当前事实明确反证时立即停止应用,证据不足时不猜。
@@ -36,7 +38,8 @@ owner。网络波动、拼写、泛化口号、活动记录以及已被机械
创建、改写规则/scope、晋升、删除与跨项目反馈仍须用户显式授权。为不中断 read-repair仅对已有且
有效命中的 lesson 开放两种窄维护:`observed -> validated` 仅在独立后续任务确实采用并验证成功时
发生,只补一次代表性证据;`observed|validated -> retired` 仅在当前仓库事实直接反证或发现已有
发生,只补一次代表性证据;必须记录 lesson 实际改变的计划或验证,或明确排除的具体且合理错误路径,
以及本次通过的验收证据。`observed|validated -> retired` 仅在当前仓库事实直接反证或发现已有
canonical owner 时发生,只写原因与替代/反证指针。窄维护不新建事实、不改规则、不扩 scope、不新增
gate随当次代码、证据和
游标进入同一语义原子 milestone稳定 validated 命中不写文件。需要改写结论或证据不足时只给
+6 -3
View File
@@ -18,8 +18,10 @@ argument-hint: "[问题描述]"
## 持续学习
检索到 lesson 后先做 read-repair。只有 scope 符合、未退役、经当前代码/测试/canonical 文档核实,
并真实改变计划或验证的条目才算有效命中;按
检索到 lesson 后先做 read-repair。只做一次有界、最低成本的定向核实,优先读取已有代码测试
canonical 文档;不得仅为核实 lesson 运行大范围测试或反复复现。仍不足时跳过该 lesson不阻塞正常任务。
只有 scope 符合、未退役、当前事实成立,并真实改变计划或验证,或明确排除一个具体且合理的错误路径
的条目才算有效命中;按
`经验命中:{path}{status});核验:{fact};影响:{plan_or_check}` 报告。`retired` 不应用;
`observed` / `validated` 先核实再用;旧 lesson 缺 `status``observed` 读取,不批量迁移。只是相关
但没有改变行为时不制造复用证据;当前事实明确反证时立即停止应用,证据不足时不猜。
@@ -34,7 +36,8 @@ owner。网络波动、拼写、泛化口号、活动记录以及已被机械
创建、改写规则/scope、晋升、删除与跨项目反馈仍须用户显式授权。为不中断 read-repair仅对已有且
有效命中的 lesson 开放两种窄维护:`observed -> validated` 仅在独立后续任务确实采用并验证成功时
发生,只补一次代表性证据;`observed|validated -> retired` 仅在当前仓库事实直接反证或发现已有
发生,只补一次代表性证据;必须记录 lesson 实际改变的计划或验证,或明确排除的具体且合理错误路径,
以及本次通过的验收证据。`observed|validated -> retired` 仅在当前仓库事实直接反证或发现已有
canonical owner 时发生,只写原因与替代/反证指针。窄维护不新建事实、不改规则、不扩 scope、不新增
gate随当次代码、证据和
游标进入同一语义原子 milestone稳定 validated 命中不写文件。需要改写结论或证据不足时只给
+2 -2
View File
@@ -56,13 +56,13 @@ date: YYYY-MM-DD
| status | 判据 |
|---|---|
| `observed` | 单次任务已有证据,尚未在独立后续任务验证 |
| `validated` | 非创建该 lesson 的任务和 agent invocation 中有效命中,真实改善行为并验证成功 |
| `validated` | 非创建该 lesson 的任务和 agent invocation 中有效命中,真实改善行为并验证成功;具体表现为改变计划或验证,或明确排除一个具体且合理的错误路径 |
| `retired` | 被仓库事实反证、scope 完全失效或已有更强 canonical owner不得应用且不再复活原结论 |
- 新 lesson 一律从 `observed` 开始;不能把创建该 lesson 的同一任务自证为 validated也不因命中
次数或模型自评晋级。
- 旧 lesson 缺 `status``observed` 读取,不批量迁移;只在真实状态变化或本来就要更新时补字段。
- `observed -> validated` 只在独立后续任务确实采用并验证成功时发生,并只补一次代表性证据。
- `observed -> validated` 只在独立后续任务确实采用并验证成功时发生,并只补一次代表性证据;必须记录 lesson 实际改变的计划或验证,或明确排除的具体且合理错误路径,以及本次通过的验收证据
- `observed|validated -> retired` 只写反证/替代原因与指针。retired 条目上的新结论必须另建 observed
lesson不继承旧条目的 validated 身份。
- 稳定 validated 命中不产生文件 churn。不得保存原始对话、逐次命中日志或无限 evidence history。
@@ -17,8 +17,10 @@ argument-hint: "[重构目标]"
## 持续学习
检索到 lesson 后先做 read-repair。只有 scope 符合、未退役、经当前代码/测试/canonical 文档核实,
并真实改变计划或验证的条目才算有效命中;按
检索到 lesson 后先做 read-repair。只做一次有界、最低成本的定向核实,优先读取已有代码测试
canonical 文档;不得仅为核实 lesson 运行大范围测试或反复复现。仍不足时跳过该 lesson不阻塞正常任务。
只有 scope 符合、未退役、当前事实成立,并真实改变计划或验证,或明确排除一个具体且合理的错误路径
的条目才算有效命中;按
`经验命中:{path}{status});核验:{fact};影响:{plan_or_check}` 报告。`retired` 不应用;
`observed` / `validated` 先核实再用;旧 lesson 缺 `status``observed` 读取,不批量迁移。只是相关
但没有改变行为时不制造复用证据;当前事实明确反证时立即停止应用,证据不足时不猜。
@@ -33,7 +35,8 @@ owner。网络波动、拼写、泛化口号、活动记录以及已被机械
创建、改写规则/scope、晋升、删除与跨项目反馈仍须用户显式授权。为不中断 read-repair仅对已有且
有效命中的 lesson 开放两种窄维护:`observed -> validated` 仅在独立后续任务确实采用并验证成功时
发生,只补一次代表性证据;`observed|validated -> retired` 仅在当前仓库事实直接反证或发现已有
发生,只补一次代表性证据;必须记录 lesson 实际改变的计划或验证,或明确排除的具体且合理错误路径,
以及本次通过的验收证据。`observed|validated -> retired` 仅在当前仓库事实直接反证或发现已有
canonical owner 时发生,只写原因与替代/反证指针。窄维护不新建事实、不改规则、不扩 scope、不新增
gate随当次代码、证据和
游标进入同一语义原子 milestone稳定 validated 命中不写文件。需要改写结论或证据不足时只给
+9
View File
@@ -31,7 +31,11 @@ LESSON_READ_REPAIR_CONTRACT = {
"旧 lesson 缺 `status` 按 `observed` 读取",
"`retired` 不应用",
"`observed` / `validated` 先核实再用",
"只做一次有界、最低成本的定向核实",
"不得仅为核实 lesson 运行大范围测试或反复复现",
"仍不足时跳过该 lesson不阻塞正常任务",
"只是相关但没有改变行为时不制造复用证据",
"明确排除一个具体且合理的错误路径",
"当前事实明确反证时立即停止应用",
"证据不足时不猜",
}
@@ -60,6 +64,8 @@ NARROW_LESSON_MAINTENANCE_CONTRACT = {
"`observed -> validated`",
"独立后续任务确实采用并验证成功",
"只补一次代表性证据",
"必须记录 lesson 实际改变的计划或验证",
"本次通过的验收证据",
"`observed|validated -> retired`",
"当前仓库事实直接反证",
"发现已有 canonical owner",
@@ -380,6 +386,9 @@ def test_keep_owns_the_three_state_lesson_lifecycle() -> None:
"`validated`",
"非创建该 lesson 的任务和 agent invocation 中有效命中",
"真实改善行为并验证成功",
"明确排除一个具体且合理的错误路径",
"必须记录 lesson 实际改变的计划或验证",
"本次通过的验收证据",
"`retired`",
"不得应用且不再复活原结论",
"旧 lesson 缺 `status` 按 `observed` 读取",
+13
View File
@@ -99,16 +99,21 @@ def test_v1_feedback_promoter_is_explicitly_legacy_only() -> None:
def test_project_learning_lifecycle_is_an_accepted_narrow_staging_contract() -> None:
adr6 = ROOT / "docs/adr/006-project-learning-lifecycle.md"
epic = ROOT / ".codestable/epics/cs-continuous-learning-lifecycle.md"
assert adr6.is_file()
assert epic.is_file()
assert _frontmatter(adr6)["status"] == "Accepted"
text = adr6.read_text(encoding="utf-8")
for anchor in (
"在任务中静默观察",
"最多保留 3 条候选",
"read-repair",
"一次有界、最低成本的定向核实",
"具体且合理的错误路径",
"必须优先机械化",
"`observed -> validated`",
"本次通过的验收证据",
"`observed|validated -> retired`",
"显式授权",
"feedback runtime",
@@ -120,6 +125,14 @@ def test_project_learning_lifecycle_is_an_accepted_narrow_staging_contract() ->
):
assert anchor in text
epic_text = epic.read_text(encoding="utf-8")
for anchor in (
"一次有界、最低成本的定向核实",
"明确排除一个具体且合理的错误路径",
"本次通过的验收证据",
):
assert anchor in epic_text
def test_project_learning_does_not_restore_feedback_or_global_runtime_state() -> None:
active_skills = {
+12
View File
@@ -496,6 +496,9 @@ def test_project_learning_lifecycle_is_bilingual_and_low_interruption() -> None:
for anchor in (
"任务内静默观察",
"经验命中:{path}{status});核验:{fact};影响:{plan_or_check}",
"一次有界、最低成本的定向核实",
"明确排除一个具体且合理的错误路径",
"本次通过的验收证据",
"observed / validated / retired",
"普通任务最多展示一条",
"Epic 子项不新增暂停",
@@ -507,6 +510,9 @@ def test_project_learning_lifecycle_is_bilingual_and_low_interruption() -> None:
for anchor in (
"observes silently during the task",
"lesson hit: {path} ({status}); check: {fact}; impact: {plan_or_check}",
"one bounded, lowest-cost targeted check",
"explicitly rules out a concrete, plausible wrong path",
"the task's passing acceptance evidence",
"observed / validated / retired",
"at most one candidate",
"Epic items add no pause",
@@ -520,6 +526,12 @@ def test_project_learning_lifecycle_is_bilingual_and_low_interruption() -> None:
("README.md", "README.en.md", "边做边识别晶化时刻", "recognizes crystallization moments while working"),
("SKILL_CATALOG.md", "SKILL_CATALOG.en.md", "observed / validated / retired", "observed / validated / retired"),
("docs/why-codestable.md", "docs/why-codestable.en.md", "经验不是活动日志", "Experience is not an activity log"),
(
"docs/why-codestable.md",
"docs/why-codestable.en.md",
"排除一个具体且合理的错误路径",
"rules out a concrete, plausible wrong path",
),
)
for zh_path, en_path, zh_anchor, en_anchor in public_pairs:
assert _contains_contract(_read(zh_path), zh_anchor)