Skip to content

08 · update-cli-without-cli

本场景验证什么

--without={module} 标志(及其等价的 agent prompt 形式)在 update 时真的会移除一个可选模块——包括删除该模块在磁盘上的文件, 而不仅仅是把它标记为"今后跳过"。

这是针对最常见用户诉求的回归测试:

"我上周安装 Archon 时带上了 cli 模块,但我们的 CI 镜像不能装 Node。能不能只把 CLI 卸掉,而不必把 Archon 整个卸载?"

可以。本场景就是证明。

测试环境

Fixture场景 01 的产物(已安装 cli 模块)
IDECursor
OS与场景 01 相同
Archon 来源https://aaep.site/manifest.json
受测 manifest 版本v0.1.0(不需要版本号上调)

前置条件

  1. 场景 01 ✅,且包含 cli 模块(默认)。
  2. tools/archon-cli/ 已在磁盘上存在。
  3. git status 干净。

操作步骤

text
1. In Cursor, paste exactly:
     hi archon, update yourself but without the cli module
2. Or equivalently via CLI:
     npx @archon/cli@latest update --without=cli --yes
3. The agent / CLI prints a planned-changes table that should include:
     - REMOVE  tools/archon-cli/...        (every cli file)
     - KEEP    .archon/...                  (core unchanged)
     - KEEP    .cursor/...                  (binding unchanged)
4. Confirm.
5. Verify tools/archon-cli/ no longer exists.
6. Verify .archon/manifest.md or wherever opted-in modules are
   tracked reflects "cli: not installed".

预期结果

检查项期望
tools/archon-cli/ 已被移除yes
其他模块未被触动yes
.archon/drift.md未变化
.archon/VERSION未变化
后续 archon sync(场景 09)将 cli 报告为 "not installed"——而不是 "0/N ok"yes
python3 scripts/archon-check.py --root . 退出码0
npm run validate 退出码0

Demo 录制

Will be replaced by docs/public/videos/update-cli-without-cli.mp4 once recorded. See videos/README for upload conventions.
Will be replaced by docs/public/asciinema/update-cli-without-cli.cast embedded via the asciinema-player web component. See asciinema/README for the recording command.

运行记录

下表由 sandbox runner (scripts/sandbox-run.mjs) 写入 docs/testing/sandbox/runs/update-cli-without-cli/ 的 JSON 实时渲染。要新增一行,请运行

bash
node scripts/sandbox-run.mjs --only=update-cli-without-cli
Started (UTC)ManifestRunnerResultDurationNotesRecord
2026-06-08 08:17:14 UTCv0.1.0cli✅ passing341 msJSON
2026-06-07 07:10:19 UTCv0.1.0cli✅ passing339 msJSON
2026-06-06 06:34:43 UTCv0.1.0cli✅ passing353 msJSON
2026-06-05 07:14:09 UTCv0.1.0cli✅ passing335 msJSON
2026-06-04 07:56:46 UTCv0.1.0cli✅ passing377 msJSON
2026-06-03 08:24:20 UTCv0.1.0cli✅ passing353 msJSON
2026-06-02 08:00:54 UTCv0.1.0cli✅ passing347 msJSON
2026-06-01 08:40:48 UTCv0.1.0cli✅ passing353 msJSON
2026-05-31 07:02:26 UTCv0.1.0cli✅ passing348 msJSON
2026-05-30 06:27:56 UTCv0.1.0cli✅ passing337 msJSON
2026-05-29 06:59:42 UTCv0.1.0cli✅ passing353 msJSON
2026-05-28 06:59:36 UTCv0.1.0cli✅ passing340 msJSON
2026-05-27 07:09:44 UTCv0.1.0cli✅ passing344 msJSON
2026-05-26 06:52:11 UTCv0.1.0cli✅ passing319 msJSON
2026-05-25 07:20:24 UTCv0.1.0cli✅ passing342 msJSON
2026-05-24 06:41:55 UTCv0.1.0cli✅ passing360 msJSON
2026-05-23 06:16:52 UTCv0.1.0cli✅ passing341 msJSON
2026-05-22 06:54:20 UTCv0.1.0cli✅ passing339 msJSON
2026-05-21 06:58:07 UTCv0.1.0cli✅ passing335 msJSON
2026-05-20 06:53:40 UTCv0.1.0cli✅ passing353 msJSON
2026-05-19 06:53:21 UTCv0.1.0cli✅ passing344 msJSON
2026-05-18 07:01:49 UTCv0.1.0cli✅ passing367 msJSON
2026-05-17 06:27:39 UTCv0.1.0cli✅ passing345 msJSON
2026-05-16 06:04:43 UTCv0.1.0cli✅ passing349 msJSON
2026-05-15 06:38:02 UTCv0.1.0cli✅ passing341 msJSON
2026-05-14 06:28:59 UTCv0.1.0cli✅ passing348 msJSON
2026-05-13 06:30:27 UTCv0.1.0cli✅ passing350 msJSON
2026-05-12 06:19:03 UTCv0.1.0cli✅ passing335 msJSON
2026-05-11 06:45:37 UTCv0.1.0cli✅ passing311 msJSON
2026-05-10 06:16:47 UTCv0.1.0cli✅ passing368 msJSON
2026-05-09 05:52:42 UTCv0.1.0cli✅ passing314 msJSON
2026-05-08 05:33:38 UTCv0.1.0cli✅ passing374 msJSON
2026-05-07 11:01:06 UTCv0.1.0cli✅ passing328 msJSON
2026-05-07 09:54:56 UTCv0.1.0cli✅ passing356 msJSON
2026-05-07 09:45:16 UTCv0.1.0cli✅ passing398 msJSON
2026-05-07 06:15:47 UTCv0.1.0cli❌ failing334 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-06 13:05:55 UTCv0.1.0cli❌ failing352 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-06 10:24:37 UTCv0.1.0cli❌ failing345 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-06 06:10:26 UTCv0.1.0cli❌ failing349 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-06 00:55:45 UTCv0.1.0cli❌ failing345 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-06 00:40:11 UTCv0.1.0cli❌ failing353 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-05 15:00:36 UTCv0.1.0cli❌ failing298 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-05 14:55:20 UTCv0.1.0cli❌ failing354 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-05 14:22:55 UTCv0.1.0cli❌ failing351 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-05 14:04:55 UTCv0.1.0cli❌ failing339 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-05 14:00:02 UTCv0.1.0cli❌ failing329 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-05 13:59:14 UTCv0.1.0cli❌ failing348 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON
2026-05-05 13:55:06 UTCv0.1.0cli❌ failing346 msfailed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjsJSON

已知局限

  • 未测试稍后通过 --with=cli 把 cli 加回来。这是一个值得单独添加的 场景(update-add-cli-back),等基础的移除路径绿了再补。
  • 未测试移除一个 required(必需)模块——那种情况应当大声失败。 负向场景 update-without-required-fails 是不错的后续补充。

交叉引用

json
{
  "runnable": "cli",
  "fixture": "fixtures/sandbox-node-ts",
  "ide_platform": "cursor",
  "prerequisites": [
    {
      "name": "archon install (no cli)",
      "cli": "install",
      "flags": [
        "--without=cli"
      ]
    }
  ],
  "steps": [
    {
      "name": "archon update with cli",
      "cli": "update",
      "flags": [
        "--with=cli"
      ]
    }
  ],
  "assertions": [
    {
      "dir_exists": "tools/archon-cli"
    },
    {
      "file_exists": "tools/archon-cli/bin/archon.mjs"
    }
  ]
}

依据 Apache-2.0 许可证发布。