v0.3.1 增量:命令退出码¶
历史增量说明。 本文记录 v0.3.1 开发阶段的单项变化,不代表当前 v0.5.0 能力边界。当前行为以架构说明、安全边界和v0.5.0 发布说明为准。
本补丁只修复 gitlab-agent run(以及 actual-coder run / codingagent run)
的 shell 退出码,不修改 runner 的验证结果结构、allowlist 或 finish gate。
行为¶
| 情况 | CLI 退出码 |
|---|---|
| 子进程成功 | 0 |
| 子进程正常返回 1–255 | 原值 |
| runner 报告超时 | 124 |
| POSIX 信号 N(1–127) | 128 + N |
| Windows 大整数状态或不可表示的状态 | 1 |
| 缺失/非法 returncode、启动失败、策略拒绝 | 非零(通常 1) |
JSON 继续保留原始 returncode、timed_out 和输出字段。
不能仅凭 124 区分子程序自己返回 124 与 wrapper 超时,应同时检查 JSON。
高层 finish 原先已检查 runner 结果;此次修复的是独立 CLI 与 shell 脚本的约定。
gitlab-agent run --timeout 30 <workspace-id> -- python -c 'import sys; sys.exit(7)'
echo "$?" # 7,而不是旧实现的 0
--timeout 放在 workspace ID 前,避免 argparse REMAINDER 将其作为子命令参数。
PowerShell 用 $LASTEXITCODE 读取外部程序退出码。
依赖旧版本“子命令失败但 wrapper 返回 0”的脚本需要调整;这是有意的正确性变更。
测试与边界¶
新增 9 个 dispatcher 单元测试及 3 个真实子进程/managed workspace 集成测试, 覆盖三个 CLI 名称、失败、超时、信号、超大/非法返回值及错误 JSON。 跨平台完整测试由仓库既有 CI 执行。
此补丁不实现进程树隔离、进程组终止或有界流式输出;这些仍属于后续 runner 加固。