dsh-gokifu-compact 1.9.2 → 1.9.3

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # 更新记录
2
2
 
3
+ ## 1.9.3 — 2026-10-30
4
+
5
+ ### 修 README 版本行(1.9.2 的发布缺陷)
6
+
7
+ 1.9.2 的 npm 包里 `README.md` 第 3 行仍写着「当前版本 1.9.1」—— 用户装上包后第一眼看到的就是错的版本号。
8
+ 本版**只修这一处**:`README.md` 第 3 行 = **1.9.3**,与 `package.json` 的 `version` 一致。
9
+
10
+ - 代码零改动:`src/`、`scripts/`、`lib/` 与 1.9.2 逐字节相同。包内其余差异只有 `package.json` 的版本号、
11
+ `README.md`(本修复),以及 `docs/` 两份维护文档的最终稿。
12
+ - 发布门禁新增硬断言:`README.md` 的「当前版本:x.y.z」必须等于 `package.json` 的 `version`,不一致即拒绝发布。
13
+ - 单测 **378 项全绿**(含 task-59 的测试夹具改造;`test/` 不进包)。
14
+
3
15
  ## 1.9.2 — 2026-10-30
4
16
 
5
17
  ### ⚠ 破坏性契约变化:`graph.json` 不再是「最新状态」
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # dsh-GOkifu-compact
2
2
 
