生命周期安全验证 是做什么的?
触发与边界
在任务完成、审查交接、工作区拆除或其他授权转换(可能删除或移动当前工作目录)之前使用。本技能不授权清理、生命周期转换、状态更改、进程终止或重试。遵循平台的实际生命周期契约;并非每次转换都会移除工作树,成功的转换也无需停止工作进程。
转换前
- 建立精确身份:任务/记录ID、看板或命名空间、配置文件/账户、仓库和预期状态。更改目录后不要依赖工具的隐式当前任务。使用平台支持的显式选择器。
- 检查清理语义,识别任务拥有与持久化位置。选择一个转换可以删除的、每个工作区之外存在的稳定目录。父路径只有在其本身也幸存于清理时才安全;指向一次性工作区的符号链接不是耐久位置。解析真实路径。
- 先完成接受检查。通过平台支持的耐久工件机制或其他用户批准的持久位置保存所需的报告、校验和、提交和附件。回读确切的工件标识和内容。注释中的路径字符串并不保存它命名的文件。
- 在可丢弃目录外记录一个紧凑的转换前收据:精确身份、预期转换、证据位置、验证命令以及任何未解决的限制。切勿为了保存证据而标记未完成的验收为完成;而是使用相应的授权检查点/交接状态。
- 规划转换后验证,使其不依赖旧的检出、其虚拟环境、相对路径、依赖环境的看板发现或助手脚本。在转换前解析所需可执行文件和持久路径。
转换与精确回读
- 执行已授权的转换一次。捕获其收据,不要将成功视为期望持久状态的证据。
- 使用执行工具的显式稳定工作目录参数启动回读。命令内部的
cd可能在工具进入其记住的已删除 cwd 失败时永远无法运行。如果工具缺少工作目录覆盖,则使用扎根于幸存位置的独立会话。不要重复生命周期变更来修复失败的回读。 - 使用支持的只读接口读取精确的任务/记录和转换事件。验证期望状态、相关运行/事件标识和耐久工件内容。如果请求了移除本身,则单独验证文件系统缺失和Git工作树注销。不要假设目录缺失意味着分支或附件已被移除。
- 如果平台转换了请求的状态(例如,将其路由进行审查),则报告实际状态。如果工作人员仍然活跃,则单独报告;未经授权不要停止它。
- 出错时,检查 stderr 以及哪个阶段失败。返回 126 并附带
cd: ... No such file or directory的包装器不能证明目标可执行文件需要chmod。仅从稳定目录重试只读验证。如果无法读取记录,则报告转换已确认但验证不完整。
一次性回归测试装置
测试装置 创建自己的临时 Git 仓库和链接工作树,在兄弟持久目录中保存合成收据,仅移除该测试工作树,然后证明从已删除 cwd 启动失败,而从持久目录启动成功。它还检查 Git 的工作树列表和收据内容。它从不触及真实的任务、远程仓库、用户工作区或平台 API。
从已安装的包目录运行:
python -m unittest discover -s scripts -p 'test_*.py' -v
这测试文件系统/子进程/Git 行为,而不是通用的平台清理承诺。实际的完成语义和远程工件回读仍需要特定平台的验证。不要对用户的工作区运行移除命令作为演示。
来源和出处
独立编写自反复出现的已删除 cwd 验证失败;不包含私有日志、路径或任务标识符。Python 的 子进程文档 记录了 cwd、返回码和子进程启动失败。Git 工作树手册 记录了链接工作树的创建、移除和列出。这些原语支持测试装置,而非对任何特定任务调度器实现的推断。