|
| 1 | +# v1.17.4 |
| 2 | + |
| 3 | +> 发布日期:2026-08-14 |
| 4 | +> 类型:Patch / Workspace temporary artifacts and global uninstall safety |
| 5 | +
|
| 6 | +## 摘要 |
| 7 | + |
| 8 | +本版本交付两组相关的本机治理能力:工作区临时产物统一进入当前工作区的 `.tmp/devcodex/`,并提供可审计、默认仅预览的状态与清理命令;全局卸载则先跨六宿主验证 DevCodex 所有权,再以单一事务精确移除受管 Hook、MCP、指令块、Plugin 和运行时。两组能力都以 fail-closed 为默认边界,不接管用户内容、其他 producer 或宿主根目录。 |
| 9 | + |
| 10 | +## 工作区临时产物统一治理 |
| 11 | + |
| 12 | +- 所有 DevCodex 工作区临时产物统一使用当前物理工作区 `<workspace>/.tmp/devcodex/`;旧 `.devcodex/workspace/.tmp/` 和项目内 `.devcodex/.tmp/` 只作为有界迁移输入。 |
| 13 | +- `WorkspaceTempManifestV1` 记录 owner、type、project、producer、TTL、lease 与备份事务;未知 owner、未知分区、锁、reparse、路径逃逸或不完整备份一律拒绝清理。 |
| 14 | +- 新增 `devcodex tmp status|prune [--dry-run|--apply] [--json]`;prune 默认只预览,只有显式 `--apply` 才清理已经证明属于 DevCodex 且满足回收条件的对象。 |
| 15 | +- 安装器、Grok adapter、content-root 隔离与 package projection 使用各自受管分区;不会认领 `.tmp` 容器、其他 producer、根级 `tmp/.tmp-*` 或云盘 spool。 |
| 16 | +- 测试创建的 OS 临时目录在成功与异常退出时均有回收路径,避免验证自身持续污染工作区。 |
| 17 | +- canonical root 解析会跳过路径中仅同名的内层 `.tmp/devcodex` 片段并继续向上寻找真正的受管分区,避免嵌套发布工作区使备份 manifest 丢失。 |
| 18 | + |
| 19 | +## 六宿主全局卸载与残留清理 |
| 20 | + |
| 21 | +- 新增 `devcodex uninstall`,等价于 `devcodex global-adapters remove`;两者不带 `--apply` 时都只输出精确计划。 |
| 22 | +- 覆盖 Copilot、Claude Code、Codex、Gemini、Grok 与 Cursor Beta 的用户级受管对象;先完整预检全部宿主,再进入跨宿主单事务,避免部分宿主已删、部分宿主失败。 |
| 23 | +- 收据升级为类型化所有权证据,并兼容受管的旧 runtime generation;Markdown、JSON 与 TOML 只移除 DevCodex 管理片段,保留用户指令、Hook、MCP、未知键、注释与其他插件配置。 |
| 24 | +- 路径边界验证覆盖 root/exact-file safety root、完整父链 reparse/junction/symlink、物理边界、权限不可观测、摘要漂移、未知文件、回执投毒与执行期 TOCTOU;任何不确定性都在 mutation 前失败关闭。 |
| 25 | +- 回滚不会覆盖并发产生的用户内容;只有目标仍是本事务刚写入的精确摘要时才允许撤销,备份恢复同样验证类型、摘要、边界与目标缺席,并把失败记录为结构化 `rollbackFailures`。 |
| 26 | +- Grok 官方登记变更与文件事务具备补偿路径;短期备份仅在六宿主事务成功后按 manifest 与摘要回收。空目录只逐级、非递归地清理已知受管子目录,绝不递归删除宿主根。 |
| 27 | +- 重复执行在确认受管对象已不存在后返回 `already-absent`,不会把缺失误报为失败。 |
| 28 | +- Cursor Plugin manifest 版本现在与 npm package 版本共同受 `validate-versions` 守门,禁止宿主插件元数据滞后于发布版本。 |
| 29 | + |
| 30 | +## 升级与卸载 |
| 31 | + |
| 32 | +先升级到包含安全清理能力的版本,再预览卸载计划: |
| 33 | + |
| 34 | +```bash |
| 35 | +npm install -g devcodex@1.17.4 |
| 36 | +devcodex uninstall --dry-run |
| 37 | +``` |
| 38 | + |
| 39 | +确认计划没有所有权冲突后再执行: |
| 40 | + |
| 41 | +```bash |
| 42 | +devcodex uninstall --apply |
| 43 | +npm uninstall -g devcodex |
| 44 | +``` |
| 45 | + |
| 46 | +不要先运行 `npm uninstall -g devcodex`;包和 CLI 一旦被移除,就无法再使用本版本的所有权收据与安全事务识别宿主残留。 |
| 47 | + |
| 48 | +## 兼容性与已知边界 |
| 49 | + |
| 50 | +- 本版本是向后兼容的 patch;现有 `init`、`update`、`global-adapters apply`、`status`、`doctor` 与 `devcodex grok` 语义不变。 |
| 51 | +- Cursor 本地 IDE、交互 CLI 与 Headless CLI 继续为 Beta;Cursor Cloud Agent 不加载用户级 Hook,保持 Partial / `UNVERIFIED`。 |
| 52 | +- “完全访问权限”不是卸载或临时产物治理的正确修复手段;遇到 sandbox/权限不可观测时命令会报告阻断,不会降低边界继续删除。 |
| 53 | +- npm 包卸载只能移除全局包和命令 shim;宿主受管残留必须在包仍存在时先通过 `devcodex uninstall` 处理。 |
| 54 | + |
| 55 | +## 防回归验证范围 |
| 56 | + |
| 57 | +- workspace temp 的 owner/type/project/TTL/lease/backup、未知分区、锁、reparse、路径逃逸、迁移与自清理矩阵。 |
| 58 | +- 六宿主 plan/apply/idempotency、用户 sentinel、受管片段、旧 generation、Grok 补偿与隔离 HOME 矩阵。 |
| 59 | +- malformed receipt、超量/超大 receipt、junction/symlink、permission denied、exact-file 父链漂移、摘要变化、并发写入与 rollback failure 证据。 |
| 60 | +- CLI help/JSON、README/website/Profile、版本/portfolio/validation DAG、完整测试、安全审计、coverage、package/pack/install 与发布后 fresh-install R7。 |
| 61 | +- exact tarball 必须从规范 `<workspace>/.tmp/devcodex/` 内的嵌套工作区完成 install→preview→apply→repeat apply→npm uninstall,且恢复清单、收据、包目录和 shim 最终全部归零。 |
| 62 | + |
| 63 | +## 发布拓扑 |
| 64 | + |
| 65 | +- npm 包名:`devcodex` |
| 66 | +- registry:`https://registry.npmjs.org/` |
| 67 | +- 发布分支:`main` |
| 68 | +- 目标 Tag:`v1.17.4` |
| 69 | +- 上一版本:`v1.17.3` |
| 70 | +- 关联需求:`.devcodex/devcodex/requirements/工作区临时产物统一治理/` |
| 71 | +- 关联修复:`.devcodex/devcodex/bugs/全局卸载与宿主残留清理/` |
0 commit comments