# AGINT ↔ dsh 兼容矩阵 AGINT 把它当作部署契约:版本不对应就跑不起来。 ## 当前 > **0.2.1-rc.2 实测(2026-10-18,Win11 / Node v24.20.0 / 官方 Electron 桌面版内核)**: > 装成功、真启动成功。环境需先补齐两处,**都不是 AGINT 代码缺陷**,但不补就装不上: > 1. 本机 `profiles/node_modules/@deepseek-ai` 全部是**空 junction**(指向已被 App 升级删掉的全局 npm 安装), > AGINT 的裸包名解析入口因此为空。补齐方式:另装一份 0.2.1-rc.2 包树,把 > `.agint-deps/dsh-runtime/node_modules/@deepseek-ai` 换成指向该包树的 junction。 > 2. 本机无 `rsync`,`safe_rsync` 走 python 回退;该分支 `--delete` 语义会**删掉步骤 1.5 刚放好的 > zod**,导致 4d 裸 import 冒烟 4/35 失败并回滚。装时必须加 `AGINT_RSYNC_NO_DELETE=1`。 > 验证口径:`install.sh` 退出码 0、4d 冒烟 35/35、`dsh --profile <测试profile> --dump-config` 退出 0 > 且组合树含 40 条 agint 行、`dsh --profile <测试profile> --no-open --port 18899` 真实起服务并打印 web URL。 > > **2026-10-26 补充**:本机 dsh 已升到 **0.2.1-rc.3**,AGINT 侧无破坏性变更、插件照常加载; > 但**未重跑 4d 裸 import 冒烟与全量安装链路**,故下表 v0.14.0 的 dsh tested 仍记 0.2.1-rc.2。 > > **2026-10-27 补充**:rc.3 下**全量安装链路已实跑**(`install/redeploy.sh` 全绿:install exit 0 / > 端口 19s 就绪 / 27 cron job / 无 `skipping profile bundle`),8 个门禁全 exit 0; > 但 4d 裸 import 冒烟仍**未复测** ⇒ v0.15.0 的 dsh tested 记作「安装链路 0.2.1-rc.3 / > 冒烟口径仍是 0.2.1-rc.2」。 | AGINT | dsh minimum | dsh tested | notes | |-------|-------------|------------|-------| | v0.15.0 | 0.1.7-rc.1 | 0.2.1-rc.3(全量安装链路 + 启动已实跑;4d 裸 import 冒烟未复测) | **D2 token 计量收口(宪法 §5.3 首次真正生效)+ D6 防回潮 + 部署一键化**(2026-10-27,5 提交:2 feat / 2 fix / 1 docs;32 文件 +1736 −79)① ⭐⭐⭐ **D2 有效进化增量接上 token 项**(`5776471`):宪法 §5.3 的「有效进化增量 ≤ 0 ⇒ 拒绝部署」此前**从未执行过**(分母 token 项自 v0.1 起恒缺)。三段落点 —— 测量侧 `agint-tool-stats` 0.2.0 新增 `lib/resource-window.js` + `resourceWindow({days,offsetDays})`(口径:任务 = (sessionId, turn)、完成 = 组内**全部** ok、token 只累加**测得**值并给**覆盖率**,`null` 没测与 `0` 测得零严格分开);判定侧 `agint-quality-eval` 0.4.0 新增 `lib/effectiveDelta.js` + 服务面 `effectiveDelta()`(Δ完成率 / Δ(token+步数+耗时),**fail-closed**:token 覆盖率 < 0.5 ⇒ `unknown` + `token-unmeasured`,绝不把分母退化成「步数+耗时」冒充完整读数)+ weeklyTask Phase 3 接入(三态都出声)+ 60s TTL 缓存;消费侧 `agint-quality-policy` 0.9.0 在 `decide()` 自动取该判定:`ineffective` ⇒ AUTO_DEPLOY **封顶 PENDING_REVIEW**,`unknown` ⇒ 不阻断但写 `triggeredBy: effective-delta-unmeasured:*`(护栏未生效必须可见)。`avgTokenCost` 出真值 **1068**(此前恒 null),四处「恒 null」注释订正。**真机取证**:当期 7 天 token 覆盖 93.85%、基线窗 0% ⇒ `unknown`(正确结论:基线无历史 token 数据,待自动达标;届时按现数字会是 ineffective)。② ⭐⭐ **D6 防回潮门禁**:`agint-mount` 早已走 `process.env.DSH_HOME`(2026-10-21),本轮补 `bin/check-boundary.mjs` B2 规则 `host-service-key-selfinvent` —— 写回 `ctx.get('dshHome'/'profilesDir')` 即 exit 1(阴性对照:注入旧写法红、还原绿)。③ ⭐ **`install/redeploy.sh` 部署一键化**(`9ab8078`):装 + 部署位核验 + 重启 + 启动后核验串成一条命令,fail-closed(装失败/核验不过不重启),退出码 0/1/2/3/4/5 分级;实测约 55s 跑完全绿。④ **`bin/safe-update.sh` 两处静默失败 + 四处过时默认值**(`afb69ee`):`restart` 因 dsh 不在非交互 PATH 把服务停在停止态、`pgrep -f 'dsh web'` 会命中执行脚本自身(最坏 SIGTERM 打自己)、`AGINT_HOME` 写死旧路径、快照拍的是不参与挂载的镜像位(回滚等于没回滚)、smoke 写死 6 个 job(实际 27)。⑤ **preset 沙箱段去机器私有值**(`9bb01f8`):删掉写死的 `D:\DSH` workspace 与固定 `workspace-write` / `ask` 档位,改「以运行时上下文为准」。⑥ **`plugin-preflight` skill 第 5 步接 redeploy.sh**(`aafbbcd`)并订正三处过时口径。**验收(2026-10-27 实跑)**:30 条单测全绿(tool-stats 9 / eval 16 / policy 5,⛔ 阴性对照 13 处);`check-boundary` 无新增越界;`check-wiring` PASS(0 硬缺口 / 6 未触发 / 2 域从未通电,部署后**零漂移**);`check-l0-frozen` 通过(11 个受保护单元);`verify-manifests` ERROR 0 / WARN 0;`check-tool-schemas` 120 schema / 0 invalid;`check-patch-yaml` 8/8;`plugin-check` exit 0。**部署**:`redeploy.sh` 全绿(install exit 0 / 端口 19s 就绪 / 27 cron job / 无 skipping profile bundle)。**未做**:① `deltaTokens` 是**压力差估计**(含该轮模型回复),非 billing 级计费 —— 精确值上游 `@deepseek-ai/dsh-token-meter/client` 的 `deriveTurnTokenUsage(events)` 已勘察未实施(仓库根解析不到、仅部署位 bundle 可解析),口径与升级路径见 `docs/known-limitations/token-cost-not-billing-grade.md`;② 有效进化增量在基线窗 token 覆盖达标(≥50%)前稳定报 `unknown`;③ dsh 0.2.1-rc.3 的 4d 裸 import 冒烟仍未复测;④ 查询 B 仍有 6 个主题未触发。 | | v0.14.0 | 0.1.7-rc.1 | 0.2.1-rc.2(本机 0.2.1-rc.3 运行,未全量复测) | **子 preset 拆仓 + LLM 无降级 + Frozen 首期收口 + 事件总线查 E'**(2026-10-26,28 提交:10 feat / 9 fix / 6 chore / 1 test / 1 refactor / 1 docs;120 文件 +6062 −7858)① ⭐⭐⭐ **BREAKING:三个子 preset 迁出本仓**(`25e09b0`):`agint-blockchain`/`agint-investor`/`agint-ops` 是个人角色层(差别只在人格/路由/技能库,工具面全复用本仓插件),迁到独立私有仓 `agint-presets`(bundle `@agint/presets`),本仓只产出母 preset `agint`(删 30 个文件、patch 只留一条 preset 声明、`install.sh` 1.3 只管 agint 的 25 行工具行(不越界改别的仓铺进来的 preset)、`uninstall.sh` 只卸 agint)。已装过的机器重装后这三套会从 UI 消失,需另装该仓;family-panel 把三个 id 提成 `EXTERNAL_PRESET_IDS`,按实际挂载行分组,未装则不显示。② ⭐⭐ **LLM 四插件「无降级」**(`651fc94`):oracle 0.7.0 / dream 0.6.0 / driver 0.4.0 / autocreate 0.7.0 —— 宿主契约改优先 `subagents.startActivation`(旧 `start` 仅兼容分支),**删掉 heuristic-degraded 回退与分档开关**:LLM 失败时 oracle 中止广播 + alert + 重试、dream 零提升、driver 抛错、autocreate 判 null 需人工,不再拿本地启发式冒充模型结论。③ ⭐⭐ **Frozen 首期正式收口**(`8775202` + `582f6c7`/`3ffa170`/`054f52d`/`dd41fdb`/`76dd37b`):10 名额 = 已锚 4 + 新编 6(cron 排期可解析 / metrics 不健康源隔离 / memory recall 计数 / memory 同 id upsert / install 脚本 `bash -n` / eval 维度合同),H1–H5 全绿(新编占比 60.0%,**余量 0** ⇒ 提案器加**热备槽位**);聚合 hash `a2a7fd9f…` → `2ddd0119…`,由周一 10:30 `frozen-anchor` job 自动入账。修提案器两处致命缺陷(`17b7f63`):**漏传 `previousFrozenIds` ⇒ 自检静默跳过 H5、产出必被门禁拒的替换集**;槽位策略改 blind-first(缺 1 的域优先且**一次补齐**,纯 e2e 域沉底防环境噪声当回归)。④ ⭐⭐ **事件总线查 E'**(`cd214c9`):查 B/C 以 topic 字符串为索引,「该发事件却连主题名都没声明」一行输出都没有 ⇒ 2026-10-09 人工盘点据此漏掉 5 个插件而门禁报 PASS;新增判据「已挂载 + 提供 agint.* 跨插件服务 + 生产路径 eventBus 引用 0 = UNWIRED 硬缺口」,并接线 `agint-rules` 发 `rules.changed`、`agint-restart` 发 `restart.requested`/`restart.settled`(settlement 落在新进程 apply,bus 未就绪时有界补挂 20×250ms,绝不影响重启主链路);豁免 3 个合理零感知插件;顺带修 `--json` 输出被 `process.exit` 截断(console.log 写管道异步 ⇒ 改 `fs.writeSync`)。⑤ ⭐ **跨机可移植三修 + 多端共存**:`cordis.patch.yml` 的 preset include 写死 Windows 绝对路径 ⇒ 非 Windows 机全部「配置文件找不到」,改回 `__DSH_HOME__` 占位符由 `install.sh` 展开(`67d239a`),同步清掉 `agentsSizeGuard` 默认值与 family-panel `repoRoot` 的机器私有值;数据根新增 **`AGINT_DATA_HOME` 专用覆盖口**(dreams/wiki/reviews,隔开「`AGINT_HOME` 双语义」——安装器当源码根、插件当数据根——`5056e0a`);`install.sh` profile 参数化收口(帮助范围、路径注释、重启提示、zod 兜底位,`ec0849c`)。**preset 工具行锚 `.agint-bundle/plugins` 主挂载源**(`7aca13f`)—— 原先按 `--profile` 改写 25 行工具行,装 web 再装 desktop 会把先装那端全部指空且**零报错**(表现为模型莫名丢了记忆/wiki/cron 工具),改锚后路径不含 profile 名、一份 preset 服务所有端,安装器并逐条核验 25 个目标存在;`check-wiring` 查 E 的计数拆成「引镜像位(真风险面)」与「锚 bundle 位(同源、无第二实例)」两字段,避免改锚后把已修好误报成风险面变大。⑥ ⭐ **dream recovery 去重**(`7fee880`):sweep 主循环 promote 后不回灌 `existing`、recovery 又缺 `promotedAt` 过滤 ⇒ 生产表 6 条同内容重复(跨 09-30/10-01/10-08 三晚);改为 `existing + 本轮提升条目` 供文本去重,另用 `promotedKeys` 兜住 similarity 低于阈值但 recall key 相同的漏网。⑦ ⭐ **self-model schema 守卫**(`c775ee2`):5 个工具的运行时返回值 vs `output.schema` 一致性测试(含否定对照)。⑧ **假红清零**:`2152ef5` 10-07 fail-closed 判据变严后夹具没跟上(4 个存量单元假红)、`385dada` 10-09 新增 cron job 未同步期望清单(两处同源转红)、`03da677` 合并后重生成场景清单(**136 单元实测对账**,Frozen 10 名额保留)。⑨ ⭐ **preset 工具行锚 bundle 主挂载源**(`7aca13f`):preset 文件全局只有一份(`$DSH_HOME/.agent-presets/agint/`)却被**所有** profile 共用,而 1.3 步按 `--profile` 把 25 行工具行写成 `../../profiles/<名>/plugins/` ⇒ **「装 web 再装 desktop」会把先前那端的 25 行全部指空,且一行报错都没有**(表现为「模型莫名其妙没了记忆 / wiki / cron 工具」);改锚 bundle 主挂载源 `../../.agint-bundle/plugins/`,路径不含 profile 名,装一次两端同时成立,顺带消掉查 E 点的双实例风险(工具行与服务插件指向同一份物理文件)。⑩ ⭐⭐ **四插件补接线,查 E' 清零**(`d057287`):`rules.changed` 自 10-09 就在发(生产已 2 条)但 `deliveredTo` 恒 0 ⇒ 订阅落 `agint-metrics`(新增 `lib/eventCounters.js`,与 `policy.*`/`dream.rejected` 同形态);`agint-wiki` 发 `wiki.updated`(**仅落盘成功后发**,remove 的 ENOENT 不发,否则计数变「调用次数」而非「变更次数」);`agint-quality-contract` 发 `quality.contract.violated`(仅 L0 拒绝分支——L1 已写 memory 审计,真黑洞是拒绝分支:`validatePatch` 不过就 throw,错误随调用栈消失,而多签废除后 L0 没有事前审批);`agint-abtest` 发 `abtest.started`/`abtest.concluded`(含 winner/pValue)。⑪ ⭐ **查 H 扫描盲区**(`e7a5507`):`listLibFiles()` 只做 `root/<名>/lib/*.js`,「分组目录 / 根入口插件 / lib 内 .mjs」三类都看不见 —— 改了 `agint-quality-contract/lib/index.js` 而仓库与三处部署位 md5 明确不同,查 H 全程未报漂移;改 `discoverPluginDirs()`(目录自证即插件根:有 `lib/` 或 `manifest.json` 或 `index.(m)js`,否则视为分组目录继续下潜,**不设深度上限、不维护白名单**),查 E 比对项 129→132、查 H 覆盖 762→831 文件(277×3 部署位,+69 恰为 23 个盲区文件×3),查 I 名字提取改认 `/` 与 `:` 双分隔符并用真实目录映射。⑫ **codex provider 同名冲突**(`a0f94fd`):host 平面 `spawn-in-process-codex` 行与官方 bundle `@deepseek-ai/dsh-subagent-codex` 撞名(`DEFAULT_PROVIDER_NAME='codex'`),dsh 抛 `already registered`、官方那行激活失败(启动日志 `1 entry did not activate`);摘掉 host 行,codex 归官方 bundle(真 codex CLI),preset 的 `tool-subagent-codex` 按 provider 名查找无需改,重启后本段无 `skipping profile bundle` / `did not activate` / `already registered`。**验收(2026-10-26 实跑,8 个门禁全 exit 0)**:`check-wiring` **PASS**(0 硬缺口 / 6 未触发 / 2 域从未通电 / 0 插件总线零感知);`check-l0-frozen` 通过(11 冻结单元逐一核对);`check-spec-versioning` 0 ERROR / 1 WARN(规范 5 份 · 矩阵规则 5 条 · 不变量 5 条 · knownGap 2 条);`verify-manifests` 扫描 44 个插件目录(manifest 39 / package 42)、**ERROR 0 / WARN 0**(36 条挂载声明 → 已挂载 36 / 未挂载 8 / 嵌套 3);`check-tool-schemas` 27 file / 120 schema / 0 invalid;`check-boundary` 无新增越界;`check-patch-yaml` PASS 8/8;`check-dsh-compat` exit 0(3 条提示:上游包改名、本机 dsh 已到 rc.3 与表格 rc.2 有漂移、宿主 asar 未核对)。**未做**:① 本批仅仓库发版,宿主部署位须跑 `install.sh` + 重启才生效(preset 工具行锚定这处改动必须重装一次才落到部署位);② 三个子 preset 需另装 `agint-presets` 私有仓;③ dsh 0.2.1-rc.3 未做 4d 裸 import 冒烟与全量安装复测;④ 查 B 仍有 6 个主题未触发(`policy.rolledback` 等),等自然触发或人工构造一次。 | | v0.13.0 | 0.1.7-rc.1 | 0.2.1-rc.2 | **能力边界契约 + 会话真相源统一 + 家族面板提案台**(2026-10-23,102 提交:46 fix / 25 feat / 12 docs / 8 test / 6 chore / 3 refactor)① ⭐⭐ **能力边界契约 + 边界门禁**(`8205f75`/`635e7bd`/`08cade3`):新增 `docs/capability-boundary.md` 契约与 `bin/check-boundary.mjs` 门禁(单测 + 基线记账 + 破坏性变更核验),给 DSH 升级后的衔接留一条可判基线;专项盘点 34 条,**F8 同类模式逐处核实 8 处全为假警报**(本轮不改代码);上游源码补丁退役、**voice-hotkey 补丁归档**。② ⭐⭐ **会话真相源统一 + input-gateway 两接线点**(D1/F5 迁移,`7e7770d`/`bd211a1`/`d69a69f`/`78da995`):新增插件 **`agint-session-source`**(会话发现收敛到统一入口,改消费上游 `sessionQuery`,4 处调用点),会话日志名字表两份副本合一,cross-agent 第二接线点完成。③ ⭐⭐ **家族面板 0.2.6→0.5.0(一处 BREAKING)**:新增「神谕 · 美之判词」分区、家族名册行**下钻单插件档案页**(归因表收成单一事实源)、**0.4.0 BREAKING**(整页视图改读单一归因表、界面文案去内部代号)、「提案台 · 人工审批」(列表 / 详情 / 证据 / 写通道)、「待办」节;腐化判据加闸——**注释命中须「无提供方且无代码取用」才算候选**;`HOST_KEYS` 补 `tokenMeter`/`core.hmr`。④ ⭐⭐ **神谕 `agint-aesthetic-oracle` 0.4.1→0.6.1**:**confidence 维接通建议数据源(该维此前从未端到端生效)**、评分公式 r2 三修复(bloat 上界 / Q1 效应量门槛 / Q2 ratio 排序)、神谕层 5 条提案落地、**r4 判尺规模不变性 + Q1 总分门 + LLM 熔断 + 提案闭环**(94 例回归全绿)。⑤ ⭐ **安装器 profile 参数化**(`18577a7`/`3bda137`/`88151dd`/`c73a563`):`--profile` 可装进非 web profile、profile 名进运行时(装到非 web 不再静默降级)、`locate_dsh_dir` 取代裸 `npm root -g`(修 nvm 机器上 mirror 卫兵静默失效)、悬空解析入口摘除重建 + 零删除模式;34 条 profile 解析测试各配 negative control。⑥ ⭐ **bundle patch YAML 预检门禁**(`d67ef31`):`!!js` 只能写成标量——修 bundle patch 解析失败致 **`@agint/host` 被静默跳过**,并加 `check-patch-yaml` 预检。⑦ ⭐ **去假绿**:13 处 manifest/package.json 版本分家清零(WARN 13→0);兼容门禁纳入**真实宿主版本对照**(两条版本轨道 + asar 能力面对账,消「对着 dsh 副本判、对宿主失明」);preset 平价门禁 shipped 基线改按 npm 平铺布局探测;修 `check-tool-schemas` 裸跑必失败(P0/P1)。⑧ ⭐ **静默失败治理**:cron 失败轮不再落成 `lastResult='ok'`;input-gateway 的 C4 adversarial 事件订阅此前从未生效且 `health()` 报假绿;`self-model` evidence 从 push 改 pull(修能力读数振荡);接线门禁的多处假绿订正。⑨ **cron / watcher**:D5 迁移——时刻计算改走上游 `dsh-schedule` 规则引擎;新增 `input-gateway-watchdog` 巡检采集活性;新增工作区指令体积哨兵 `agents-size-guard`(AGENTS.md 双限 + 宿主 12000 预算,只告警不自动改)。⑩ **restart 桌面链路 0.9.1/0.9.2**:桌面 profile 重启复现 GUI 主进程(不再拉 headless host 抢 19387)、就绪改判新 GUI 树根连续两拍驻留、host 入口改扫全量 argv。⑪ bus **T2 空壳清理(方案 B)**删 `publishMountRequest` 与 `mount.*` 计数订阅;`agint-evolve` 提案状态机补 `approved`(批准与落地分开记);新增插件 **`agint-verify-tools`**(AGINT 验证入口注册为全局工具,替代 preset 覆盖);`agint-ov-strategy` 0.1.1 `ov.recall.checked` 补 `hitUris`(C3,路线图 2.1);eval 负控制 `EXPECTED_RED` 单列且不进覆盖率分母。**验收(2026-10-24 实跑,8 个门禁全 exit 0)**:`check-wiring` 0 硬缺口 / 0 未触发 / 0 域从未通电;`check-l0-frozen` 通过(11 个冻结单元逐一核对);`check-spec-versioning` 0 ERROR / 1 WARN(规范 5 份 · 矩阵规则 5 条 · 不变量 5 条 · knownGap 2 条);`verify-manifests` 扫描 43 个插件目录、**ERROR 0 / WARN 0**(挂载判据 `cordis.patch.yml` 36 条声明 → 已挂载 36 / 未挂载 7 / 嵌套 3);`check-tool-schemas` 27 file / 120 schema / 0 invalid;`check-dsh-compat` exit 0;`check-boundary` 无新增越界;`check-patch-yaml` 13/13 可解析。**未做**:① 本批仅仓库发版,宿主部署位须跑 `install.sh` + 重启才生效;② `check-dsh-compat` 留 1 条 INFO——`agint-restart` 测试文件仍引用上游已改名/弃用的 `@deepseek-ai/dsh-desktop-host`,未换成新包名;③ 浏览器端「按钮点击 → 命令 draft → adjudication」仍无集成测试(本仓无浏览器测试基建);④ 边界契约记账里 `token-metering` 只测工具调用前后的累计差,非调用级精确计费。 | | v0.12.0 | 0.1.7-rc.1 | 0.2.1-rc.2(另于 0.2.0-rc.2 验证) | **三轮全仓审查收口 + 重启链路加固 + 输入即投**(2026-10-07,21 提交)① ⭐⭐ **三轮代码审查修复 S1–S14 + N7–N10**(`f1c94ce` / `aa84e3a`):门禁 fail-open 收口为 fail-closed、检测器自身异常不再被吞、综合分收编唯一实现(消双实现漂移);restart 补取消闭环 + 锁 TOCTOU + 密钥正则 + cmd 转义;event-bus 补 retry 上限 + 死信 reaper;self-model `openStore` 补 replay;ledger-anchor 回退清 index;`agint-zstd-bootstrap` 去 eval。② ⭐⭐ **重启链路五连修(2026-10-06 重启事故复盘,`4c40bc1`/`09f7bf9`/`7f5bbdd`/`f90d485`)**:就绪判据从「端口可连」改为**验监听者身份**、NODE_OPTIONS 剥离必须发生在展开**之后**(此前顺序错导致 22:24 重启未生效)、env 快照剔除密钥 + `writeJson` 落 0600、`isAlive` 补僵尸进程判别(**每次重启少等 42.7 秒**)。③ ⭐ **`agint-input-gateway` 0.1.3→0.1.4 即投改造**(H1 方案②)+ 新增 `sync-proposal` 提案信号(C5 方案 B)④ ⭐ **`agint-evolution-memory` 0.6.14** `addFailure` 值域归一化(立项 H6 方案 B)+ 配套治理;值域门禁接入 `plugin-check` 阻断位(老板拍 §6-3)⑤ `agint-curriculum` 0.1.1→0.1.3 模板域并入 `integration`/`correctness`(零挑战修法①)⑥ config P2-1/P2-2 正规切 live + §7.4 容量重拍(老板 2026-10-06 拍板)⑦ **`install.sh` 1.45 mirror 位解析卫兵**(防 dsh-tools stub 事故复发)+ 拓扑感知加固(scope symlink 下禁逐包操作);⑧ **`cordis.patch.yml` preset include 路径随 dsh 0.2.0 baseUrl 语义修正**——4 个 preset 此前**永不注册**;`agint-evolution-memory` 块补 `repoRoot` 修写锚 ENOENT;⑨ `agint-dream` consolidation 补 `reasoningEffort` + 分批整合 + start 挂死兜底;`agint-ov-strategy` 总线订阅补晚挂契约(原来只在 apply 调一次);session-integrity 订阅补齐收口 H3 悬空枚举。**验收(2026-10-07 实跑)**:`check-wiring` PASS(0 硬缺口 / 2 未触发 / 248 lib 全同步,含 v0.11.0 遗留的 restart 0.9.0 未同步已收口)、`check-dsh-compat` exit 0、`check-tool-schemas` 119 schema / 0 invalid、`verify-manifests` 0 ERROR(12 WARN 为存量)、`check-l0-frozen` 通过、`check-spec-versioning` 0 ERROR / 1 WARN。**未做**:本批 21 提交**仅仓库发版**,宿主部署位需跑 `install.sh` + 重启才生效;浏览器端「按钮点击→命令 draft→adjudication」仍无集成测试。 | | v0.11.0 | 0.1.7-rc.1 | 0.2.0-rc.2 | **手动控制面 + 事件投递可查 + 接线契约收口**(2026-10-05,24 提交)① ⭐⭐ **手动控制面落地(`agint-restart` 0.8.1→0.9.0,BREAKING 插件面)**:新增浏览器半区 `lib/client.js`(`dsh.client` platform=web + `exports./client`),在 `conversation.composer.dock` 挂「重启 DSH」「终止 DSH」两个**两段式确认**按钮(点一次上膛、4 秒内再点才生效);点击变成 `/restart-dsh` 与 `/stop-dsh` 两条命令的 draft,经 composer 自身的 InputActions(`setDraft`+`submit`)提交,**零 RPC、零新增网络暴露面**。⛔ **第三方插件的 loopback HTTP 网关方案被刻意弃用**:同一宿主进程内已有 commands 服务,走它零新增暴露面,且护栏拒绝理由(冷却/熔断/单在途)会回到会话里——fetch 拿到 202 只知「被受理」,不知最后成没成。终止链路由新增 `lib/killer.js` 承担(从 `@local/dsh-kill-switch` 移植),形状与 respawn 严格同形:宿主写 `stop-request.json` → detached 拉起 killer → 枚举进程树 → **叶子优先 SIGTERM** → 升级 SIGKILL → 写 `stop-result.json`;**宿主刻意不自杀**(killer 的 pid 复用防护比对「ppid 仍在原主」指纹,宿主先死会让子进程 ppid 变 1、指纹失配而漏杀)。group 信号与逐个信号**两层同时投递**(dsh 起的工具进程 PGID ≠ PPID,只发组信号会全漏变孤儿)。`manifest.kind` 由 `host` 改 `both`。**根因留证**:上线第一天 `inject` 漏 `commands` ⇒ `ctx.get('commands')` 返回 null ⇒ 两条命令**静默不注册**(slot 显示 `active:true`、按钮渲染正常,但 `/restart-dsh` 作为普通用户消息发给了模型)——cordis 只把 inject 数组里声明过的服务接到 ctx 上,已加回归防线。② ⭐⭐ **事件投递从「猜」变「查」(`agint-event-bus` 0.7.3 + `agint-family-panel` 0.2.4→0.2.6)**:`events` 表新增 `deliveries` 列落盘,per-topic 投递数**跨重启可答**(评审 3.3 口径缺口);面板事件链表投递列改**全历史口径**并新增存量行未知告警(存量行没有 deliveries ⇒ 显式标「未知」,不拿 0 冒充);新增发布侧孤岛判据;零投递订阅分三档(读得到 / 读不到分岔断言,部署位无 `docs/` 属正确降级)。③ **接线契约收口(W1 清三条悬空声明 +豁免表登记)**:清 `event-bus` / `input-gateway` / `skill-graph` 三条悬空声明;豁免表登记 11 条 mount/self-observation 主题,复查改判 1 条;`agint-skill-autocreate` 补声明 consumes `agint.qualityPolicy`。④ **静默失败四连修(每一条都是「工具整体不可用」级)**:`agint-dream` 0.4.1 `dream_status` 补 `counts.dedupeStats` 声明(K164 第四次,同一坑反复);`agint-quality-policy` `policy.deployed` payload 缺 targetId 时不再发布 undefined;`agint-aesthetic-oracle` 0.4.2 L1 措辞增强超时 10s→60s(daily 连续降级根因)+ 0.4.3 审计 findings 补 mode 与 LLM 降级 reason;`agint-cron` diagnosis-watchdog 告警分两级(WARN 不再让 job 判failed)+ `agint-diagnosis` `report()` 加空壳报告守门(冷启动期不落 reports 行)。⑤ **`mount → population.ingest` 实装**(`agint-mount` 0.7.1,SMOKE PASS 后投样本,origin=synthesized)+ `agint-population` 0.6.3 fixate 落记忆 notify 实装,删 diagnosis/qualitySandbox 两条补不了的声明。⑥ **治理**:license 定案结果改 v5 口径(写清 fork / 状态源插件 / 资产三者边界);family-panel 仓库位新增候选 ⓪ `config.repoRoot`。⑦ **验收(2026-10-05 实跑)**:`check-wiring` PASS(0 硬缺口 / 0 未触发,248 lib 文件全同步)、`check-dsh-compat` exit 0(无版本漂移)、`check-tool-schemas` 119 schema / 0 invalid、`verify-manifests` 41 目录 / 0 ERROR(13 WARN 全为存量 VERSION_DRIFT)、restart smoke 48 case / 47 PASS / 0 FAIL / 1 skip、全批文件行尾 LF。⚠️ **未做**:restart 0.9.0 的 lib 尚未同步到宿主部署位(check-wiring 查 H 报「已全部同步」是因新文件在仓库侧单边),上线前须跑 `install.sh` + 重启 dsh;浏览器端「按钮点击→命令 draft→adjudication」无集成测试(本仓无浏览器测试基建);killer 真机「有子进程时一起杀干净」仍待补验 | | v0.10.0 | 0.1.7-rc.1 | 0.2.0-rc.2 | **自进化度量仪器链 + 家族面板 v2 + 桌宠状态源**(2026-10-01 → 10-05,138 提交)① ⭐⭐ **自进化度量仪器链(A1–A6 路线图)**:1b R1′ 实测尺子落地(改动面测试子集双态跑 → actualDelta 入表);R2 技能类第二仪器(人工签核内容断言集,首批 36 条签核 8/9 绿,github-push 75% 老板拍「不动」;driver 0.2.16→0.2.19);Frozen 基准集落地(候选提案器 + 23 单测 → 首期 4 个存量单元入账 → frozen-anchor job 宿主内入账 → benchmark_frozen_set 防篡改留证);结构化 Growth Report 生成器 + 31 单测(A2);eval 存量 FAIL 归因器 + 周报固定章节(A4);**H1 判据死锁修复**(口径对齐 + 揭穿 3 个假 fail,criteriaOk 转 true)——清单自称的「权威总数 123」是错值(实际 131),改函数化消除腐化源;Phase 0.1 三层隔离判据层 + 生成器 --check + 读端门。② ⭐⭐ **家族面板 v2 上线(agint-family-panel 0.1.4→0.2.3)**:v2 整页(效果稿转生产、常量改实时 fetch、删外部埋点)+ 聚合层(storages 三源 + manifest consumes + TTL/mtime 缓存、每源独立降级)+ 源码扫描器(code/comment/umbrella 三分类,L0.5 真源)+ v2 内嵌停靠面板默认视图(0.2.1)+ 高度自适应(0.2.2)+ storages home 认标探测(0.2.3,修 v2 三源全 ENOENT);host 侧新增 /v2 与 /v2/data 实时聚合路由(回环 + kill-switch 同守卫),v1 名册一键可切。③ ⭐ **桌宠生态 + 品牌定稿**:第 38 个插件 `agint-mascot` v0.1.0(桌宠状态源;skins 通道补上——系统健康改走 setSkin);安装位定案 `pets/agint-pet`(id 与目录名同步);回环改 V3 深度驱动轨道模型(顺时针、闭合摆动);zhijin-frames 参数化帧生成器与对照表工具;AGINT 形象规范 v0.6(形态定稿 A + 自进化回环,撤销「禁止可识别 A 字形」);新增「两仓关系」文档(划界 / 契约 / 归属)。④ ⚠️ **BREAKING(插件面)**:`agint-evolution-memory` 0.6.13 —— 5 个工具的 `opts` 包装层拆平为扁平参数,调用点需同步改;配套 memory 0.6.11/0.6.12(ledger-anchor 锚点根支持 config.repoRoot;Config schema 声明 repoRoot——否则 zod 剥键致 config 永达不到 apply)、cron 0.2.11/0.2.12(services 快照表补 agint.evolution;summary 降级带标量值、runNow lastError 出口转字符串)。⑤ **repoRoot 修复链(机器私有值不入仓)**:agint-cron 三处依赖仓库根的 job 空转补 repoRoot;install 部署时保留本机 repoRoot override(方案 1);cordis-patch driver 块 repoRoot 改 `!!js` 且 install 保留逻辑随之收窄;insideRepo 两侧 resolve 归一,修 Windows 正斜杠 repoRoot 全量误拒(driver 0.2.19);三个技能里的机器私有路径改占位形式(R2 红线 1 号)。⑥ **M1 供料断链修复**:session-extract 发现层认 v4 会话日志并按「后缀 + 版本秩」发现,读不到要出声(`15a63fd`;09-22 会话日志改名 v4 后约 260 个目录对发现层不可见,候选停供)。⑦ **治理与契约**:9 份 manifest 补 `consumes` 契约声明 + 修 check-wiring 提供侧路径过滤;rule_list/rule_audit 输出 schema 补声明存储层新增字段;input-gateway CountersSchema security* 改 nullish(修 null 旧记录致整域 open 失败);compat 版本下限判定改用 semver(原手搓比较会把预发布版判反);提示词治理 A5 描述瘦身(实测净减 93 字符 ≈ −60 token,**证伪**原估 −5,500);新技能 three-state-audit(三态核账:代码态 / 运行态 / 数据态);README 英文版上线(双语切换);全仓许可定稿 MIT(受限资产靠白名单挡,不靠删目录);接线豁免清单补 `evolution.contract.locked` 的「外部见证」判据(消费方走 lockEventId 反查而非总线订阅,非接线缺口)。⑧ 验收(2026-10-05 实跑):`check-l0-frozen` 11/11 ✅、`check-wiring` PASS(0 硬缺口 / 1 未触发;漂移插件 family-panel smoke 1/1 全过)、`check-dsh-compat` ✅ 无版本漂移 | | v0.9.0 | 0.1.7-rc.1 | 0.2.0-rc.2 | **kill-switch 真能杀掉整棵进程树 + 插件热插拔进智进 preset + bundle 自毁修复**(2026-10-01)① ⭐⭐⭐ **v1.0.0 的按钮从来就没通过过(→ 2.0.1)**:`client.js` 调的是 `ctx.remote.commands.execute(sessionId, '/kill-dsh', [])`, 而 `cordis_inspect_list`(client 平台)实测客户端只有 8 个服务(layout/locale/sessions/slots/theme/timer/uiWorkspace/workspaces)—— **没有 remote,也没有 commands**(`@deepseek-ai/dsh-api-remotes` 是 host 侧的包)。点按钮必抛 `cannot get property "remote.commands" without inject`。**难查之处**:slot occupants 里 `dsh-kill-switch` 一直 `active: true`, 按钮渲染得出来,bug 外观完全看不出来,只有点下去才炸。改走 composer 自己的 `InputActions`(slot 标准 prop,契约见 `dsh-client-ui-conversation/.../contract/input.d.ts`):`setDraft('/kill-dsh')` + `submit()`,走 Enter 管道(adjudication → claim transaction → sink), `/` 开头的行判为命令并送到 host handler,**零 RPC**。未选 `host.call` 的原因:它属 dynamic Plugin 的 builtin,本 bundle 走 `__ModuleLoader__` 通道,该形态下能否拿到它未验证。 代价如实交代:`submit()` 无返回值,页面断=成功、没断=命令被拒(UI 已写明判据);`setDraft` 会清空已有草稿。 ② ⭐⭐⭐ **v1.0.0 只杀自己一个 pid,子进程全变孤儿(→ 2.0.0)**:`process.kill(process.pid, sig)` 主进程一死,子进程立刻变 PPID=1 继续跑,端口与内存都不回收。 改为**独立 killer 进程**(与 agint-restart 的 respawn 同形状):宿主写 `kill-request.json` → detached 拉起 `killer.js` → 枚举 `/proc/*/stat` → **叶子优先** SIGTERM → 升级 SIGKILL → 写 `kill-result.json` 回执。 **宿主刻意不自杀**(killer 的 pid 复用防护比对「ppid 仍在原主」指纹,宿主先死会让子进程指纹失配而被漏杀)。仅用 node 内置模块——它是最后一道执行者,宿主正在退出,任何一次 import 失败都等于这次终止静默失效。 ③ ⭐⭐⭐ **组杀只覆盖同组进程,必须再补一层逐个信号(真机 ps 抓到的 bug,→ 2.0.2)**:killer 原来在 `canUseGroup` 分支**只发组信号**,一个逐个信号都不发。 但组信号只能打到**与宿主同进程组**的进程,而实测 dsh 起的工具进程 **PGID ≠ PPID**(dsh `531931` / 工具 bash `645330 PGID=645330`)——**每个工具都自成一个组**,只发组信号会全漏,当场变孤儿。 改为**两层投递**:组信号负责「快 + 收掉快照之后才加入本组的进程」,逐个补刀负责「不漏」,阶段 2 升级时同样两层都发。 上一轮测试没抓到,是因为假 dsh 用 `detached:true` 起、子进程**继承**其进程组,异组这种形状压根没被造出来。 ④ ⭐ **组信号的前提从设计推理升级为实测**(`test/group-signal.test.mjs`):让组长在快照**之后**才 fork,该子进程照样被组信号收掉。这条若不成立,组杀路线的唯一理由就没了。 ⑤ ⭐ **回执的 `tree` 长度才是分母,`ok` 不是**:`ok:true` 只说明「目标已消失 **且** 快照内都死了」,不覆盖快照之后才存在的东西。 2026-10-01 两次真机回执(`ba99fd7d` 17:02、`5f750d0e` 17:22)`tree` 长度均为 1 —— 按钮链路与「终止生效」由它们证明,**子进程清理真机未验**(当时 mcp-proxy 尚未启动),已在 README 写明判据,不拿沙箱结果充数。 ⑥ **防回归测试**:`test/client.test.mjs` 5 条断言不得再出现 `ctx.remote`、`inject` 声明的每个服务都在实测清单内、必须走 `setDraft`+`submit`、两步确认护栏未被削掉(断言只对剥离注释后的代码生效);`test/own-group.test.mjs` 2 条用 `detached:true` 造真机同形的异组子孙。 顺带修 `index.test.mjs` 隔离缺陷:status 读真实 `~/.dsh` 回执,导致结论取决于开发机点没点过按钮,改为 `DSH_HOME` 指向临时目录。 ⑦ 验收:`node --test "test/*.test.mjs"` **29/29 绿**(假进程树 + 假异组树,不碰真 dsh);真机两次回执 `ok=true survivors=[]`,耗时 2.3s / 1.5s。 ⚠️ 未决:真机「有子进程时一起杀干净」仍待补验(dsh 由终端启动时 `SESS` 属终端 shell,本方起的后台进程会被 reparent 到终端 bash、挂不到 dsh 底下;只有插件自起的子进程如 mcp-proxy 在树上,且它间歇出现)。 ③ **智进 preset 拿到 `plugin_manager`**:`presets/agint/agent.cordis.yml` 末行加 `tool-plugin-manager`(`@deepseek-ai/dsh-plugin-manager/tools`,`disabled: !!js "!ctx.get('profileContext')"`),与内置 cordis / twin preset 逐行同构 —— host 层同名行是 `disabled: true`,由各 preset 显式 opt-in(standard / ptc 不 opt-in)。四条子 preset(区块链 / 投研 / 生产运维)**不加**:按设计禁用自修改类工具。③ ⭐⭐⭐ **修「AGINT 把自己剪掉」的自毁坑**(②能成立的前提):实机验收发现 `@agint/host` **根本没在加载** —— `list_bundles` 报 `cannot resolve profile bundle`,35 个 host service 行 + 4 条 preset 声明行全部缺席,host 零报错。根因:bundle 当初 rsync 一整份目录到 `profiles/web/node_modules/@agint/host/`,只注册进 `dsh.profile.bundles`、**没进 profile 的 `dependencies`** ⇒ `plugin_manager` 每次 `install_bundle`/`remove_bundle` 都在 profile 目录跑 `pnpm add|remove`,**pnpm 会剪掉清单里没有的包** ⇒ 装 kill-switch / twin preset 那两次热插拔早把 AGINT 删了。**v0.8.2 记的「不写 dependencies 也能挂,已实测」是错的** —— 当时挂上了,但没测「挂上之后再装别的包」。修法三件:实体挪到 `$DSH_HOME/.agint-bundle/`(仍是冻结副本;dsh 只认 `profiles/web/node_modules/` 一个位置,故该处改软链)、`install.sh` 3.5 同时写 `bundles` **与** `dependencies["@agint/host"]="link:<实体目录>"`、3.6 建软链;`uninstall.sh` 2.5/2.6 对称摘除。**实证**:手工 `rm` 软链后 `pnpm install --frozen-lockfile` 自动重建(`+ @agint/host link:../../.agint-bundle`)。④ ⭐⭐ **③引入的回归,首次重启才暴露**:11 个插件 `failed to import`(memory / dream / cron / metrics / evolve / tool-stats / compress-guard / input-gateway / aesthetic-oracle / family-panel / wiki)。根因 = **裸 `import 'zod'` 的祖先链随 bundle 位置而变**:旧位 `profiles/web/node_modules/@agint/host/` 的祖先链含 `profiles/node_modules`(那里恰好有 zod)⇒ 能用,**纯属位置巧合**;新位 `.agint-bundle/` 的祖先链不含 `profiles/` ⇒ `ERR_MODULE_NOT_FOUND: Cannot find package 'zod'`。bootstrap 脚本的注释把这个巧合写成了「由 Node 向上查找到 profile 的 node_modules/zod」,等于把 bug 写进文档。修法:新增第三位 **`/node_modules/zod`**(这个包**自己的**依赖根,对插件恒为祖先,与 bundle 装在哪、与软链都解耦),三位齐备才算就绪;顺手修它一个老毛病 —— 只判 `[ -e "$d" ]` 就 die「不是合法 zod 目录」,**部分就绪态下重跑必卡死**(唯一补救是人工删目录),改为按内容判(已是 zod→跳过,版本不同→告警,非 zod→才拒)。⑤ ⭐ **新增装后门禁 4d「裸 import 冒烟」**:dsh boot 期只打一行 `failed to import` **不报缺哪个包**,「装完→重启→发现 11 个挂了→才知道是 zod」要绕一整圈;哈希一致 / YAML 合法都不等于代码能 import(K78 教训)。条目来源是 **patch 里 `name: ./plugins/…` 的真实声明**(锚定行首,`#` 注释天然不匹配),不是 glob 目录 —— `agint-quality-eval/-contract/-policy/-report` 是 `agint-quality` 的**嵌套子模块**,顶层 glob 扫不到。实测 **35/35 声明入口 import 通过**(宽松 grep 数出 36,多的是 patch 第 109–115 行注释掉的 `agint-quality-report`,本就故意不挂载,但目录还在 ⇒ LOCAL-STATE 静态计数器把它算进「37 个挂载插件」)。⑥ 顺带修 install.sh 2.5 真 bug:只 `mkdir -p "$BUNDLE_DST"`,而 rsync 3.1.3 **只建 dst 最后一级**(实测 code 11)⇒ 首次真机安装必炸并触发全量回滚;改 `mkdir -p "$BUNDLE_PLUGINS_DST"`,python 回退分支 `os.makedirs` 加 `exist_ok=True`。⑦ 文档:`dsh-integration.md` 部署位 + 自毁警告、`cron-schedule-principles.md` 三副本路径、`plugin-preflight/SKILL.md` 编辑目标块。⑧ 验收:`check-l0-frozen` 11/11、`check-wiring` PASS、装后 4d 冒烟 35/35。⚠️ 已知失真源两处:② `bin/agents-local-state.mjs` 的「host 挂载插件」是**静态扫目录**(读 `profiles/web/plugins`),既不代表运行时真的加载了(本次即被它误导一轮),也把未挂载的 `agint-quality-report` 算了进去(37 目录 vs 35 声明入口);③ 判定真挂载请看 `plugin_manager list_plugins` / `dsh --profile web --dump-config` | | v0.8.6 | 0.1.7-rc.1 | 0.1.7-rc.2 | **自进化闭环首次端到端跑通 + 实体存在性门**(2026-09-27): ① ⭐⭐⭐ **闭环闭合(四判据全中)**:`agint-evolution-driver` v0.2.0–v0.2.5(0.2.5 实体存在性门提升为可复用模块,与 manifest 对齐)六连修后,18:30 真实链路首跑全通 —— `agint_mutator.json` 落盘(真实提案 c663cb3a)+ `evolution.mutation.proposed/committed` 事件 + 仓库真实改动(SKILL.md +12 行,preimage 备份)+ `agint_population.json` 首次落盘(variant 6bc84456)。修链:事件总线出口(K113)→ 子代理空壳两层根因(K114:`meta.agentPreset` + `agentOptions:{provider,model}`)→ mutator 幽灵接口 queryAnnotations→annotate(K115)→ 目标定位三级(技能名/提案反引号路径/放弃)→ mutator 调用约定两处(promptId slug 化 + validate 传 `{proposal}` 整对象)→ 规则 3 多编辑提案取首原子步 + 片段 6000→20000。② ⭐ **实体存在性门(v0.2.5)**:闭环首条产出引用了不存在的插件 agint-evolution-viz,幻觉闸门(verbatim oldText)防不了内容级编造 ⇒ construct 增第二道闸:仓库路径验 repoFiles 成员、agint-* 验**目录前缀**、snake_case 验 `plugins/*/lib` 生产代码索引(**剥注释行**;⭐ 证据必须结构化,docs 规划/eval mock/注释的「提及」不算数 = K115 教训泛化;实测纠偏:evolution_log/metrics_summary 其实真实存在,唯一编造 = 插件名)。kill-switch `AGINT_EVOLUTION_DRIVER_ENTITY_GATE=off`,默认开(K51)。真实数据离线验证精确拦下唯一编造、零误报。③ **同源空壳一并修**:`agint-dream` v0.3.4 consolidation + `agint-skill-autocreate` v0.5.4 llm-verdict 补 agentPreset(K114 泛化;dream child 6c603d1b 22 天来首次真调模型,outTok=409);`agint-mutator` v0.6.4 修幽灵接口;`agint-skill-autocreate` 新增语义命名门禁 name-gate(接发布前+观察期,放三道既有门之后)。④ **cron**:新增第 16 个 job `evolution-cycle`(周日 04:15;⚠️ 2026-09-29 `c86eb17`「v0.2.3 排期重排」后已改为**周二 07:00** `0 7 * * 2`,此处保留 v0.8.6 发版当时的真实状态,未回改)。⑤ 验收:driver smoke 32/32、dream 110/110、三副本 md5 对账一致、干净进程(boot 19:03 > 部署 18:57)加载确认;18:30 脏编辑经老板拍板回滚、`.agint-preimage/` 入 gitignore(`0bbdfa7`)。⚠️ 未决:内容级质量门禁只覆盖三类可机器验证实体,自由文本编造仍靠 PENDING_REVIEW 人工档兜底;实体门在真实链路的首次拦截待下轮 evolution-cycle 观察 | | v0.8.5 | 0.1.7-rc.1 | 0.1.7-rc.2 | **双提案落地 + ov-strategy 上线 + 查 I 门禁**(2026-09-27): ① ⭐ **提案 0f91c868(父)+ 932486d6(子)落地**:`agint-dream` v0.3.3 返回 schema 补齐(`dream_run_now` 补 `dedupeStats`/`health`、`dream_status` 补 `health`,新增 output-schema-conformance 测试,走真 `dsh-tools validateJsonSchemaValue` 管线);`agint-event-bus` v0.7.2 `EventEnvelope` 7 字段全声明(id/topic/version/occurredAt/source/traceId/payload + correlationId optional),record 顶层补 topic/source 冗余标量;**决策**:events 保留 hashtable(dsh-storage-domain KV 契约,改数组破坏全仓格式且零读取方),迁移方案 = 顶层补冗余标量;source 改 enum **被否决**(枚举会让新 source 发布被静默拒绝 `accepted:false` 不报错),改 `KNOWN_EVENT_SOURCES` 冻结快照。② ⭐ **`agint-ov-strategy` v0.1.0 上线并修复两个真实缺陷**:apply 尾部补 `ensureObserver()`(此前从未初始调用 ⇒ ov.recall.checked 等观测镜像出不来)+ `status()` 字段 `observe`→`observer`(与 smoke/设计稿 §3.4 契约一致);修复后仓库/部署位 smoke 16/16、门禁全绿。③ **check-wiring 加查 I**:漂移插件 smoke 门禁(2026-09-27 教训 —— 哈希/语法一致 ≠ 代码可用,ov-strategy 上线后 smoke 12/16 红);漂移插件(查 E divergent + 查 H repoNewer/hostOnly/repoOnly)的 `manifest.spec.tests.entry` 必须 smoke 通过,否则 exit 1。④ **经验沉淀**:wiki「挂载-重启红线」补部署同步红线 3 条(双副本必须同时同步 / 上线前必须跑插件 smoke / 生效看重启时间线不看 mtime)。⑤ 验收:agint-dream 110/110、agint-event-bus 20/20、ov-strategy smoke 16/16(仓库+部署位)、check-wiring 全绿;README 插件全景同步 33 | | v0.8.4 | 0.1.7-rc.1 | 0.1.7-rc.1 | **T2 四边收口 + 会话格式 v4 适配(K78)**(2026-09-25): ① ⭐⭐ **A7 `metrics.snapshot` 对账「批永不结算」修复**:根因 = 攒批器只有「下一批开始才算上一批结束」一个判据,而一次采集在同一 `generatedAt` 下**连发 12 条** ⇒ 批永远不切换 ⇒ 生产实读 `batches:0 / compared:0 / consistencyRate:null`,对账**自 09-12 起停摆 12 天**(wiki 上「一致率 100% PASS」是孤本,实为停摆)。修法两段:v0.7.5 埋 `lastIngestAt`(**收到时刻**)与 `lastComparedAt`(**结算时刻**)分离,让「投递断了」与「批没结算」在数据上可二分(两者在单一时间戳下长得一模一样,无法排查);v0.7.6 加**空闲结算** `settleIdleMs`(默认 30s,`0`=禁用)——批打开后无新事件即自动结算 + 强制落盘,定时器 `unref()`,**不需要发布端配合**(另一条路是让发布端在末条打 index/total 标记,要动两边、发布端一改就失效)。终验:`cron_run_now` 触发采集后 `lastIngestAt`→`lastComparedAt` **相隔 30.013s**(正好命中 30000ms),`batches:1 / compared:1 / consistencyRate:1 / lastBatchSize:12`,对账脚本 **A7 ✓ PASS**。② ⭐⭐ **A1 `evolution.proposed` 判定放宽**:不是简单降门槛 —— 动手前取证发现**两个假指标**:`consistency` 恒 0(影子行与直连行是**互斥写入**、同一提案只落一行,交集天然为空 ⇒ 指标本身不成立,门禁改看 `shadowCoverage`);窗口内漏的 1 条是**已修的历史 bug**(`b2d9edb`「domain 未就绪即调用 → 静默丢事件」,修复落位 09-21 17:29:49,事件在 09:15:53)。改法三件套:`KNOWN_MISSES` 排除名单**带 reason 且输出原样打印** + **`--no-exclude-known` 关闭开关**(无开关的排除名单 = 后门)+ 新增 **`PASS_WEAK`** 弱证据档(样本 ≥2 且**窗口内 100% 全覆盖** ⇒ 放宽的是样本量**不是**正确率,攒够 20 条自动升级 PASS)。反向验证 4 组:下限↑→INSUFFICIENT / 主通道降门槛→PASS / 样本 1→INSUFFICIENT / **关掉排除名单(真漏写)→ 绝不 PASS**。③ ⭐⭐ **A1 切流量 = 「摘影子帽」**:取证 `evolution_log` 170 行中 `stage:proposed` **仅 2 条且 100% 带 `event-bus` tag** ⇒ **无任何直连写入**,本边自接线起流量就 100% 走事件,「影子」是历史命名遗留(`logPhase4()` 写的是 Phase4 **决策**记录,与提案阶段记录**同表不同类、不是双写** —— 混淆会误以为「有直连要删」)。改动 = 追加 tag `t2:authoritative` + 口径修正。⛔ 双向 grep 后**保留** `event-bus`(`bin/t2-reconcile.mjs:141` `isShadow` 依赖)与 `shadow-ingest`(`eval/scenarios/driver.js:280` 主 driver 断言依赖)两个旧 tag,并补 2 条单测锁住「不得移除」。④ ⛔ **A2 `evolution.evaluated` 决议耦合豁免、永不切**(设计稿 §A5 明文允许,且 §A5 T3 退出条件原文即「直连引用清单归零(**sync 门禁边除外**)」⇒ 是设计意图不是兜底):三条硬证据 —— `event-bus/lib/delivery.js:99` `deliverSync` **丢弃 handler 返回值**只回 `{subscriber,status}`;`bus.js:134` `publish` 返回**不含 handler 值**;方向错配(发布方是 eval 且不需要决策,需要决策的 mutator 不是发布方)。⇒ **sync 订阅 = 「等处理完」不是「拿返回值」**,凡需用返回值走业务分支的调用(门禁决策 / 评分判定 / 配额裁决)都不能靠它。决定性安全理由:sync 超时降级是 `PENDING_REVIEW`,用在门禁决策上会 **fail-closed 反噬**(总线一抖 ⇒ 所有部署卡在待审),比直连故障模式(service 未挂载 → 显式抛错/明确降级)更糟。⚠️ 纠偏:`t2-sync-drill.mjs` 14/14 **只验事件层降级**(死信 / 超时 / bus 不可用 / 配额),**无一条验「决策回传」** ⇒ 不得当放行依据。⑤ **K78 会话格式 v4 适配**:`agint-rules` / `agint-restart` 往会话写消息的 `source.kind` 改为 `plugin:<插件名>` producer-owned 形态(旧包装 `kind:'plugin'` 被硬拒,界面报「本轮运行失败 format v4 message requires a producer-owned source kind」)。⑥ ⭐ `bin/t2-reconcile.mjs` 判 PASS 原**只看 keyCoverage、不看数据新鲜度** ⇒ 12 天前的数据照样判 PASS;已加 `shadowLastIngestAt` + 停滞诊断行(**对账脚本必须把新鲜度当门禁字段**,否则验的是历史不是现状)。⑦ 验收:A7 测试 48/48 + smoke 19/19 + **直接 import 宿主字节**冒烟(超时前 compared=0 → 超时后 =1)+ shadow-ingest 8/8 / domain-race 4/4 / log-buffer 9/9 + 三处 md5 一致 + `t2-reconcile` 全量跑通。**未做**:A7 新机制仅 1 批样本,门禁要求「连续 2 个周节奏周期」,需随每日 04:00 采集继续观察;A1 样本仅 2 条属弱证据,未宣称统计可靠;未跑真 `install.sh`(会动宿主依赖树与 bundle 部署位),宿主 bundle 清单未自动跟 | | v0.8.3 | 0.1.7-rc.1 | 0.1.7-rc.1 | **接线门禁 + 伞键静默断链修复 + install 加固**(2026-09-24): ① `bin/check-wiring.mjs`(新)接线完整性门禁,四查——A 空壳服务(`ctx.provide` 注册了但生产无人取用,剔除 `test/`、`eval/`)/ B 主题接线(发布方·订阅方二分,以 payload 是否存在为准)/ C 生产对账(直读 `$DSH_HOME/storages/agint_event_bus.json` 按 topic 计数)/ D 存储域通电(声明了 `defineDomain` 但 `storages/` 连文件都没有 = 插件从未运行);固化 K63 人肉盘点法,3 秒出结果,并据此**查出「自进化主链路从未通电」**。续加四查:**查 E** 双副本一致性(bundle 位 vs `profiles/web/plugins` 兼容镜像位 —— 两份是两个模块实例、模块级状态不共享且不报错;实测 50/50 一致、风险未引爆,故不改路径改写而把一致性做成门禁:分叉即 `exit 1`);**查 F** 命名空间错配(自动抓「取了没注册」的名字,本次 5 处即由此查出;判据细化:排除带 `??` 兜底的可选注入与 `exemptions.nonServiceNames` 里的配置键如 `agint.hmr`);**查 G** TS 源/产物漂移(对账 `lib` 与 `src` 的 provide 键集合,防 K78 重演);**查 H** 仓库↔部署位漂移(191 个 lib 文件逐 hash,区分「仓库独有(新文件)」与「部署位独有(宿主被本地改过)」;默认只报清单,`--strict` 才算缺口)。② ⭐⭐ **伞键(namespace key)修复 —— 5 处「按命名空间取依赖恒 undefined」的静默断链**:根因是 cordis 的 service store **扁平**(按确切键名查),`ctx.provide('agint.mutator.propose')` 之后 `ctx.get('agint.mutator')` **恒为 undefined 且不报错** ⇒ 调用点写得完全正常,拿到的永远是 null,走 degrade/skipped,日志无 error。补 5 个伞键(**纯加法,全名子键一个不动**):`agint.eventBus`(10 处 `mount.*` 发布曾因此全降级到 `ctx.emitEvent`,生产 0 条 · 2026-09-20 取证)/ `agint.diagnosis`(mutator 的 PROPOSERS 软依赖就是命名空间 ⇒ attribution-driven / strategy-rewrite 永远走 degrade)/ `agint.mutator`(population 的 `doMutatorRollback` 依赖它且是 D11 强制依赖,取不到直接 throw ⇒ 种群 cull/rollback 根本不可能执行)/ `agint.population`(quality-static 的 L0 隔离检查按命名空间取,恒空 = 检查形同虚设)/ `agint.selfModel`(curriculum 2026-09-09 就栽在这,probe 永远软降级)。补键后全仓那些「先试全名、再试伞键」的回退链不再必要(先试全名、命中即返回,不受影响)。`agint-event-bus` 的 `src/index.ts` 同步改(lib 是 tsc 产物,K78)。③ `bin/verify-umbrella.mjs`(新)—— **运行时证据,非静态 grep**:grep 只能证明「代码里有这行」,证明不了「运行时真注册上了」;用 mock ctx 真跑一遍 `apply()`,按 `BOOT_ORDER` 把依赖插件先 boot,检查伞键存在且非空壳(有成员)+ 插件声明的硬依赖全名键真取得到(拿不到 = 静默降级)。当前 bundle + mirror 双位 **10/10 PASS**(含 mutator→eventBus.publish/subscribe、population→agint.mutator 两条真实依赖链)。④ `agint-metrics` 接 `dream.rejected` 计数器(`lib/dreamCounters.js`,按 `policyCounters` 既有模式写,一并接入 dispose 链)—— K68 记 dream 卡在去重,没计数就无从判断卡点。⑤ `install.sh` **3.5 步自动注册 `dsh.profile.bundles`**:把 `@agint/host` 追加进 `$DSH_HOME/profiles/web/package.json` 的 `dsh.profile.bundles`(追加在列表末尾 = 优先级最低,官方 bundle 在前);幂等 —— 已注册只打印跳过、**不重写文件**;`bundles` 非数组 → 拒绝改写并报错退出;清单不存在 → 只 warn + 手工补救提示。与 `uninstall.sh` 的摘除对称,堵住「卸载后重装 ⇒ bundle 躺在磁盘上却不加载、**且零报错**」。⑥ 修 `install/agint-security-checks.sh` **绝对路径判定**:`DSH_HOME` 被 `install.sh:74` 的 `realpath -m` 从 `/c/Users/…` 规范成 `C:/Users/…`,而安全脚本只认 `/*` 开头 ⇒ **本机安全检查恒 fail、不加 `--no-check` 根本装不了**(第 0 步即中止)。改为 `is_abs_path()` 认 MSYS ∪ Windows 三种写法(`/c/…`、`C:/…`、`C:\…`),**只放宽「像不像绝对路径」这一条** —— 后面的含 `..` / 存在性 / 可写性 / 磁盘空间一条未动(不拆 fail-closed 的门)。⑦ ⭐⭐⭐ **修 `install.sh` 回滚自毁**(最小复现实证):`trap rollback EXIT` 缺 `rc=0` 守卫 ⇒ 脚本**正常跑完**(打了「✅ 安装完成」、退出码 0)也触发回滚,把刚铺好的 presets/plugins 全删掉(症状是最恶的那种:日志绿、退出码绿、产物没了);且注册回滚的代码全在 `if [ "$DRY_RUN" != "1" ]` 里 ⇒ `--dry-run` 下回滚栈恒空,**结构性藏在唯一常用验收路径之外**(v0.8.2 只做过 dry-run,真跑一次必炸)。修法:`rollback()` 加 `rc=0 → return` 守卫 + `backup()` 对文件类 target 落 `.bak-current`(原 `restore_backup` 分支依赖一个**全仓无人创建**的文件,那半条回滚是空的)+ 新增 `commit_install()` 成功收尾(清标记、回滚栈归零)。四场景实证:正常退出**保产物** / `exit 1` 仍照删(回滚能力没被废掉)/ 覆盖后能还原 / 成功收尾标记清光。⑧ 验收:`check-wiring` 自测 18/18 + `verify-umbrella` 10/10 + `is_abs_path` 八例单测 + 负面用例(`bundles` 写成字符串 → 拒改、`md5` 不变;`DSH_HOME=relative/nope` → 仍报错且退出 1)+ 带安全检查的 `install.sh --dry-run` **EXIT=0**(新逻辑显式 `io.open(..., newline='\n')`,2 空格缩进 / 末尾 LF / 无 CRLF,与 dsh 原写逐字节一致)。**未做真机验收**:未跑真 `install.sh`(会动宿主依赖树与 bundle 部署位)、未重启;`uninstall.sh` 无同类 trap,已排查 | | v0.8.2 | 0.1.7-rc.1 | 0.1.7-rc.1 | **交付形态改 dsh bundle**(2026-09-24): ① AGINT 整体 = bundle `@agint/host@0.8.2`:仓库根 `package.json`(`dsh.bundle.patch: ./cordis.patch.yml`)+ 仓库根 `cordis.patch.yml`(31 个 host service 行 + 3 条 preset 声明行);部署位 `$DSH_HOME/profiles/web/node_modules/@agint/host/`,profile 的 `dsh.profile.bundles` 列它(**不写 dependencies 也能挂**,已实测)。② profile 级 `cordis.patch.yml` **不再写 AGINT 段**(只留本机 dsh-tui 覆盖块)——0.1.7 起 profile 级优先级高于 bundle 层,两边都写 = 同一批 id 重复挂载。③ ⛔ **路径基准不对称(K83,源码头号级取证)**:insert 行的 `name:` 锚**本 patch 文件所在目录**(故 bundle 内 `./plugins/…` 一行不改),而 **`config` 值恒字面量、按 profile 根解析** ⇒ `cordis:include` 的 `path` 仍须写 `../../.agent-presets//agent.cordis.yml`;写 `./presets/…` 的症状是**新建会话整体失败**(`agent-preset/invalid: … (cordis:include): config file not found`)。依据 `dsh-app-boot` `anchorInsertedPluginNames()` + README:65。④ zod 主位随插件进 bundle(`plugins/agint-quality/node_modules/zod`)——`agint-quality-eval/lib/index.js` 用**相对路径** `../../node_modules/zod/index.js` 借 zod;bundle 内缺它 → 该服务插件 EPERM 加载失败 → `agint.qualityEvaluator` 永不注册 → preset 的 tools 行无限等待(症状:`agent-preset/invalid: agint-quality-eval-tools … waiting for agint.qualityEvaluator`)。`install/agint-zod-bootstrap.sh` 改为同时维护 bundle 主位 + `profiles/web/plugins` 兼容位(AGINT 自身代码 `agint-dream/lib/quality-bridge.js` 与三条 preset 的 tools 行按老路径定位)。⑤ `install.sh`:插件镜像到 bundle(2.5)、挂载层**整份复制**(不再与 profile 级段合并)、新增包内解析入口 `node_modules/@deepseek-ai`(1.2)、profile 残留段检测 fail-closed;`uninstall.sh` 加 bundle 本体摘除 + `dsh.profile.bundles` 摘除(⛔ 保留包内 `node_modules` junction——`rm -rf` 会跟进目标删掉 dsh 自身的 266 个包)。⑥ 顺手修一个真 bug:`uninstall.sh` 在 Windows 上 `ids=$(python3 …)` 因 `print` 的 `\n`→`\r\n` 文本翻译残留 `\r`,`[ -d "…\r" ]` 恒假 ⇒ **卸载脚本静默跳过全部插件删除**;修法 `\| tr -d '\r'`。⑦ 静态验收(未真机重启):36 行挂载段引用文件全存在 + 34 个宿主行逐个 `import()` 全通过 + 全树相对 import 零悬空(含 preset 的 35 条相对行)+ 剔注释 diff 与迁移前**行为行完全一致**(182 行) | | v0.8.1 | 0.1.7-rc.1 | 0.1.7-rc.1 | **dsh 0.1.7 适配 + 技能资产跨升级保留**(2026-09-23,已挂载并 runtime 验收):① **自动生成技能改投用户级技能根** `$DSH_HOME/skills`(不再投进 preset 目录,重装/升级不再被 `safe_rsync --delete` 清空)——「投放目标」是条链不是一处,三处消费者同时对齐:`agint-skill-autocreate.skills_root` / `agint-curator.skills_dir` / `agint-skill-graph.extraSkillDirs`(新增字段,与既有 `customSkillDirs` 同为**追加**语义);真扫描验证 18 = 12 preset + 6 user。② **preset 声明式注册**:0.1.7 起 dsh **不再扫 `.agent-presets/` 目录**(包名由复数 `dsh-agent-presets` 改为单数 `dsh-agent-preset`),必须在 composition 里显式声明;AGINT 三条 preset(智进 / 区块链 / 投研)改用 `cordis:include` 复用原 `agent.cordis.yml`(保住定义里的相对路径与单一事实源);⛔ 踩坑:entry 上的 `group: true` 意为「子插件行放在 config 数组里」,不是 carrier 标记(carrier 身份来自插件类 `static [EntryGroup.key]`),误写会让整条 preset 抛 `must hold a list of plugin rows`。③ **preset 依赖解析入口**(`install.sh` 步骤 1.1):`include` 会把子条目 baseUrl 挪到 `.agent-presets//`,裸包名从该目录向上解析 → 找不到依赖 → 23 条官方插件行 `never started` → UI 只显示「加载失败」(**不落日志**);在 presets **父目录**放 `$DSH_HOME/.agent-presets/node_modules` → dsh 的 node_modules(⛔ 不能放 preset 子目录,重装必被删)。验证:`--dump-config` 零警告 + 114 条 entry 真加载 0 失败 + patch 30 挂载项 import 30/30 + presets 对账 DIFF=0 + 生产 storages 零污染;A/B 对照(只给一条 preset 加入口,另两条仍全挂)确证因果。**注**:dsh < 0.1.7 上三条 preset 的声明行会解析失败(智进不可见),**插件层(30 项)不受影响** | | v0.7.1 | 0.1.1-rc.2 | 0.1.1-rc.2 | Sprint 13 (P7 第二段「总线 T1 收口 + 自我模型启动」, 仅仓库发版): ① 事件边 07/08/09 场景补录 —— `s12-07`(traceId 全链一致 + payload 深冻结 `freezePayload` 写入抛 TypeError + `eventBus.syncSubscriptions` 指标导出)/ `s12-08`(at-least-once 双订阅者均 DELIVERED + handler 异常隔离故障者 DEAD_LETTERED 不影响他者 + 周复盘 wiki 两行)/ `s12-09`(sync 配额第 4 个硬拒抛错 + 死信可查 + `deadletterRate = deadletterCount / publishedCount * 100`);配套修 `agint-event-bus` v0.7.0 缺陷:`metricsSnapshot` 补 `publishedCount` 分母(原恒为 0 致死信率算不出)+ `envelope` 加递归 `deepClone`/`deepFreeze`;sprint12 e2e **7 pass 0 fail**。② 每周 ≤3 次自动部署护栏 `checkDeployBudget`(`agint-quality-eval/lib/deployBudget.js`:滚动 7 天窗口计 `policy.AUTO_DEPLOY`,>3 → PENDING_REVIEW + 审计 + 周复盘告警行),接入 weekly hook + self-model weekly 更新;**11/11 PASS**。③ `agint-self-model` v0.7.1 全新只读观察者插件(FROZEN `self-model.schema.yaml` CapabilityEntry 7 字段 + `self-model-updated.schema.yaml`;5 Service `snapshot`/`update`/`calibrate`/`stats`/`inspectSummary`;独占域 `agint_self_model` 4 表 capability_map 200 / reasoning_profile 100 / resource_baseline 50 / calibration_log 100;能力三态 **CAN/CANNOT/UNCERTAIN** + `lastVerifiedAt` 强制非空;推理模式画像(源自 diagnosis 根因分布)+ 资源基线(p50/p90 加权);校准误差护栏 ≤10% + cold-start 守门(样本 <10 → UNCERTAIN 且不计误差);影子订阅 A6 `diagnosis.completed` / A8 `dream.completed` + 发布 A11 `self.model.updated`;**D2 哲学:自我认知 ≠ 自我修改**,禁写 qualityPolicy / mutator / population;smoke **19/19 PASS**)。④ `agint-quality-static` 加第 6 族 `self-model-isolation`(blocker 档:禁写服务引用 + 存储域边界,仅对 `agint-self-model` 生效;6/6 PASS);顺带收口该插件测试套件在 Windows 上的 4 个裸路径 `import()` 崩溃(`ERR_UNSUPPORTED_ESM_URL_SCHEME` → `pathToFileURL`)+ 被崩溃掩盖的 8 个 Sprint 10 遗留断言(`listFamilies` 4→6 族 / 路径分隔符硬编码 / 缺 `l0IsolationOnly` / `static-profile.js` 注释自命中 contract-reference),静态套件由「4/5 文件跑不起来」→ **62/62 PASS**。⑤ eval 场景补 `agint-self-model.scenario.json`(10 case)+ `agint-quality-eval-deploy-budget.scenario.json`(5 case);FROZEN 契约零改动 + L0-frozen 0 命中;仅仓库发版未挂载(仓发布语义;本机 install.sh 已跑完故已挂载,详见 AGENTS.md「本机实况」自动块)。**仍待 runtime 收口**:12 存量 eval fail 归因 ≥80%(需跑全量 eval + `agint-diagnosis` 批量归因)、总线 T2 切流量(不早于约 2026-09-25 + 老板签字)。**已知 bootstrap 坑**(影响首次部署,install 必查):① RC 包清单——preset 历史上引用 `@deepseek-ai/dsh-workflow-worker-thread@0.0.1-rc.3`(dsh 已 GA ptc 不带),v0.7.1 preset 已切 `@deepseek-ai/dsh-workflow-ptc`;未来升 dsh 任何 alpha/RC 前先 `grep -rn "@deepseek-ai/dsh-" presets/ install/` 对比 dsh `package.json` deps,悬挂引用会让整张 preset 拒绝挂载。② install 自愈链路——`install.sh` 步骤 1.5 zod bootstrap(pre-plugin)必须在步骤 2 `safe_rsync --delete` 之前;`agint-zod-bootstrap.sh` `find_local_zod` 首选应为 `$DSH_HOME/profiles/node_modules/zod`(profiles 层级,跨平台恒成立),不是 `profiles/web/node_modules/zod`;bootstrap 失败只 warn 不阻断,silent 风险高。完整复盘 `docs/lessons/v0.7.1-install-bootstrap-rescue.md`,操作手册 `presets/agint/skills/agint-install-bootstrap-rescue/SKILL.md` | | v0.8.0 | 0.1.1-rc.2 | 0.1.1-rc.2 | Sprint 16 (2026-09-11, agint-restart 5 连续 patch 升格为框架发版, 仅仓库发版未挂载): ① `agint-restart` v0.7.0 恢复通知落盘待投(重启后不再丢消息)+ v0.7.1 断环(注入文案退化为纯状态「已重启」)+ v0.7.2 去重(同一次 boot 只投一次恢复通知 `deliveredForBoot` 去重位,投递成功才置位,失败仍可在窗口内重试);② v0.8.0 代码指纹(`lib/fingerprint.js`:`codeFingerprint(dir)` 对目录下 `*.js` 按文件名字典序逐个 sha256,对「文件名\0哈希\0」序列做一次 sha256 取前 12 位;纯函数、只读、绝不抛;`fingerprintChanged(a,b)` `null` 与 `null` 视为相同)+ `codeStale`(每次现算磁盘 vs marker;true = 磁盘改过、进程里仍是旧代码 → 需重启或等 HMR;首次观察到 stale 打一条日志,之后不刷屏)+ `AGINT_RESTART_CODE_DIR` 测试钩子;③ v0.8.1 输出面修复(render 增加 code=<指纹>/stale/未知 三形态,新增 Case 34)+ 立 `D:\DSH\_sync_plugin.mjs` 三段式守门脚本(先 JSON.parse + YAML,再递归复制 + sha256,任一失败 exit 2/3 不复制);④ 验证:smoke 41/41 + detect.test 12/12 + pending-notice 8/8 + repo↔host 17/17 sha256 MATCH + L0-frozen 0 命中;⑤ FROZEN 契约零改动 + manifest description 未转义直引号 v0.7.1/v0.8.0/v0.8.1 各踩 1 次的机制升级(守门脚本 fail-closed,不再依赖自觉)。**注**:v0.8.0 tag 打在 commit `8f2cd2d`,tager `DSH Agent `,annotated。**待 runtime**:codeStale 输出面需一次重启(或 HMR re-apply)才在 `restart_status` 里可见 | | v0.7.0 | 0.1.1-rc.2 | 0.1.1-rc.2 | Sprint 12 (P7 第一段「总线化」, 仅仓库发版): 通信架构解耦 = 新增 `agint-event-bus` 插件 + 流水线事件化 + Sprint 11 遗留收口。① `agint-event-bus` v0.7.0 全新独立 Cordis 插件(FROZEN `event-bus.schema.yaml` EventEnvelope 8 字段 + Subscription 5 字段;3 Service `publish`/`subscribe`/`inspect` + `inspectSummary`/`metricsSnapshot`/`disposeBus`;独立存储域 `agint_event_bus`;at-least-once + handler 隔离 + 指数退避 + 死信 + traceId;sync 订阅配额 SYNC_GLOBAL_LIMIT=3 + reason sync 必填;event-bus smoke 10/10 + plugin-check 8 维全过);② 事件化 8 条边 A1–A8(A1 evolution.proposed / A2 evolution.evaluated sync门禁 / A3 sandbox.passed·failed / A4 mount.* + B1B4 transport 替换 / A5 policy.deployed·rolledback / A6 diagnosis.completed / A7 metrics.snapshot / A8 dream.completed)——全部 T1 影子期(publish-only 不切流量,直连保留);③ A9 sync 配额 + inspectSummary 暴露 syncSubscriptionCount;A10 指标导出(`eventBus.metricsSnapshot` → metrics `eventBus.deadletterRate` + `eventBus.syncSubscriptions`)+ 周复盘模板两行;④ s12 e2e 场景 01–06 全 PASS(07/08/09 编码已验证、场景补录留 Sprint 13);⑤ 累计 **256+ 测试 PASS**(A6 4 + A7 9 + A8 4 + A9A10 4 + metrics 15 + event-bus smoke 10 + dream 19 + report 10 + 既有) + 全量 99/111(12 存量 fail 未扩) + L0-frozen 0 命中 + FROZEN 契约零改动;仅仓库发版未挂载(T1 影子期不切流量;T2 切换期不早于约 2026-09-25;仓发布语义,本机 install.sh 已跑完故已挂载,详见 AGENTS.md「本机实况」自动块)。Sprint 11 遗留 8 项 TODO 已收口(B1/B4 并入 A4;B2/B3/B5/B6/B7 各自落地;B8 D-QAF 评估顺延 Sprint 13 材料就绪) | | v0.6.5 | 0.1.0-rc.6 | 0.1.0-rc.6 | Sprint 11 (Part 6/6, **P6 收口**): L2→L3 跃迁验证(5 子任务 + 1 集成对接)— ① `agint-mount` 全新独立 Cordis 插件(3 Service `mount.request` / `.status` / `.rollback` + FROZEN L0 `mount-result.schema.yaml` + 三段式事务 PREPARE→SMOKE→ACTIVATE + 4 态状态机 PREPARED→INSTALLED→RESTART_REQUESTED→ACTIVATED + 健康探针连续失败 ≥2 → DISABLE + rollback 倒序清理;`agint_mount` 独占域 3 表 tickets/probe_history/rollback_log;17 源文件 + 9 lib/ 编译产物;10/10 smoke PASS);② `agint-quality-static` 加 `l0-isolation` 规则组(signatureCompatibility/domainIsolation/dependencyWhitelist 三合一 + SUBCHECKS 子检查常量 + 故意破坏注入测试 4 case + happy path + 集成 = 6/6 PASS;profileOverrides.l0IsolationOnly=true 仅对 synth 产物生效);③ `fixtures/mount/{echo-tool,bad-deps}/` 测试变异 11 文件(echo-tool 合规 agint_synth_echo 域 / bad-deps 单项违规依赖白名单 inject='agint.qualitySandbox');④ 8 个 e2e 场景 `agint-mount-s11-01..08`(happy / static-reject / signature-diff / sandbox-smoke-fail / health-probe-fail / sandbox-unavailable / baseline-regression-fail / idempotent = 8/8 PASS);⑤ driver.js 集成对接(`agint-mount` dispatcher 切真 qualityStatic.checkPlugin 路径,synthPluginDir helper bridge fixture manifest schema,真插件覆盖度 25% + 100% fallback 安全网;不改 driver 主流程 + 不改既有 13 dispatcher + 不改 8 scenario.json);⑥ 累计 **216 测试 PASS** (mount 10 + l0-isolation 6 + 既有 190 + 8 e2e + 2 边界) + 全量 92/104 (3 次连跑稳定) + L0-frozen 0 命中 + plugin-check 8 维度全过;仅仓库发版未挂载(仓发布语义;本机 install.sh 已跑完故已挂载,详见 AGENTS.md「本机实况」自动块) | | v0.6.4 | 0.1.0-rc.6 | 0.1.0-rc.6 | Sprint 11 (Part 5/5): 性能与实验基础设施收口(5 commit `2fc2272` + `239ad36` + `6a28302` + `cbece7c` + Sprint 11 #11)— ① `agint-evolution-memory` 加 `EvolutionLogBuffer`(log-buffer.js 117 行:计数≥10 + 时间≥5s + ctx.effect() disposer 退出钩子;新增 `logPhase4Buffered` / `readLogRangeMerged` / `flushLogBufferNow` 3 个 Service,旧 `logPhase4` 同步路径 FROZEN 不动;9/9 PASS);② `agint-abtest` 全新独立插件(start / report / listTests 3 个 FROZEN Service + 4 个统计纯函数 `welchTTest` / `bonferroniAdjust` / `cohensD` / `decideWinner`;独立存储域 `agint_abtest` 2 表 abtests 50 + samples 10000;任务集 ≥10 启动 + Bonferroni 校正 + Cohen's d ≥0.3 统计护栏;22/22 PASS);③ `agint-quality-policy` 加权综合分接入 abtest 维度(contract QualityConfigSchema 加 abtest 块 ADJUSTABLE:enabled/weight=0.10/minSamples/pValueThreshold;`abtestResultsToDimension` + `injectAbtestDimension` 两个 helper;abtest dimension 不参与 safety/trust veto);④ plugin-check 全仓 8 维度全过(policy + evolution-memory manifest 顺手补齐);⑤ 累计 **190 测试 PASS** + e2e 3/3 + L0-frozen 0 命中;仅仓库发版未挂载(仓发布语义;本机 install.sh 已跑完故已挂载,详见 AGENTS.md「本机实况」自动块) | | v0.6.3 | 0.1.0-rc.6 | 0.1.0-rc.6 | Sprint 10 (Part 4/5): 架构解耦 + 安全性能收口(5 commit `713efc8` + `e97e7b6` + `e4f0ed5` + `74f5720` + `74b4fa4`)— ① `agint-quality-sandbox` 从基座物理剥离独立(双模式 verify/explore + 4 profile 文件占位 + resolveProfile/routeForMutation 新 Service + 23/23 PASS);② `agint-quality-static` 全新独立插件(4 族 checker + scan-files helper + 26/26 PASS);③ `agint-mutator.rollback` 三段式事务(rollback.js 199 行 / mutex 58 行,FROZEN 签名不破 + 4 个可选字段;107/107 mutator 测试全过);④ plugin-check.sh 双兼容修复(spec.* 与顶层字段共存 + tests.entry 读 manifest);⑤ 累计 156 测试 PASS + 5/5 e2e + L0-frozen 0 命中;仅仓库发版未挂载(仓发布语义;本机 install.sh 已跑完故已挂载,详见 AGENTS.md「本机实况」自动块) | | v0.6.2 | 0.1.0-rc.6 | 0.1.0-rc.6 | Sprint 9 (Part 3/3): 种群管理器 `agint-population` 收口(4 表 variants/fitness_history/traffic_log/generation_log + 5 Service ingest/promote/cull/fixate/rollback + 6 维适应度函数 + safety 0.30 硬门控 + 11 阶梯状态机 + FROZEN_OBSERVE + 谱系树;88 tests 100% PASS + 6 E2E 全过 + plugin-check 8 维度全过 + L0-frozen 0 命中;仅仓库发版未挂载(仓发布语义;本机 install.sh 已跑完故已挂载,详见 AGENTS.md「本机实况」自动块) | | v0.6.1 | 0.1.0-rc.6 | 0.1.0-rc.6 | Sprint 8 (Part 2/3): 变异构造器 `agint-mutator` 收口(3 类 mutation + 4 Service + FROZEN schema + eval 19/19 PASS;仅仓库发版未挂载(仓发布语义;本机 install.sh 已跑完故已挂载,详见 AGENTS.md「本机实况」自动块) | | v0.6.0 | 0.1.0-rc.6 | 0.1.0-rc.6 | Sprint 7 (Part 1/3): 归因引擎 `agint-diagnosis` 收口(6 类根因 + 反事实 70% + 聚类 + 时间窗报告;仅仓库发版未挂载(仓发布语义;本机 install.sh 已跑完故已挂载,详见 AGENTS.md「本机实况」自动块) | | v0.5.1 | 0.1.0-rc.6 | 0.1.0-rc.6 | Sprint 6 (Part 2/2): SDK ↔ D-QAF 流水线接通 (cron prompt-static-check + evalPromptStatic dim + policy prompt path + report prompt section) | | v0.5 | 0.1.0-rc.6 | 0.1.0-rc.6 | Sprint 5 (Part 1/2): Prompt SDK 基础设施 (PromptManifest FROZEN + 模板引擎 + 静态检查 + CLI 生成器 + 3 presets) | | v0.4 | 0.1.0-rc.6 | 0.1.0-rc.6 | P4 收口:策略引擎 + 反和谐 + 元评估 + HARM 报告;agint-quality-{policy,report}@0.4.0 启用 | | v0.3 | 0.1.0-rc.6 | 0.1.0-rc.6 | P3 收口:eval + sandbox + evolution + 退化探测 | | v0.2 | 0.1.0-rc.6 | 0.1.0-rc.6 | D-QAF contract + eval 引擎 | | v0.1 | 0.1.0-rc.6 | 0.1.0-rc.6 | 初版迁移;8 个插件对应 dsh host-plane 8 个 Service | ## 校验方法 ```sh # 一行跑完静态兼容性门禁(推荐,秒级,不需要启动 dsh) node bin/check-dsh-compat.mjs ``` 它做四查:悬挂包名 / peer 兼容性预演 / 版本漂移 / 改名残留。 退出码 0=通过 1=有问题 2=环境不满足;`--json` 给 CI 用,`--strict` 让 info 级也算失败。 - `dsh --version` 查 dsh 版本,对照本表确认 ≥ minimum - 升级 dsh **前后各跑一次** `--json`,diff 两条基线,只关注新增项 - 若 dsh 新版本断接口:`cordis.patch.yml` 改不动 → 报 issue 在 AGINT 仓 ### preset 平价门禁(与上面并列的独立一条) ```sh node bin/check-preset-parity.mjs ``` `check-dsh-compat` 管**包名**契约;这条管**能力行**平价 —— 智进 preset 是手抄 shipped `cordis` preset 的拷贝,dsh 升级时上游加了新行、智进不会自动跟进, 症状是**智进会话照常起,只是少了某个工具,没有任何一行报错**(2026-10-01 实测过: `command-goal` / `tool-cordis` / `present` 三行当时只补进了部署位)。 它做五查:能力行缺失 / 同 id 包名分歧 / 启用倒挂 / 双副本漂移 / agint 超集(info)。 基线取两处并跨基线去重:shipped `/node_modules/@deepseek-ai/dsh-web-app/presets/cordis.patch.yml` (随包发版,不需要起宿主)与启动期组合 `$DSH_HOME/profiles//cordis.yml`; 被检两份:仓库 `presets/agint/agent.cordis.yml` 与部署位 `$DSH_HOME/.agent-presets/agint/agent.cordis.yml`。 `--json` 给机器读,`--strict` 让 info 级也算失败,自测 `node --test bin/check-preset-parity.test.mjs`。 **双副本必须同时同步**(与「挂载-重启红线」同一条):只改部署位而不改仓库,重装即回退; 反向则是仓库改动从未真正生效过。 ## 升级 dsh 后 ```sh # 1. 静态门禁(机械可判定的部分,脚本兜住) node bin/check-dsh-compat.mjs node bin/check-preset-parity.mjs # 2. 真机冒烟:entry 真加载数 / patch import 数 / preset 对账 / storages 零污染 dsh --profile headless "..." && dsh --dump-config # 3. 看上游 breaking changes(dsh 在 apps/cli) gh api "repos/deepseek-ai/deepseek-harness/commits?path=apps/cli&per_page=15" \ --jq '.[] | "\(.commit.author.date[0:10]) \(.sha[0:7]) \(.commit.message|split("\n")[0])"' # 4. 重跑 install/uninstall.sh 验证 AGINT 仍然能挂上 # 5. 不行就开 issue ``` ⛔ `npm install -g @deepseek-ai/dsh@latest` 会**静默降级** —— `latest` 可能低于在跑的版本 (2026-09-24 实测 latest=0.1.5-rc.3,本机在跑 0.1.7-rc.1)。**必须带精确版本号**。