@cyning/harness 2.12.0 → 2.12.1
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/CHANGELOG.md +22 -2
- package/docs/USER_GUIDE_v1.0_zh.md +14 -0
- package/harness/discipline-coverage.yaml +3 -3
- package/harness/invokes/TEMPLATE_invoke.md +1 -1
- package/harness/lifecycle.yaml +1 -5
- package/harness/prompts/10-task-requirements.md +1 -1
- package/lib/task-meta.js +5 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [2.12.1] - 2026-07-26
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **invoke 文件名 hat 扫描**:改为日期后的**前缀 hat run**;slug 中的 `10`/`40` 等不再误计为已覆盖;去掉整名 `/CLOSE/i` 裸匹配。
|
|
12
|
+
- `lifecycle.yaml`:删除 `invoke_hats_retention` 别名守卫,仅保留 `close_invoke`。
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- `verify` / 单测收紧:缺口 WARN 用例断言 exit 0;补误计负例与 lint **W6**。
|
|
17
|
+
- USER_GUIDE §6.0 · TEMPLATE_invoke 命名约束 · 10-task 提及 W6。
|
|
18
|
+
- `discipline-coverage.yaml` `as_of` → **2.12.1**。
|
|
19
|
+
|
|
20
|
+
### Notes
|
|
21
|
+
|
|
22
|
+
- patch · 对规范命名无影响;依赖 slug 误计的畸形文件名 close 可能新 BLOCK
|
|
23
|
+
- 迁移指引:[`docs/USER_GUIDE_v1.0_zh.md`](docs/USER_GUIDE_v1.0_zh.md) §6.0(不另造 RUNBOOK)
|
|
24
|
+
- **已发布**:tag `v2.12.1` 已推送(2026-07-26)· npm publish 后将 `@cyning/harness@2.12.1` 标为 `latest`
|
|
25
|
+
|
|
7
26
|
## [2.12.0] - 2026-07-26
|
|
8
27
|
|
|
9
28
|
### Added
|
|
@@ -15,14 +34,15 @@
|
|
|
15
34
|
|
|
16
35
|
### Changed
|
|
17
36
|
|
|
18
|
-
- `lifecycle.yaml` close
|
|
37
|
+
- `lifecycle.yaml` close 守卫升级 `close_invoke`(集合覆盖);`discipline-coverage.yaml` `as_of` → **2.12.0** · gaps `INVOKE-HATS`。
|
|
19
38
|
- TASK_TEMPLATE / TEMPLATE_invoke / 10·20·30 帽文同步字段与纪律。
|
|
20
39
|
|
|
21
40
|
### Notes
|
|
22
41
|
|
|
23
42
|
- SPEC:`docs/spec/SPEC-invoke-hats-retention-gate_v1.md`
|
|
24
43
|
- **破坏性(close)**:无字段时按 default 要求 10+30+40;存量仅 30 的 active 须补档、改 `minimal` 或 `--allow-invoke-gap`
|
|
25
|
-
- minor · 建议业务仓 upgrade 后按
|
|
44
|
+
- minor · 建议业务仓 upgrade 后按 [`USER_GUIDE` §6.0](docs/USER_GUIDE_v1.0_zh.md) 勾选 invoke 集合
|
|
45
|
+
- **已发布**:`@cyning/harness@2.12.0`(npm `latest` · 2026-07-26)· tag `v2.12.0` 已推送
|
|
26
46
|
|
|
27
47
|
## [2.11.1] - 2026-07-25
|
|
28
48
|
|
|
@@ -207,6 +207,20 @@ Schema:[`schema/verify_result.v1.schema.json`](../schema/verify_result.v1.sche
|
|
|
207
207
|
|
|
208
208
|
Audit **不替代** 维护者判断;22 内容质量仍须人读 review。详见 [`ONBOARDING.md`](./ONBOARDING.md) §2.2。
|
|
209
209
|
|
|
210
|
+
### 6.0 多帽 invoke 留档(v2.12+)
|
|
211
|
+
|
|
212
|
+
`task close` 按 task 元信息校验 `by-task/<slug>/` 下 invoke 文件名所覆盖的 **hat 集合**(缺省要求 `10,30,40`)。
|
|
213
|
+
|
|
214
|
+
| 字段 / 手段 | 说明 |
|
|
215
|
+
| --- | --- |
|
|
216
|
+
| `invoke_retention_profile` | `default`=`10,30,40` · `minimal`=`30` · `full`=`00,10,20,30,40,CLOSE` |
|
|
217
|
+
| `required_invoke_hats` | 显式列表,**优先于** profile |
|
|
218
|
+
| 命名 | `invoke_YYYYMMDD_<hat>[_<hat>...]_<slug>.md`;hat 只在日期后连续前缀(例 `30_40` 可双计);**slug 段勿夹** `10`/`40` 等(v2.12.1 起不误计) |
|
|
219
|
+
| `--allow-invoke-gap` | close / `verify --task` 缺帽豁免并留痕 |
|
|
220
|
+
| 存量仅 30 | upgrade 后:补 `10`/`40` 档、或改 `minimal`、或显式 `--allow-invoke-gap` |
|
|
221
|
+
|
|
222
|
+
`verify --task` 对缺口仅 **WARN**,不挡 `may_start_30`;硬闸在 close。
|
|
223
|
+
|
|
210
224
|
### 6.1 SDD-Compliance bench(维护者 · 可选)
|
|
211
225
|
|
|
212
226
|
> **业务仓日常不必跑**;用于验证 `gate-check` / `sync` 公理行为,或对照 README「试点证据」中的 bench 数字。
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# 禁止:把本文件当「每周全量重盘」流程;不做 audit --discipline UI(本波)
|
|
7
7
|
|
|
8
8
|
version: "1"
|
|
9
|
-
as_of_package_version: "2.12.
|
|
9
|
+
as_of_package_version: "2.12.1"
|
|
10
10
|
scope: "Starter · harness/prompts (10/22/30/40 + FRAGMENT)+ TEMPLATE_invoke"
|
|
11
11
|
source_audit: "rethink/2026-07-mechanization-rate · 02 转录 + 03 聚合 · 状态已按 G1–G4/N1–N4 刷新(非第二轮通读盘点)"
|
|
12
12
|
|
|
@@ -114,7 +114,7 @@ statements:
|
|
|
114
114
|
status: mechanical
|
|
115
115
|
mechanism: "M5 close evaluateInvokeHatsRetention + M6 lint-done"
|
|
116
116
|
gap: null
|
|
117
|
-
notes: "v2.12.0 默认 10,30,40;profile minimal/full;--allow-invoke-gap"
|
|
117
|
+
notes: "v2.12.0 默认 10,30,40;profile minimal/full;--allow-invoke-gap;v2.12.1 前缀 hat run"
|
|
118
118
|
mechanism_quality: null
|
|
119
119
|
- id: A7
|
|
120
120
|
source: 30-execute-code.md
|
|
@@ -274,7 +274,7 @@ statements:
|
|
|
274
274
|
status: mechanical
|
|
275
275
|
mechanism: "M5 evaluateInvokeHatsRetention / M6"
|
|
276
276
|
gap: null
|
|
277
|
-
notes: "v2.12.0 文件名 hat token · 合并 30_40 可双计"
|
|
277
|
+
notes: "v2.12.0+ 文件名 hat token · 合并 30_40 可双计 · v2.12.1 前缀 run 防 slug 误计"
|
|
278
278
|
mechanism_quality: null
|
|
279
279
|
- id: F2
|
|
280
280
|
source: TEMPLATE_invoke.md
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
| 打回重开 | 新文件或 `_r2` 后缀 |
|
|
46
46
|
| 与 reviews 分工 | reviews = 结论;invoke = **当时指令** |
|
|
47
47
|
| close 机械闸 | `harness task close` 按 task 元信息 `required_invoke_hats` / `invoke_retention_profile` 校验帽集合覆盖(v2.12+;缺省 `10,30,40`;文件名含 `30_40` 可双计;`--allow-invoke-gap` 豁免) |
|
|
48
|
-
| 命名 | `invoke_YYYYMMDD_<hat>_<slug>.md
|
|
48
|
+
| 命名 | `invoke_YYYYMMDD_<hat>[_<hat>...]_<slug>.md`(hat token **仅**在日期后、slug 前连续段;slug 勿夹 `10`/`40` 等白名单段 · v2.12.1) |
|
|
49
49
|
| commit | 落盘 + task 回填后再 commit(见 HANDOFF) |
|
|
50
50
|
|
|
51
51
|
---
|
package/harness/lifecycle.yaml
CHANGED
|
@@ -69,11 +69,7 @@ transitions:
|
|
|
69
69
|
command_or_check: "task close 检查1 · invoke hats 集合覆盖(required_invoke_hats / profile · v2.12+)"
|
|
70
70
|
severity: block
|
|
71
71
|
allow_flag: "--allow-invoke-gap"
|
|
72
|
-
note: "缺省 default=10,30,40;minimal=30;full 含 CLOSE;40 可与 30
|
|
73
|
-
- id: invoke_hats_retention
|
|
74
|
-
command_or_check: "evaluateInvokeHatsRetention · 同 close_invoke(登记别名)"
|
|
75
|
-
severity: block
|
|
76
|
-
allow_flag: "--allow-invoke-gap"
|
|
72
|
+
note: "缺省 default=10,30,40;minimal=30;full 含 CLOSE;40 可与 30 合并文件名;v2.12.1 去掉 invoke_hats_retention 别名"
|
|
77
73
|
- id: close_self_check
|
|
78
74
|
command_or_check: "task close 检查2 · 自检结论已回填"
|
|
79
75
|
severity: block
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
## 交接物
|
|
34
34
|
|
|
35
35
|
- 可粘贴进 `docs/tasks/active/task_*.md` 的正文块;并注明建议 `test_strategy`。
|
|
36
|
-
- 产出 task 须 `npx @cyning/harness task lint --file <task>` PASS(v2.3+ · 结构闸 E1–E7 / W1
|
|
36
|
+
- 产出 task 须 `npx @cyning/harness task lint --file <task>` PASS(v2.3+ · 结构闸 E1–E7 / W1+;v2.12+ 含 **W6** invoke 留档字段提醒)。
|
|
37
37
|
- 承接 **20-task-audit 审查**:按 `docs/harness/reviews/*_audit_*.md` 回填 task。
|
|
38
38
|
|
|
39
39
|
## OSS 阶段 C · 思考轮(Starter 摘要)
|
package/lib/task-meta.js
CHANGED
|
@@ -456,18 +456,15 @@ export function resolveRequiredInvokeHats(meta = {}) {
|
|
|
456
456
|
}
|
|
457
457
|
|
|
458
458
|
/**
|
|
459
|
-
* 从 invoke 文件名提取 hat token
|
|
459
|
+
* 从 invoke 文件名提取 hat token 集合(v2.12.1+:前缀 hat run)。
|
|
460
460
|
* 兼容:invoke_YYYYMMDD_30_slug.md · invoke_YYYYMMDD_30_40_slug.md · invoke_*_CLOSE_*.md
|
|
461
|
+
* 只消费日期后的**连续前缀** hat token;遇第一个非 hat 段即停(其后为 slug,不误计)。
|
|
461
462
|
* 亦认 22→20(V2 改名等价,计为 20)。
|
|
462
463
|
*/
|
|
463
464
|
export function extractHatsFromInvokeFilename(fileName) {
|
|
464
465
|
const base = path.basename(fileName, '.md');
|
|
465
466
|
const hats = new Set();
|
|
466
467
|
|
|
467
|
-
if (/CLOSE/i.test(base)) {
|
|
468
|
-
hats.add('CLOSE');
|
|
469
|
-
}
|
|
470
|
-
|
|
471
468
|
// 去 invoke_ 前缀与可选日期段
|
|
472
469
|
let rest = base.replace(/^invoke[_-]?/i, '');
|
|
473
470
|
rest = rest.replace(/^\d{8}[_-]?/, '');
|
|
@@ -482,7 +479,10 @@ export function extractHatsFromInvokeFilename(fileName) {
|
|
|
482
479
|
}
|
|
483
480
|
if (KNOWN_INVOKE_HAT_TOKENS.has(p)) {
|
|
484
481
|
hats.add(normalizeHatToken(p));
|
|
482
|
+
continue;
|
|
485
483
|
}
|
|
484
|
+
// 首个非 hat 段起视为 slug · 停止扫描(防 slug 含 10/40 误计)
|
|
485
|
+
break;
|
|
486
486
|
}
|
|
487
487
|
|
|
488
488
|
// V2:22 与 20 等价(审 task)
|