用途:dev-gate(命令行 capsem-gate)是 capsem 的构建与发布门禁。justfile 只做派发,由 src/capsem/gate/ 决定具体行为;没有 recipe 携带 shell 主体,也没有 recipe 超过五行,二者均由契约测试而非约定保证。适合在修改构建、测试或发布逻辑,或触及边界/原语/递归/纯度规则时使用。
主要能力与规则:
- 计划动作不得调用 just 或另一个 capsem-gate 命令;GuardedRunner 在运行时会拒绝(可穿透 uv run --project build_system --frozen 和 caffeinate env),因为机器锁不可重入。需要复用命令时改为组合其 fragment;共享基础工作用 plan.shared(...),after 传给实际工作而非共享步骤。
- 解释器先启动:capsem-gate 实为 capsem.gatelaunch:main,导入 capsem.gate 前先按源码键 re-exec 并设置 pycache_prefix、导出 PYTHONPYCACHEPREFIX。源码身份标记是精确代际标识而非布尔值;完整门禁在缺少 CAPSEM_GATE_PYCACHE 时于 source.record 拒绝;gatelaunch 模块作用域不得导入 capsem.gate。
- 发布状态是不可分割的值:Qualification.from_environment 只在 GateCommand.init 读取一次,传入 artifacts()、functional()、glowup();三种合法形态(local、binary release、profile release),任何部分组合在构建计划时被拒绝。
- execute() 不可被覆写(子类定义会令契约测试失败),其顺序为:密封构建 plan、plan.validate、应答 --graph/--dry-run、reexec、RunLog.open→GuardedRunner→held→plan.run。
- 网络边界由宿主内核掌控:候选与发布命令、直接调用的私有测试模块运行在 Linux 的 Bubblewrap 或 macOS 的 Seatbelt 下;Linux 报告模式被刻意拒绝。沙箱外动作仅限声明 outside_sandbox=True 的 Run 与 Script 动作,经沙箱外运行器执行。
声明命令:继承 GateCommand 并设 name、help、exclusive(写入类命令应设 True)、records;实现 resources() 与 plan(),再把模块加入 cli.py 的 COMMAND_MODULES。
不运行只询问(命令保持原样): uv run --project build_system --frozen capsem-gate <command> --dry-run uv run --project build_system --frozen capsem-gate <command> --graph uv run --project build_system --frozen capsem-gate runs last --failed uv run --project build_system --frozen capsem-gate runs digest uv run --project build_system --frozen capsem-gate runs trend --step <label> just cache stats --offline
适用场景:改动构建、测试、发布流程,新增门禁命令或步骤,排查跨进程安全、沙箱边界、递归调用等问题。
限制:步骤数固定为约五行 recipe 属强约束;exclusive 与 [execution.exclusives](threading.Lock)职责不同;配置数值、平台支持范围、具体收费与效果资料未提供。