3
- > 当前版本:**`1.9.1`** · npm [`dsh-gokifu-compact`](https://www.npmjs.com/package/dsh-gokifu-compact) · [GitHub Releases](https://github.com/MYCF711/dsh-GOkifu-compact/releases) · 更新记录见 [CHANGELOG.md](CHANGELOG.md)
3
+ > 当前版本:**`1.9.3`** · npm [`dsh-gokifu-compact`](https://www.npmjs.com/package/dsh-gokifu-compact) · [GitHub Releases](https://github.com/MYCF711/dsh-GOkifu-compact/releases) · 更新记录见 [CHANGELOG.md](CHANGELOG.md)
4
4
 
5
5
  **DSH 的棋谱式上下文压缩后端 —— 把「历史 → 一段摘要」换成「历史 → 可复盘的棋谱 DAG + 每步只有 323 tokens 的热清单」。**
6
6
 
@@ -8,7 +8,7 @@
8
8
  热清单 323 tokens (2000 边压力测试;旧版全量渲染 28,800)
9
9
  失败保留 8 / 8 (真实模型对照;官方 8 段模板 4.67 / 8)
10
10
  清单开销 0.2% of prompt (v1.3.1 起;事故会话的旧版是 21.3%)
11
- 验证 373 项单测 · 真实包 8/8 · 真实进程 fold 3~6/6
11
+ 验证 378 项单测 · 真实包 8/8 · 真实进程 fold 3~6/6
12
12
  ```
13
13
 
14
14
  GO = 围棋,kifu = 棋谱,compact = 压缩。一局棋下完,棋谱上不只有落子顺序,还有每一手的评语。
@@ -1810,3 +1810,75 @@ STALE_MS = 10 * 60 * 1000
1810
1810
 
1811
1811
  - 只写顺序与清单;**不含新测量**。
1812
1812
  - **未验证**:task-57 / task-60 结论未出;冻结线的最终文件指纹与 shasum **必须届时现打**(本节故意不写具体数值,避免过期误导)。
1813
+
1814
+ > ✅ **2026-10-30 03:2x 全部解**:task-57(P6-A)与 task-60(P7)**均 PASS** ⇒ 冻结线全部复核点已过;**1.9.2 已发布**。详见下方 §三十五。
1815
+
1816
+ ---
1817
+
1818
+ ## 三十五 · ✅ **1.9.2 已发布定稿**(2026-10-30 03:22:55)· 只写事实与契约
1819
+
1820
+ > 逐项证据见根 `计划表.md` §九十六 / §九十七 与 `ws-release-1.9.2/REPORT.md`。
1821
+
1822
+ ### 35.1 发布事实
1823
+
1824
+ | 项 | 值 |
1825
+ |---|---|
1826
+ | **commit** | **`70b66ad1d0242ef580e9388705e03f7c3af7d4f6`**(24 文件;无 `tmp/`·`.harness`·`.engine-under-test`) |
1827
+ | **tag** | **`v1.9.2`**(annotated)→ `70b66ad` = `origin/main`;远端 tag 对象 `fe46cdbf…` |
1828
+ | **npm** | `dsh-gokifu-compact@1.9.2` · **shasum `6569803c47429cee2c906130a70b74b1f09522d4`** |
1829
+ | **包** | **61 文件 / 435,709 B / unpacked 1,108,665 B** · `latest = 1.9.2` |
1830
+ | **GitHub Release** | `https://github.com/MYCF711/dsh-GOkifu-compact/releases/tag/v1.9.2` |
1831
+ | **全树指纹** | **`902ddd58adf3282cb075b5ff14d733cc9f943281f3cd9cfb61c18fdadc2b5831`** |
1832
+
1833
+ **门禁**:G1 **373/0(30 文件)** · G2 **16/16** · G3 6/0/0 · G3b doctor 错误 0 / 警告 2 · G4 **61 文件**。**冻结副本 ↔ commit 后重打 `MATCH`**。
1834
+
1835
+ **冻结线内容**:P3 / P4 / P5 / P6a / P6-A / P7 / S2b(**不含 task-59,不含 P6 B/C**)。
1836
+
1837
+ ### 35.2 🔴 `graph.json` 契约变化(**外部工具必读**,已进 README + CHANGELOG)
1838
+
1839
+ 1. **`graph.json` = 上一回合基线的完整快照**;**`graph.json.delta.jsonl` = 本回合增量帧**(一帧一行 `<baseHash16>\t<checksum31>\t<json>`);
1840
+ 2. **回合内落后一回合** —— `graph.json` 只在**回合边界(`agent/status idle`)**落一次;**直接 `JSON.parse(graph.json)` 当「最新」会少一回合数据**;
1841
+ 3. **正确读法**:`fromJSON` → `decodeDeltaFrames(delta, baseHash)` → 逐帧 `applyDelta`(三函数在 `src/graph.mjs`,随包发布)。
1842
+
1843
+ **⇒ 这是「行为契约变化」而非纯性能优化:性能收益可回滚,契约变化影响所有下游消费者。**
1844
+
1845
+ ### 35.3 三条必须与契约一起引用的**余量**
1846
+
1847
+ | # | 余量 |
1848
+ |---|---|
1849
+ | 1 | **短回合(<10 步,p10 = 13.9)写放大仍可能 >×50** |
1850
+ | 2 | **`dirty > 100` 时 fold 后 flush ≈ 87–89 ms**(余量很小) |
1851
+ | 3 | **`appendFileSync` 跨平台(尤其网络文件系统)原子性未验证** |
1852
+
1853
+ ### 35.4 ✅ **`impossible` 口径三句**(此后引用必须三句齐全)
1854
+
1855
+ 1. **真实库分布**:**0 / 133**;
1856
+ 2. **夹具可产出**:**是**(task-60 临时 home 实测 **1 次**,doctor 显示 `none=3 / over-budget=2 / impossible=1`);
1857
+ 3. **「不可达」只在「真实数据形态」范围内成立** —— 不能写成「代码里不可能」。
1858
+
1859
+ ### 35.5 🔴 **第二个打包阻断**(本轮最有价值的工程发现)
1860
+
1861
+ **`src/.engine-under-test-p3.mjs`(57,914 B,P3 测试替身)会被打进 npm 包** —— 因为 `files` 里的 `"!src/.engine-under-test.mjs"` 是**精确文件名**,不匹配 `-p3` 后缀;而 **`.gitignore` 只管 git,不管 `npm pack`**。
1862
+ **修复**:`files` 增补 **`"!src/.engine-under-test-*.mjs"`** ⇒ **entryCount 62 → 61**。
1863
+
1864
+ **⇒ 定稿纪律:「git 忽略 ≠ npm 忽略」—— 两套机制互相独立。任何 `src/`/`test/` 下的替身或夹具文件必须同时在 `files` 里排除,且用通配符而非精确名。**
1865
+
1866
+ ### 35.6 冻结面最终 sha(**1.9.3 / 2.0 必须重打基线**)
1867
+
1868
+ ```
1869
+ README.md 03:21:41 14,351 B facdb92050806aa4…
1870
+ CHANGELOG.md 03:21:41 74,894 B 04c6949e907d3957…
1871
+ package.json 03:20:43 2,293 B d77519df2d6a8e01…
1872
+ docs/方案-持续优化.md 03:18:43 151,971 B 6d250f21582ff4b1…
1873
+ docs/草稿-持续优化.md 02:47:58 97,028 B 4955d4f7144c7e24…
1874
+ docs/计划表.md 01:47:25 3,114 B fed9cbc1a194365b…
1875
+ QUICKSTART.md 01:47:37 4,953 B b6c32c6e9cf60fc2…
1876
+ 发布包 shasum:6569803c… 全树指纹:902ddd58…
1877
+ ```
1878
+
1879
+ **⚠ 本文件(方案)每次被写都会产生新 sha ⇒ 下一次发布的基线只能在「届时冻结之后」重打,`6569803c` / `902ddd58` / 上列文档 sha 一律不能复用。**
1880
+
1881
+ ### 35.7 本节边界
1882
+
1883
+ - 只写事实与契约;**不含新测量**。
1884
+ - **未验证**:Release 正文内容;`git archive` 与工作树包差异(`01e358e1…` / 435,440 B)的完整成因;运行期收益(贯穿全篇的同一项)。
@@ -956,3 +956,53 @@ ode_modulesdsh-gokifu-compactscriptsinstall.mjs`)⇒ 判 false ⇒ 连 `run()`
956
956
  ### 19.7 变更日志追加
957
957
 
958
958
  - **2026-10-30 R13 冻结期与顺序错误**:确立「发布冻结令 = 先冻结写入面、再打基线」、「文档改动 = 包改动(`docs` 占包 62.3%)」、「re-gate 要看体积差而非只看 shasum」三条;新增三条否决(R13-1 文档不影响发布 / R13-2 先打基线后收尾文档 / R13-3 只看 shasum);记录事故链(V4 修复 → G4 基线作废 → task-49)、冻结期缓冲机制,以及「1.9.1 已发布成功(shasum `dfb255da…`)」。**R1–R12 的设想与否决记录一字未改。**
959
+
960
+ ---
961
+
962
+ ## 二十 · R14 · **我核验了,但核的不是自己的版本**(2026-10-30 03:2x)
963
+
964
+ > **这一轮只问一件事:一个「我做过的核验」,能不能反过来变成「我没错」的证据?**
965
+ > 答案:**不能 —— 如果核的不是自己写的那一版。**
966
+
967
+ ### 20.1 事实
968
+
969
+ 我在 README 里写过一段 `graph.json` 契约说明,随后做了「5 项源码核验,全部成立」,并据此在文档里写「**原样保留 + 补了证据表**」。
970
+ **但 `ws-release-1.9.2` 报告指出:那版草稿有两处事实错误,是 release 侧核对代码后改掉的**:
971
+
972
+ | # | **我写的** | 实际 | 证据 |
973
+ |---|---|---|---|
974
+ | **1** | `graph.delta.jsonl` | **`graph.json.delta.jsonl`** | `engine.mjs:265/333` = `` `${file}.delta.jsonl` ``,`file` = `graph.json` |
975
+ | **2** | 「插件内部 **`loadGraph()`** 会合并增量」 | **`loadGraph()` 不存在** | `grep -rn "loadGraph(" src/*.mjs` **零命中** |
976
+
977
+ **⇒ 我核的 5 项之所以「全对」,是因为我读到的已经是**改正后**的版本(mtime 03:18:54),不是我自己写的那一版。**
978
+
979
+ ### 20.2 根因(不是「能力不足」,是「对象错位」)
980
+
981
+ **我以为在核「我的东西对不对」,实际上核的是「屏幕上现在这个文件对不对」。**
982
+ **这两个问题在「文件被别人改过」时会分叉 —— 而我没意识到它们会分叉。**
983
+
984
+ ⇒ **这和我此前记的「修对了、时机错了」(R13)是同一族:动作正确、对象错位。**
985
+ ⇒ **也解释了为什么我当时的结论读起来毫无破绽**:我确实逐条查了源码,源码也确实支持那 5 条 —— **只是那 5 条不是我写的。**
986
+
987
+ ### 20.3 本轮否决(R14-1…R14-2)
988
+
989
+ | # | 设想 | 否决理由 | 时间 |
990
+ |---|---|---|---|
991
+ | R14-1 | ~~「我核过源码,所以我写的东西没问题」~~ | **核验结果只能证明「被核的那个版本」正确**。要证明自己写的东西对,必须在**自己那一版还在屏幕上时**核,或**保留自己写时的快照再核** | 2026-10-30 |
992
+ | R14-2 | ~~「别人改我的文档,我去比对、接受或回退」~~ | 划掉。正确做法不是「比对后接受」,而是 **先核事实、再决定留谁的表述**。本次 release 侧是对的(它拿代码核了函数名与文件名),我的是错的 —— **所以「谁写的不重要,谁有代码证据才重要」** | 2026-10-30 |
993
+
994
+ ### 20.4 新纪律(写进流程)
995
+
996
+ 1. **写技术断言后,立刻在自己那一版上逐条核** —— 不要等「下次再看」。
997
+ 2. **凡是「我核验过」的结论,必须附「核的是哪个版本」**(sha / mtime)。**版本不明,核验无效。**
998
+ 3. **文件名与函数名必须 `grep` 源码确认,不得凭印象** —— 本次两个错都是「凭印象写了个像样的名字」:`graph.delta.jsonl` 少一段、`loadGraph()` 根本没这个函数。
999
+
1000
+ ### 20.5 正面样本(本轮唯一做对的)
1001
+
1002
+ **我发现了「README 369→373 大小不变、sha 变」,并立刻报了冻结面变化** —— 这条让 release 在打基线前改用 03:21:41 后的 sha,**避免了一次「基线起点过期」**。
1003
+ **⇒ 同样是「核验」,那次核对了**(拿 sha 比、发现 size 相同但 sha 不同);**这次核错了对象**。
1004
+ **⇒ 差别在于:那次我怀疑的是「文件有没有变」,这次我假定的是「文件没被别人动过」。**
1005
+
1006
+ ### 20.6 变更日志追加
1007
+
1008
+ - **2026-10-30 R14 核验对象错位**:记录「README 契约段两处事实错误(`graph.delta.jsonl` → `graph.json.delta.jsonl`;`loadGraph()` 不存在)由 release 侧用代码核出并改正」;新增两条否决(R14-1 我核过源码所以我写的没问题 / R14-2 别人改我的文档就比对接受或回退);确立「核验必须附版本」「文件名函数名必须 grep 源码」;记录 1.9.2 发布事实(shasum `6569803c…`)与第二个打包阻断(`src/.engine-under-test-p3.mjs` 会进包 ⇒ **git 忽略 ≠ npm 忽略**)。**R1–R13 的设想与否决记录一字未改。**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-gokifu-compact",
3
- "version": "1.9.2",
3
+ "version": "1.9.3",
4
4
  "description": "DSH context-compression backend with a go game record (kifu) DAG: node = position, edge = attempted move + result. Incremental fold (each span summarized once), failure memory that survives compaction, transposition detection (chess-engine style), and a tiny hot ledger rebuilt every step.",
5
5
  "repository": {
6
6
  "type": "git",