From f7a78e9b0ab82d9593fa123db82cfbebd8d0b1f8 Mon Sep 17 00:00:00 2001 From: weichen Date: Fri, 16 Oct 2026 17:17:35 +0000 Subject: [PATCH 01/10] Record the task card for feature-development-governance-v2-target-integrity Why: establish the authorized task workspace and its initial baseline. Evidence: preserved precheck receipt in .task/feature-development-governance-v2-target-integrity.md; R0=aa3c7eae40264ee47d5505a162074cfd77b1a099. Impact: task metadata only; the feature workspace starts at 3524ffd3ccac938c608887010e3452625a117cb0. Refs: .task/feature-development-governance-v2-target-integrity.md --- ...elopment-governance-v2-target-integrity.md | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 .task/feature-development-governance-v2-target-integrity.md diff --git a/.task/feature-development-governance-v2-target-integrity.md b/.task/feature-development-governance-v2-target-integrity.md new file mode 100644 index 00000000..0f2549ba --- /dev/null +++ b/.task/feature-development-governance-v2-target-integrity.md @@ -0,0 +1,151 @@ +# feature/development-governance-v2-target-integrity 任务卡 + +任务主记录:;状态:进行中;owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= aa3c7eae40264ee47d5505a162074cfd77b1a099 +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity(worktree);分支:feature/development-governance-v2-target-integrity +- 分支类型:child;initiative_id:feature-development-governance-v2;root_target:main;immediate_target:feature/development-governance-v2;accepting_requirements:false;parent_branch:feature/development-governance-v2;parent_head_sha:3524ffd3ccac938c608887010e3452625a117cb0;parent_pr:无 +- 需求分流:verdict=JOIN;selected_initiative=feature/development-governance-v2;requirement_sha256=fe5551702a4f5d48d3f9704ac98f348910a84808674c77e14c3ecf39762f3876;triage_receipt=/tmp/gov2-child2-triage.json;receipt_sha256=a03fa69c6f52b96c85b93211471342380f126d5bb9e9d235b5cdb3bba6fb183a + +- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> +- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进) +- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md) +- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入) +- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收 +- 当前阶段:需求拆解;当前增量:I1(待定义) +- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位) + +## 目标与非目标 + +<预期结果、受影响入口/模块/契约;明确不做什么。> + +## Agent 实施收据 + +按根目录 AGENT-EXECUTION.md 路由;外部 Agent 一单元一新进程/工作区。实施、修复与测试的正常候选仅为 Cursor、Antigravity(agy)和 PI;每个候选对安全可恢复失败最多 3 次全新尝试,然后才换下一候选。三者都安全耗尽后,才允许一次全新的 Codex CLI 紧急尝试。Codex 平时只用于规划、方案设计、实施计划或独立 Review。显式 fail-stop(failed-unknown、scope-expansion、blocked、cancelled、无效配置、未对账 Git 状态与安全失败)立即停止。不因推理时长、工具次数、规划方式或首次写文件时间判定失败;尝试只在显式终态失败、进程退出、总超时,或 stdin/stdout/stderr 均无活动的空闲超时时失败。CLI 可在目标、范围与安全边界内自主检查、计划、测试并迭代。实施集成必须是成功 transport 上的 scripts/agent_exec.py apply,或 pre-commit admit 的精确内容来源。host 直接管理的豁免仅为 .task/**、docs/superpowers/specs/** 与 docs/superpowers/plans/**。fallback 列只记录该行是否为 Codex 紧急尝试。安全耗尽不发出 host-fallback-authorized,终态为 unavailable 或 blocked。不授权 host 直接撰写该单元。原始日志保留在源码外收据路径。 + +| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 | +|---|---|---|---|---|---|---|---|---|---|---| +| 待定义 | — | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | — | + +## 关联方向与规划 + +- 适用状态:待核对(无适用规划时说明原因) +- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文) +- 对应里程碑:待核对 + +## 需求分析 + +| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | +|---|---|---|---|---|---|---| +| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 | + +## 方案与计划 + +- 方案引用:待填写(含对象版本) +- 实施计划引用:待填写(含增量与需求 ID) +- 测试计划引用:待填写(含需求 ID 与验收条件) + +## 阶段记录 + +| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 | +|---|---|---|---|---|---| +| 需求拆解 | 待定 | 待执行 | — | — | — | +| 需求评估 | 待定 | 待执行 | — | — | — | +| 需求表确认 | 待定 | 待执行 | — | — | — | +| 方案设计 | 待定 | 待执行 | — | — | — | +| 实施计划 | 待定 | 待执行 | — | — | — | +| 实施与自检 | 待定 | 待执行 | — | — | — | +| 正式测试与验收 | 待定 | 待执行 | — | — | — | +| 代码 Review | 待定 | 待执行 | — | — | — | +| 合入 | 待定 | 待执行 | — | — | — | +| 合入核验与收口 | 待定 | 待执行 | — | — | — | + +## 探索试验与迭代 + +| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 | +|---|---|---|---|---|---|---|---| +| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 | + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | aa3c7eae40264ee47d5505a162074cfd77b1a099 | 3524ffd3ccac938c608887010e3452625a117cb0 | 2026-10-16T17:17:35Z | + +## 证据(Evidence) + + +| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) | +|---|---|---|---|---|---| + +## 交付调度 + +- 调度状态:未入队;调度记录:无 +- entry_id:无;attempt_id:无;窗口执行者:无 +- 固定候选:无(base/head、组件与相关配置引用实际尝试) +- 调度依据:policy/merge-queue.md;新模式启用前按既有交付门禁 +- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合 + +## 结果与验证(完成后填写) + +- 结果: +- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表> +- 影响与剩余项: + +## 规划进展与下一步 + +- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划) +- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务) +- 推荐依据:待填写 +- 前置条件/待确认:待核对 +- 预期产物/验收条件:待定义 +- 重复任务核对:待核对(已有/在途任务、PR 与规划记录) +- 启动授权:未授权(建议不自动启动新任务,仍须明确授权) + +## 合入与清理 + +- Review 记录:NOT_RUN(审阅智能体/平台身份、base/head、结论、问题闭合及重放依据) +- 冲突记录:NOT_RUN(最新目标同步、冲突处置、组合兼容核验及复审/补测) +- CI 记录:NOT_RUN(当前 HEAD 完整 SHA、全部必需检查、运行链接、执行身份及 GATE 结果) +- 合入记录:NOT_RUN(交付授权范围、PR、被核验 HEAD、合入 SHA、目标分支及内容核验) +- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置) + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-16T17:16:17.724648+00:00", + "command": "make precheck", + "command_sha256": "8fd03cdee8adbb8562846a1a114cc0623779a8654412cd20aac9b495e7eb0450", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "3524ffd3ccac938c608887010e3452625a117cb0", + "branch": "feature/development-governance-v2", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2f5b19872be2a4597838a4131ad75d1be089ee5e deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after": { + "head": "3524ffd3ccac938c608887010e3452625a117cb0", + "branch": "feature/development-governance-v2", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2f5b19872be2a4597838a4131ad75d1be089ee5e deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2'\n[repo] branch=feature/development-governance-v2 head=3524ffd3cc\n[remote] origin/main=aa3c7eae40 ahead=27 behind=0\n[tree] clean submodules_drift=0 uninit=0\n[worktrees] linked=16\n[recycle] merged un-recycled branches: feature/card-close-20261015-064117Z feature/layered-python-env feature/workbench-flow-completion fix/model-key-secret-overlay\n[initiatives] local cards (not authoritative): feature/development-governance-v2\n[cards] 闭合分支超过 24 小时未合入:feature/card-close-workbench-flow-20261015\n[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)\n[facts] policy/facts.md 6 条事实均在有效期内\n[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md\n[R0] aa3c7eae40(完整:aa3c7eae40264ee47d5505a162074cfd77b1a099)\n[worktree] before-sync: recursive component checks passed\n[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2'\n", + "output_sha256": "7cc4336ecb7727f3ca6e7c6cb465bacf3ae9784112d81eb4904d4eeaf50f3e99", + "receipt_sha256": "4844be1ca1288183c67e74a29719ec6967b44033ba7d34da73363b2a525be2ab" +} +``` From 6241285d28d94fcdb83e78706722c854d4a86227 Mon Sep 17 00:00:00 2001 From: weichen Date: Fri, 16 Oct 2026 17:17:48 +0000 Subject: [PATCH 02/10] Define goals for the target-integrity child Why: The child card needs its approved scope before units are dispatched. Evidence: Triage receipt /tmp/gov2-child2-triage.json verdict JOIN (SELF). Impact: Task card only. Refs: .task/feature-development-governance-v2.md Co-authored-by: Cursor --- ...e-development-governance-v2-target-integrity.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.task/feature-development-governance-v2-target-integrity.md b/.task/feature-development-governance-v2-target-integrity.md index 0f2549ba..eff360f8 100644 --- a/.task/feature-development-governance-v2-target-integrity.md +++ b/.task/feature-development-governance-v2-target-integrity.md @@ -1,25 +1,29 @@ # feature/development-governance-v2-target-integrity 任务卡 -任务主记录:;状态:进行中;owner:weichen +任务主记录:<子 PR 链接,开 PR 后填写>(父 initiative PR:#585);状态:进行中;owner:weichen ## 基线与授权 - 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= aa3c7eae40264ee47d5505a162074cfd77b1a099 - 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity(worktree);分支:feature/development-governance-v2-target-integrity -- 分支类型:child;initiative_id:feature-development-governance-v2;root_target:main;immediate_target:feature/development-governance-v2;accepting_requirements:false;parent_branch:feature/development-governance-v2;parent_head_sha:3524ffd3ccac938c608887010e3452625a117cb0;parent_pr:无 +- 分支类型:child;initiative_id:feature-development-governance-v2;root_target:main;immediate_target:feature/development-governance-v2;accepting_requirements:false;parent_branch:feature/development-governance-v2;parent_head_sha:3524ffd3ccac938c608887010e3452625a117cb0;parent_pr:#585 - 需求分流:verdict=JOIN;selected_initiative=feature/development-governance-v2;requirement_sha256=fe5551702a4f5d48d3f9704ac98f348910a84808674c77e14c3ecf39762f3876;triage_receipt=/tmp/gov2-child2-triage.json;receipt_sha256=a03fa69c6f52b96c85b93211471342380f126d5bb9e9d235b5cdb3bba6fb183a -- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> +- 授权与交付终点:owner 已批准 development-governance-v2 完整实施方案(/goal 全部实现);本子任务终点为子 PR 经独立 Review 与 CI 合入 initiative;高后果操作(改写历史、分支保护、删除归档引用、发版)不在授权内 - 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进) - 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md) - 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入) - 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收 -- 当前阶段:需求拆解;当前增量:I1(待定义) +- 当前阶段:实施;当前增量:I1(U2.2 即时目标完整性、U2.5 配置 integration 块、U2.4 文档) - 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位) ## 目标与非目标 -<预期结果、受影响入口/模块/契约;明确不做什么。> +- 目标: + 1. U2.2:child 在 delivery 模式只依赖远端父 HEAD(与 triage 收据一致);resume/sync/finish/close/evidence 统一使用 immediate_target;evidence 记录 root_target 与 immediate_target。 + 2. U2.5:参考执行器配置解析接受 Guidelines draft.12 的 integration 块(exempt_paths 不得扩大 host 豁免),Dev AGENT-EXECUTION.md 声明 integration。 + 3. U2.4:policy/delivery.md、policy/governance.md、AGENTS.md 的分流与两级生命周期描述与实现一致(远端发现 + 显式决策 + 收据,PR base 门禁)。 +- 非目标:不提升 Guidelines gitlink(Phase 4 单独进行);不改业务模块;不引入自动优先级平台。 ## Agent 实施收据 From 74a834c78633793c95ea1f91bf6c34385b39da9f Mon Sep 17 00:00:00 2001 From: agent-exec-transport Date: Fri, 16 Oct 2026 18:12:57 +0000 Subject: [PATCH 03/10] agent-exec transport cd4961f74af64c6ebd54c5fd0bf27d27/d63165e5e315 --- scripts/check-evidence.py | 7 +- scripts/evidence.py | 51 +++++++++++-- scripts/task.sh | 123 ++++++++++++++++++++++++------- tests/test_evidence.py | 23 ++++++ tests/test_task.py | 147 +++++++++++++++++++++++++++++++++++++- 5 files changed, 317 insertions(+), 34 deletions(-) diff --git a/scripts/check-evidence.py b/scripts/check-evidence.py index df609348..70395128 100644 --- a/scripts/check-evidence.py +++ b/scripts/check-evidence.py @@ -64,10 +64,11 @@ def check_snapshot(snapshot): def check_receipt(value): if not isinstance(value, dict) or type(value.get("schema")) is not int or value["schema"] != evidence.SCHEMA: raise ValueError("unsupported or malformed receipt") - expected = {"schema", "source", "timestamp", "command", "command_sha256", "cwd", "common_dir", - "before", "after", "after_error", "exit_code", "output", "output_sha256", "receipt_sha256"} - if set(value) not in (expected, expected | {"capture_note"}): + if not evidence.receipt_keys_ok(value): raise ValueError("invalid receipt fields") + for key in evidence.TARGET_FIELDS: + if key in value and not evidence.valid_branch(value[key]): + raise ValueError("invalid receipt target: " + key) for key in ("source", "timestamp", "command", "cwd", "common_dir", "output"): if not isinstance(value[key], str): raise ValueError("invalid receipt field: " + key) diff --git a/scripts/evidence.py b/scripts/evidence.py index 3ea96e94..b534860c 100644 --- a/scripts/evidence.py +++ b/scripts/evidence.py @@ -20,6 +20,11 @@ SCHEMA = 1 SECRET_NAME = re.compile(r"token|password|passwd|secret|api[_-]?key|credential|private[_-]?key", re.I) SHA256 = re.compile(r"[0-9a-f]{64}\Z") GIT_SHA = re.compile(r"(?:[0-9a-f]{40}|[0-9a-f]{64})\Z") +BRANCH = re.compile(r"[A-Za-z0-9][A-Za-z0-9._/-]{0,199}\Z") +# 可选的分支目标字段:两者须同时出现或同时缺省(旧收据没有)。 +TARGET_FIELDS = ("root_target", "immediate_target") +BASE_FIELDS = {"schema", "source", "timestamp", "command", "command_sha256", "cwd", "common_dir", + "before", "after", "after_error", "exit_code", "output", "output_sha256", "receipt_sha256"} class EvidenceError(Exception): @@ -111,9 +116,41 @@ def snapshot(): } +def valid_branch(name): + return (isinstance(name, str) and BRANCH.match(name) is not None and ".." not in name + and "//" not in name and not name.endswith(("/", ".", ".lock"))) + + +def receipt_keys_ok(keys): + keys = set(keys) + targets = keys & set(TARGET_FIELDS) + if targets not in (set(), set(TARGET_FIELDS)): + return False + rest = keys - targets + return rest in (BASE_FIELDS, BASE_FIELDS | {"capture_note"}) + + +def task_targets(): + """Root and immediate targets named by the current branch card; no metadata means main/main.""" + default = os.environ.get("TASK_TARGET_BRANCH", "main") + try: + card = find_card() + except EvidenceError: + return default, default + match = re.search(r"^- 分支类型:[^\n]*?;root_target:([^;\n]+);immediate_target:([^;\n]+)", + card.read_text(encoding="utf-8"), re.M) + if not match: + return default, default + root, immediate = match.group(1).strip(), match.group(2).strip() + if not (valid_branch(root) and valid_branch(immediate)): + raise EvidenceError("Task card target metadata is invalid") + return root, immediate + + def create_receipt(command, output, exit_code, before, after, *, timestamp=None, - cwd=None, git_common_dir=None, after_error=None, capture_note=None): + cwd=None, git_common_dir=None, after_error=None, capture_note=None, targets=None): """Package an actual captured run; callers must not reconstruct missing output.""" + root_target, immediate_target = targets or task_targets() receipt = sanitize_tree({ "schema": SCHEMA, "source": "SELF", "timestamp": timestamp or datetime.datetime.now(datetime.timezone.utc).isoformat(), @@ -122,6 +159,7 @@ def create_receipt(command, output, exit_code, before, after, *, timestamp=None, "common_dir": git_common_dir or common_dir(), "before": before, "after": after, "after_error": after_error, "exit_code": exit_code, "output": output, + "root_target": root_target, "immediate_target": immediate_target, }) if capture_note is not None: receipt["capture_note"] = sanitize(capture_note) @@ -159,10 +197,11 @@ def read_receipt(filename): value = json.loads(Path(filename).read_text()) if not isinstance(value, dict) or type(value.get("schema")) is not int or value["schema"] != SCHEMA: raise EvidenceError("Unsupported receipt schema") - expected = {"schema", "source", "timestamp", "command", "command_sha256", "cwd", "common_dir", - "before", "after", "after_error", "exit_code", "output", "output_sha256", "receipt_sha256"} - if set(value) not in (expected, expected | {"capture_note"}): + if not receipt_keys_ok(value): raise EvidenceError("Invalid receipt fields") + for key in TARGET_FIELDS: + if key in value and not valid_branch(value[key]): + raise EvidenceError("Invalid receipt target: " + key) for key in ("source", "timestamp", "command", "command_sha256", "cwd", "common_dir", "output", "output_sha256", "receipt_sha256"): if not isinstance(value.get(key), str): @@ -350,6 +389,7 @@ def main(): raise EvidenceError("Capture requires an absolute, unused receipt path") card = find_card() if path is None else None before = snapshot() + targets = task_targets() source_cwd, source_common = str(Path.cwd().resolve()), common_dir() timestamp = datetime.datetime.now(datetime.timezone.utc).isoformat() child_env = os.environ.copy() @@ -366,7 +406,8 @@ def main(): after_error = str(error) receipt = create_receipt(command, result.stdout.decode("utf-8", "replace"), child_exit, before, after, timestamp=timestamp, cwd=source_cwd, - git_common_dir=source_common, after_error=after_error) + git_common_dir=source_common, after_error=after_error, + targets=targets) if path is not None: write_receipt(path, receipt) report(receipt, "receipt=" + str(path)) diff --git a/scripts/task.sh b/scripts/task.sh index bec000ed..6a21012f 100755 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -59,7 +59,7 @@ cmd_precheck() { card_pending "${pc##*/}" && continue # card_merge 兼容 merge 提交与 squash 落地(squash 走 Gitea API 兜底,无 token 时只认 merge 提交); # 其内部以完整消费输出取首行,避免 grep -q 早退令 git log 吃 SIGPIPE(141 under pipefail)。 - if card_merge "$pb" >/dev/null; then + if card_merged_into "$pc" "$pb" >/dev/null; then open_cards="${open_cards} ${pc##*/}" fi done @@ -162,12 +162,13 @@ cmd_start() { TRIAGE_RECEIPT=$(realpath -- "$TRIAGE_RECEIPT") local -a triage_args=(verify --receipt "$TRIAGE_RECEIPT" --kind "$kind") if [ "$kind" = child ]; then triage_args+=(--initiative "$initiative"); fi - local triage_out triage_line triage_verdict triage_init triage_rsha triage_digest triage_note + local triage_out triage_line triage_head triage_verdict triage_init triage_rsha triage_digest triage_note if ! triage_out=$(python3 "${SCRIPT_DIR}/task_triage.py" "${triage_args[@]}"); then printf '%s\n' "$triage_out" >&2 die "triage receipt rejected; no worktree or branch was created" fi triage_line=$(printf '%s\n' "$triage_out" | sed -n 's/^\[triage-verified\] //p') + triage_head=$(triage_field selected_head_sha "$(printf '%s\n' "$triage_out" | sed -n 's/^\[triage-head\] //p')") triage_verdict=$(triage_field verdict "$triage_line") triage_init=$(triage_field selected_initiative "$triage_line") triage_rsha=$(triage_field requirement_sha256 "$triage_line") @@ -187,7 +188,7 @@ cmd_start() { [ "$(git status --porcelain | { grep -v '^.. \.zcode/' || true; } | wc -l)" -eq 0 ] || die "dirty tree — resolve first (precheck verdict BUSY)" [ "$(git submodule status --recursive 2>/dev/null | { grep -cE '^\+|^U' || true; })" -eq 0 ] || die "submodule drift/conflict — resolve first (precheck verdict BUSY)" git merge-base --is-ancestor "origin/${TARGET_BRANCH}" HEAD || die "local ${TARGET_BRANCH} behind origin — pull --ff-only first" - local rmain slug wt mainroot start_ref parent_head="" parent_note="" + local rmain slug wt mainroot start_ref parent_head="" parent_source="" parent_note="" rmain=$(git rev-parse "origin/${TARGET_BRANCH}") start_ref=$rmain slug=$(echo "$name" | tr '/' '-') @@ -196,9 +197,18 @@ cmd_start() { initiative) branch_meta="- 分支类型:initiative;initiative_id:${slug};root_target:${TARGET_BRANCH};immediate_target:${TARGET_BRANCH};accepting_requirements:true" ;; child) - parent_head=$(git rev-parse --verify "refs/heads/${initiative}^{commit}" 2>/dev/null) || die "parent initiative branch ${initiative} missing locally" + if [ "$(work_mode)" = delivery ]; then + # 交付模式:父 initiative 只认 origin 上刚取回的头,且必须等于分流收据核验的头(未准入的本地提交不算)。 + [ -n "$triage_head" ] || die "triage receipt carries no selected initiative head; re-run make task-triage (no worktree or branch was created)" + parent_head=$(remote_parent_head "$initiative") || die "remote parent initiative ${initiative} unavailable; no worktree or branch was created" + [ "$parent_head" = "$triage_head" ] || die "remote ${initiative} is ${parent_head} but triage verified ${triage_head}; re-run make task-triage (no worktree or branch was created)" + parent_source=origin + else + parent_head=$(git rev-parse --verify "refs/heads/${initiative}^{commit}" 2>/dev/null) || die "parent initiative branch ${initiative} missing locally" + parent_source="local(非正式准入)" + fi start_ref=$parent_head - branch_meta="- 分支类型:child;initiative_id:$(echo "$initiative" | tr '/' '-');root_target:${TARGET_BRANCH};immediate_target:${initiative};accepting_requirements:false;parent_branch:${initiative};parent_head_sha:${parent_head};parent_pr:${TASK_PARENT_PR:-无}" ;; + branch_meta="- 分支类型:child;initiative_id:$(echo "$initiative" | tr '/' '-');root_target:${TARGET_BRANCH};immediate_target:${initiative};accepting_requirements:false;parent_branch:${initiative};parent_head_sha:${parent_head};parent_pr:${TASK_PARENT_PR:-无};parent_source:${parent_source}" ;; *) branch_meta="- 分支类型:standalone;root_target:${TARGET_BRANCH};immediate_target:${TARGET_BRANCH};accepting_requirements:false" ;; esac @@ -363,8 +373,22 @@ cmd_resume() { local receipt receipt=$(realpath -- "$PRECHECK_RECEIPT") VALIDATE_RECEIPT="$receipt" VALIDATE_RECEIPT_PURPOSE="resume-${mode}" bash "${SCRIPT_DIR}/evidence.sh" + # 立即目标:子任务为其父 initiative(delivery 下取远端头),其余为根目标。 + local branch card immediate="${TARGET_BRANCH}" observed recorded + branch=$(git rev-parse --abbrev-ref HEAD) + card=$(branch_card "$branch") + [ -n "$card" ] && immediate=$(card_immediate_target "$card") + if [ "$immediate" != "${TARGET_BRANCH}" ]; then + observed=$(resolve_parent_ref "$immediate") || die "immediate target ${immediate} unavailable; receipt not imported" + recorded=$(card_field "$card" parent_head_sha) + if [ -n "$recorded" ] && ! git merge-base --is-ancestor "$recorded" "$observed"; then + die "immediate target ${immediate} no longer contains recorded parent head ${recorded}; receipt not imported" + fi + else + observed=$(git rev-parse "origin/${TARGET_BRANCH}") + fi IMPORT_RECEIPT="$receipt" bash "${SCRIPT_DIR}/evidence.sh" - echo "[resumed] work_mode=${mode} source_head=$(git rev-parse HEAD) observed_target=$(git rev-parse "origin/${TARGET_BRANCH}")" + echo "[resumed] work_mode=${mode} source_head=$(git rev-parse HEAD) observed_target=${observed} immediate_target=${immediate}" } cmd_sync() { @@ -462,12 +486,35 @@ active_initiatives() { # → 每行 "branch|initiative_id|card":根目标为 case "$(card_status "$pc")" in 已完成*) continue ;; esac pb=$(card_of_branch "$pc"); [ -n "$pb" ] || continue card_pending "${pc##*/}" && continue - card_merge "$pb" >/dev/null && continue + card_merged_into "$pc" "$pb" >/dev/null && continue printf '%s|%s|%s\n' "$pb" "$(card_initiative_id "$pc")" "$pc" done } -resolve_parent_ref() { # $1=父 initiative 分支 → 打印用于同步/核验的提交(远端与本地取包含对方的一侧) +remote_parent_head() { # $1=父 initiative 分支 → 打印刚从 origin 取回的头(不看本地);不可查询返回 6,远端缺失返回 1 git check-ref-format "refs/heads/$1" >/dev/null || die "invalid parent branch $1" + local rc=0 + git ls-remote --exit-code --heads origin "refs/heads/$1" >/dev/null 2>&1 || rc=$? + if [ "$rc" -eq 2 ]; then echo "ERROR: parent branch $1 not found on origin" >&2; return 1; fi + if [ "$rc" -ne 0 ]; then echo "[verdict] REMOTE_UNVERIFIED — cannot query origin/$1; preserve local work and retry" >&2; return 6; fi + if ! git fetch -q origin "refs/heads/$1:refs/remotes/origin/$1"; then + echo "[verdict] REMOTE_UNVERIFIED — cannot refresh origin/$1; preserve local work and retry" >&2 + return 6 + fi + git rev-parse --verify "refs/remotes/origin/$1^{commit}" +} +resolve_parent_ref() { # $1=父 initiative 分支 → 打印用于同步/核验的提交(delivery 仅远端;local 取远端与本地包含对方的一侧) + git check-ref-format "refs/heads/$1" >/dev/null || die "invalid parent branch $1" + if [ "$(work_mode)" = delivery ]; then + # delivery 只认 origin 上刚取回的父分支头:本地领先/分叉意味着未准入的提交,不得被同步或合入。 + local remote_head local_head + remote_head=$(remote_parent_head "$1") || return $? + local_head=$(git rev-parse -q --verify "refs/heads/$1^{commit}" 2>/dev/null || true) + if [ -n "$local_head" ] && ! git merge-base --is-ancestor "$local_head" "$remote_head"; then + die "local $1 has commits origin lacks; push or reconcile them first (delivery mode uses origin only)" + fi + printf '%s\n' "$remote_head" + return 0 + fi local remote="" local_ref="" rc=0 git ls-remote --exit-code --heads origin "refs/heads/$1" >/dev/null 2>&1 || rc=$? if [ "$rc" -eq 0 ]; then @@ -515,17 +562,37 @@ triage_field() { printf '%s\n' "$2" | tr ' ' '\n' | sed -n "s/^$1=//p"; } card_merge() { # $1=branch → "sha|subject|pr"(该分支合入 origin/ 的记录;兼容 merge 提交与 squash 落地) local hit pr - hit=$(git log --merges --format='%H|%s' "origin/${TARGET_BRANCH}" 2>/dev/null \ - | grep -F " from $1 into ${TARGET_BRANCH}" | sed -n '1p') || hit="" + hit=$(git log --merges --format='%H|%s' "origin/$2" 2>/dev/null \ + | grep -F " from $1 into $3" | sed -n '1p') || hit="" if [ -n "$hit" ]; then pr=$(printf '%s' "$hit" | sed -n 's/.*(#\([0-9]\+\)) from.*/\1/p') printf '%s|%s\n' "$hit" "${pr:-unknown}" return 0 fi - card_merge_squash "$1" + card_merge_squash "$1" "$2" +} +# 卡片闭合判定:子任务优先核直接目标(父 initiative 仍在远端);父已合入并删除则回落到根目标历史。 +# 打印 "目标分支|merge_sha|subject|pr";未合入或不可核则失败。参数:$1=card $2=branch +card_merged_into() { + local card="$1" branch="$2" imm root rc=0 hit + imm=$(card_immediate_target "$card"); root=$(card_root_target "$card") + if [ "$imm" != "$root" ]; then + git ls-remote --exit-code --heads origin "refs/heads/${imm}" >/dev/null 2>&1 || rc=$? + case "$rc" in + 0) + git fetch -q origin "refs/heads/${imm}:refs/remotes/origin/${imm}" 2>/dev/null || return 1 + hit=$(card_merge "$branch" "$imm" "$imm") || return 1 + printf '%s|%s\n' "$imm" "$hit" + return 0 ;; + 2) ;; # 父 initiative 已不在远端:子任务合入记录仍在根目标历史中 + *) return 1 ;; + esac + fi + hit=$(card_merge "$branch" "$root" "$imm") || return 1 + printf '%s|%s\n' "$root" "$hit" } -card_merge_squash() { # $1=branch → squash/rebase 落地没有 merge 提交,经 Gitea API 按 head 分支找 merged PR。 +card_merge_squash() { # $1=branch $2=ref → squash/rebase 落地没有 merge 提交,经 Gitea API 按 head 分支找 merged PR。 # 返回 "merge_commit_sha|PR标题|PR号";sha 必须可核为 origin/ 祖先,否则不认(不可核即不闭合)。 # 仅查最近 5 页(250 条):card_merge 的 merge 提交路径仍是主路径,此兜底面向新近任务卡。 local token="${GITEA_TOKEN:-}" web_base url repo owner api payload pg found sha @@ -566,7 +633,7 @@ for p in entries if isinstance(entries, list) else []: done [ -n "$found" ] || return 1 sha="${found%%|*}" - git merge-base --is-ancestor "$sha" "origin/${TARGET_BRANCH}" 2>/dev/null || return 1 + git merge-base --is-ancestor "$sha" "origin/$2" 2>/dev/null || return 1 printf '%s\n' "$found" } card_pending() { # $1=卡片文件名——闭合是否已在某 origin/feature/card-close-* 分支待合入 @@ -576,10 +643,10 @@ card_pending() { # $1=卡片文件名——闭合是否已在某 origin/feature/ done return 1 } -card_backfill() { # $1=card $2=pr_num $3=merge_sha $4=merge_subject $5=web_base(原地改写) - python3 - "$1" "$2" "$3" "$4" "$5" <<'PY' +card_backfill() { # $1=card $2=pr_num $3=merge_sha $4=merge_subject $5=web_base $6=contained_in_target(原地改写) + python3 - "$1" "$2" "$3" "$4" "$5" "$6" <<'PY' import re, sys -path, pr, sha, subject, base = sys.argv[1:6] +path, pr, sha, subject, base, target = sys.argv[1:7] s = open(path, encoding='utf-8').read() s = re.sub(r'状态:[^;\n]*', '状态:已完成(回填)', s, count=1) m = re.search(r'任务主记录:([^;\n]*)', s) @@ -590,7 +657,7 @@ s = s.rstrip('\n') + f''' ## 闭合记录(card-autoclose 回填) -- 依据:merge {sha}(PR #{pr})已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 依据:merge {sha}(PR #{pr})已包含于 origin/{target},分支成果已落盘;本段为合入后回填。 - 合并主题:{subject} - 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 ''' @@ -609,8 +676,13 @@ cmd_close() { local url owner repo url=$(git remote get-url origin); url="${url%.git}" repo=$(basename "$url"); owner=$(basename "$(dirname "$url")") - local branch c b st m cards="" + local branch c b st m cards="" own pr_base="${TARGET_BRANCH}" branch=$(git rev-parse --abbrev-ref HEAD) + if [ "$fold" = 1 ]; then + # 任务分支内折叠:PR 的 base 必须是本分支的立即目标(子任务为父 initiative,而非 main)。 + own=$(branch_card "$branch") + if [ -n "$own" ]; then pr_base=$(card_immediate_target "$own"); fi + fi for c in .task/*.md; do [ -f "$c" ] || continue b=$(card_of_branch "$c"); [ -n "$b" ] || continue @@ -621,7 +693,7 @@ cmd_close() { echo "[close] ${c##*/} 已有待合入的闭合分支,跳过(等其 PR 合入)" continue fi - m=$(card_merge "$b") || m="" + m=$(card_merged_into "$c" "$b") || m="" if [ -z "$m" ]; then [ "$done_unarchived" = 1 ] || continue m="ARCHIVE" @@ -640,9 +712,10 @@ $c|$b|$m" elif [ "$fold" != "1" ]; then die "close 在任务分支内须加 --fold(并入当前任务 PR);或到主检出运行(将建 feature/card-close-* 分支+PR)" fi - local n=0 sha subject pr closed_list="" + local n=0 sha subject pr tgt closed_list="" while IFS='|' read -r c b m; do [ -n "$c" ] || continue + tgt="${m%%|*}"; m="${m#*|}" if [ "$m" = "ARCHIVE" ]; then mkdir -p .task/archive git mv "$c" ".task/archive/${c##*/}" @@ -652,10 +725,10 @@ $c|$b|$m" fi sha="${m%%|*}"; rest="${m#*|}"; pr="${rest##*|}"; subject="${rest%|*}" case "$pr" in "$rest"|''|*[!0-9]*) pr=unknown ;; esac - card_backfill "$c" "$pr" "$sha" "$subject" "${web_base}/${owner}/${repo}" + card_backfill "$c" "$pr" "$sha" "$subject" "${web_base}/${owner}/${repo}" "$tgt" mkdir -p .task/archive git mv "$c" ".task/archive/${c##*/}" - closed_list="$closed_list ${c##*/}(PR#${pr})" + closed_list="$closed_list ${c##*/}(PR#${pr} into ${tgt})" n=$((n+1)) done < "$msg" @@ -682,7 +755,7 @@ EOF for attempt in 1 2 3 4; do resp=$(curl -sS -m 25 -X POST -H "Authorization: token ${GITEA_TOKEN}" -H 'Content-Type: application/json' \ "$api" \ - -d "{\"head\":\"${headbr}\",\"base\":\"${TARGET_BRANCH}\",\"title\":\"Close merged task cards (${headbr})\",\"body\":\"Auto-generated by task.sh close; see commit message for evidence.\"}" 2>&1) || resp="" + -d "{\"head\":\"${headbr}\",\"base\":\"${pr_base}\",\"title\":\"Close merged task cards (${headbr})\",\"body\":\"Auto-generated by task.sh close; see commit message for evidence.\"}" 2>&1) || resp="" pr_url=$(printf '%s' "$resp" | python3 -c 'import json,sys; d=json.load(sys.stdin); print(d.get("html_url","") if isinstance(d,dict) else "")' 2>/dev/null || true) [ -n "$pr_url" ] && break echo "[close] 建 PR 第 ${attempt} 次未成功${resp:+($(printf '%s' "$resp" | head -c 120))},退避重试" >&2 diff --git a/tests/test_evidence.py b/tests/test_evidence.py index 23186d95..e179cbc3 100644 --- a/tests/test_evidence.py +++ b/tests/test_evidence.py @@ -374,6 +374,29 @@ class EvidenceTests(unittest.TestCase): result = self.run_evidence(VALIDATE_RECEIPT=self.receipt) self.assertNotEqual(result.returncode, 0) + def test_child_receipts_record_root_and_immediate_targets(self): + self.card.write_text("# Test task\n- 分支类型:child;initiative_id:feature-alpha;root_target:main;" + "immediate_target:feature/alpha;accepting_requirements:false\n") + data = self.capture() + self.assertEqual((data["root_target"], data["immediate_target"]), ("main", "feature/alpha")) + self.assertEqual(self.import_receipt().returncode, 0) + self.assertIn(data["receipt_sha256"], self.card.read_text()) + checked = subprocess.run(["python3", str(SCRIPTS / "check-evidence.py"), str(self.card)], + cwd=self.repo, capture_output=True, text=True) + self.assertNotIn("WARN", checked.stdout + checked.stderr) + + def test_receipts_without_target_metadata_default_to_main(self): + data = self.capture() + self.assertEqual((data["root_target"], data["immediate_target"]), ("main", "main")) + + def test_receipt_target_fields_must_come_in_pairs(self): + original = self.capture() + partial = dict(original) + del partial["immediate_target"] + self.resign(partial) + self.assertNotEqual(self.import_receipt().returncode, 0) + self.assertEqual(self.card.read_text(), "# Test task\n") + if __name__ == "__main__": unittest.main() diff --git a/tests/test_task.py b/tests/test_task.py index ccf19e1e..e91712fe 100644 --- a/tests/test_task.py +++ b/tests/test_task.py @@ -25,6 +25,7 @@ class FakeGitea: def __init__(self, token="dummy"): self.token = token self.prs = [] + self.posted = [] stub = self class Handler(http.server.BaseHTTPRequestHandler): @@ -49,8 +50,16 @@ class FakeGitea: start = (page - 1) * stub.PAGE return self._send(200, stub.prs[start:start + stub.PAGE]) + def do_POST(self): + if self.headers.get("Authorization") != f"token {stub.token}": + return self._send(401, {"message": "unauthorized"}) + body = json.loads(self.rfile.read(int(self.headers.get("Content-Length", "0"))) or b"{}") + stub.posted.append(body) + return self._send(201, {"html_url": f"{stub.web}/fixture/repo/pulls/{len(stub.posted)}"}) + self.server = http.server.ThreadingHTTPServer(("127.0.0.1", 0), Handler) - self.url = f"http://127.0.0.1:{self.server.server_address[1]}/api/v1" + self.web = f"http://127.0.0.1:{self.server.server_address[1]}" + self.url = f"{self.web}/api/v1" threading.Thread(target=self.server.serve_forever, daemon=True).start() def close(self): @@ -1260,6 +1269,7 @@ class TaskLifecycleTests(unittest.TestCase): (parent / "parent-later").write_text("later initiative work\n") self.git(parent, "add", "parent-later") self.git(parent, "commit", "-m", "Later initiative work") + self.publish_initiative("feature/alpha") # delivery 只认远端父分支头 parent_head = self.git(parent, "rev-parse", "HEAD").stdout.strip() result = self.task(wt, "sync") self.assertIn("changed=1", result.stdout) @@ -1283,6 +1293,7 @@ class TaskLifecycleTests(unittest.TestCase): self.assertIn("has not merged into feature/alpha", refused.stdout) self.assertTrue(wt.exists()) self.git(parent, "merge", "--no-ff", "feature/alpha-login", "-m", "Merge child into initiative") + self.publish_initiative("feature/alpha") # delivery 的 finish 只认远端父分支已含子分支 result = self.task(wt, "finish") self.assertIn("[verified] feature/alpha-login is included in parent initiative feature/alpha", result.stdout) @@ -1345,6 +1356,140 @@ class TaskLifecycleTests(unittest.TestCase): self.assertIn("remote initiative candidates changed", result.stdout) self.assertFalse((self.root / "repo-wt-feature-alpha-login").exists()) + def close_env(self): + # 测试 token 与本地 Gitea 桩:建 PR 只能落到桩上,绝不触达真实 Gitea。 + return self.env | {"GITEA_TOKEN": self.gitea.token, "TASK_CARD_WEB_BASE": self.gitea.web} + + def child_env(self, receipt, triage): + return self.env | {"PRECHECK_RECEIPT": str(receipt), "TRIAGE_RECEIPT": str(triage), + "TASK_BRANCH_KIND": "child", "TASK_INITIATIVE": "feature/alpha", + "TASK_PARENT_PR": "https://example.invalid/repo/pulls/7"} + + def test_delivery_child_ignores_ahead_local_parent(self): + parent = self.start_initiative() + self.publish_initiative("feature/alpha") + remote_head = self.git(parent, "rev-parse", "HEAD").stdout.strip() + (parent / "unadmitted").write_text("local only\n") + self.git(parent, "add", "unadmitted") + self.git(parent, "commit", "-m", "Unpublished initiative work") + triage = self.triage_receipt(join="feature/alpha") + receipt = self.capture_precheck() + self.task(self.repo, "start", "feature/alpha-login", env=self.child_env(receipt, triage)) + wt = self.root / "repo-wt-feature-alpha-login" + card = (wt / ".task/feature-alpha-login.md").read_text() + self.assertIn(f"parent_head_sha:{remote_head}", card) + self.assertIn("parent_source:origin", card) + self.assertFalse((wt / "unadmitted").exists()) + + def test_delivery_child_ignores_stale_local_parent(self): + self.start_initiative() + self.publish_initiative("feature/alpha") + other = self.root / "other" + self.git(self.root, "clone", "-q", str(self.remote), str(other)) + self.git(other, "checkout", "-q", "feature/alpha") + (other / "remote-admitted").write_text("admitted\n") + self.git(other, "add", "remote-admitted") + self.git(other, "commit", "-m", "Admitted initiative work") + self.git(other, "push", "-q", "origin", "feature/alpha") + remote_head = self.git(other, "rev-parse", "HEAD").stdout.strip() + triage = self.triage_receipt(join="feature/alpha") + receipt = self.capture_precheck() + self.task(self.repo, "start", "feature/alpha-login", env=self.child_env(receipt, triage)) + wt = self.root / "repo-wt-feature-alpha-login" + self.assertIn(f"parent_head_sha:{remote_head}", (wt / ".task/feature-alpha-login.md").read_text()) + self.assertEqual((wt / "remote-admitted").read_text(), "admitted\n") + + def test_delivery_child_fails_when_remote_parent_is_deleted_after_triage(self): + self.start_initiative() + self.publish_initiative("feature/alpha") + triage = self.triage_receipt(join="feature/alpha") + self.git(self.repo, "push", "origin", "--delete", "feature/alpha") + receipt = self.capture_precheck() + result = self.task(self.repo, "start", "feature/alpha-login", check=False, + env=self.child_env(receipt, triage)) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertFalse((self.root / "repo-wt-feature-alpha-login").exists()) + self.assertEqual(self.git(self.repo, "branch", "--list", "feature/alpha-login").stdout.strip(), "") + + def test_local_mode_child_uses_local_parent_and_marks_local_source(self): + parent = self.start_initiative() + self.publish_initiative("feature/alpha") + (parent / "local-admission").write_text("local only\n") + self.git(parent, "add", "local-admission") + self.git(parent, "commit", "-m", "Local initiative work") + local_head = self.git(parent, "rev-parse", "HEAD").stdout.strip() + triage = self.triage_receipt(join="feature/alpha") + receipt = self.capture_precheck() + self.task(self.repo, "start", "feature/alpha-login", + env=self.child_env(receipt, triage) | {"TASK_WORK_MODE": "local"}) + wt = self.root / "repo-wt-feature-alpha-login" + card = (wt / ".task/feature-alpha-login.md").read_text() + self.assertIn(f"parent_head_sha:{local_head}", card) + self.assertIn("parent_source:local(非正式准入)", card) + self.assertEqual((wt / "local-admission").read_text(), "local only\n") + + def test_resume_child_reports_parent_as_immediate_target(self): + parent = self.start_initiative() + wt, _ = self.start_child() + parent_head = self.git(parent, "rev-parse", "HEAD").stdout.strip() + receipt = self.capture_precheck(cwd=wt) + result = self.task(wt, "resume", env=self.env | {"PRECHECK_RECEIPT": str(receipt)}) + self.assertIn(f"observed_target={parent_head} immediate_target=feature/alpha", result.stdout) + + def test_resume_child_rejects_rewound_immediate_target(self): + parent = self.start_initiative() + wt, _ = self.start_child() + receipt = self.capture_precheck(cwd=wt) + self.git(parent, "reset", "--hard", "origin/main") + self.git(parent, "push", "-f", "origin", "feature/alpha") + result = self.task(wt, "resume", check=False, env=self.env | {"PRECHECK_RECEIPT": str(receipt)}) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("no longer contains recorded parent head", result.stdout) + self.assertNotIn("[resumed]", result.stdout) + + def test_close_archives_child_merged_into_initiative_and_names_it(self): + parent = self.start_initiative() + wt, _ = self.start_child() + (wt / "child-work").write_text("child result\n") + self.git(wt, "add", "child-work") + self.git(wt, "commit", "-m", "Child work") + self.git(parent, "merge", "--no-ff", "feature/alpha-login", "-m", + "Merge pull request 'feature/alpha-login' (#5) from feature/alpha-login into feature/alpha") + self.publish_initiative("feature/alpha") + closed = self.task(parent, "close", "--fold", env=self.close_env()) + self.assertIn("[closed] 1 张已合入卡片", closed.stdout) + self.assertEqual(self.gitea.posted[-1]["head"], "feature/alpha") + archived = self.git(parent, "show", "HEAD:.task/archive/feature-alpha-login.md").stdout + self.assertIn("已包含于 origin/feature/alpha", archived) + self.assertIn("状态:已完成(回填)", archived) + self.assertIn("PR #5", archived) + self.assertFalse((parent / ".task/feature-alpha-login.md").exists()) + + def test_close_child_still_closable_after_initiative_merged_and_deleted(self): + parent = self.start_initiative() + wt, _ = self.start_child() + (wt / "child-work").write_text("child result\n") + self.git(wt, "add", "child-work") + self.git(wt, "commit", "-m", "Child work") + self.git(parent, "merge", "--no-ff", "feature/alpha-login", "-m", + "Merge pull request 'feature/alpha-login' (#5) from feature/alpha-login into feature/alpha") + self.publish_initiative("feature/alpha") + self.git(self.repo, "fetch", "-q", "origin") + self.git(self.repo, "merge", "--no-ff", "origin/feature/alpha", "-m", + "Merge pull request 'feature/alpha' (#3) from feature/alpha into main") + self.git(self.repo, "push", "origin", "main") + self.git(self.repo, "push", "origin", "--delete", "feature/alpha") + closed = self.task(self.repo, "close", env=self.close_env()) + self.assertIn("[closed] 2 张已合入卡片", closed.stdout) + self.assertIn("[pr] " + self.gitea.web, closed.stdout) + self.assertEqual(self.gitea.posted[-1]["base"], "main") + refs = self.git(self.repo, "for-each-ref", "--format=%(refname:short)", + "refs/heads/feature/card-close-*").stdout.splitlines() + self.assertEqual(len(refs), 1) + archived = self.git(self.repo, "show", f"{refs[0]}:.task/archive/feature-alpha-login.md").stdout + self.assertIn("已包含于 origin/main", archived) + self.assertIn("PR #5", archived) + if __name__ == "__main__": unittest.main() From 179f03771a9712ea05a51ea52fca876d35693aa0 Mon Sep 17 00:00:00 2001 From: weichen Date: Fri, 16 Oct 2026 18:29:07 +0000 Subject: [PATCH 04/10] Record the integrated U2.2 target-integrity unit and its evidence Why: U2.2 completed on a fresh run after a scope-expansion stop and was applied by transport. Evidence: make evidence run of task/recovery/evidence/triage/pr-check tests (SELF). Impact: Task card only. Refs: .task/feature-development-governance-v2-target-integrity.md Co-authored-by: Cursor --- ...elopment-governance-v2-target-integrity.md | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/.task/feature-development-governance-v2-target-integrity.md b/.task/feature-development-governance-v2-target-integrity.md index eff360f8..12fff4ca 100644 --- a/.task/feature-development-governance-v2-target-integrity.md +++ b/.task/feature-development-governance-v2-target-integrity.md @@ -31,7 +31,10 @@ | 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 | |---|---|---|---|---|---|---|---|---|---|---| -| 待定义 | — | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | — | +| u2.2-immediate-target-integrity(第一次运行) | scripts/task.sh、scripts/evidence.py、tests | /tmp/gov2-unit-u22-target.json | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | scope-expansion(需同步放宽 scripts/check-evidence.py 字段白名单)→ fail-stop | 无 | false | /tmp/gov2-receipt-u22-r1.json | +| u2.2-immediate-target-integrity(第二次运行) | 同上 + scripts/check-evidence.py | 同上(扩入 check-evidence.py) | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | completed → transport 74a834c,apply 快进集成 | 无 | false | /tmp/gov2-receipt-u22-r2.json | + +- U2.2 第一次运行对账:worker 以 scope-expansion 停止,私有工作区保留、无远端、无 transport,规范检出未变。扩围在已批准目标内(evidence 新字段的校验端),单元包加入 scripts/check-evidence.py 后全新派发。 ## 关联方向与规划 @@ -153,3 +156,43 @@ "receipt_sha256": "4844be1ca1288183c67e74a29719ec6967b44033ba7d34da73363b2a525be2ab" } ``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-16T18:27:04.585784+00:00", + "command": "bash -n scripts/task.sh && python3 -m unittest tests/test_task.py tests/test_task_recovery.py tests/test_evidence.py tests/test_task_triage.py tests/test_task_pr_check.py", + "command_sha256": "083afd864a86626635db3545591b1ad6e772d88cfea065c9f4d7e06074df5334", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "74a834c78633793c95ea1f91bf6c34385b39da9f", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2f5b19872be2a4597838a4131ad75d1be089ee5e deps/development-guidelines (remotes/origin/feature/evidence-provenance-5-g2f5b198)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after": { + "head": "74a834c78633793c95ea1f91bf6c34385b39da9f", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2f5b19872be2a4597838a4131ad75d1be089ee5e deps/development-guidelines (remotes/origin/feature/evidence-provenance-5-g2f5b198)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "....../home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/case.py:704: ResourceWarning: unclosed \n function, args, kwargs = self._cleanups.pop()\nResourceWarning: Enable tracemalloc to get the object allocation traceback\n../home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/case.py:704: ResourceWarning: unclosed \n function, args, kwargs = self._cleanups.pop()\nResourceWarning: Enable tracemalloc to get the object allocation traceback\n........................................................................................................................................................................\n----------------------------------------------------------------------\nRan 176 tests in 121.450s\n\nOK\n", + "root_target": "main", + "immediate_target": "feature/development-governance-v2", + "output_sha256": "d85091d0854d13e9394bb64fc45f43d51c44e804b6607c427d55855c0d3b6f4f", + "receipt_sha256": "3e8b41c4458de5b95360023f6e32109bc9b1e90fbe1d24fbc0adb7e7158a8fa4" +} +``` From 1c4acb40a4c5abb01a6fa733e7005b7aca9c1b1d Mon Sep 17 00:00:00 2001 From: agent-exec-transport Date: Fri, 16 Oct 2026 19:02:36 +0000 Subject: [PATCH 05/10] agent-exec transport 879b9a517efd4e3f85339649d5b00586/395b33d1abda --- AGENT-EXECUTION.md | 13 +++- scripts/agent_exec_config.py | 84 +++++++++++++++++++++++- tests/test_agent_exec_config.py | 111 ++++++++++++++++++++++++++++++++ 3 files changed, 205 insertions(+), 3 deletions(-) diff --git a/AGENT-EXECUTION.md b/AGENT-EXECUTION.md index 662f22b1..c817b41a 100644 --- a/AGENT-EXECUTION.md +++ b/AGENT-EXECUTION.md @@ -19,7 +19,9 @@ candidate ends `unavailable` or `blocked`, and that result does not authorize the host to write the unit. The legacy value `all-unavailable` remains parseable and likewise grants no host write authority. Cursor uses `cursor-agent-stable`. `model: auto` lets each CLI use its configured default -model; PI therefore uses the operator-selected MiniMax default. +model; PI therefore uses the operator-selected MiniMax default. The +`integration` block declares the host-exempt paths and the transport, admission, +and cleanup entry points. ```agent-execution schema: agent-execution/v1 @@ -66,4 +68,13 @@ profiles: executable: codex model: auto enabled: true + +integration: + exempt_paths: [".task/**", "docs/superpowers/specs/**", "docs/superpowers/plans/**"] + transport: + command: python3 scripts/agent_exec.py apply + admission: + command: python3 scripts/agent_exec.py admit + cleanup: + command: make task-finish ``` diff --git a/scripts/agent_exec_config.py b/scripts/agent_exec_config.py index 405e8d84..a65b0ded 100644 --- a/scripts/agent_exec_config.py +++ b/scripts/agent_exec_config.py @@ -5,7 +5,7 @@ import ast import re from collections.abc import Mapping from dataclasses import dataclass -from pathlib import Path +from pathlib import Path, PurePosixPath from typing import Any SCHEMA_V1 = "agent-execution/v1" @@ -47,7 +47,17 @@ SECRET_VALUE_RE = re.compile( r"(?i)^(bearer\s+\S+|sk-[A-Za-z0-9_\-]{8,}|[A-Fa-f0-9]{32,})$" ) -ROOT_KEYS = frozenset({"schema", "execution", "roles", "profiles", "custom_adapters"}) +ROOT_KEYS = frozenset( + {"schema", "execution", "roles", "profiles", "custom_adapters", "integration"} +) +INTEGRATION_KEYS = frozenset({"exempt_paths", "transport", "admission", "cleanup"}) +ENTRYPOINT_KEYS = frozenset({"command"}) +# Mirrors the host-managed prefixes enforced by scripts/agent_exec.py +# (_HOST_MANAGED_PREFIXES, the enforcement source). A declared +# integration.exempt_paths must equal this set so it cannot widen host authority. +HOST_EXEMPT_PATHS = frozenset( + {".task/**", "docs/superpowers/specs/**", "docs/superpowers/plans/**"} +) EXECUTION_KEYS = frozenset( { "fresh_process_per_unit", @@ -116,6 +126,14 @@ class CustomAdapter: output_format: str +@dataclass(frozen=True) +class IntegrationConfig: + exempt_paths: tuple[str, ...] + transport_command: str + admission_command: str + cleanup_command: str + + @dataclass(frozen=True) class ExecutionConfig: schema: str @@ -123,6 +141,7 @@ class ExecutionConfig: roles: Mapping[str, tuple[str, ...]] profiles: Mapping[str, Profile] custom_adapters: Mapping[str, CustomAdapter] + integration: IntegrationConfig | None = None def load_config(repo: Path) -> ExecutionConfig: @@ -351,12 +370,17 @@ def _build_config(raw: dict[str, Any]) -> ExecutionConfig: _validate_normal_role_adapters(profiles, roles) _validate_normal_role_exactness(profiles, roles) + integration = None + if "integration" in raw: + integration = _build_integration(raw["integration"]) + return ExecutionConfig( schema=schema, execution=execution, roles=roles, profiles=profiles, custom_adapters=custom_adapters, + integration=integration, ) @@ -634,6 +658,62 @@ def _build_custom_adapters(raw: Any) -> dict[str, CustomAdapter]: return out +def _build_integration(raw: Any) -> IntegrationConfig: + if not isinstance(raw, dict): + raise ConfigError("integration must be a mapping") + unknown = set(raw) - INTEGRATION_KEYS + if unknown: + raise ConfigError(f"unknown keys in integration: {sorted(unknown)}") + missing = INTEGRATION_KEYS - set(raw) + if missing: + raise ConfigError(f"missing keys in integration: {sorted(missing)}") + exempt_paths = _exempt_paths_tuple(raw["exempt_paths"]) + if set(exempt_paths) != HOST_EXEMPT_PATHS: + raise ConfigError( + "integration.exempt_paths must exactly match the host-managed set " + f"{sorted(HOST_EXEMPT_PATHS)}; got {list(exempt_paths)}" + ) + return IntegrationConfig( + exempt_paths=exempt_paths, + transport_command=_entrypoint_command(raw["transport"], "integration.transport"), + admission_command=_entrypoint_command(raw["admission"], "integration.admission"), + cleanup_command=_entrypoint_command(raw["cleanup"], "integration.cleanup"), + ) + + +def _exempt_paths_tuple(value: Any) -> tuple[str, ...]: + if not isinstance(value, list) or not value: + raise ConfigError("integration.exempt_paths must be a non-empty list") + items: list[str] = [] + for item in value: + if not isinstance(item, str) or not item: + raise ConfigError("integration.exempt_paths entries must be non-empty strings") + if item.startswith("/") or ".." in PurePosixPath(item).parts: + raise ConfigError( + f"integration.exempt_paths must be relative without '..': {item!r}" + ) + if item in items: + raise ConfigError(f"duplicate integration.exempt_paths entry: {item!r}") + items.append(item) + return tuple(items) + + +def _entrypoint_command(raw: Any, label: str) -> str: + if not isinstance(raw, dict): + raise ConfigError(f"{label} must be a mapping") + unknown = set(raw) - ENTRYPOINT_KEYS + if unknown: + raise ConfigError(f"unknown keys in {label}: {sorted(unknown)}") + missing = ENTRYPOINT_KEYS - set(raw) + if missing: + raise ConfigError(f"missing keys in {label}: {sorted(missing)}") + command = raw["command"] + if not isinstance(command, str) or not command.strip(): + raise ConfigError(f"{label}.command must be a non-empty string") + _reject_shell_or_secret_value(f"{label}.command", command) + return command + + def _argv_tuple(value: Any, label: str) -> tuple[str, ...]: if not isinstance(value, list): raise ConfigError(f"{label} must be a list") diff --git a/tests/test_agent_exec_config.py b/tests/test_agent_exec_config.py index e6f2c88a..25b779a2 100644 --- a/tests/test_agent_exec_config.py +++ b/tests/test_agent_exec_config.py @@ -792,6 +792,117 @@ class AgentExecConfigTests(unittest.TestCase): self.assertTrue(cfg.profiles["codex"].enabled) self.assertEqual(cfg.profiles["codex"].adapter, "codex") + def test_valid_integration_block_parses_and_is_exposed(self) -> None: + write_repo(self.repo, MINIMAL_BLOCK + "\n" + VALID_INTEGRATION) + cfg = load_config(self.repo) + self.assertIsNotNone(cfg.integration) + assert cfg.integration is not None + self.assertEqual( + cfg.integration.exempt_paths, + (".task/**", "docs/superpowers/specs/**", "docs/superpowers/plans/**"), + ) + self.assertEqual( + cfg.integration.transport_command, "python3 scripts/agent_exec.py apply" + ) + self.assertEqual( + cfg.integration.admission_command, "python3 scripts/agent_exec.py admit" + ) + self.assertEqual(cfg.integration.cleanup_command, "make task-finish") + + def test_missing_integration_still_parses_as_none(self) -> None: + write_repo(self.repo, MINIMAL_BLOCK) + self.assertIsNone(load_config(self.repo).integration) + + def test_integration_rejects_unknown_and_missing_keys(self) -> None: + cases = { + "unknown key in integration": VALID_INTEGRATION.replace( + " cleanup:\n", " extra: x\n cleanup:\n" + ), + "unknown key in transport": VALID_INTEGRATION.replace( + " command: python3 scripts/agent_exec.py apply\n", + " command: python3 scripts/agent_exec.py apply\n extra: x\n", + ), + "missing cleanup": VALID_INTEGRATION.split(" cleanup:")[0], + } + for label, block in cases.items(): + with self.subTest(label): + write_repo(self.repo, MINIMAL_BLOCK + "\n" + block) + with self.assertRaises(ConfigError): + load_config(self.repo) + + def test_integration_exempt_paths_must_be_unique_nonempty_and_exact(self) -> None: + cases = { + "empty": 'exempt_paths: []', + "duplicate": ( + 'exempt_paths: [".task/**", ".task/**", ' + '"docs/superpowers/specs/**", "docs/superpowers/plans/**"]' + ), + "widened": ( + 'exempt_paths: [".task/**", "docs/superpowers/specs/**", ' + '"docs/superpowers/plans/**", "src/**"]' + ), + "narrowed": 'exempt_paths: [".task/**", "docs/superpowers/specs/**"]', + "parent traversal": ( + 'exempt_paths: [".task/**", "docs/superpowers/specs/**", ' + '"docs/superpowers/plans/../../**"]' + ), + "absolute": ( + 'exempt_paths: [".task/**", "docs/superpowers/specs/**", ' + '"/docs/superpowers/plans/**"]' + ), + } + for label, value in cases.items(): + with self.subTest(label): + block = VALID_INTEGRATION.replace( + 'exempt_paths: [".task/**", "docs/superpowers/specs/**", ' + '"docs/superpowers/plans/**"]', + value, + ) + write_repo(self.repo, MINIMAL_BLOCK + "\n" + block) + with self.assertRaises(ConfigError): + load_config(self.repo) + + def test_integration_command_rejects_shell_metacharacters(self) -> None: + block = VALID_INTEGRATION.replace( + "command: python3 scripts/agent_exec.py apply", + "command: python3 scripts/agent_exec.py apply; rm -rf /", + ) + write_repo(self.repo, MINIMAL_BLOCK + "\n" + block) + with self.assertRaises(ConfigError): + load_config(self.repo) + + def test_host_exempt_paths_match_executor_enforcement(self) -> None: + from scripts import agent_exec + from scripts.agent_exec_config import HOST_EXEMPT_PATHS + + enforced = {prefix.rstrip("/") for prefix in agent_exec._HOST_MANAGED_PREFIXES} + declared = {glob.removesuffix("/**") for glob in HOST_EXEMPT_PATHS} + self.assertEqual(declared, enforced) + + def test_checked_in_project_config_declares_integration(self) -> None: + cfg = load_config(Path(__file__).resolve().parents[1]) + self.assertIsNotNone(cfg.integration) + assert cfg.integration is not None + self.assertEqual( + set(cfg.integration.exempt_paths), + {".task/**", "docs/superpowers/specs/**", "docs/superpowers/plans/**"}, + ) + self.assertEqual(cfg.integration.cleanup_command, "make task-finish") + + +VALID_INTEGRATION = textwrap.dedent( + """\ + integration: + exempt_paths: [".task/**", "docs/superpowers/specs/**", "docs/superpowers/plans/**"] + transport: + command: python3 scripts/agent_exec.py apply + admission: + command: python3 scripts/agent_exec.py admit + cleanup: + command: make task-finish + """ +) + def _legacy_custom_block() -> str: """No emergency_profile and adapter custom on every role.""" From 33b4cffd1d9e4003b8724842cf3de33e2c1ad7bd Mon Sep 17 00:00:00 2001 From: weichen Date: Fri, 16 Oct 2026 19:20:09 +0000 Subject: [PATCH 06/10] Record the integrated U2.5 integration block and the equivalence replay Why: U2.5 completed on a fresh run; the replay compares the reference and shared executors. Evidence: make evidence agent_exec suites and validate (SELF); replay log 11/12 equal, 1 intended legacy difference (SELF). Impact: Task card only. Refs: .task/feature-development-governance-v2-target-integrity.md Co-authored-by: Cursor --- ...elopment-governance-v2-target-integrity.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/.task/feature-development-governance-v2-target-integrity.md b/.task/feature-development-governance-v2-target-integrity.md index 12fff4ca..2e3c9825 100644 --- a/.task/feature-development-governance-v2-target-integrity.md +++ b/.task/feature-development-governance-v2-target-integrity.md @@ -33,7 +33,12 @@ |---|---|---|---|---|---|---|---|---|---|---| | u2.2-immediate-target-integrity(第一次运行) | scripts/task.sh、scripts/evidence.py、tests | /tmp/gov2-unit-u22-target.json | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | scope-expansion(需同步放宽 scripts/check-evidence.py 字段白名单)→ fail-stop | 无 | false | /tmp/gov2-receipt-u22-r1.json | | u2.2-immediate-target-integrity(第二次运行) | 同上 + scripts/check-evidence.py | 同上(扩入 check-evidence.py) | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | completed → transport 74a834c,apply 快进集成 | 无 | false | /tmp/gov2-receipt-u22-r2.json | +| u2.5-config-integration-block(第一次运行) | scripts/agent_exec_config.py、tests/test_agent_exec_config.py、AGENT-EXECUTION.md | /tmp/gov2-unit-u25-integration.json | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | scope-expansion(收据摘要需改 scripts/agent_exec.py)→ fail-stop | 无 | false | /tmp/gov2-receipt-u25-r1.json | +| u2.5-config-integration-block(第二次运行) | 同上 | 同上(去掉收据摘要要求:config_digest 已覆盖整份文件) | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | completed → transport 1c4acb4,apply 快进集成 | 无 | false | /tmp/gov2-receipt-u25-r2.json | +- U2.5 第一次运行对账:scope-expansion,私有工作区保留、无 transport、规范检出未变;扩围项非阻塞,收窄要求后全新派发。 +- 本地测试环境注意:环境变量 GOTELEMETRY_GOPLS_CLIENT_TOKEN(3 位数字)会被脱敏器当作密钥值,使 test_worker_commit_or_head_move_is_rejected 收据中数字被替换为 ***;该失败在 U2.5 前基线同样出现,证据命令以 env -u 排除该变量(CI 环境无此变量)。 +- 行为等价重放(SELF,源码外工具 /tmp/agentexec-equiv/replay.py):Dev 参考实现 1c4acb4 与 DM dm-server de8c5d0 在 12 个用例上比较 exit/terminal/attempts/changed/transport:缺配置、密钥路径单元、全部不可用、cursor 成功、cursor 缺失 agy 成功、越权路径、启动后退出 1、记录后跟代码围栏、blocked 记录、空闲超时、正常候选耗尽后紧急候选,11 例一致;legacy 配置(fallback_to_host: all-unavailable、缺 integration)为预期差异:DM 按 draft.12 拒绝运行 legacy-readable(invalid-config),参考实现仍运行。日志 /tmp/agentexec-equiv/replay-1c4acb4-vs-de8c5d0.log。 - U2.2 第一次运行对账:worker 以 scope-expansion 停止,私有工作区保留、无远端、无 transport,规范检出未变。扩围在已批准目标内(evidence 新字段的校验端),单元包加入 scripts/check-evidence.py 后全新派发。 ## 关联方向与规划 @@ -196,3 +201,43 @@ "receipt_sha256": "3e8b41c4458de5b95360023f6e32109bc9b1e90fbe1d24fbc0adb7e7158a8fa4" } ``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-16T19:18:54.260168+00:00", + "command": "env -u GOTELEMETRY_GOPLS_CLIENT_TOKEN python3 -m unittest discover -s tests -p 'test_agent_exec*.py' && python3 scripts/agent_exec.py validate --repo .", + "command_sha256": "3c5c2976f03ac9cb68d9a149e3b8d4e5901f7ce344b70116fdc22be8a629e055", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "1c4acb40a4c5abb01a6fa733e7005b7aca9c1b1d", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2f5b19872be2a4597838a4131ad75d1be089ee5e deps/development-guidelines (remotes/origin/feature/evidence-provenance-5-g2f5b198)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after": { + "head": "1c4acb40a4c5abb01a6fa733e7005b7aca9c1b1d", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2f5b19872be2a4597838a4131ad75d1be089ee5e deps/development-guidelines (remotes/origin/feature/evidence-provenance-5-g2f5b198)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "..............................................s................................................................................\n----------------------------------------------------------------------\nRan 127 tests in 23.821s\n\nOK (skipped=1)\nvalidate: ok\n", + "root_target": "main", + "immediate_target": "feature/development-governance-v2", + "output_sha256": "88ee5c5b0f0c4ef584cad007e1071063d302dc006bc4d07f3d61bd802fa5b086", + "receipt_sha256": "4920d3f814020a7700015ffb9c8b0f93698a648b4755ffac43e62b1baa544d37" +} +``` From 6b2e6fd2600c56c14c43083ac3952e0dc496a6aa Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 17 Oct 2026 01:40:10 +0000 Subject: [PATCH 07/10] Record the failed first U2.4 run and its reconciliation Why: The worker initialised the submodule, which changed git administration state in its private clone. Evidence: /tmp/gov2-receipt-u24-r1.json terminal failed-unknown, no transport (SELF). Impact: Task card only. Refs: .task/feature-development-governance-v2-target-integrity.md Co-authored-by: Cursor --- .task/feature-development-governance-v2-target-integrity.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.task/feature-development-governance-v2-target-integrity.md b/.task/feature-development-governance-v2-target-integrity.md index 2e3c9825..56a4a0f7 100644 --- a/.task/feature-development-governance-v2-target-integrity.md +++ b/.task/feature-development-governance-v2-target-integrity.md @@ -35,7 +35,9 @@ | u2.2-immediate-target-integrity(第二次运行) | 同上 + scripts/check-evidence.py | 同上(扩入 check-evidence.py) | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | completed → transport 74a834c,apply 快进集成 | 无 | false | /tmp/gov2-receipt-u22-r2.json | | u2.5-config-integration-block(第一次运行) | scripts/agent_exec_config.py、tests/test_agent_exec_config.py、AGENT-EXECUTION.md | /tmp/gov2-unit-u25-integration.json | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | scope-expansion(收据摘要需改 scripts/agent_exec.py)→ fail-stop | 无 | false | /tmp/gov2-receipt-u25-r1.json | | u2.5-config-integration-block(第二次运行) | 同上 | 同上(去掉收据摘要要求:config_digest 已覆盖整份文件) | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | completed → transport 1c4acb4,apply 快进集成 | 无 | false | /tmp/gov2-receipt-u25-r2.json | +| u2.4-docs-and-guidelines-pin(第一次运行) | deps/development-guidelines、policy/*、AGENTS.md | /tmp/gov2-unit-u24-docs-pin.json | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | failed-unknown(worker 运行 git submodule update --init 写入私有克隆 .git/config,被判为未解释的 git 管理变更)→ fail-stop | 无 | false | /tmp/gov2-receipt-u24-r1.json | +- U2.4 第一次运行对账:私有工作区保留、无 transport;规范检出与其 .git/config 未变。处置:单元包改用既有 gitlink 提升模式(本地 clone --no-checkout 到子模块目录并 detach 到 2688fd2be6a5,禁止 git submodule/add/update-index),全新派发。 - U2.5 第一次运行对账:scope-expansion,私有工作区保留、无 transport、规范检出未变;扩围项非阻塞,收窄要求后全新派发。 - 本地测试环境注意:环境变量 GOTELEMETRY_GOPLS_CLIENT_TOKEN(3 位数字)会被脱敏器当作密钥值,使 test_worker_commit_or_head_move_is_rejected 收据中数字被替换为 ***;该失败在 U2.5 前基线同样出现,证据命令以 env -u 排除该变量(CI 环境无此变量)。 - 行为等价重放(SELF,源码外工具 /tmp/agentexec-equiv/replay.py):Dev 参考实现 1c4acb4 与 DM dm-server de8c5d0 在 12 个用例上比较 exit/terminal/attempts/changed/transport:缺配置、密钥路径单元、全部不可用、cursor 成功、cursor 缺失 agy 成功、越权路径、启动后退出 1、记录后跟代码围栏、blocked 记录、空闲超时、正常候选耗尽后紧急候选,11 例一致;legacy 配置(fallback_to_host: all-unavailable、缺 integration)为预期差异:DM 按 draft.12 拒绝运行 legacy-readable(invalid-config),参考实现仍运行。日志 /tmp/agentexec-equiv/replay-1c4acb4-vs-de8c5d0.log。 From 35fd99ea96865ba8280d90fe3c145cba97914915 Mon Sep 17 00:00:00 2001 From: agent-exec-transport Date: Sat, 17 Oct 2026 01:56:56 +0000 Subject: [PATCH 08/10] agent-exec transport e2dbddfcd4e94e2dbfd5019fdd7d2b35/9ed1c816e887 --- AGENTS.md | 6 +++--- deps/development-guidelines | 2 +- policy/adoption.md | 4 +++- policy/delivery.md | 19 ++++++++++++------- policy/governance.md | 18 ++++++++++++++---- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 2ea3bcbb..b1858643 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,12 +88,12 @@ policy/delivery.md。 ## 任务启动门禁(强制) -- **新需求分流检查**:每次接到新需求,在创建分支前先运行 `make task-triage` 检查目标仓库中是否有接纳中的大任务集成分支(`branch_kind=initiative` 且 `accepting_requirements=true`)。三态分流:`JOIN`(建立对应大任务的子任务 `make task-start KIND=child INITIATIVE=feature/ NAME=feature/-`)、`NEW`(建立普通任务或新的大任务 `make task-start [KIND=initiative] NAME=feature/`)、`DECISION_REQUIRED`(存在多个候选或改变范围/优先级,由人工决策)。 +- **新需求分流检查**:每次接到新需求,在创建分支前以远端为准运行 `make task-triage REQ='<需求>' TRIAGE_RECEIPT=<路径>` 检查接纳中的大任务集成分支(`branch_kind=initiative` 且 `accepting_requirements=true`);有候选时再运行 `make task-triage-decide TRIAGE_RECEIPT=<路径> VERDICT=JOIN|NEW … REASON='<理由>'`;随后 `make task-start … TRIAGE_RECEIPT=<路径>` 核验收据,通过后才建分支。三态分流:`JOIN`(建立对应大任务的子任务 `make task-start KIND=child INITIATIVE=feature/ NAME=feature/- TRIAGE_RECEIPT=<路径>`)、`NEW`(建立普通任务或新的大任务 `make task-start [KIND=initiative] NAME=feature/ TRIAGE_RECEIPT=<路径>`)、`DECISION_REQUIRED`(存在候选时的待决策状态;改变范围/优先级的加入由人工决策)。 - 任务启动或恢复后,**第一次项目写操作前**通过 `RECEIPT=/tmp/<本次唯一名称>.json CMD="make precheck" make evidence` 运行一次启动检查并保存 完整脱敏收据(不要求已有任务卡);按输出完成必读。`SHARED_WORKSPACE_BUSY / SYNC_REQUIRED / REMOTE_UNVERIFIED` 均不得进入写入流程;失败后排除原因再启动,不把缓存远端当最新事实。 -- 新任务运行 `make task-start NAME=feature/ PRECHECK_RECEIPT=/tmp/<本次唯一名称>.json`, +- 新任务运行 `make task-start NAME=feature/ TRIAGE_RECEIPT=<分流收据路径> PRECHECK_RECEIPT=/tmp/<本次唯一名称>.json`, 建立独立 worktree 与任务卡并导入首次收据。恢复已有登记任务在原 worktree 用 `make task-resume PRECHECK_RECEIPT=/tmp/<本次唯一名称>.json` 验证并原样导入收据。 默认 delivery 要求严格 READY;局部恢复接口、启用条件与旧收据处理见 [开发门禁](policy/governance.md#启动与恢复)。任务中途不重复启动检查。 @@ -103,7 +103,7 @@ policy/delivery.md。 任务卡记录主干 R0、父分支及其 SHA、父 PR;子分支命名 `/<父slug>-<子题>`, 不嵌 SHA;合入顺序固定父→子;父合入后子分支须 `make task-sync` 并入最新 main 并把 PR base 改回 main,方可声明可合入(分支保护要求 head 含 origin/main,未同步必被拦)。 -- **验收、请求审核、合入前**各运行一次 `make task-sync`;完成声明的 precheck、task-sync、 +- **验收、请求审核、合入前**各运行一次 `make task-sync`,并运行 `make task-pr-check`(大任务收口用 `FINAL=1`)核验 PR base/head 门禁;完成声明的 precheck、task-sync、 测试三段输出由 `make evidence` 写入任务卡(见「证据与验证门禁」),不手抄。 - **多个分支交付 / CI 调度**:先读 [合入调度](policy/merge-queue.md),核对采纳状态、协调者、 记录及当前窗口。新模式尚未启用时保留既有同步节点;启用后最终同步至合入核验共用窗口, diff --git a/deps/development-guidelines b/deps/development-guidelines index 2f5b1987..2688fd2b 160000 --- a/deps/development-guidelines +++ b/deps/development-guidelines @@ -1 +1 @@ -Subproject commit 2f5b19872be2a4597838a4131ad75d1be089ee5e +Subproject commit 2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb diff --git a/policy/adoption.md b/policy/adoption.md index ba4e1388..0161f932 100644 --- a/policy/adoption.md +++ b/policy/adoption.md @@ -6,7 +6,8 @@ - 过程文档位置:modules/documents(docs/records/) - 版本权威:父仓 gitlink - 批准/生效依据:Dev PR#1(19/19 正负例 + make test);guidelines PR#1 -- 合入调度通用版本:`0.1.0-draft.11`,实际合入提交 `2f5b19872be2a4597838a4131ad75d1be089ee5e`(Guidelines PR #5);本仓 gitlink 固定该源码版本。Dev 采用 [manual 串行合入规则](merge-queue.md):并行开发,轮到后才同步、跑最终 CI 并由智能体合入。该规则不要求先完成全写者审计或第二轮试行,也不宣称自动互斥已经实现。 +- 规范源码版本:`0.1.0-draft.12`,实际合入提交 `2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb`(Guidelines PR #7);本仓 gitlink(`deps/development-guidelines`)固定该源码版本,版本权威为父仓 gitlink。 +- 合入调度通用版本:`0.1.0-draft.11`,实际合入提交 `2f5b19872be2a4597838a4131ad75d1be089ee5e`(Guidelines PR #5);draft.12 未修改其合入调度文件(standards/merge-queue.md、templates/merge-queue.md)。Dev 采用 [manual 串行合入规则](merge-queue.md):并行开发,轮到后才同步、跑最终 CI 并由智能体合入。该规则不要求先完成全写者审计或第二轮试行,也不宣称自动互斥已经实现。 - 过程计划固定:Documents PR #96 实际合入 `129cc3579d9c9e3edfb46c99270d65f3e1dad0a0`,包含既有主干文档及获批 U1–U6 计划;当前进展以任务/PR 记录为准。 | 规范/工作流 | 适用条件与范围 | 执行方式/证据 | @@ -24,6 +25,7 @@ | 同上(zcode 实例) | zcode 客户端写路径 | policy/tool-adaptation-zcode.md:PreToolUse 写守卫;脚本负例与客户端接线分开,客户端 pending-live | | core/baseline.md「规范层级」+ documentation.md「记忆分层/机制化」(draft.9) | 层级效力、记忆权威、经验机制化 | manual:本仓 policy/ 仅收紧不放宽;记忆四层按条文执行(任务卡=任务记忆,documents/records=项目记忆,Dev 仓 AGENTS.md 指针已就位) | | draft.11 合入调度 | active/manual;Dev main 使用 #518 排序和单一最终窗口 | 等待分支不追 main;窗口任务同步一次、固定 HEAD、跑当前必需 CI、由智能体合入并回读结果。Issue 不是原子锁,平台保护仍承担最终准入 | +| draft.12 工程 Agent 执行标准、终态收据 Schema、两级交付与分流(硬边界 8、agent-execution、A8) | 实施、交付、分流与 PR 目标;任务启动前 | active/manual:`make task-triage` 收据为 `make task-start … TRIAGE_RECEIPT=…` 的前置,远端不可核验时 REMOTE_UNVERIFIED(exit 6)并拒绝建分支;child PR 由 `make task-pr-check` 本地核验与 CI `PR base gate` 门禁;AGENT-EXECUTION.md 已声明 `integration` 块。draft.12 Schema 正负例与平台侧负例在项目中的真实运行本次未执行(NOT_RUN),不由本行推断 | ## 项目差异 diff --git a/policy/delivery.md b/policy/delivery.md index d60589e1..6300861e 100644 --- a/policy/delivery.md +++ b/policy/delivery.md @@ -154,17 +154,22 @@ host 可以直接编写并提交的豁免只有 `.task/**`、`docs/superpowers/s 本仓采用两级业务交付模型: - **`main`**:稳定基线,仅接纳已完成并通过最终组合准入的结果。 - **大任务集成分支(initiative)**:从最新 `origin/main` 建立,根目标与即时目标均为 `main`。负责跨单元目标的阶段集成、组合验证与最终交付。合入主干后关闭、归档与回收,不作为长期存在的 develop 分支。 -- **子任务分支(child)**:从所属大任务分支固定 HEAD 建立,即时目标为大任务分支。负责一个有界单元的实施、独立 Review 与局部验证,通过 PR 合入大任务分支。 +- **子任务分支(child)**:从远端所属大任务分支的当前头建立(须等于分流收据核验的 head,`make task-start` 校验),即时目标为大任务分支。负责一个有界单元的实施、独立 Review 与局部验证,通过 PR 合入大任务分支。 - **普通任务分支(standalone)**:无需阶段集成的小需求或独立修复,直接从最新 `origin/main` 建立并向 `main` 交付。 -每次接到新需求,创建分支前必须执行分流检查(`make task-triage`),扫描仓库中进行中且允许接纳需求(`accepting_requirements=true`)的大任务分支: -- `JOIN`:加入唯一匹配的大任务,从大任务分支创建子任务分支交付; -- `NEW`:无接纳中的大任务,建立普通任务或新的大任务; -- `DECISION_REQUIRED`:存在多个候选大任务或加入将改变交付边界/优先级,交由人工决策。 +每个任务卡记录 `root_target` 与 `immediate_target`(子任务为所属大任务分支,其余为 `main`)。`make task-resume`、`make task-sync` 与 `make task-finish` 以 `immediate_target` 为准;`make task-close` 仅在 `FOLD=--fold` 时以其为闭合 PR base。 + +每次接到新需求,创建分支前必须分流,事实来源为 origin(本地 `.task/` 不参与发现): +1. **发现**:`make task-triage REQ='<需求>' TRIAGE_RECEIPT=<路径>` 查询远端。候选须已推送、存在以 `main` 为 base 的开放 PR,且该远端分支的任务卡声明 `branch_kind=initiative`、`accepting_requirements=true` 且未标记已完成。无候选时收据直接为 `NEW`;有候选时为 `DECISION_REQUIRED`(退出码 5)。远端或 Gitea 不可核验时记为 `REMOTE_UNVERIFIED`(退出码 6),不得得出 `NEW`。 +2. **决策**(仅有候选时):`make task-triage-decide TRIAGE_RECEIPT=<路径> VERDICT=JOIN INITIATIVE=<分支> REASON='<加入理由>'`,或 `VERDICT=NEW REASON='<不适配理由>'`,显式记录结论与理由。禁止按候选数量自动 `JOIN`;加入会改变范围、关键路径或交付边界时交用户决策。 +3. **启动**:`make task-start … TRIAGE_RECEIPT=<路径>` 在创建任何 worktree 或分支前核验收据(默认 4 小时内有效)、候选对象未变化,且结论与分支类型及所选 initiative 一致;不一致或远端不可核验时拒绝,不建分支。 +- `JOIN` 建立子任务(child);`NEW` 建立普通任务(standalone)或新的大任务(initiative)。 + +PR 目标:子任务 PR 的 base 为所属大任务分支;普通任务与大任务 PR 的 base 为 `main`。`make task-pr-check` 在本地核验 base 与 head(远端为准),CI 的 `PR base gate` 以同一规则复核。 两级合入与验证: -1. **子任务合入大任务**:子任务完成时,通过 `make task-sync` 合并大任务分支最新状态,解决文本与语义冲突,完成直接相关测试与独立 Review 后通过 PR 合入大任务分支; -2. **大任务合入主干**:所有必需子任务合入后,关闭需求接纳(`accepting_requirements=false`),同步最新 `origin/main`,执行完整组合验证、独立 Review 与必需 CI,然后合入 `main`。 +1. **子任务合入大任务**:子任务完成时,通过 `make task-sync` 合并大任务分支的远端最新状态(delivery 只认远端头),解决文本与语义冲突,完成直接相关测试与独立 Review 后,以大任务分支为 base 提 PR,并通过 `make task-pr-check` 与 CI `PR base gate`; +2. **大任务合入主干**:所有必需子任务已合入或已延期后,将大任务卡的 `accepting_requirements` 置为 `false`,通过 `make task-sync` 同步最新 `origin/main`,再运行 `make task-pr-check FINAL=1` 核验 `## 子任务登记` 中必需子任务均为「已合入」或「已延期」;随后执行完整组合验证、独立 Review 与必需 CI,以 `main` 为 base 合入。 ## 目标优先、范围控制与问题分流 diff --git a/policy/governance.md b/policy/governance.md index a1f266ec..a1186973 100644 --- a/policy/governance.md +++ b/policy/governance.md @@ -37,10 +37,16 @@ CI 或独立 REPLAY。host 可以直接管理的豁免只有 `.task/**`、`docs/ 从当前检出运行一次启动检查,使用每次唯一、仓外的绝对收据路径: ```bash +make task-triage REQ='<需求>' TRIAGE_RECEIPT=/tmp/my-task-triage.json RECEIPT=/tmp/my-task-precheck.json CMD="make precheck" make evidence -make task-start NAME=feature/my-task PRECHECK_RECEIPT=/tmp/my-task-precheck.json +make task-start NAME=feature/my-task TRIAGE_RECEIPT=/tmp/my-task-triage.json PRECHECK_RECEIPT=/tmp/my-task-precheck.json ``` +分流以远端为准(见 [迭代交付](delivery.md) 的两级分支模型)。有候选时先运行 +`make task-triage-decide TRIAGE_RECEIPT=… VERDICT=JOIN|NEW …` 写入显式决策与理由。子任务使用 +`KIND=child INITIATIVE=feature/<大任务> NAME=feature/<大任务>-<子题>`,收据须为选中该大任务的 JOIN。 +`task-start` 对 DECISION_REQUIRED、过期、远端不可核验(REMOTE_UNVERIFIED,退出码 6)或与所选 initiative 不一致的收据直接拒绝,且不建分支。 + 第一步先捕获原始执行,再创建任务卡;收据保存完整脱敏输出、退出码、执行位置和对象。 第二步核验收据与当前仓库/基线,再创建工作区并导入;不靠事后重跑冒充首次检查。 同一收据不可覆盖。首次检查失败时处理原因,使用新路径重新启动。主干在两步间前进时, @@ -63,12 +69,16 @@ LOCAL_READY 只用于局部恢复;新任务入口始终校验严格 READY, 恢复核验实际 worktree/卡片/分支、R0 祖先关系及源码外原始收据;脏现场、Git 操作、组件漂移和未知远端仍拒绝。 旧收据允许作为历史证据原样导入,不自动成为当前恢复或交付准入;格式继续为 schema 1。 -堆叠任务使用 `PARENT=feature/parent PARENT_PR=<父PR链接>`。父分支须包含本批主干 R0; +堆叠(standalone)任务使用 `PARENT=feature/parent PARENT_PR=<父PR链接>`;子任务改用 `KIND=child`。父分支须包含本批主干 R0; 卡片同时记录父分支、父 SHA 和父 PR。父先合入,子同步最新 main 并改回 main 为 PR base。 +当前 `make task-pr-check` 与 CI `PR base gate` 对 standalone PR 只接受 base 为 `main`,因此堆叠 PR 在 base 改回 `main` 前不能通过这两道门禁。 + +PR 门禁:`make task-pr-check [PR=N] [FINAL=1]` 核验当前分支 PR 的状态、base 与 head(远端为准)。子任务期望 base 为卡片 `immediate_target`(所属大任务分支,且其父仍有开放 PR 指向 `main`);普通任务与大任务为 `main`。`FINAL=1` 仅用于大任务收口,要求 `accepting_requirements=false` 且必需子任务已合入或已延期。 ## 被测对象 `make task-sync` 在父仓合并后按固定 gitlink 物化未修改组件,并核对实际组件工作树。 +同步目标取卡片 `immediate_target`:子任务为远端所属大任务分支头,其余为 `origin/main`。 组件 feature 分支若与新指针不同,先保留其分支,交给 owner 显式同步并更新组合; 不能用自动 checkout 丢弃组件分支现场。任何失败都保留现场并阻止同步成功声明。 @@ -121,14 +131,14 @@ RECEIPT=/tmp/my-attempt-worktree-check.json CMD="make test-worktree" make eviden 子模块另有登记 worktree 时拒绝回收,避免删除其他检出依赖的 Git 管理目录。 可再生缓存由 owner 按已识别路径单独处置;无法确认用途的文件保留。 -任务合入需以本次成功获取的权威目标验证。合入提交不能证明未提交文件已经落盘。 +任务合入需以本次成功获取的权威目标验证:子任务为其所属大任务分支的远端头,其余为 `origin/main`(即 `immediate_target`)。合入提交不能证明未提交文件已经落盘。 Git 对含子模块的工作区需要显式删除选项时,只有全部现场检查通过才允许该路径; 它不豁免任何脏状态、忽略文件、独有提交/引用或锁检查。普通删除失败不转入强删兜底。 保留无法确认安全的目录和分支,输出下一步处理依据。 子仓 pin 之外的 refs/stash/reflog 历史采取保守拒绝,即使其中部分可能已在远端: owner 须先独立确认其保存与归属,工具不把缓存的远端引用当作唯一数据已经备份的证据。 远端分支删除与本地回收分别报告,失败不能声明两者全部完成。 -回收后由所有者执行 `make task-close` 闭合卡片;回收命令不顺带改写共享主检出。 +回收后由所有者执行 `make task-close` 闭合卡片;回收命令不顺带改写共享主检出。闭合 PR 默认 base 为 `main`;仅 `FOLD=--fold`(随任务分支合入)时 base 为卡片 `immediate_target`。 post-merge 仅提示,不自动调用闭合。`make task-close` 会提交、推送并可能创建 PR, 执行者先按迭代交付规则核对该动作的授权及所选任务,保留未授权的其他任务现场。 回收命令使用待删目录之外的 `RECEIPT` 保存输出,清理结果由后续闭合记录引用。 From dfb684830f899837e260f2a438e8572537484d63 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 17 Oct 2026 02:12:45 +0000 Subject: [PATCH 09/10] Record the sync checkpoint Why: bind the task validation checkpoint to the integration baseline. Evidence: SELF recursive component checks; sync_base=208f4e8db73cb7f99f62b173000898da3136a0d2; before_record=28833397ab231fbcff625bfcbdcd95ec568ec74d. Impact: task metadata only. Refs: .task/feature-development-governance-v2-target-integrity.md --- .task/feature-development-governance-v2-target-integrity.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-development-governance-v2-target-integrity.md b/.task/feature-development-governance-v2-target-integrity.md index 56a4a0f7..c63b8e9b 100644 --- a/.task/feature-development-governance-v2-target-integrity.md +++ b/.task/feature-development-governance-v2-target-integrity.md @@ -243,3 +243,4 @@ "receipt_sha256": "4920d3f814020a7700015ffb9c8b0f93698a648b4755ffac43e62b1baa544d37" } ``` +| 同步(记录前对象) | 208f4e8db73cb7f99f62b173000898da3136a0d2 | 28833397ab231fbcff625bfcbdcd95ec568ec74d | 2026-10-17T02:12:45Z | From 00ae76055454eae7ad779f5b248be27889a3a9c2 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 17 Oct 2026 02:25:41 +0000 Subject: [PATCH 10/10] Record the integrated U2.4 policy alignment and Guidelines pin Why: U2.4 completed with the documented local-clone gitlink pattern; the child is ready for review. Evidence: make evidence test-governance (1 environmental port conflict) and check-pins (SELF). Impact: Task card only. Refs: .task/feature-development-governance-v2-target-integrity.md Co-authored-by: Cursor --- ...elopment-governance-v2-target-integrity.md | 124 +++++++++++++++++- 1 file changed, 123 insertions(+), 1 deletion(-) diff --git a/.task/feature-development-governance-v2-target-integrity.md b/.task/feature-development-governance-v2-target-integrity.md index c63b8e9b..538a49dc 100644 --- a/.task/feature-development-governance-v2-target-integrity.md +++ b/.task/feature-development-governance-v2-target-integrity.md @@ -14,7 +14,7 @@ - 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md) - 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入) - 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收 -- 当前阶段:实施;当前增量:I1(U2.2 即时目标完整性、U2.5 配置 integration 块、U2.4 文档) +- 当前阶段:请求审核;当前增量:I1(U2.2 即时目标完整性、U2.5 配置 integration 块、U2.4 文档) - 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位) ## 目标与非目标 @@ -36,7 +36,9 @@ | u2.5-config-integration-block(第一次运行) | scripts/agent_exec_config.py、tests/test_agent_exec_config.py、AGENT-EXECUTION.md | /tmp/gov2-unit-u25-integration.json | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | scope-expansion(收据摘要需改 scripts/agent_exec.py)→ fail-stop | 无 | false | /tmp/gov2-receipt-u25-r1.json | | u2.5-config-integration-block(第二次运行) | 同上 | 同上(去掉收据摘要要求:config_digest 已覆盖整份文件) | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | completed → transport 1c4acb4,apply 快进集成 | 无 | false | /tmp/gov2-receipt-u25-r2.json | | u2.4-docs-and-guidelines-pin(第一次运行) | deps/development-guidelines、policy/*、AGENTS.md | /tmp/gov2-unit-u24-docs-pin.json | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | failed-unknown(worker 运行 git submodule update --init 写入私有克隆 .git/config,被判为未解释的 git 管理变更)→ fail-stop | 无 | false | /tmp/gov2-receipt-u24-r1.json | +| u2.4-docs-and-guidelines-pin(第二次运行) | 同上 | 同上(改用本地 clone 的 gitlink 提升模式) | implementation | cursor, antigravity, pi | 1 | cursor (cursor-agent-stable) | completed → transport 35fd99e,apply 快进集成(deps/development-guidelines → 2688fd2be6a5) | 无 | false | /tmp/gov2-receipt-u24-r2.json | +- make test-governance(SELF,见证据段):542 项中 1 项失败 test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts,原因是本机真实运行的 agent-system-rd 进程占用 127.0.0.1:18791(测试夹具端口),与本子任务无关;权威结果以 PR HEAD 的 CI 为准。 - U2.4 第一次运行对账:私有工作区保留、无 transport;规范检出与其 .git/config 未变。处置:单元包改用既有 gitlink 提升模式(本地 clone --no-checkout 到子模块目录并 detach 到 2688fd2be6a5,禁止 git submodule/add/update-index),全新派发。 - U2.5 第一次运行对账:scope-expansion,私有工作区保留、无 transport、规范检出未变;扩围项非阻塞,收窄要求后全新派发。 - 本地测试环境注意:环境变量 GOTELEMETRY_GOPLS_CLIENT_TOKEN(3 位数字)会被脱敏器当作密钥值,使 test_worker_commit_or_head_move_is_rejected 收据中数字被替换为 ***;该失败在 U2.5 前基线同样出现,证据命令以 env -u 排除该变量(CI 环境无此变量)。 @@ -244,3 +246,123 @@ } ``` | 同步(记录前对象) | 208f4e8db73cb7f99f62b173000898da3136a0d2 | 28833397ab231fbcff625bfcbdcd95ec568ec74d | 2026-10-17T02:12:45Z | + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-17T02:15:25.531343+00:00", + "command": "env -u GOTELEMETRY_GOPLS_CLIENT_TOKEN make test-governance test-pins", + "command_sha256": "110b634647998e23394d5cdb5538d66790961125b292de68935017f451b2a92a", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "dfb684830f899837e260f2a438e8572537484d63", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after": { + "head": "dfb684830f899837e260f2a438e8572537484d63", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after_error": null, + "exit_code": 2, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity'\nPYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p 'test_*.py' -v\ntest_all_unavailable_exhaustion_does_not_authorize_host (test_agent_exec.AgentExecControllerTests.test_all_unavailable_exhaustion_does_not_authorize_host) ... ok\ntest_builtin_event_envelopes_gate_success (test_agent_exec.AgentExecControllerTests.test_builtin_event_envelopes_gate_success)\nReal Cursor/agy/PI output envelopes decide the terminal; prose fails closed. ... ok\ntest_canonical_checkout_mutation_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_canonical_checkout_mutation_is_failed_unknown)\nWorker mutating canonical files/index while keeping private clone clean is blocked. ... ok\ntest_clean_exit_without_diff_and_network_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_clean_exit_without_diff_and_network_is_failed_unknown)\nAuthorized network with a clean no-diff exit is not failed-clean. ... ok\ntest_corrupt_worktree_git_pointer_yields_failed_unknown_receipt (test_agent_exec.AgentExecControllerTests.test_corrupt_worktree_git_pointer_yields_failed_unknown_receipt)\nCorrupted private-clone .git directory must produce a stable blocked receipt. ... ok\ntest_declared_offline_launched_failure_is_failed_unknown_and_stops (test_agent_exec.AgentExecControllerTests.test_declared_offline_launched_failure_is_failed_unknown_and_stops)\nnetwork=false/external_cost=false are declarations, not isolation proof. ... ok\ntest_emergency_profile_runs_once_after_regular_safe_exhaustion (test_agent_exec.AgentExecControllerTests.test_emergency_profile_runs_once_after_regular_safe_exhaustion) ... ok\ntest_failed_unknown_blocks_fallback (test_agent_exec.AgentExecControllerTests.test_failed_unknown_blocks_fallback) ... ok\ntest_git_admin_staged_config_ref_mutation_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_git_admin_staged_config_ref_mutation_is_failed_unknown)\nStaged index plus local config/ref mutation preserves workspace and stops. ... ok\ntest_idle_timeout_kills_silent_worker_before_total (test_agent_exec.AgentExecControllerTests.test_idle_timeout_kills_silent_worker_before_total) ... ok\ntest_large_stdin_with_early_stdout_does_not_deadlock (test_agent_exec.AgentExecControllerTests.test_large_stdin_with_early_stdout_does_not_deadlock)\nStdin must be select-driven so early stdout beyond pipe capacity cannot hang. ... ok\ntest_launched_failure_without_diff_is_failed_unknown_and_stops (test_agent_exec.AgentExecControllerTests.test_launched_failure_without_diff_is_failed_unknown_and_stops)\nNo diff and declared-offline packets still do not prove external cleanliness. ... ok\ntest_legacy_exhaustion_without_emergency_does_not_authorize_host (test_agent_exec.AgentExecControllerTests.test_legacy_exhaustion_without_emergency_does_not_authorize_host) ... ok\ntest_missing_profiles_fall_through_in_declared_order (test_agent_exec.AgentExecControllerTests.test_missing_profiles_fall_through_in_declared_order) ... ok\ntest_networked_nonzero_no_file_change_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_networked_nonzero_no_file_change_is_failed_unknown)\nnetwork=true nonzero exit with no file changes cannot be failed-clean. ... ok\ntest_progress_keeps_worker_alive_past_one_idle_interval (test_agent_exec.AgentExecControllerTests.test_progress_keeps_worker_alive_past_one_idle_interval) ... ok\ntest_receipt_redacts_environment_secrets (test_agent_exec.AgentExecControllerTests.test_receipt_redacts_environment_secrets) ... ok\ntest_rename_into_allowed_destination_cannot_hide_source (test_agent_exec.AgentExecControllerTests.test_rename_into_allowed_destination_cannot_hide_source)\nRename parsing must keep an out-of-scope source and its destination. ... ok\ntest_run_uses_fresh_process_and_worktree_per_attempt (test_agent_exec.AgentExecControllerTests.test_run_uses_fresh_process_and_worktree_per_attempt) ... ok\ntest_safe_unavailable_retries_profile_before_next_success (test_agent_exec.AgentExecControllerTests.test_safe_unavailable_retries_profile_before_next_success) ... ok\ntest_scope_expansion_preserves_workspace_and_blocks (test_agent_exec.AgentExecControllerTests.test_scope_expansion_preserves_workspace_and_blocks) ... ok\ntest_secret_crossing_raw_log_flush_boundary_is_redacted (test_agent_exec.AgentExecControllerTests.test_secret_crossing_raw_log_flush_boundary_is_redacted)\nExact env secrets must not leak when split across raw-log drain/flush edges. ... ok\ntest_sibling_canonical_ref_config_mutation_during_private_clone_succeeds (test_agent_exec.AgentExecControllerTests.test_sibling_canonical_ref_config_mutation_during_private_clone_succeeds)\nHost sibling branch/ref/config churn must not fail-stop a private clone. ... ok\ntest_stdin_and_stderr_progress_resets_idle_deadline (test_agent_exec.AgentExecControllerTests.test_stdin_and_stderr_progress_resets_idle_deadline) ... ok\ntest_success_creates_base_parented_transport_without_touching_canonical_head (test_agent_exec.AgentExecControllerTests.test_success_creates_base_parented_transport_without_touching_canonical_head) ... ok\ntest_summary_and_raw_log_caps_are_enforced (test_agent_exec.AgentExecControllerTests.test_summary_and_raw_log_caps_are_enforced) ... ok\ntest_symlink_allowed_path_escape_rejects_without_external_write (test_agent_exec.AgentExecControllerTests.test_symlink_allowed_path_escape_rejects_without_external_write)\nAllowed path through symlink escaping the worktree cannot touch outside. ... ok\ntest_timeout_kills_process_group_and_records_receipt (test_agent_exec.AgentExecControllerTests.test_timeout_kills_process_group_and_records_receipt) ... ok\ntest_transport_commit_does_not_require_configured_git_identity (test_agent_exec.AgentExecControllerTests.test_transport_commit_does_not_require_configured_git_identity) ... ok\ntest_transport_construction_failure_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_transport_construction_failure_is_failed_unknown)\nHost transport staging/commit-tree/update-ref failure stays recoverable. ... ok\ntest_untracked_and_binary_files_enter_transport_inventory (test_agent_exec.AgentExecControllerTests.test_untracked_and_binary_files_enter_transport_inventory) ... ok\ntest_validate_does_not_contact_provider (test_agent_exec.AgentExecControllerTests.test_validate_does_not_contact_provider) ... ok\ntest_worker_commit_or_head_move_is_rejected (test_agent_exec.AgentExecControllerTests.test_worker_commit_or_head_move_is_rejected)\nWorker HEAD/commit, staged index, and config/ref mutations are fail-stop. ... ok\ntest_worker_fail_stop_terminal_beats_success_and_no_change (test_agent_exec.AgentExecControllerTests.test_worker_fail_stop_terminal_beats_success_and_no_change)\nblocked, cancelled, and failed-unknown stop before success or no-change. ... ok\ntest_attestation_key_first_run_race_shares_one_key (test_agent_exec.AgentExecHistoryTests.test_attestation_key_first_run_race_shares_one_key) ... ok\ntest_attestation_key_symlink_is_not_followed (test_agent_exec.AgentExecHistoryTests.test_attestation_key_symlink_is_not_followed) ... ok\ntest_history_appends_safe_success_and_fallback_records (test_agent_exec.AgentExecHistoryTests.test_history_appends_safe_success_and_fallback_records) ... ok\ntest_history_failure_does_not_change_run_outcome (test_agent_exec.AgentExecHistoryTests.test_history_failure_does_not_change_run_outcome) ... ok\ntest_invalid_config_also_appends_one_history_record (test_agent_exec.AgentExecHistoryTests.test_invalid_config_also_appends_one_history_record) ... ok\ntest_success_history_is_mode_correct_and_signed (test_agent_exec.AgentExecHistoryTests.test_success_history_is_mode_correct_and_signed) ... ok\ntest_incompatible_opencode_is_unavailable_not_pass (test_agent_exec.RealAgentCliProbeTests.test_incompatible_opencode_is_unavailable_not_pass) ... ok\ntest_launched_failure_without_marker_is_unavailable_not_pass (test_agent_exec.RealAgentCliProbeTests.test_launched_failure_without_marker_is_unavailable_not_pass) ... ok\ntest_missing_opencode_is_unavailable_not_pass (test_agent_exec.RealAgentCliProbeTests.test_missing_opencode_is_unavailable_not_pass) ... ok\ntest_model_receipt_mismatch_is_not_pass (test_agent_exec.RealAgentCliProbeTests.test_model_receipt_mismatch_is_not_pass) ... ok\ntest_observable_verified_model_receipt_stays_attached_to_success (test_agent_exec.RealAgentCliProbeTests.test_observable_verified_model_receipt_stays_attached_to_success) ... ok\ntest_offline_success_checks_marker_transport_and_canonical (test_agent_exec.RealAgentCliProbeTests.test_offline_success_checks_marker_transport_and_canonical) ... ok\ntest_opt_in_real_profile_probe (test_agent_exec.RealAgentCliProbeTests.test_opt_in_real_profile_probe) ... skipped 'real CLI probe NOT_RUN: set RUN_REAL_AGENT_EXEC=1 and AGENT_EXEC_REAL_PROFILE to exactly one profile'\ntest_profile_selector_accepts_exactly_one_profile (test_agent_exec.RealAgentCliProbeTests.test_profile_selector_accepts_exactly_one_profile) ... ok\ntest_real_probe_refuses_without_opt_in (test_agent_exec.RealAgentCliProbeTests.test_real_probe_refuses_without_opt_in) ... ok\ntest_wrong_marker_is_not_pass (test_agent_exec.RealAgentCliProbeTests.test_wrong_marker_is_not_pass) ... ok\ntest_agy_stream_json_and_json_results_are_decoded (test_agent_exec.TerminalRecordDecodingTests.test_agy_stream_json_and_json_results_are_decoded) ... ok\ntest_cursor_blocked_record_is_decoded_as_fail_stop (test_agent_exec.TerminalRecordDecodingTests.test_cursor_blocked_record_is_decoded_as_fail_stop) ... ok\ntest_cursor_stream_json_result_is_decoded (test_agent_exec.TerminalRecordDecodingTests.test_cursor_stream_json_result_is_decoded) ... ok\ntest_cursor_user_echo_and_error_result_are_not_records (test_agent_exec.TerminalRecordDecodingTests.test_cursor_user_echo_and_error_result_are_not_records) ... ok\ntest_pi_json_final_assistant_message_is_decoded (test_agent_exec.TerminalRecordDecodingTests.test_pi_json_final_assistant_message_is_decoded) ... ok\ntest_prompt_states_schema_without_being_a_record (test_agent_exec.TerminalRecordDecodingTests.test_prompt_states_schema_without_being_a_record) ... ok\ntest_prose_missing_or_invalid_terminal_fails_closed (test_agent_exec.TerminalRecordDecodingTests.test_prose_missing_or_invalid_terminal_fails_closed) ... ok\ntest_raw_stdout_record_is_not_an_envelope_for_builtins (test_agent_exec.TerminalRecordDecodingTests.test_raw_stdout_record_is_not_an_envelope_for_builtins) ... ok\ntest_stdout_tail_keeps_final_envelope_behind_oversized_event (test_agent_exec.TerminalRecordDecodingTests.test_stdout_tail_keeps_final_envelope_behind_oversized_event) ... ok\ntest_terminal_record_must_be_sole_final_content (test_agent_exec.TerminalRecordDecodingTests.test_terminal_record_must_be_sole_final_content) ... ok\ntest_antigravity_run_everything_argv (test_agent_exec_adapters.AgentExecAdapterTests.test_antigravity_run_everything_argv) ... ok\ntest_claude_run_everything_argv (test_agent_exec_adapters.AgentExecAdapterTests.test_claude_run_everything_argv) ... ok\ntest_codex_uses_noninteractive_workspace_sandbox (test_agent_exec_adapters.AgentExecAdapterTests.test_codex_uses_noninteractive_workspace_sandbox) ... ok\ntest_cursor_run_everything_and_auto_model_argv (test_agent_exec_adapters.AgentExecAdapterTests.test_cursor_run_everything_and_auto_model_argv) ... ok\ntest_custom_adapter_builds_direct_argv_without_shell (test_agent_exec_adapters.AgentExecAdapterTests.test_custom_adapter_builds_direct_argv_without_shell) ... ok\ntest_fixed_model_uses_only_adapter_model_flag (test_agent_exec_adapters.AgentExecAdapterTests.test_fixed_model_uses_only_adapter_model_flag) ... ok\ntest_missing_opencode_is_unavailable (test_agent_exec_adapters.AgentExecAdapterTests.test_missing_opencode_is_unavailable) ... ok\ntest_pi_and_kimi_auto_model_omit_model_flag (test_agent_exec_adapters.AgentExecAdapterTests.test_pi_and_kimi_auto_model_omit_model_flag) ... ok\ntest_rejects_oversized_and_invalid_utf8_unit_packet (test_agent_exec_adapters.AgentExecAdapterTests.test_rejects_oversized_and_invalid_utf8_unit_packet) ... ok\ntest_unverified_run_everything_capability_is_unavailable (test_agent_exec_adapters.AgentExecAdapterTests.test_unverified_run_everything_capability_is_unavailable) ... ok\ntest_admit_accepts_exact_transport_paths (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_accepts_exact_transport_paths) ... ok\ntest_admit_accepts_host_managed_exemptions (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_accepts_host_managed_exemptions) ... ok\ntest_admit_covers_whitespace_path_only_with_exact_transport (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_covers_whitespace_path_only_with_exact_transport) ... ok\ntest_admit_rejects_different_content_at_transport_path (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_different_content_at_transport_path) ... ok\ntest_admit_rejects_rename_of_non_exempt_source_into_exempt_path (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_rename_of_non_exempt_source_into_exempt_path) ... ok\ntest_admit_rejects_staged_paths_without_provenance (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_staged_paths_without_provenance) ... ok\ntest_admit_rejects_tampered_record_and_moved_ref (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_tampered_record_and_moved_ref) ... ok\ntest_admit_rejects_whitespace_lookalikes_of_exempt_paths (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_whitespace_lookalikes_of_exempt_paths) ... ok\ntest_apply_fast_forwards_clean_matching_transport (test_agent_exec_admission.AgentExecAdmissionTests.test_apply_fast_forwards_clean_matching_transport) ... ok\ntest_apply_redacts_secret_shaped_receipt_text (test_agent_exec_admission.AgentExecAdmissionTests.test_apply_redacts_secret_shaped_receipt_text) ... ok\ntest_apply_rejects_fabricated_unsigned_or_tampered_history (test_agent_exec_admission.AgentExecAdmissionTests.test_apply_rejects_fabricated_unsigned_or_tampered_history) ... ok\ntest_apply_rejects_without_changing_state (test_agent_exec_admission.AgentExecAdmissionTests.test_apply_rejects_without_changing_state) ... ok\ntest_make_agent_exec_apply_requires_receipt (test_agent_exec_admission.AgentExecAdmissionTests.test_make_agent_exec_apply_requires_receipt) ... ok\ntest_precommit_accepts_host_managed_exemptions (test_agent_exec_admission.AgentExecAdmissionTests.test_precommit_accepts_host_managed_exemptions) ... ok\ntest_precommit_rejects_unproven_paths_after_branch_checks (test_agent_exec_admission.AgentExecAdmissionTests.test_precommit_rejects_unproven_paths_after_branch_checks) ... ok\ntest_rename_and_copy_records_keep_non_exempt_source (test_agent_exec_admission.AgentExecAdmissionTests.test_rename_and_copy_records_keep_non_exempt_source)\nCopy/rename records must not drop a non-exempt source behind an exempt dest. ... ok\ntest_whitespace_paths_are_classified_exactly (test_agent_exec_admission.AgentExecAdmissionTests.test_whitespace_paths_are_classified_exactly) ... ok\ntest_accepts_fallback_to_host_never (test_agent_exec_config.AgentExecConfigTests.test_accepts_fallback_to_host_never) ... ok\ntest_checked_in_project_config_declares_integration (test_agent_exec_config.AgentExecConfigTests.test_checked_in_project_config_declares_integration) ... ok\ntest_checked_in_project_config_never_authorizes_host_fallback (test_agent_exec_config.AgentExecConfigTests.test_checked_in_project_config_never_authorizes_host_fallback) ... ok\ntest_configured_emergency_profile_must_exist_be_enabled_and_use_adapter_codex (test_agent_exec_config.AgentExecConfigTests.test_configured_emergency_profile_must_exist_be_enabled_and_use_adapter_codex) ... ok\ntest_custom_placeholders_must_fill_whole_argv_items (test_agent_exec_config.AgentExecConfigTests.test_custom_placeholders_must_fill_whole_argv_items) ... ok\ntest_emergency_exactness_does_not_apply_to_review (test_agent_exec_config.AgentExecConfigTests.test_emergency_exactness_does_not_apply_to_review) ... ok\ntest_emergency_normal_roles_allow_extra_disabled_and_keep_order (test_agent_exec_config.AgentExecConfigTests.test_emergency_normal_roles_allow_extra_disabled_and_keep_order) ... ok\ntest_emergency_normal_roles_reject_disabled_only_adapter (test_agent_exec_config.AgentExecConfigTests.test_emergency_normal_roles_reject_disabled_only_adapter) ... ok\ntest_emergency_normal_roles_reject_missing_required_adapter (test_agent_exec_config.AgentExecConfigTests.test_emergency_normal_roles_reject_missing_required_adapter) ... ok\ntest_emergency_normal_roles_reject_multiple_enabled_same_adapter (test_agent_exec_config.AgentExecConfigTests.test_emergency_normal_roles_reject_multiple_enabled_same_adapter) ... ok\ntest_emergency_profile_is_excluded_from_normal_roles (test_agent_exec_config.AgentExecConfigTests.test_emergency_profile_is_excluded_from_normal_roles) ... ok\ntest_emergency_profile_requires_max_attempts_exactly_three (test_agent_exec_config.AgentExecConfigTests.test_emergency_profile_requires_max_attempts_exactly_three) ... ok\ntest_exposes_max_attempts_per_profile_and_emergency_profile (test_agent_exec_config.AgentExecConfigTests.test_exposes_max_attempts_per_profile_and_emergency_profile) ... ok\ntest_fresh_process_per_unit_must_be_true (test_agent_exec_config.AgentExecConfigTests.test_fresh_process_per_unit_must_be_true) ... ok\ntest_host_exempt_paths_match_executor_enforcement (test_agent_exec_config.AgentExecConfigTests.test_host_exempt_paths_match_executor_enforcement) ... ok\ntest_idle_timeout_defaults_within_total_and_rejects_bounds (test_agent_exec_config.AgentExecConfigTests.test_idle_timeout_defaults_within_total_and_rejects_bounds) ... ok\ntest_integration_command_rejects_shell_metacharacters (test_agent_exec_config.AgentExecConfigTests.test_integration_command_rejects_shell_metacharacters) ... ok\ntest_integration_exempt_paths_must_be_unique_nonempty_and_exact (test_agent_exec_config.AgentExecConfigTests.test_integration_exempt_paths_must_be_unique_nonempty_and_exact) ... ok\ntest_integration_rejects_unknown_and_missing_keys (test_agent_exec_config.AgentExecConfigTests.test_integration_rejects_unknown_and_missing_keys) ... ok\ntest_legacy_all_unavailable_remains_parseable (test_agent_exec_config.AgentExecConfigTests.test_legacy_all_unavailable_remains_parseable) ... ok\ntest_loads_single_agent_execution_block (test_agent_exec_config.AgentExecConfigTests.test_loads_single_agent_execution_block) ... ok\ntest_max_attempts_per_profile_never_exceeds_three (test_agent_exec_config.AgentExecConfigTests.test_max_attempts_per_profile_never_exceeds_three) ... ok\ntest_missing_integration_still_parses_as_none (test_agent_exec_config.AgentExecConfigTests.test_missing_integration_still_parses_as_none) ... ok\ntest_model_auto_is_preserved_as_none (test_agent_exec_config.AgentExecConfigTests.test_model_auto_is_preserved_as_none) ... ok\ntest_normal_roles_reject_forbidden_adapters_and_alternate_codex_profile (test_agent_exec_config.AgentExecConfigTests.test_normal_roles_reject_forbidden_adapters_and_alternate_codex_profile) ... ok\ntest_numeric_limits_are_positive_and_bounded (test_agent_exec_config.AgentExecConfigTests.test_numeric_limits_are_positive_and_bounded) ... ok\ntest_quoted_unicode_string_round_trips (test_agent_exec_config.AgentExecConfigTests.test_quoted_unicode_string_round_trips) ... ok\ntest_rejects_indentation_jump (test_agent_exec_config.AgentExecConfigTests.test_rejects_indentation_jump) ... ok\ntest_rejects_missing_or_duplicate_blocks (test_agent_exec_config.AgentExecConfigTests.test_rejects_missing_or_duplicate_blocks) ... ok\ntest_rejects_shell_command_and_secret_shaped_values (test_agent_exec_config.AgentExecConfigTests.test_rejects_shell_command_and_secret_shaped_values) ... ok\ntest_rejects_unknown_profile_reference (test_agent_exec_config.AgentExecConfigTests.test_rejects_unknown_profile_reference) ... ok\ntest_rejects_unknown_schema_and_unknown_keys (test_agent_exec_config.AgentExecConfigTests.test_rejects_unknown_schema_and_unknown_keys) ... ok\ntest_review_may_include_emergency_profile (test_agent_exec_config.AgentExecConfigTests.test_review_may_include_emergency_profile) ... ok\ntest_role_order_does_not_follow_profile_order (test_agent_exec_config.AgentExecConfigTests.test_role_order_does_not_follow_profile_order) ... ok\ntest_strict_emergency_mode_rejects_custom_normal_role_adapters (test_agent_exec_config.AgentExecConfigTests.test_strict_emergency_mode_rejects_custom_normal_role_adapters) ... ok\ntest_valid_integration_block_parses_and_is_exposed (test_agent_exec_config.AgentExecConfigTests.test_valid_integration_block_parses_and_is_exposed) ... ok\ntest_without_emergency_custom_normal_roles_are_rejected (test_agent_exec_config.AgentExecConfigTests.test_without_emergency_custom_normal_roles_are_rejected) ... ok\ntest_without_emergency_disabled_extras_are_ignored_and_order_kept (test_agent_exec_config.AgentExecConfigTests.test_without_emergency_disabled_extras_are_ignored_and_order_kept) ... ok\ntest_without_emergency_normal_roles_need_exact_enabled_adapter_set (test_agent_exec_config.AgentExecConfigTests.test_without_emergency_normal_roles_need_exact_enabled_adapter_set) ... ok\ntest_without_emergency_review_may_use_custom_adapter (test_agent_exec_config.AgentExecConfigTests.test_without_emergency_review_may_use_custom_adapter) ... ok\ntest_candidate_cannot_read_checkout_credentials (test_ci_credentials.CheckoutTests.test_candidate_cannot_read_checkout_credentials) ... ok\ntest_candidate_submodule_update_commands_are_rejected (test_ci_credentials.CheckoutTests.test_candidate_submodule_update_commands_are_rejected) ... ok\ntest_credential_destination_confined_to_injected_server (test_ci_credentials.CheckoutTests.test_credential_destination_confined_to_injected_server) ... ok\ntest_external_or_unlisted_urls_are_rejected_before_component_fetch (test_ci_credentials.CheckoutTests.test_external_or_unlisted_urls_are_rejected_before_component_fetch) ... ok\ntest_inherited_template_hook_does_not_execute_with_credentials (test_ci_credentials.CheckoutTests.test_inherited_template_hook_does_not_execute_with_credentials) ... ok\ntest_nested_external_url_is_rejected_before_authenticated_fetch (test_ci_credentials.CheckoutTests.test_nested_external_url_is_rejected_before_authenticated_fetch) ... ok\ntest_rdm_pin_fetch_is_three_shas_on_the_allowlist (test_ci_credentials.CheckoutTests.test_rdm_pin_fetch_is_three_shas_on_the_allowlist) ... ok\ntest_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials (test_ci_credentials.CheckoutTests.test_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials) ... ok\ntest_redirects_do_not_forward_credential_or_fetch_unlisted_target (test_ci_credentials.CheckoutTests.test_redirects_do_not_forward_credential_or_fetch_unlisted_target) ... ok\ntest_after_snapshot_failure_keeps_command_exit_and_output (test_evidence.EvidenceTests.test_after_snapshot_failure_keeps_command_exit_and_output) ... ok\ntest_all_persisted_and_displayed_text_is_sanitized (test_evidence.EvidenceTests.test_all_persisted_and_displayed_text_is_sanitized) ... ok\ntest_authorization_forms_are_redacted_in_capture_console_and_import (test_evidence.EvidenceTests.test_authorization_forms_are_redacted_in_capture_console_and_import) ... ok\ntest_authorization_forms_are_redacted_on_direct_card_capture (test_evidence.EvidenceTests.test_authorization_forms_are_redacted_on_direct_card_capture) ... ok\ntest_before_after_heads_do_not_relabel_changed_command (test_evidence.EvidenceTests.test_before_after_heads_do_not_relabel_changed_command) ... ok\ntest_capture_does_not_overwrite_an_existing_receipt (test_evidence.EvidenceTests.test_capture_does_not_overwrite_an_existing_receipt) ... ok\ntest_capture_without_card_and_import_without_rerun (test_evidence.EvidenceTests.test_capture_without_card_and_import_without_rerun) ... ok\ntest_child_failure_code_is_preserved (test_evidence.EvidenceTests.test_child_failure_code_is_preserved) ... ok\ntest_child_receipts_record_root_and_immediate_targets (test_evidence.EvidenceTests.test_child_receipts_record_root_and_immediate_targets) ... ok\ntest_command_line_token_arguments_are_redacted (test_evidence.EvidenceTests.test_command_line_token_arguments_are_redacted) ... ok\ntest_dirty_and_untracked_contents_have_object_digests (test_evidence.EvidenceTests.test_dirty_and_untracked_contents_have_object_digests) ... ok\ntest_failed_child_exit_survives_receipt_write_failure (test_evidence.EvidenceTests.test_failed_child_exit_survives_receipt_write_failure) ... ok\ntest_fixed_candidate_capture_preserves_checkout (test_evidence.EvidenceTests.test_fixed_candidate_capture_preserves_checkout) ... ok\ntest_full_output_is_preserved_not_only_tail (test_evidence.EvidenceTests.test_full_output_is_preserved_not_only_tail) ... ok\ntest_import_missing_card_fails_without_losing_receipt (test_evidence.EvidenceTests.test_import_missing_card_fails_without_losing_receipt) ... ok\ntest_import_rejects_unredacted_authorization_with_valid_checksums (test_evidence.EvidenceTests.test_import_rejects_unredacted_authorization_with_valid_checksums) ... ok\ntest_import_retry_is_idempotent (test_evidence.EvidenceTests.test_import_retry_is_idempotent) ... ok\ntest_invalid_field_types_and_forged_source_are_rejected (test_evidence.EvidenceTests.test_invalid_field_types_and_forged_source_are_rejected) ... ok\ntest_known_secret_environment_value_is_redacted_without_label (test_evidence.EvidenceTests.test_known_secret_environment_value_is_redacted_without_label) ... ok\ntest_linked_worktree_import_preserves_source_identity (test_evidence.EvidenceTests.test_linked_worktree_import_preserves_source_identity) ... ok\ntest_missing_card_does_not_execute (test_evidence.EvidenceTests.test_missing_card_does_not_execute) ... ok\ntest_missing_required_snapshot_fields_are_rejected (test_evidence.EvidenceTests.test_missing_required_snapshot_fields_are_rejected) ... ok\ntest_nested_cwd_records_untracked_files_from_repository_root (test_evidence.EvidenceTests.test_nested_cwd_records_untracked_files_from_repository_root) ... ok\ntest_output_digest_checked_even_if_receipt_digest_recomputed (test_evidence.EvidenceTests.test_output_digest_checked_even_if_receipt_digest_recomputed) ... ok\ntest_pipeline_failure_is_recorded_and_returned (test_evidence.EvidenceTests.test_pipeline_failure_is_recorded_and_returned) ... ok\ntest_quoted_credentials_with_spaces_are_fully_redacted (test_evidence.EvidenceTests.test_quoted_credentials_with_spaces_are_fully_redacted) ... ok\ntest_receipt_target_fields_must_come_in_pairs (test_evidence.EvidenceTests.test_receipt_target_fields_must_come_in_pairs) ... ok\ntest_receipt_write_failure_cannot_claim_success (test_evidence.EvidenceTests.test_receipt_write_failure_cannot_claim_success) ... ok\ntest_receipts_without_target_metadata_default_to_main (test_evidence.EvidenceTests.test_receipts_without_target_metadata_default_to_main) ... ok\ntest_recorder_environment_does_not_leak_into_nested_commands (test_evidence.EvidenceTests.test_recorder_environment_does_not_leak_into_nested_commands) ... ok\ntest_source_cannot_be_promoted_by_environment (test_evidence.EvidenceTests.test_source_cannot_be_promoted_by_environment) ... ok\ntest_tamper_is_rejected_before_card_append (test_evidence.EvidenceTests.test_tamper_is_rejected_before_card_append) ... ok\ntest_unrelated_repo_cannot_import (test_evidence.EvidenceTests.test_unrelated_repo_cannot_import) ... ok\ntest_validate_precheck_checks_result_and_current_base (test_evidence.EvidenceTests.test_validate_precheck_checks_result_and_current_base) ... ok\ntest_validate_precheck_rejects_successful_arbitrary_command (test_evidence.EvidenceTests.test_validate_precheck_rejects_successful_arbitrary_command) ... ok\ntest_validation_purpose_is_not_injected_into_measured_command (test_evidence.EvidenceTests.test_validation_purpose_is_not_injected_into_measured_command) ... ok\ntest_pin_is_three_fixed_shas (test_lifecycle_pin.RdmPinTests.test_pin_is_three_fixed_shas) ... ok\ntest_rejects_url_and_short_sha (test_lifecycle_pin.RdmPinTests.test_rejects_url_and_short_sha) ... ok\ntest_conflicted_task_does_not_block_an_independent_healthy_task (test_merge_queue_trial.QueueTrialTests.test_conflicted_task_does_not_block_an_independent_healthy_task) ... ok\ntest_external_target_advance_requires_a_new_candidate (test_merge_queue_trial.QueueTrialTests.test_external_target_advance_requires_a_new_candidate) ... ok\ntest_sequential_delivery_does_not_sync_waiting_branches (test_merge_queue_trial.QueueTrialTests.test_sequential_delivery_does_not_sync_waiting_branches) ... ok\ntest_addr_change_keeps_database_and_auth (test_svc.SvcDbRecoveryTests.test_addr_change_keeps_database_and_auth) ... ok\ntest_auth_preflight_aligns_with_effective_env_dsn (test_svc.SvcDbRecoveryTests.test_auth_preflight_aligns_with_effective_env_dsn) ... ok\ntest_batch_update_stops_second_service_despite_prior_pidcheck (test_svc.SvcDbRecoveryTests.test_batch_update_stops_second_service_despite_prior_pidcheck)\n批量 update 不得用上一服务的 SVC_PIDCHECK 误判下一服务进程。 ... ok\ntest_dbref_binding_survives_bare_restart_and_redeploy (test_svc.SvcDbRecoveryTests.test_dbref_binding_survives_bare_restart_and_redeploy) ... ok\ntest_explicit_unbind_blocks_residual_env_dsn (test_svc.SvcDbRecoveryTests.test_explicit_unbind_blocks_residual_env_dsn) ... ok\ntest_external_dsn_and_conffile_recover_on_bare_start (test_svc.SvcDbRecoveryTests.test_external_dsn_and_conffile_recover_on_bare_start) ... ok\ntest_legacy_exec_dsn_survives_consecutive_restarts (test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts) ... FAIL\ntest_mock_conflict_and_legacy_binary_refuse (test_svc.SvcDbRecoveryTests.test_mock_conflict_and_legacy_binary_refuse) ... ok\ntest_rdm_companion_missing_web_fails_deploy (test_svc.SvcDbRecoveryTests.test_rdm_companion_missing_web_fails_deploy) ... ok\ntest_rdm_source_commits_and_update_track (test_svc.SvcDbRecoveryTests.test_rdm_source_commits_and_update_track) ... [main 3debb79] rdm v2\n 1 file changed, 1 insertion(+)\n create mode 100644 marker\nTo /tmp/svc-db-regress-dkcfoak4/rdmremote.git\n fa8e2a5..3debb79 main -> main\nok\ntest_rdm_source_deploy_end_to_end (test_svc.SvcDbRecoveryTests.test_rdm_source_deploy_end_to_end) ... ok\ntest_refusals_keep_registration_without_sqlite_fallback (test_svc.SvcDbRecoveryTests.test_refusals_keep_registration_without_sqlite_fallback) ... ok\ntest_restart_refusal_happens_before_stopping_running_service (test_svc.SvcDbRecoveryTests.test_restart_refusal_happens_before_stopping_running_service) ... ok\ntest_seed_owner_override_skips_account_lookup (test_svc.SvcDbRecoveryTests.test_seed_owner_override_skips_account_lookup) ... ok\ntest_seed_puts_with_temporary_bearer_key_when_auth_on (test_svc.SvcDbRecoveryTests.test_seed_puts_with_temporary_bearer_key_when_auth_on) ... ok\ntest_seed_puts_without_credentials_when_auth_off (test_svc.SvcDbRecoveryTests.test_seed_puts_without_credentials_when_auth_off) ... ok\ntest_seed_replaces_old_system_secret (test_svc.SvcDbRecoveryTests.test_seed_replaces_old_system_secret) ... ok\ntest_seed_warns_when_old_secret_stays_active (test_svc.SvcDbRecoveryTests.test_seed_warns_when_old_secret_stays_active) ... ok\ntest_seed_writes_fallbacks_and_vision (test_svc.SvcDbRecoveryTests.test_seed_writes_fallbacks_and_vision) ... ok\ntest_sequential_restarts_no_cross_dsn_and_no_secret_leak (test_svc.SvcDbRecoveryTests.test_sequential_restarts_no_cross_dsn_and_no_secret_leak) ... ok\ntest_source_switch_requires_flag (test_svc.SvcDbRecoveryTests.test_source_switch_requires_flag) ... ok\ntest_static_fresh_deploy_registers_pidcheck_and_starts (test_svc.SvcDbRecoveryTests.test_static_fresh_deploy_registers_pidcheck_and_starts)\n全新 static --dir:登记须含 pidcheck;首启探活不得把 http.server 判死。 ... ok\ntest_update_preserves_binding (test_svc.SvcDbRecoveryTests.test_update_preserves_binding) ... ok\ntest_backup_custom_out_not_pruned (test_svc_backup.SvcAgentBackupTests.test_backup_custom_out_not_pruned) ... ok\ntest_backup_event_recorded (test_svc_backup.SvcAgentBackupTests.test_backup_event_recorded) ... ok\ntest_backup_live_writer_consistent_and_outside_runtime (test_svc_backup.SvcAgentBackupTests.test_backup_live_writer_consistent_and_outside_runtime)\n活跃 WAL 写入者:快照可读、行在、integrity ok;-wal/-shm 不入快照。 ... ok\n/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/suite.py:107: ResourceWarning: unclosed file <_io.TextIOWrapper name=4 encoding='UTF-8'>\n for index, test in enumerate(self):\nResourceWarning: Enable tracemalloc to get the object allocation traceback\ntest_backup_manifest_sha_matches (test_svc_backup.SvcAgentBackupTests.test_backup_manifest_sha_matches) ... ok\ntest_backup_non_sqlite_db_kept_raw_without_leftovers (test_svc_backup.SvcAgentBackupTests.test_backup_non_sqlite_db_kept_raw_without_leftovers) ... ok\ntest_backup_rejects_postgres_with_db_hint (test_svc_backup.SvcAgentBackupTests.test_backup_rejects_postgres_with_db_hint) ... ok\ntest_backup_requires_registration (test_svc_backup.SvcAgentBackupTests.test_backup_requires_registration) ... ok\ntest_backup_target_exists_refused (test_svc_backup.SvcAgentBackupTests.test_backup_target_exists_refused) ... ok\ntest_backup_without_sqlite3_refuses (test_svc_backup.SvcAgentBackupTests.test_backup_without_sqlite3_refuses)\nPATH 无 sqlite3 → 拒绝(不回退裸拷贝)。重建与真实 PATH 等价的工具目录、 ... ok\ntest_retention_and_listing (test_svc_backup.SvcAgentBackupTests.test_retention_and_listing) ... ok\ntest_rm_purge_removes_snapshots (test_svc_backup.SvcAgentBackupTests.test_rm_purge_removes_snapshots) ... ok\ntest_forward_only_requires_confirm_and_backup (test_svc_deploy_txn.DeployTxnTests.test_forward_only_requires_confirm_and_backup) ... ok\ntest_schema_incompatible_refuses_before_stop (test_svc_deploy_txn.DeployTxnTests.test_schema_incompatible_refuses_before_stop) ... ok\ntest_replace_failure_keeps_original (test_svc_identity.AtomicWriteTests.test_replace_failure_keeps_original) ... :491: ResourceWarning: unclosed database in \nResourceWarning: Enable tracemalloc to get the object allocation traceback\nok\ntest_I3_start_ensures_sqlite_identity (test_svc_identity.IdentityTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_identity.IdentityTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_identity.IdentityTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_identity.IdentityTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_identity.IdentityTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_identity.IdentityTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_identity.IdentityTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_identity.IdentityTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_identity.IdentityTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_identity.IdentityTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_identity.IdentityTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_identity.IdentityTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_identity.IdentityTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_identity.IdentityTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_identity.IdentityTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_Z_real_pg_not_run (test_svc_identity.IdentityTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_identity.IdentityTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_identity.IdentityTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_identity.IdentityTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_identity.IdentityTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_identity.IdentityTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_identity.IdentityTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_identity.IdentityTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_identity.IdentityTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_identity.IdentityTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_identity.IdentityTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_identity.IdentityTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_identity.IdentityTests.test_watchdog_print_plan) ... ok\ntest_caller_identity_env_does_not_reach_serve (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_caller_identity_env_does_not_reach_serve) ... ok\ntest_recover_fails_when_port_stolen (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_two_bare_restarts_keep_identity (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_two_bare_restarts_keep_identity) ... ok\ntest_watchdog_print_plan (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_watchdog_print_plan) ... ok\ntest_deploy_reuses_selection_and_gates_clearing (test_svc_plugins.PluginComposeTests.test_deploy_reuses_selection_and_gates_clearing) ... ok\ntest_dry_run_prints_plugin_sha_without_listening (test_svc_plugins.PluginComposeTests.test_dry_run_prints_plugin_sha_without_listening) ... ok\ntest_help_plugins_and_rejects_with_off_deploy (test_svc_plugins.PluginComposeTests.test_help_plugins_and_rejects_with_off_deploy) ... ok\ntest_prompt_selects_numbered_plugin_on_first_deploy (test_svc_plugins.PluginComposeTests.test_prompt_selects_numbered_plugin_on_first_deploy) ... ok\ntest_unknown_plugin_and_two_web_and_rdm_are_rejected (test_svc_plugins.PluginComposeTests.test_unknown_plugin_and_two_web_and_rdm_are_rejected) ... ok\ntest_addr_defaults_to_default_addr (test_svc_precheck.AgentListenRejectedPrecheck.test_addr_defaults_to_default_addr) ... ok\ntest_incident_combo_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_incident_combo_not_rejected) ... ok\ntest_insecure_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_insecure_not_rejected) ... ok\ntest_loopback_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_loopback_not_rejected) ... ok\ntest_nonloop_auth_off_with_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_auth_off_with_dsn_rejected) ... ok\ntest_nonloop_no_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_no_dsn_rejected) ... ok\ntest_auth_off_beats_dsn (test_svc_precheck.DbAuthEnabledMatrix.test_auth_off_beats_dsn) ... ok\ntest_auth_on_explicit (test_svc_precheck.DbAuthEnabledMatrix.test_auth_on_explicit) ... ok\ntest_auto_with_effective_dsn_is_authed (test_svc_precheck.DbAuthEnabledMatrix.test_auto_with_effective_dsn_is_authed) ... ok\ntest_auto_without_dsn_is_denied (test_svc_precheck.DbAuthEnabledMatrix.test_auto_without_dsn_is_denied) ... ok\ntest_no_auth_no_dsn_denied (test_svc_precheck.DbAuthEnabledMatrix.test_no_auth_no_dsn_denied) ... ok\ntest_broken_dbref_refuses (test_svc_precheck.ResolveDbConfigFixtures.test_broken_dbref_refuses) ... ok\ntest_legacy_exec_dsn_migrates_to_recoverable_keys (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_migrates_to_recoverable_keys) ... ok\ntest_legacy_exec_dsn_without_instance_goes_to_dsn_key (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_without_instance_goes_to_dsn_key) ... ok\ntest_migration_is_idempotent (test_svc_precheck.ResolveDbConfigFixtures.test_migration_is_idempotent) ... ok\ntest_no_dsn_no_dbref_is_sqlite (test_svc_precheck.ResolveDbConfigFixtures.test_no_dsn_no_dbref_is_sqlite) ... ok\ntest_post_g17_exec_restores_dsn_from_dbref (test_svc_precheck.ResolveDbConfigFixtures.test_post_g17_exec_restores_dsn_from_dbref) ... ok\ntest_env_config_resets_identity_env (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_identity_env) ... ok\ntest_env_config_resets_pidcheck_runtime_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_pidcheck_runtime_state) ... ok\ntest_env_config_resets_resolver_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_resolver_state) ... ok\ntest_help_topic_lists_rdm_admin (test_svc_rdm_admin.RdmAdminTests.test_help_topic_lists_rdm_admin) ... ok\ntest_recover_fails_when_port_stolen (test_svc_rdm_admin.RdmAdminTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_rdm_admin.RdmAdminTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_rdm_admin.RdmAdminTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_rdm_admin.RdmAdminTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_rdm_admin.RdmAdminTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_rdm_admin.RdmAdminTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_rdm_admin.RdmAdminTests.test_recover_skips_when_lock_held) ... ok\ntest_refuses_when_base_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_base_db_missing) ... ok\ntest_refuses_when_rdm_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_rdm_db_missing) ... ok\ntest_show_empty_ledger_hint (test_svc_rdm_admin.RdmAdminTests.test_show_empty_ledger_hint) ... ok\ntest_show_known_owner_no_warning (test_svc_rdm_admin.RdmAdminTests.test_show_known_owner_no_warning) ... ok\ntest_show_prints_ledger_and_flags_unknown_owner (test_svc_rdm_admin.RdmAdminTests.test_show_prints_ledger_and_flags_unknown_owner) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_rdm_admin.RdmAdminTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_rdm_admin.RdmAdminTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_rdm_admin.RdmAdminTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_status_lists_rdm_admin_row_and_warning (test_svc_rdm_admin.RdmAdminTests.test_status_lists_rdm_admin_row_and_warning) ... ok\ntest_status_silent_without_rdm_db (test_svc_rdm_admin.RdmAdminTests.test_status_silent_without_rdm_db) ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_rdm_admin.RdmAdminTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_transfer_idempotent_when_already_owner (test_svc_rdm_admin.RdmAdminTests.test_transfer_idempotent_when_already_owner) ... ok\ntest_transfer_rejects_empty_ledger (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_empty_ledger) ... ok\ntest_transfer_rejects_owner_missing_from_base_users (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_owner_missing_from_base_users) ... ok\ntest_transfer_rewrites_single_row_with_provenance (test_svc_rdm_admin.RdmAdminTests.test_transfer_rewrites_single_row_with_provenance) ... ok\ntest_unknown_subcommand_usage_exit_2 (test_svc_rdm_admin.RdmAdminTests.test_unknown_subcommand_usage_exit_2) ... ok\ntest_watchdog_print_plan (test_svc_rdm_admin.RdmAdminTests.test_watchdog_print_plan) ... ok\ntest_U3_real_agent_identity_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_agent_identity_lifecycle_sqlite)\n真实组合二进制:领养 ensure → verify → 两次裸重启身份/锚点稳定; ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_pg_identity_env_delivery (test_svc_realcombo.RealComboTests.test_U3_real_pg_identity_env_delivery)\n真实 PostgreSQL:AGENT_SYSTEM_DSN 环境交付 ensure/verify(凭据不进 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_binary_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_rdm_binary_lifecycle_sqlite)\n真实 RDM 组合二进制:identity 接线(Backend 公共 CLI)→ serve 门禁 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_full_deploy_track (test_svc_realcombo.RealComboTests.test_U3_real_rdm_full_deploy_track)\n全轨:materialize(真实 make build)→ 候选身份门禁 → release 切换 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_realcombo.RealComboTests.test_recover_fails_when_port_stolen) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_ignores_never_started_service (test_svc_realcombo.RealComboTests.test_recover_ignores_never_started_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_noop_while_running (test_svc_realcombo.RealComboTests.test_recover_noop_while_running) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_reserved_name_rejected (test_svc_realcombo.RealComboTests.test_recover_reserved_name_rejected) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_respects_explicit_stop (test_svc_realcombo.RealComboTests.test_recover_respects_explicit_stop) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_restarts_sigkilled_service (test_svc_realcombo.RealComboTests.test_recover_restarts_sigkilled_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_skips_when_lock_held (test_svc_realcombo.RealComboTests.test_recover_skips_when_lock_held) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_realcombo.RealComboTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_records_autostart_and_stop_clears (test_svc_realcombo.RealComboTests.test_start_records_autostart_and_stop_clears) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_rejects_foreign_port_occupant (test_svc_realcombo.RealComboTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_stop_on_dead_process_clears_autostart (test_svc_realcombo.RealComboTests.test_stop_on_dead_process_clears_autostart) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_watchdog_print_plan (test_svc_realcombo.RealComboTests.test_watchdog_print_plan) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_recover.SvcAutoRecoverTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_recover.SvcAutoRecoverTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_recover.SvcAutoRecoverTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_recover.SvcAutoRecoverTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_recover.SvcAutoRecoverTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_recover.SvcAutoRecoverTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_recover.SvcAutoRecoverTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_recover.SvcAutoRecoverTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_recover.SvcAutoRecoverTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_recover.SvcAutoRecoverTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_recover.SvcAutoRecoverTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_recover.SvcAutoRecoverTests.test_watchdog_print_plan) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_u2.U2ReleaseTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_u2.U2ReleaseTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_u2.U2ReleaseTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_u2.U2ReleaseTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_u2.U2ReleaseTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_u2.U2ReleaseTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_u2.U2ReleaseTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_u2.U2ReleaseTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_u2.U2ReleaseTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_u2.U2ReleaseTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_u2.U2ReleaseTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_u2.U2ReleaseTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_u2.U2ReleaseTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_U2_build_failure_keeps_old_running (test_svc_u2.U2ReleaseTests.test_U2_build_failure_keeps_old_running) ... ok\ntest_U2_fault_after_switch_rolls_back_on_next_start (test_svc_u2.U2ReleaseTests.test_U2_fault_after_switch_rolls_back_on_next_start) ... ok\ntest_U2_health_timeout_rolls_back (test_svc_u2.U2ReleaseTests.test_U2_health_timeout_rolls_back) ... ok\ntest_U2_journal_interrupt_resolved_on_start (test_svc_u2.U2ReleaseTests.test_U2_journal_interrupt_resolved_on_start) ... ok\ntest_U2_layout_switch_and_rollback_on_start_failure (test_svc_u2.U2ReleaseTests.test_U2_layout_switch_and_rollback_on_start_failure) ... ok\ntest_U2_legacy_layout_bare_lifecycle_still_works (test_svc_u2.U2ReleaseTests.test_U2_legacy_layout_bare_lifecycle_still_works) ... ok\ntest_U2_schema_advance_blocks_rollback (test_svc_u2.U2ReleaseTests.test_U2_schema_advance_blocks_rollback) ... ok\ntest_Z_real_pg_not_run (test_svc_u2.U2ReleaseTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_u2.U2ReleaseTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_u2.U2ReleaseTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_u2.U2ReleaseTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_u2.U2ReleaseTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_u2.U2ReleaseTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_u2.U2ReleaseTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_u2.U2ReleaseTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_u2.U2ReleaseTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_u2.U2ReleaseTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_u2.U2ReleaseTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_u2.U2ReleaseTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_u2.U2ReleaseTests.test_watchdog_print_plan) ... ok\ntest_T1_user_list_binds_manifest_data (test_svc_user_binding.UserBindingTests.test_T1_user_list_binds_manifest_data) ... ok\ntest_T2_reject_override_data_flag (test_svc_user_binding.UserBindingTests.test_T2_reject_override_data_flag) ... ok\ntest_T2b_reject_literal_default_data (test_svc_user_binding.UserBindingTests.test_T2b_reject_literal_default_data) ... ok\ntest_T3_missing_data_root_rejected (test_svc_user_binding.UserBindingTests.test_T3_missing_data_root_rejected) ... ok\ntest_T4_no_flock_rejects_user_and_deploy (test_svc_user_binding.UserBindingTests.test_T4_no_flock_rejects_user_and_deploy) ... ok\ntest_T5_identity_regression_smoke (test_svc_user_binding.UserBindingTests.test_T5_identity_regression_smoke) ... ok\ntest_recover_fails_when_port_stolen (test_svc_user_binding.UserBindingTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_user_binding.UserBindingTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_user_binding.UserBindingTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_user_binding.UserBindingTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_user_binding.UserBindingTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_user_binding.UserBindingTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_user_binding.UserBindingTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_user_binding.UserBindingTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_user_binding.UserBindingTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_user_binding.UserBindingTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_user_binding.UserBindingTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_user_binding.UserBindingTests.test_watchdog_print_plan) ... ok\ntest_full_help_mentions_user_binding (test_svc_user_help.UserHelpTests.test_full_help_mentions_user_binding) ... ok\ntest_help_accounts_lists_six_commands (test_svc_user_help.UserHelpTests.test_help_accounts_lists_six_commands) ... ok\ntest_topics_and_short_and_lifecycle_mention_accounts (test_svc_user_help.UserHelpTests.test_topics_and_short_and_lifecycle_mention_accounts) ... ok\ntest_ide_lock_in_git_dir_does_not_block_finish (test_task.FinishGuardFixTests.test_ide_lock_in_git_dir_does_not_block_finish) ... ok\ntest_local_default_branch_at_origin_main_does_not_block (test_task.FinishGuardFixTests.test_local_default_branch_at_origin_main_does_not_block)\n克隆默认分支停在 origin/main 顶端(pin 为 feature 顶端时不在其历史内) ... ok\ntest_local_unique_commit_still_preserved (test_task.FinishGuardFixTests.test_local_unique_commit_still_preserved) ... ok\ntest_real_git_lock_still_blocks_finish (test_task.FinishGuardFixTests.test_real_git_lock_still_blocks_finish) ... ok\ntest_remote_tracking_refs_do_not_block_finish (test_task.FinishGuardFixTests.test_remote_tracking_refs_do_not_block_finish) ... ok\ntest_close_archives_child_merged_into_initiative_and_names_it (test_task.TaskLifecycleTests.test_close_archives_child_merged_into_initiative_and_names_it) ... ok\ntest_close_backfills_card_landed_as_squash (test_task.TaskLifecycleTests.test_close_backfills_card_landed_as_squash) ... /home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/case.py:704: ResourceWarning: unclosed \n function, args, kwargs = self._cleanups.pop()\nResourceWarning: Enable tracemalloc to get the object allocation traceback\nok\ntest_close_child_still_closable_after_initiative_merged_and_deleted (test_task.TaskLifecycleTests.test_close_child_still_closable_after_initiative_merged_and_deleted) ... ok\ntest_close_ignores_squash_claim_when_sha_not_on_main (test_task.TaskLifecycleTests.test_close_ignores_squash_claim_when_sha_not_on_main) ... /home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/case.py:704: ResourceWarning: unclosed \n function, args, kwargs = self._cleanups.pop()\nResourceWarning: Enable tracemalloc to get the object allocation traceback\nok\ntest_delivery_child_fails_when_remote_parent_is_deleted_after_triage (test_task.TaskLifecycleTests.test_delivery_child_fails_when_remote_parent_is_deleted_after_triage) ... ok\ntest_delivery_child_ignores_ahead_local_parent (test_task.TaskLifecycleTests.test_delivery_child_ignores_ahead_local_parent) ... ok\ntest_delivery_child_ignores_stale_local_parent (test_task.TaskLifecycleTests.test_delivery_child_ignores_stale_local_parent) ... ok\ntest_finish_abandon_retains_local_remote_tips_and_reason (test_task.TaskLifecycleTests.test_finish_abandon_retains_local_remote_tips_and_reason) ... ok\ntest_finish_abandon_without_reason_preserves_checkout_and_refs (test_task.TaskLifecycleTests.test_finish_abandon_without_reason_preserves_checkout_and_refs) ... ok\ntest_finish_clean_worktree_has_accurate_remote_result (test_task.TaskLifecycleTests.test_finish_clean_worktree_has_accurate_remote_result) ... ok\ntest_finish_deletes_only_merged_remote_branch (test_task.TaskLifecycleTests.test_finish_deletes_only_merged_remote_branch) ... ok\ntest_finish_preserves_component_commits_off_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_component_commits_off_the_pinned_head) ... ok\ntest_finish_preserves_component_untracked_file (test_task.TaskLifecycleTests.test_finish_preserves_component_untracked_file) ... ok\ntest_finish_preserves_linked_component_worktrees_at_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_linked_component_worktrees_at_the_pinned_head) ... ok\ntest_finish_preserves_linked_nested_component_worktree (test_task.TaskLifecycleTests.test_finish_preserves_linked_nested_component_worktree) ... ok\ntest_finish_preserves_locked_worktree (test_task.TaskLifecycleTests.test_finish_preserves_locked_worktree) ... ok\ntest_finish_preserves_main_and_active_index_lock (test_task.TaskLifecycleTests.test_finish_preserves_main_and_active_index_lock) ... ok\ntest_finish_preserves_modified_untracked_and_ignored_files (test_task.TaskLifecycleTests.test_finish_preserves_modified_untracked_and_ignored_files) ... ok\ntest_finish_preserves_remote_unmerged_tip (test_task.TaskLifecycleTests.test_finish_preserves_remote_unmerged_tip) ... ok\ntest_finish_recycles_child_merged_into_parent_initiative (test_task.TaskLifecycleTests.test_finish_recycles_child_merged_into_parent_initiative) ... ok\ntest_finish_recycles_clean_submodule_without_shared_config_changes (test_task.TaskLifecycleTests.test_finish_recycles_clean_submodule_without_shared_config_changes) ... ok\ntest_finish_rejects_subdirectory_without_deleting_it (test_task.TaskLifecycleTests.test_finish_rejects_subdirectory_without_deleting_it) ... ok\ntest_finish_remote_deletion_lease_preserves_concurrent_update (test_task.TaskLifecycleTests.test_finish_remote_deletion_lease_preserves_concurrent_update) ... ok\ntest_finish_requires_writer_exit_confirmation (test_task.TaskLifecycleTests.test_finish_requires_writer_exit_confirmation) ... ok\ntest_legacy_card_defaults_to_standalone_main (test_task.TaskLifecycleTests.test_legacy_card_defaults_to_standalone_main) ... ok\ntest_local_mode_child_uses_local_parent_and_marks_local_source (test_task.TaskLifecycleTests.test_local_mode_child_uses_local_parent_and_marks_local_source) ... ok\ntest_long_merge_history_keeps_merged_card_visible_and_closable (test_task.TaskLifecycleTests.test_long_merge_history_keeps_merged_card_visible_and_closable) ... ok\ntest_multiple_remote_candidates_stop_at_decision_required (test_task.TaskLifecycleTests.test_multiple_remote_candidates_stop_at_decision_required) ... ok\ntest_post_merge_is_silent_outside_main_checkout (test_task.TaskLifecycleTests.test_post_merge_is_silent_outside_main_checkout) ... ok\ntest_post_merge_main_merge_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_merge_only_reminds_owner) ... ok\ntest_post_merge_main_pull_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_pull_only_reminds_owner) ... ok\ntest_precheck_facts_row_with_escaped_pipe_stays_fresh (test_task.TaskLifecycleTests.test_precheck_facts_row_with_escaped_pipe_stays_fresh) ... ok\ntest_precheck_feature_behind_requires_sync (test_task.TaskLifecycleTests.test_precheck_feature_behind_requires_sync) ... ok\ntest_precheck_rejects_unreachable_authority (test_task.TaskLifecycleTests.test_precheck_rejects_unreachable_authority) ... ok\ntest_precheck_reports_active_initiatives (test_task.TaskLifecycleTests.test_precheck_reports_active_initiatives) ... ok\ntest_precheck_routes_existing_project_delivery_policy (test_task.TaskLifecycleTests.test_precheck_routes_existing_project_delivery_policy) ... ok\ntest_remote_initiative_needs_explicit_decision_and_never_auto_joins (test_task.TaskLifecycleTests.test_remote_initiative_needs_explicit_decision_and_never_auto_joins) ... ok\ntest_resume_child_rejects_rewound_immediate_target (test_task.TaskLifecycleTests.test_resume_child_rejects_rewound_immediate_target) ... ok\ntest_resume_child_reports_parent_as_immediate_target (test_task.TaskLifecycleTests.test_resume_child_reports_parent_as_immediate_target) ... ok\ntest_start_child_records_parent_head_and_immediate_target (test_task.TaskLifecycleTests.test_start_child_records_parent_head_and_immediate_target) ... ok\ntest_start_child_refuses_non_join_receipt_without_side_effects (test_task.TaskLifecycleTests.test_start_child_refuses_non_join_receipt_without_side_effects) ... ok\ntest_start_child_rejects_missing_initiative_or_wrong_slug (test_task.TaskLifecycleTests.test_start_child_rejects_missing_initiative_or_wrong_slug) ... ok\ntest_start_imports_precheck_and_creates_four_part_commit (test_task.TaskLifecycleTests.test_start_imports_precheck_and_creates_four_part_commit) ... ok\ntest_start_initiative_records_branch_metadata (test_task.TaskLifecycleTests.test_start_initiative_records_branch_metadata) ... ok\ntest_start_offline_does_not_create_worktree (test_task.TaskLifecycleTests.test_start_offline_does_not_create_worktree) ... ok\ntest_start_preserves_merged_local_and_remote_branch_names (test_task.TaskLifecycleTests.test_start_preserves_merged_local_and_remote_branch_names) ... ok\ntest_start_refuses_receipt_when_remote_initiative_moved_after_triage (test_task.TaskLifecycleTests.test_start_refuses_receipt_when_remote_initiative_moved_after_triage) ... ok\ntest_start_rejects_receipt_when_authoritative_base_changed (test_task.TaskLifecycleTests.test_start_rejects_receipt_when_authoritative_base_changed) ... ok\ntest_start_requires_precheck_receipt_before_creating_worktree (test_task.TaskLifecycleTests.test_start_requires_precheck_receipt_before_creating_worktree) ... ok\ntest_start_stacked_branch_records_parent_and_main_baseline (test_task.TaskLifecycleTests.test_start_stacked_branch_records_parent_and_main_baseline) ... ok\ntest_start_standalone_records_default_metadata (test_task.TaskLifecycleTests.test_start_standalone_records_default_metadata) ... ok\ntest_start_without_triage_receipt_creates_no_worktree_or_branch (test_task.TaskLifecycleTests.test_start_without_triage_receipt_creates_no_worktree_or_branch) ... ok\ntest_sync_child_merges_new_parent_initiative_commits (test_task.TaskLifecycleTests.test_sync_child_merges_new_parent_initiative_commits) ... ok\ntest_sync_commit_failure_never_reports_synced (test_task.TaskLifecycleTests.test_sync_commit_failure_never_reports_synced) ... ok\ntest_sync_conflict_is_not_reported_as_synced (test_task.TaskLifecycleTests.test_sync_conflict_is_not_reported_as_synced) ... ok\ntest_sync_does_not_execute_json_receipt_command (test_task.TaskLifecycleTests.test_sync_does_not_execute_json_receipt_command) ... ok\ntest_sync_keeps_json_evidence_fresh_after_metadata_only_changes (test_task.TaskLifecycleTests.test_sync_keeps_json_evidence_fresh_after_metadata_only_changes) ... ok\ntest_sync_keeps_unchanged_component_branch (test_task.TaskLifecycleTests.test_sync_keeps_unchanged_component_branch) ... ok\ntest_sync_materializes_nested_detached_components (test_task.TaskLifecycleTests.test_sync_materializes_nested_detached_components) ... ok\ntest_sync_materializes_updated_component (test_task.TaskLifecycleTests.test_sync_materializes_updated_component) ... ok\ntest_sync_new_base_reports_actual_final_head (test_task.TaskLifecycleTests.test_sync_new_base_reports_actual_final_head) ... ok\ntest_sync_preserves_component_feature_branch (test_task.TaskLifecycleTests.test_sync_preserves_component_feature_branch) ... ok\ntest_sync_preserves_dirty_child (test_task.TaskLifecycleTests.test_sync_preserves_dirty_child) ... ok\ntest_sync_preserves_dirty_parent_and_staged_changes (test_task.TaskLifecycleTests.test_sync_preserves_dirty_parent_and_staged_changes) ... ok\ntest_sync_preserves_nested_feature_branch_when_parent_pin_changes (test_task.TaskLifecycleTests.test_sync_preserves_nested_feature_branch_when_parent_pin_changes) ... ok\ntest_sync_reads_legacy_commands_with_escaped_pipes (test_task.TaskLifecycleTests.test_sync_reads_legacy_commands_with_escaped_pipes) ... ok\ntest_sync_rejects_unreachable_target_without_changing_head (test_task.TaskLifecycleTests.test_sync_rejects_unreachable_target_without_changing_head) ... ok\ntest_sync_same_base_preserves_head_and_card (test_task.TaskLifecycleTests.test_sync_same_base_preserves_head_and_card) ... ok\ntest_sync_still_warns_for_stale_legacy_table_evidence (test_task.TaskLifecycleTests.test_sync_still_warns_for_stale_legacy_table_evidence) ... ok\ntest_sync_warns_for_malformed_json_evidence (test_task.TaskLifecycleTests.test_sync_warns_for_malformed_json_evidence) ... ok\ntest_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum (test_task.TaskLifecycleTests.test_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum) ... ok\ntest_sync_warns_for_unresolved_json_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_json_evidence_head) ... ok\ntest_sync_warns_for_unresolved_legacy_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_legacy_evidence_head) ... ok\ntest_sync_warns_when_json_after_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_after_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_before_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_before_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_evidence_predates_noncard_changes (test_task.TaskLifecycleTests.test_sync_warns_when_json_evidence_predates_noncard_changes) ... ok\ntest_triage_ignores_local_cards_and_records_new_without_remote_initiative (test_task.TaskLifecycleTests.test_triage_ignores_local_cards_and_records_new_without_remote_initiative) ... ok\ntest_triage_without_receipt_is_refused (test_task.TaskLifecycleTests.test_triage_without_receipt_is_refused) ... ok\ntest_verify_rejects_recursive_drift_even_when_root_has_local_edits (test_task.TaskLifecycleTests.test_verify_rejects_recursive_drift_even_when_root_has_local_edits) ... ok\ntest_verify_rejects_uninitialized_component (test_task.TaskLifecycleTests.test_verify_rejects_uninitialized_component) ... ok\ntest_child_is_rejected_when_parent_initiative_pr_is_closed (test_task_pr_check.PrCheckTests.test_child_is_rejected_when_parent_initiative_pr_is_closed) ... ok\ntest_child_pr_into_initiative_passes (test_task_pr_check.PrCheckTests.test_child_pr_into_initiative_passes) ... ok\ntest_child_pr_into_main_is_rejected (test_task_pr_check.PrCheckTests.test_child_pr_into_main_is_rejected) ... ok\ntest_ci_mode_gates_pull_request_base_against_head_card (test_task_pr_check.PrCheckTests.test_ci_mode_gates_pull_request_base_against_head_card) ... ok\ntest_closed_and_merged_prs_are_rejected (test_task_pr_check.PrCheckTests.test_closed_and_merged_prs_are_rejected) ... ok\ntest_final_rejects_initiative_still_accepting_requirements (test_task_pr_check.PrCheckTests.test_final_rejects_initiative_still_accepting_requirements) ... ok\ntest_final_requires_required_children_merged_or_deferred (test_task_pr_check.PrCheckTests.test_final_requires_required_children_merged_or_deferred) ... ok\ntest_pr_lookup_requires_one_open_pr_or_explicit_number (test_task_pr_check.PrCheckTests.test_pr_lookup_requires_one_open_pr_or_explicit_number) ... ok\ntest_remote_branch_head_differing_from_local_is_rejected (test_task_pr_check.PrCheckTests.test_remote_branch_head_differing_from_local_is_rejected) ... ok\ntest_stale_pr_head_is_rejected (test_task_pr_check.PrCheckTests.test_stale_pr_head_is_rejected) ... ok\ntest_standalone_and_initiative_base_gate (test_task_pr_check.PrCheckTests.test_standalone_and_initiative_base_gate) ... ok\ntest_token_is_first_access_token_line_of_secrets_file (test_task_pr_check.PrCheckTests.test_token_is_first_access_token_line_of_secrets_file) ... ok\ntest_unreachable_or_unauthorized_api_fails_closed_with_exit_6 (test_task_pr_check.PrCheckTests.test_unreachable_or_unauthorized_api_fails_closed_with_exit_6) ... ok\ntest_local_precheck_allows_known_lag_without_changing_head (test_task_recovery.TaskRecoveryTests.test_local_precheck_allows_known_lag_without_changing_head) ... ok\ntest_local_precheck_never_advertises_delivery_even_when_current (test_task_recovery.TaskRecoveryTests.test_local_precheck_never_advertises_delivery_even_when_current) ... ok\ntest_local_precheck_rejects_dirty_state_and_unknown_remote (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_dirty_state_and_unknown_remote) ... ok\ntest_local_precheck_rejects_foreign_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_foreign_registration) ... ok\ntest_local_precheck_rejects_invalid_baseline (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_invalid_baseline) ... ok\ntest_local_precheck_rejects_main_and_missing_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_main_and_missing_registration) ... ok\ntest_local_precheck_rejects_wrong_branch_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_wrong_branch_registration) ... ok\ntest_local_receipt_cannot_start_a_task_or_resume_for_delivery (test_task_recovery.TaskRecoveryTests.test_local_receipt_cannot_start_a_task_or_resume_for_delivery) ... ok\ntest_local_resume_imports_original_receipt_without_sync (test_task_recovery.TaskRecoveryTests.test_local_resume_imports_original_receipt_without_sync) ... ok\ntest_local_resume_rejects_divergent_target_before_import (test_task_recovery.TaskRecoveryTests.test_local_resume_rejects_divergent_target_before_import) ... ok\ntest_local_resume_rejects_target_rewind_before_import (test_task_recovery.TaskRecoveryTests.test_local_resume_rejects_target_rewind_before_import) ... ok\ntest_make_resume_exports_the_selected_mode_and_receipt (test_task_recovery.TaskRecoveryTests.test_make_resume_exports_the_selected_mode_and_receipt) ... ok\ntest_resume_rejects_another_worktree_with_same_head (test_task_recovery.TaskRecoveryTests.test_resume_rejects_another_worktree_with_same_head) ... ok\ntest_resume_rejects_changed_source_head (test_task_recovery.TaskRecoveryTests.test_resume_rejects_changed_source_head) ... ok\ntest_strict_resume_imports_current_ready_receipt (test_task_recovery.TaskRecoveryTests.test_strict_resume_imports_current_ready_receipt) ... ok\ntest_strict_resume_rejects_target_advance (test_task_recovery.TaskRecoveryTests.test_strict_resume_rejects_target_advance) ... ok\ntest_unknown_validation_purpose_is_rejected (test_task_recovery.TaskRecoveryTests.test_unknown_validation_purpose_is_rejected) ... ok\ntest_unknown_work_mode_is_rejected (test_task_recovery.TaskRecoveryTests.test_unknown_work_mode_is_rejected) ... ok\ntest_userinfo_is_stripped_from_urls_and_scp_forms (test_task_triage.RedactionTests.test_userinfo_is_stripped_from_urls_and_scp_forms) ... ok\ntest_api_unreachable_yields_remote_unverified_without_receipt (test_task_triage.TriageTests.test_api_unreachable_yields_remote_unverified_without_receipt) ... ok\ntest_card_filters_ignore_closed_intake_done_plain_and_other_root (test_task_triage.TriageTests.test_card_filters_ignore_closed_intake_done_plain_and_other_root) ... ok\ntest_decide_rejects_candidate_head_change_and_keeps_receipt (test_task_triage.TriageTests.test_decide_rejects_candidate_head_change_and_keeps_receipt) ... ok\ntest_decide_rejects_unknown_initiative_or_missing_reason_without_changing_receipt (test_task_triage.TriageTests.test_decide_rejects_unknown_initiative_or_missing_reason_without_changing_receipt) ... ok\ntest_discover_requires_requirement_text (test_task_triage.TriageTests.test_discover_requires_requirement_text) ... ok\ntest_join_decision_succeeds_and_verifies_child (test_task_triage.TriageTests.test_join_decision_succeeds_and_verifies_child) ... ok\ntest_ls_remote_failure_yields_remote_unverified_without_receipt (test_task_triage.TriageTests.test_ls_remote_failure_yields_remote_unverified_without_receipt) ... ok\ntest_multiple_candidates_stop_at_decision_required (test_task_triage.TriageTests.test_multiple_candidates_stop_at_decision_required) ... ok\ntest_new_decision_for_single_non_fitting_candidate_requires_reason (test_task_triage.TriageTests.test_new_decision_for_single_non_fitting_candidate_requires_reason) ... ok\ntest_pr_base_not_main_and_closed_pr_are_ignored (test_task_triage.TriageTests.test_pr_base_not_main_and_closed_pr_are_ignored) ... ok\ntest_remote_discovery_paginates_until_empty (test_task_triage.TriageTests.test_remote_discovery_paginates_until_empty) ... ok\ntest_remote_initiative_absent_from_main_tree_is_discovered (test_task_triage.TriageTests.test_remote_initiative_absent_from_main_tree_is_discovered) ... ok\ntest_repo_slug_is_derived_from_origin_when_gitea_repo_unset (test_task_triage.TriageTests.test_repo_slug_is_derived_from_origin_when_gitea_repo_unset) ... ok\ntest_single_candidate_requires_decision_never_auto_join (test_task_triage.TriageTests.test_single_candidate_requires_decision_never_auto_join) ... ok\ntest_token_from_secrets_file_is_used_and_never_printed (test_task_triage.TriageTests.test_token_from_secrets_file_is_used_and_never_printed) ... ok\ntest_verify_rejects_changed_candidate_head (test_task_triage.TriageTests.test_verify_rejects_changed_candidate_head) ... ok\ntest_verify_rejects_changed_card_digest (test_task_triage.TriageTests.test_verify_rejects_changed_card_digest) ... ok\ntest_verify_rejects_child_with_wrong_initiative (test_task_triage.TriageTests.test_verify_rejects_child_with_wrong_initiative) ... ok\ntest_verify_rejects_root_target_mismatch (test_task_triage.TriageTests.test_verify_rejects_root_target_mismatch) ... ok\ntest_verify_rejects_stale_receipt (test_task_triage.TriageTests.test_verify_rejects_stale_receipt) ... ok\ntest_verify_rejects_verdict_and_kind_mismatch (test_task_triage.TriageTests.test_verify_rejects_verdict_and_kind_mismatch) ... ok\ntest_verify_rejects_wrong_schema_and_missing_receipt (test_task_triage.TriageTests.test_verify_rejects_wrong_schema_and_missing_receipt) ... ok\ntest_zero_candidates_yields_new_without_selecting_an_initiative (test_task_triage.TriageTests.test_zero_candidates_yields_new_without_selecting_an_initiative) ... ok\ntest_deleting_main_symlink_to_outside_is_denied (test_write_guard.WriteGuardTests.test_deleting_main_symlink_to_outside_is_denied) ... ok\ntest_detached_and_bad_branches_are_denied (test_write_guard.WriteGuardTests.test_detached_and_bad_branches_are_denied) ... ok\ntest_every_patch_file_and_move_destination_is_checked (test_write_guard.WriteGuardTests.test_every_patch_file_and_move_destination_is_checked) ... ok\ntest_feature_missing_parent_is_allowed (test_write_guard.WriteGuardTests.test_feature_missing_parent_is_allowed) ... ok\ntest_invalid_json_is_denied (test_write_guard.WriteGuardTests.test_invalid_json_is_denied) ... ok\ntest_missing_parent_on_main_is_denied (test_write_guard.WriteGuardTests.test_missing_parent_on_main_is_denied) ... ok\ntest_missing_unknown_and_malformed_write_input_are_denied (test_write_guard.WriteGuardTests.test_missing_unknown_and_malformed_write_input_are_denied) ... ok\ntest_non_git_destination_is_explicitly_outside_scope (test_write_guard.WriteGuardTests.test_non_git_destination_is_explicitly_outside_scope) ... ok\ntest_nonwrite_tools_are_outside_scope (test_write_guard.WriteGuardTests.test_nonwrite_tools_are_outside_scope) ... ok\ntest_relative_path_uses_hook_cwd_not_process_cwd (test_write_guard.WriteGuardTests.test_relative_path_uses_hook_cwd_not_process_cwd) ... ok\ntest_symlink_into_main_with_missing_parents_is_denied (test_write_guard.WriteGuardTests.test_symlink_into_main_with_missing_parents_is_denied) ... ok\ntest_valid_multi_file_patch_on_feature_is_allowed (test_write_guard.WriteGuardTests.test_valid_multi_file_patch_on_feature_is_allowed) ... ok\n\n======================================================================\nFAIL: test_legacy_exec_dsn_survives_consecutive_restarts (test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity/tests/test_svc.py\", line 302, in test_legacy_exec_dsn_survives_consecutive_restarts\n self.svc(\"dev\", \"restart\")\n ~~~~~~~~^^^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity/tests/test_svc.py\", line 222, in svc\n self.assertEqual(proc.returncode, 0, proc.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 0 : \u001b[1;33m[svc]\u001b[0m [dev] 跳过 manifest 迁移:需 python3 与 scripts/svc_manifest.py\n\u001b[1;34m[svc]\u001b[0m [dev] 存量 exec DSN 已迁移为托管绑定 dbref=pg1/agent(DSN 改由实例登记重建)\n\u001b[1;34m[svc]\u001b[0m [dev] 无 pidfile——没有由本脚本启动的实例\n\u001b[1;31m[svc]\u001b[0m [dev] 端口被占用(非本服务):LISTEN 0 4096 127.0.0.1:18791 0.0.0.0:* users:((\"agent-system-rd\",pid=188020,fd=10)) \n\u001b[1;31m[svc]\u001b[0m 处理:停掉该进程,或换端口(--port / --addr)\n\n\n----------------------------------------------------------------------\nRan 542 tests in 346.194s\n\nFAILED (failures=1, skipped=19)\nmake[1]: *** [Makefile:203: test-governance] Error 1\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity'\n", + "root_target": "main", + "immediate_target": "feature/development-governance-v2", + "output_sha256": "3a7b4717d48aca699f79fd4aa2663666071acc321fd0a1eb07e6fee21c0797a6", + "receipt_sha256": "6cbf50a3d0212f55f823ca4bb871561160d1d59dcd495d81d9b5ad40961e81e1" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-17T02:19:12.384734+00:00", + "command": "env -u GOTELEMETRY_GOPLS_CLIENT_TOKEN make test-governance", + "command_sha256": "e2b587090d693d5958d430bd4a246dc597baf6ad4c988381c74f0ed139e43563", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "dfb684830f899837e260f2a438e8572537484d63", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after": { + "head": "dfb684830f899837e260f2a438e8572537484d63", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": " M .task/feature-development-governance-v2-target-integrity.md\n", + "tracked_diff_sha256": "dbbae2dca14c06e82892cf5491652aaa1ede8b9b1baaee9c50672cff7993c125", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after_error": null, + "exit_code": 2, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity'\nPYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p 'test_*.py' -v\ntest_all_unavailable_exhaustion_does_not_authorize_host (test_agent_exec.AgentExecControllerTests.test_all_unavailable_exhaustion_does_not_authorize_host) ... ok\ntest_builtin_event_envelopes_gate_success (test_agent_exec.AgentExecControllerTests.test_builtin_event_envelopes_gate_success)\nReal Cursor/agy/PI output envelopes decide the terminal; prose fails closed. ... ok\ntest_canonical_checkout_mutation_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_canonical_checkout_mutation_is_failed_unknown)\nWorker mutating canonical files/index while keeping private clone clean is blocked. ... ok\ntest_clean_exit_without_diff_and_network_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_clean_exit_without_diff_and_network_is_failed_unknown)\nAuthorized network with a clean no-diff exit is not failed-clean. ... ok\ntest_corrupt_worktree_git_pointer_yields_failed_unknown_receipt (test_agent_exec.AgentExecControllerTests.test_corrupt_worktree_git_pointer_yields_failed_unknown_receipt)\nCorrupted private-clone .git directory must produce a stable blocked receipt. ... ok\ntest_declared_offline_launched_failure_is_failed_unknown_and_stops (test_agent_exec.AgentExecControllerTests.test_declared_offline_launched_failure_is_failed_unknown_and_stops)\nnetwork=false/external_cost=false are declarations, not isolation proof. ... ok\ntest_emergency_profile_runs_once_after_regular_safe_exhaustion (test_agent_exec.AgentExecControllerTests.test_emergency_profile_runs_once_after_regular_safe_exhaustion) ... ok\ntest_failed_unknown_blocks_fallback (test_agent_exec.AgentExecControllerTests.test_failed_unknown_blocks_fallback) ... ok\ntest_git_admin_staged_config_ref_mutation_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_git_admin_staged_config_ref_mutation_is_failed_unknown)\nStaged index plus local config/ref mutation preserves workspace and stops. ... ok\ntest_idle_timeout_kills_silent_worker_before_total (test_agent_exec.AgentExecControllerTests.test_idle_timeout_kills_silent_worker_before_total) ... ok\ntest_large_stdin_with_early_stdout_does_not_deadlock (test_agent_exec.AgentExecControllerTests.test_large_stdin_with_early_stdout_does_not_deadlock)\nStdin must be select-driven so early stdout beyond pipe capacity cannot hang. ... ok\ntest_launched_failure_without_diff_is_failed_unknown_and_stops (test_agent_exec.AgentExecControllerTests.test_launched_failure_without_diff_is_failed_unknown_and_stops)\nNo diff and declared-offline packets still do not prove external cleanliness. ... ok\ntest_legacy_exhaustion_without_emergency_does_not_authorize_host (test_agent_exec.AgentExecControllerTests.test_legacy_exhaustion_without_emergency_does_not_authorize_host) ... ok\ntest_missing_profiles_fall_through_in_declared_order (test_agent_exec.AgentExecControllerTests.test_missing_profiles_fall_through_in_declared_order) ... ok\ntest_networked_nonzero_no_file_change_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_networked_nonzero_no_file_change_is_failed_unknown)\nnetwork=true nonzero exit with no file changes cannot be failed-clean. ... ok\ntest_progress_keeps_worker_alive_past_one_idle_interval (test_agent_exec.AgentExecControllerTests.test_progress_keeps_worker_alive_past_one_idle_interval) ... ok\ntest_receipt_redacts_environment_secrets (test_agent_exec.AgentExecControllerTests.test_receipt_redacts_environment_secrets) ... ok\ntest_rename_into_allowed_destination_cannot_hide_source (test_agent_exec.AgentExecControllerTests.test_rename_into_allowed_destination_cannot_hide_source)\nRename parsing must keep an out-of-scope source and its destination. ... ok\ntest_run_uses_fresh_process_and_worktree_per_attempt (test_agent_exec.AgentExecControllerTests.test_run_uses_fresh_process_and_worktree_per_attempt) ... ok\ntest_safe_unavailable_retries_profile_before_next_success (test_agent_exec.AgentExecControllerTests.test_safe_unavailable_retries_profile_before_next_success) ... ok\ntest_scope_expansion_preserves_workspace_and_blocks (test_agent_exec.AgentExecControllerTests.test_scope_expansion_preserves_workspace_and_blocks) ... ok\ntest_secret_crossing_raw_log_flush_boundary_is_redacted (test_agent_exec.AgentExecControllerTests.test_secret_crossing_raw_log_flush_boundary_is_redacted)\nExact env secrets must not leak when split across raw-log drain/flush edges. ... ok\ntest_sibling_canonical_ref_config_mutation_during_private_clone_succeeds (test_agent_exec.AgentExecControllerTests.test_sibling_canonical_ref_config_mutation_during_private_clone_succeeds)\nHost sibling branch/ref/config churn must not fail-stop a private clone. ... ok\ntest_stdin_and_stderr_progress_resets_idle_deadline (test_agent_exec.AgentExecControllerTests.test_stdin_and_stderr_progress_resets_idle_deadline) ... ok\ntest_success_creates_base_parented_transport_without_touching_canonical_head (test_agent_exec.AgentExecControllerTests.test_success_creates_base_parented_transport_without_touching_canonical_head) ... ok\ntest_summary_and_raw_log_caps_are_enforced (test_agent_exec.AgentExecControllerTests.test_summary_and_raw_log_caps_are_enforced) ... ok\ntest_symlink_allowed_path_escape_rejects_without_external_write (test_agent_exec.AgentExecControllerTests.test_symlink_allowed_path_escape_rejects_without_external_write)\nAllowed path through symlink escaping the worktree cannot touch outside. ... ok\ntest_timeout_kills_process_group_and_records_receipt (test_agent_exec.AgentExecControllerTests.test_timeout_kills_process_group_and_records_receipt) ... ok\ntest_transport_commit_does_not_require_configured_git_identity (test_agent_exec.AgentExecControllerTests.test_transport_commit_does_not_require_configured_git_identity) ... ok\ntest_transport_construction_failure_is_failed_unknown (test_agent_exec.AgentExecControllerTests.test_transport_construction_failure_is_failed_unknown)\nHost transport staging/commit-tree/update-ref failure stays recoverable. ... ok\ntest_untracked_and_binary_files_enter_transport_inventory (test_agent_exec.AgentExecControllerTests.test_untracked_and_binary_files_enter_transport_inventory) ... ok\ntest_validate_does_not_contact_provider (test_agent_exec.AgentExecControllerTests.test_validate_does_not_contact_provider) ... ok\ntest_worker_commit_or_head_move_is_rejected (test_agent_exec.AgentExecControllerTests.test_worker_commit_or_head_move_is_rejected)\nWorker HEAD/commit, staged index, and config/ref mutations are fail-stop. ... ok\ntest_worker_fail_stop_terminal_beats_success_and_no_change (test_agent_exec.AgentExecControllerTests.test_worker_fail_stop_terminal_beats_success_and_no_change)\nblocked, cancelled, and failed-unknown stop before success or no-change. ... ok\ntest_attestation_key_first_run_race_shares_one_key (test_agent_exec.AgentExecHistoryTests.test_attestation_key_first_run_race_shares_one_key) ... ok\ntest_attestation_key_symlink_is_not_followed (test_agent_exec.AgentExecHistoryTests.test_attestation_key_symlink_is_not_followed) ... ok\ntest_history_appends_safe_success_and_fallback_records (test_agent_exec.AgentExecHistoryTests.test_history_appends_safe_success_and_fallback_records) ... ok\ntest_history_failure_does_not_change_run_outcome (test_agent_exec.AgentExecHistoryTests.test_history_failure_does_not_change_run_outcome) ... ok\ntest_invalid_config_also_appends_one_history_record (test_agent_exec.AgentExecHistoryTests.test_invalid_config_also_appends_one_history_record) ... ok\ntest_success_history_is_mode_correct_and_signed (test_agent_exec.AgentExecHistoryTests.test_success_history_is_mode_correct_and_signed) ... ok\ntest_incompatible_opencode_is_unavailable_not_pass (test_agent_exec.RealAgentCliProbeTests.test_incompatible_opencode_is_unavailable_not_pass) ... ok\ntest_launched_failure_without_marker_is_unavailable_not_pass (test_agent_exec.RealAgentCliProbeTests.test_launched_failure_without_marker_is_unavailable_not_pass) ... ok\ntest_missing_opencode_is_unavailable_not_pass (test_agent_exec.RealAgentCliProbeTests.test_missing_opencode_is_unavailable_not_pass) ... ok\ntest_model_receipt_mismatch_is_not_pass (test_agent_exec.RealAgentCliProbeTests.test_model_receipt_mismatch_is_not_pass) ... ok\ntest_observable_verified_model_receipt_stays_attached_to_success (test_agent_exec.RealAgentCliProbeTests.test_observable_verified_model_receipt_stays_attached_to_success) ... ok\ntest_offline_success_checks_marker_transport_and_canonical (test_agent_exec.RealAgentCliProbeTests.test_offline_success_checks_marker_transport_and_canonical) ... ok\ntest_opt_in_real_profile_probe (test_agent_exec.RealAgentCliProbeTests.test_opt_in_real_profile_probe) ... skipped 'real CLI probe NOT_RUN: set RUN_REAL_AGENT_EXEC=1 and AGENT_EXEC_REAL_PROFILE to exactly one profile'\ntest_profile_selector_accepts_exactly_one_profile (test_agent_exec.RealAgentCliProbeTests.test_profile_selector_accepts_exactly_one_profile) ... ok\ntest_real_probe_refuses_without_opt_in (test_agent_exec.RealAgentCliProbeTests.test_real_probe_refuses_without_opt_in) ... ok\ntest_wrong_marker_is_not_pass (test_agent_exec.RealAgentCliProbeTests.test_wrong_marker_is_not_pass) ... ok\ntest_agy_stream_json_and_json_results_are_decoded (test_agent_exec.TerminalRecordDecodingTests.test_agy_stream_json_and_json_results_are_decoded) ... ok\ntest_cursor_blocked_record_is_decoded_as_fail_stop (test_agent_exec.TerminalRecordDecodingTests.test_cursor_blocked_record_is_decoded_as_fail_stop) ... ok\ntest_cursor_stream_json_result_is_decoded (test_agent_exec.TerminalRecordDecodingTests.test_cursor_stream_json_result_is_decoded) ... ok\ntest_cursor_user_echo_and_error_result_are_not_records (test_agent_exec.TerminalRecordDecodingTests.test_cursor_user_echo_and_error_result_are_not_records) ... ok\ntest_pi_json_final_assistant_message_is_decoded (test_agent_exec.TerminalRecordDecodingTests.test_pi_json_final_assistant_message_is_decoded) ... ok\ntest_prompt_states_schema_without_being_a_record (test_agent_exec.TerminalRecordDecodingTests.test_prompt_states_schema_without_being_a_record) ... ok\ntest_prose_missing_or_invalid_terminal_fails_closed (test_agent_exec.TerminalRecordDecodingTests.test_prose_missing_or_invalid_terminal_fails_closed) ... ok\ntest_raw_stdout_record_is_not_an_envelope_for_builtins (test_agent_exec.TerminalRecordDecodingTests.test_raw_stdout_record_is_not_an_envelope_for_builtins) ... ok\ntest_stdout_tail_keeps_final_envelope_behind_oversized_event (test_agent_exec.TerminalRecordDecodingTests.test_stdout_tail_keeps_final_envelope_behind_oversized_event) ... ok\ntest_terminal_record_must_be_sole_final_content (test_agent_exec.TerminalRecordDecodingTests.test_terminal_record_must_be_sole_final_content) ... ok\ntest_antigravity_run_everything_argv (test_agent_exec_adapters.AgentExecAdapterTests.test_antigravity_run_everything_argv) ... ok\ntest_claude_run_everything_argv (test_agent_exec_adapters.AgentExecAdapterTests.test_claude_run_everything_argv) ... ok\ntest_codex_uses_noninteractive_workspace_sandbox (test_agent_exec_adapters.AgentExecAdapterTests.test_codex_uses_noninteractive_workspace_sandbox) ... ok\ntest_cursor_run_everything_and_auto_model_argv (test_agent_exec_adapters.AgentExecAdapterTests.test_cursor_run_everything_and_auto_model_argv) ... ok\ntest_custom_adapter_builds_direct_argv_without_shell (test_agent_exec_adapters.AgentExecAdapterTests.test_custom_adapter_builds_direct_argv_without_shell) ... ok\ntest_fixed_model_uses_only_adapter_model_flag (test_agent_exec_adapters.AgentExecAdapterTests.test_fixed_model_uses_only_adapter_model_flag) ... ok\ntest_missing_opencode_is_unavailable (test_agent_exec_adapters.AgentExecAdapterTests.test_missing_opencode_is_unavailable) ... ok\ntest_pi_and_kimi_auto_model_omit_model_flag (test_agent_exec_adapters.AgentExecAdapterTests.test_pi_and_kimi_auto_model_omit_model_flag) ... ok\ntest_rejects_oversized_and_invalid_utf8_unit_packet (test_agent_exec_adapters.AgentExecAdapterTests.test_rejects_oversized_and_invalid_utf8_unit_packet) ... ok\ntest_unverified_run_everything_capability_is_unavailable (test_agent_exec_adapters.AgentExecAdapterTests.test_unverified_run_everything_capability_is_unavailable) ... ok\ntest_admit_accepts_exact_transport_paths (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_accepts_exact_transport_paths) ... ok\ntest_admit_accepts_host_managed_exemptions (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_accepts_host_managed_exemptions) ... ok\ntest_admit_covers_whitespace_path_only_with_exact_transport (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_covers_whitespace_path_only_with_exact_transport) ... ok\ntest_admit_rejects_different_content_at_transport_path (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_different_content_at_transport_path) ... ok\ntest_admit_rejects_rename_of_non_exempt_source_into_exempt_path (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_rename_of_non_exempt_source_into_exempt_path) ... ok\ntest_admit_rejects_staged_paths_without_provenance (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_staged_paths_without_provenance) ... ok\ntest_admit_rejects_tampered_record_and_moved_ref (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_tampered_record_and_moved_ref) ... ok\ntest_admit_rejects_whitespace_lookalikes_of_exempt_paths (test_agent_exec_admission.AgentExecAdmissionTests.test_admit_rejects_whitespace_lookalikes_of_exempt_paths) ... ok\ntest_apply_fast_forwards_clean_matching_transport (test_agent_exec_admission.AgentExecAdmissionTests.test_apply_fast_forwards_clean_matching_transport) ... ok\ntest_apply_redacts_secret_shaped_receipt_text (test_agent_exec_admission.AgentExecAdmissionTests.test_apply_redacts_secret_shaped_receipt_text) ... ok\ntest_apply_rejects_fabricated_unsigned_or_tampered_history (test_agent_exec_admission.AgentExecAdmissionTests.test_apply_rejects_fabricated_unsigned_or_tampered_history) ... ok\ntest_apply_rejects_without_changing_state (test_agent_exec_admission.AgentExecAdmissionTests.test_apply_rejects_without_changing_state) ... ok\ntest_make_agent_exec_apply_requires_receipt (test_agent_exec_admission.AgentExecAdmissionTests.test_make_agent_exec_apply_requires_receipt) ... ok\ntest_precommit_accepts_host_managed_exemptions (test_agent_exec_admission.AgentExecAdmissionTests.test_precommit_accepts_host_managed_exemptions) ... ok\ntest_precommit_rejects_unproven_paths_after_branch_checks (test_agent_exec_admission.AgentExecAdmissionTests.test_precommit_rejects_unproven_paths_after_branch_checks) ... ok\ntest_rename_and_copy_records_keep_non_exempt_source (test_agent_exec_admission.AgentExecAdmissionTests.test_rename_and_copy_records_keep_non_exempt_source)\nCopy/rename records must not drop a non-exempt source behind an exempt dest. ... ok\ntest_whitespace_paths_are_classified_exactly (test_agent_exec_admission.AgentExecAdmissionTests.test_whitespace_paths_are_classified_exactly) ... ok\ntest_accepts_fallback_to_host_never (test_agent_exec_config.AgentExecConfigTests.test_accepts_fallback_to_host_never) ... ok\ntest_checked_in_project_config_declares_integration (test_agent_exec_config.AgentExecConfigTests.test_checked_in_project_config_declares_integration) ... ok\ntest_checked_in_project_config_never_authorizes_host_fallback (test_agent_exec_config.AgentExecConfigTests.test_checked_in_project_config_never_authorizes_host_fallback) ... ok\ntest_configured_emergency_profile_must_exist_be_enabled_and_use_adapter_codex (test_agent_exec_config.AgentExecConfigTests.test_configured_emergency_profile_must_exist_be_enabled_and_use_adapter_codex) ... ok\ntest_custom_placeholders_must_fill_whole_argv_items (test_agent_exec_config.AgentExecConfigTests.test_custom_placeholders_must_fill_whole_argv_items) ... ok\ntest_emergency_exactness_does_not_apply_to_review (test_agent_exec_config.AgentExecConfigTests.test_emergency_exactness_does_not_apply_to_review) ... ok\ntest_emergency_normal_roles_allow_extra_disabled_and_keep_order (test_agent_exec_config.AgentExecConfigTests.test_emergency_normal_roles_allow_extra_disabled_and_keep_order) ... ok\ntest_emergency_normal_roles_reject_disabled_only_adapter (test_agent_exec_config.AgentExecConfigTests.test_emergency_normal_roles_reject_disabled_only_adapter) ... ok\ntest_emergency_normal_roles_reject_missing_required_adapter (test_agent_exec_config.AgentExecConfigTests.test_emergency_normal_roles_reject_missing_required_adapter) ... ok\ntest_emergency_normal_roles_reject_multiple_enabled_same_adapter (test_agent_exec_config.AgentExecConfigTests.test_emergency_normal_roles_reject_multiple_enabled_same_adapter) ... ok\ntest_emergency_profile_is_excluded_from_normal_roles (test_agent_exec_config.AgentExecConfigTests.test_emergency_profile_is_excluded_from_normal_roles) ... ok\ntest_emergency_profile_requires_max_attempts_exactly_three (test_agent_exec_config.AgentExecConfigTests.test_emergency_profile_requires_max_attempts_exactly_three) ... ok\ntest_exposes_max_attempts_per_profile_and_emergency_profile (test_agent_exec_config.AgentExecConfigTests.test_exposes_max_attempts_per_profile_and_emergency_profile) ... ok\ntest_fresh_process_per_unit_must_be_true (test_agent_exec_config.AgentExecConfigTests.test_fresh_process_per_unit_must_be_true) ... ok\ntest_host_exempt_paths_match_executor_enforcement (test_agent_exec_config.AgentExecConfigTests.test_host_exempt_paths_match_executor_enforcement) ... ok\ntest_idle_timeout_defaults_within_total_and_rejects_bounds (test_agent_exec_config.AgentExecConfigTests.test_idle_timeout_defaults_within_total_and_rejects_bounds) ... ok\ntest_integration_command_rejects_shell_metacharacters (test_agent_exec_config.AgentExecConfigTests.test_integration_command_rejects_shell_metacharacters) ... ok\ntest_integration_exempt_paths_must_be_unique_nonempty_and_exact (test_agent_exec_config.AgentExecConfigTests.test_integration_exempt_paths_must_be_unique_nonempty_and_exact) ... ok\ntest_integration_rejects_unknown_and_missing_keys (test_agent_exec_config.AgentExecConfigTests.test_integration_rejects_unknown_and_missing_keys) ... ok\ntest_legacy_all_unavailable_remains_parseable (test_agent_exec_config.AgentExecConfigTests.test_legacy_all_unavailable_remains_parseable) ... ok\ntest_loads_single_agent_execution_block (test_agent_exec_config.AgentExecConfigTests.test_loads_single_agent_execution_block) ... ok\ntest_max_attempts_per_profile_never_exceeds_three (test_agent_exec_config.AgentExecConfigTests.test_max_attempts_per_profile_never_exceeds_three) ... ok\ntest_missing_integration_still_parses_as_none (test_agent_exec_config.AgentExecConfigTests.test_missing_integration_still_parses_as_none) ... ok\ntest_model_auto_is_preserved_as_none (test_agent_exec_config.AgentExecConfigTests.test_model_auto_is_preserved_as_none) ... ok\ntest_normal_roles_reject_forbidden_adapters_and_alternate_codex_profile (test_agent_exec_config.AgentExecConfigTests.test_normal_roles_reject_forbidden_adapters_and_alternate_codex_profile) ... ok\ntest_numeric_limits_are_positive_and_bounded (test_agent_exec_config.AgentExecConfigTests.test_numeric_limits_are_positive_and_bounded) ... ok\ntest_quoted_unicode_string_round_trips (test_agent_exec_config.AgentExecConfigTests.test_quoted_unicode_string_round_trips) ... ok\ntest_rejects_indentation_jump (test_agent_exec_config.AgentExecConfigTests.test_rejects_indentation_jump) ... ok\ntest_rejects_missing_or_duplicate_blocks (test_agent_exec_config.AgentExecConfigTests.test_rejects_missing_or_duplicate_blocks) ... ok\ntest_rejects_shell_command_and_secret_shaped_values (test_agent_exec_config.AgentExecConfigTests.test_rejects_shell_command_and_secret_shaped_values) ... ok\ntest_rejects_unknown_profile_reference (test_agent_exec_config.AgentExecConfigTests.test_rejects_unknown_profile_reference) ... ok\ntest_rejects_unknown_schema_and_unknown_keys (test_agent_exec_config.AgentExecConfigTests.test_rejects_unknown_schema_and_unknown_keys) ... ok\ntest_review_may_include_emergency_profile (test_agent_exec_config.AgentExecConfigTests.test_review_may_include_emergency_profile) ... ok\ntest_role_order_does_not_follow_profile_order (test_agent_exec_config.AgentExecConfigTests.test_role_order_does_not_follow_profile_order) ... ok\ntest_strict_emergency_mode_rejects_custom_normal_role_adapters (test_agent_exec_config.AgentExecConfigTests.test_strict_emergency_mode_rejects_custom_normal_role_adapters) ... ok\ntest_valid_integration_block_parses_and_is_exposed (test_agent_exec_config.AgentExecConfigTests.test_valid_integration_block_parses_and_is_exposed) ... ok\ntest_without_emergency_custom_normal_roles_are_rejected (test_agent_exec_config.AgentExecConfigTests.test_without_emergency_custom_normal_roles_are_rejected) ... ok\ntest_without_emergency_disabled_extras_are_ignored_and_order_kept (test_agent_exec_config.AgentExecConfigTests.test_without_emergency_disabled_extras_are_ignored_and_order_kept) ... ok\ntest_without_emergency_normal_roles_need_exact_enabled_adapter_set (test_agent_exec_config.AgentExecConfigTests.test_without_emergency_normal_roles_need_exact_enabled_adapter_set) ... ok\ntest_without_emergency_review_may_use_custom_adapter (test_agent_exec_config.AgentExecConfigTests.test_without_emergency_review_may_use_custom_adapter) ... ok\ntest_candidate_cannot_read_checkout_credentials (test_ci_credentials.CheckoutTests.test_candidate_cannot_read_checkout_credentials) ... ok\ntest_candidate_submodule_update_commands_are_rejected (test_ci_credentials.CheckoutTests.test_candidate_submodule_update_commands_are_rejected) ... ok\ntest_credential_destination_confined_to_injected_server (test_ci_credentials.CheckoutTests.test_credential_destination_confined_to_injected_server) ... ok\ntest_external_or_unlisted_urls_are_rejected_before_component_fetch (test_ci_credentials.CheckoutTests.test_external_or_unlisted_urls_are_rejected_before_component_fetch) ... ok\ntest_inherited_template_hook_does_not_execute_with_credentials (test_ci_credentials.CheckoutTests.test_inherited_template_hook_does_not_execute_with_credentials) ... ok\ntest_nested_external_url_is_rejected_before_authenticated_fetch (test_ci_credentials.CheckoutTests.test_nested_external_url_is_rejected_before_authenticated_fetch) ... ok\ntest_rdm_pin_fetch_is_three_shas_on_the_allowlist (test_ci_credentials.CheckoutTests.test_rdm_pin_fetch_is_three_shas_on_the_allowlist) ... ok\ntest_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials (test_ci_credentials.CheckoutTests.test_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials) ... ok\ntest_redirects_do_not_forward_credential_or_fetch_unlisted_target (test_ci_credentials.CheckoutTests.test_redirects_do_not_forward_credential_or_fetch_unlisted_target) ... ok\ntest_after_snapshot_failure_keeps_command_exit_and_output (test_evidence.EvidenceTests.test_after_snapshot_failure_keeps_command_exit_and_output) ... ok\ntest_all_persisted_and_displayed_text_is_sanitized (test_evidence.EvidenceTests.test_all_persisted_and_displayed_text_is_sanitized) ... ok\ntest_authorization_forms_are_redacted_in_capture_console_and_import (test_evidence.EvidenceTests.test_authorization_forms_are_redacted_in_capture_console_and_import) ... ok\ntest_authorization_forms_are_redacted_on_direct_card_capture (test_evidence.EvidenceTests.test_authorization_forms_are_redacted_on_direct_card_capture) ... ok\ntest_before_after_heads_do_not_relabel_changed_command (test_evidence.EvidenceTests.test_before_after_heads_do_not_relabel_changed_command) ... ok\ntest_capture_does_not_overwrite_an_existing_receipt (test_evidence.EvidenceTests.test_capture_does_not_overwrite_an_existing_receipt) ... ok\ntest_capture_without_card_and_import_without_rerun (test_evidence.EvidenceTests.test_capture_without_card_and_import_without_rerun) ... ok\ntest_child_failure_code_is_preserved (test_evidence.EvidenceTests.test_child_failure_code_is_preserved) ... ok\ntest_child_receipts_record_root_and_immediate_targets (test_evidence.EvidenceTests.test_child_receipts_record_root_and_immediate_targets) ... ok\ntest_command_line_token_arguments_are_redacted (test_evidence.EvidenceTests.test_command_line_token_arguments_are_redacted) ... ok\ntest_dirty_and_untracked_contents_have_object_digests (test_evidence.EvidenceTests.test_dirty_and_untracked_contents_have_object_digests) ... ok\ntest_failed_child_exit_survives_receipt_write_failure (test_evidence.EvidenceTests.test_failed_child_exit_survives_receipt_write_failure) ... ok\ntest_fixed_candidate_capture_preserves_checkout (test_evidence.EvidenceTests.test_fixed_candidate_capture_preserves_checkout) ... ok\ntest_full_output_is_preserved_not_only_tail (test_evidence.EvidenceTests.test_full_output_is_preserved_not_only_tail) ... ok\ntest_import_missing_card_fails_without_losing_receipt (test_evidence.EvidenceTests.test_import_missing_card_fails_without_losing_receipt) ... ok\ntest_import_rejects_unredacted_authorization_with_valid_checksums (test_evidence.EvidenceTests.test_import_rejects_unredacted_authorization_with_valid_checksums) ... ok\ntest_import_retry_is_idempotent (test_evidence.EvidenceTests.test_import_retry_is_idempotent) ... ok\ntest_invalid_field_types_and_forged_source_are_rejected (test_evidence.EvidenceTests.test_invalid_field_types_and_forged_source_are_rejected) ... ok\ntest_known_secret_environment_value_is_redacted_without_label (test_evidence.EvidenceTests.test_known_secret_environment_value_is_redacted_without_label) ... ok\ntest_linked_worktree_import_preserves_source_identity (test_evidence.EvidenceTests.test_linked_worktree_import_preserves_source_identity) ... ok\ntest_missing_card_does_not_execute (test_evidence.EvidenceTests.test_missing_card_does_not_execute) ... ok\ntest_missing_required_snapshot_fields_are_rejected (test_evidence.EvidenceTests.test_missing_required_snapshot_fields_are_rejected) ... ok\ntest_nested_cwd_records_untracked_files_from_repository_root (test_evidence.EvidenceTests.test_nested_cwd_records_untracked_files_from_repository_root) ... ok\ntest_output_digest_checked_even_if_receipt_digest_recomputed (test_evidence.EvidenceTests.test_output_digest_checked_even_if_receipt_digest_recomputed) ... ok\ntest_pipeline_failure_is_recorded_and_returned (test_evidence.EvidenceTests.test_pipeline_failure_is_recorded_and_returned) ... ok\ntest_quoted_credentials_with_spaces_are_fully_redacted (test_evidence.EvidenceTests.test_quoted_credentials_with_spaces_are_fully_redacted) ... ok\ntest_receipt_target_fields_must_come_in_pairs (test_evidence.EvidenceTests.test_receipt_target_fields_must_come_in_pairs) ... ok\ntest_receipt_write_failure_cannot_claim_success (test_evidence.EvidenceTests.test_receipt_write_failure_cannot_claim_success) ... ok\ntest_receipts_without_target_metadata_default_to_main (test_evidence.EvidenceTests.test_receipts_without_target_metadata_default_to_main) ... ok\ntest_recorder_environment_does_not_leak_into_nested_commands (test_evidence.EvidenceTests.test_recorder_environment_does_not_leak_into_nested_commands) ... ok\ntest_source_cannot_be_promoted_by_environment (test_evidence.EvidenceTests.test_source_cannot_be_promoted_by_environment) ... ok\ntest_tamper_is_rejected_before_card_append (test_evidence.EvidenceTests.test_tamper_is_rejected_before_card_append) ... ok\ntest_unrelated_repo_cannot_import (test_evidence.EvidenceTests.test_unrelated_repo_cannot_import) ... ok\ntest_validate_precheck_checks_result_and_current_base (test_evidence.EvidenceTests.test_validate_precheck_checks_result_and_current_base) ... ok\ntest_validate_precheck_rejects_successful_arbitrary_command (test_evidence.EvidenceTests.test_validate_precheck_rejects_successful_arbitrary_command) ... ok\ntest_validation_purpose_is_not_injected_into_measured_command (test_evidence.EvidenceTests.test_validation_purpose_is_not_injected_into_measured_command) ... ok\ntest_pin_is_three_fixed_shas (test_lifecycle_pin.RdmPinTests.test_pin_is_three_fixed_shas) ... ok\ntest_rejects_url_and_short_sha (test_lifecycle_pin.RdmPinTests.test_rejects_url_and_short_sha) ... ok\ntest_conflicted_task_does_not_block_an_independent_healthy_task (test_merge_queue_trial.QueueTrialTests.test_conflicted_task_does_not_block_an_independent_healthy_task) ... ok\ntest_external_target_advance_requires_a_new_candidate (test_merge_queue_trial.QueueTrialTests.test_external_target_advance_requires_a_new_candidate) ... ok\ntest_sequential_delivery_does_not_sync_waiting_branches (test_merge_queue_trial.QueueTrialTests.test_sequential_delivery_does_not_sync_waiting_branches) ... ok\ntest_addr_change_keeps_database_and_auth (test_svc.SvcDbRecoveryTests.test_addr_change_keeps_database_and_auth) ... ok\ntest_auth_preflight_aligns_with_effective_env_dsn (test_svc.SvcDbRecoveryTests.test_auth_preflight_aligns_with_effective_env_dsn) ... ok\ntest_batch_update_stops_second_service_despite_prior_pidcheck (test_svc.SvcDbRecoveryTests.test_batch_update_stops_second_service_despite_prior_pidcheck)\n批量 update 不得用上一服务的 SVC_PIDCHECK 误判下一服务进程。 ... ok\ntest_dbref_binding_survives_bare_restart_and_redeploy (test_svc.SvcDbRecoveryTests.test_dbref_binding_survives_bare_restart_and_redeploy) ... ok\ntest_explicit_unbind_blocks_residual_env_dsn (test_svc.SvcDbRecoveryTests.test_explicit_unbind_blocks_residual_env_dsn) ... ok\ntest_external_dsn_and_conffile_recover_on_bare_start (test_svc.SvcDbRecoveryTests.test_external_dsn_and_conffile_recover_on_bare_start) ... ok\ntest_legacy_exec_dsn_survives_consecutive_restarts (test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts) ... FAIL\ntest_mock_conflict_and_legacy_binary_refuse (test_svc.SvcDbRecoveryTests.test_mock_conflict_and_legacy_binary_refuse) ... ok\ntest_rdm_companion_missing_web_fails_deploy (test_svc.SvcDbRecoveryTests.test_rdm_companion_missing_web_fails_deploy) ... ok\ntest_rdm_source_commits_and_update_track (test_svc.SvcDbRecoveryTests.test_rdm_source_commits_and_update_track) ... [main 0cddcff] rdm v2\n 1 file changed, 1 insertion(+)\n create mode 100644 marker\nTo /tmp/svc-db-regress-dalkrzqx/rdmremote.git\n 23fedcf..0cddcff main -> main\nok\ntest_rdm_source_deploy_end_to_end (test_svc.SvcDbRecoveryTests.test_rdm_source_deploy_end_to_end) ... ok\ntest_refusals_keep_registration_without_sqlite_fallback (test_svc.SvcDbRecoveryTests.test_refusals_keep_registration_without_sqlite_fallback) ... ok\ntest_restart_refusal_happens_before_stopping_running_service (test_svc.SvcDbRecoveryTests.test_restart_refusal_happens_before_stopping_running_service) ... ok\ntest_seed_owner_override_skips_account_lookup (test_svc.SvcDbRecoveryTests.test_seed_owner_override_skips_account_lookup) ... ok\ntest_seed_puts_with_temporary_bearer_key_when_auth_on (test_svc.SvcDbRecoveryTests.test_seed_puts_with_temporary_bearer_key_when_auth_on) ... ok\ntest_seed_puts_without_credentials_when_auth_off (test_svc.SvcDbRecoveryTests.test_seed_puts_without_credentials_when_auth_off) ... ok\ntest_seed_replaces_old_system_secret (test_svc.SvcDbRecoveryTests.test_seed_replaces_old_system_secret) ... ok\ntest_seed_warns_when_old_secret_stays_active (test_svc.SvcDbRecoveryTests.test_seed_warns_when_old_secret_stays_active) ... ok\ntest_seed_writes_fallbacks_and_vision (test_svc.SvcDbRecoveryTests.test_seed_writes_fallbacks_and_vision) ... ok\ntest_sequential_restarts_no_cross_dsn_and_no_secret_leak (test_svc.SvcDbRecoveryTests.test_sequential_restarts_no_cross_dsn_and_no_secret_leak) ... ok\ntest_source_switch_requires_flag (test_svc.SvcDbRecoveryTests.test_source_switch_requires_flag) ... ok\ntest_static_fresh_deploy_registers_pidcheck_and_starts (test_svc.SvcDbRecoveryTests.test_static_fresh_deploy_registers_pidcheck_and_starts)\n全新 static --dir:登记须含 pidcheck;首启探活不得把 http.server 判死。 ... ok\ntest_update_preserves_binding (test_svc.SvcDbRecoveryTests.test_update_preserves_binding) ... ok\ntest_backup_custom_out_not_pruned (test_svc_backup.SvcAgentBackupTests.test_backup_custom_out_not_pruned) ... ok\ntest_backup_event_recorded (test_svc_backup.SvcAgentBackupTests.test_backup_event_recorded) ... ok\ntest_backup_live_writer_consistent_and_outside_runtime (test_svc_backup.SvcAgentBackupTests.test_backup_live_writer_consistent_and_outside_runtime)\n活跃 WAL 写入者:快照可读、行在、integrity ok;-wal/-shm 不入快照。 ... ok\n/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/suite.py:107: ResourceWarning: unclosed file <_io.TextIOWrapper name=4 encoding='UTF-8'>\n for index, test in enumerate(self):\nResourceWarning: Enable tracemalloc to get the object allocation traceback\ntest_backup_manifest_sha_matches (test_svc_backup.SvcAgentBackupTests.test_backup_manifest_sha_matches) ... ok\ntest_backup_non_sqlite_db_kept_raw_without_leftovers (test_svc_backup.SvcAgentBackupTests.test_backup_non_sqlite_db_kept_raw_without_leftovers) ... ok\ntest_backup_rejects_postgres_with_db_hint (test_svc_backup.SvcAgentBackupTests.test_backup_rejects_postgres_with_db_hint) ... ok\ntest_backup_requires_registration (test_svc_backup.SvcAgentBackupTests.test_backup_requires_registration) ... ok\ntest_backup_target_exists_refused (test_svc_backup.SvcAgentBackupTests.test_backup_target_exists_refused) ... ok\ntest_backup_without_sqlite3_refuses (test_svc_backup.SvcAgentBackupTests.test_backup_without_sqlite3_refuses)\nPATH 无 sqlite3 → 拒绝(不回退裸拷贝)。重建与真实 PATH 等价的工具目录、 ... ok\ntest_retention_and_listing (test_svc_backup.SvcAgentBackupTests.test_retention_and_listing) ... ok\ntest_rm_purge_removes_snapshots (test_svc_backup.SvcAgentBackupTests.test_rm_purge_removes_snapshots) ... ok\ntest_forward_only_requires_confirm_and_backup (test_svc_deploy_txn.DeployTxnTests.test_forward_only_requires_confirm_and_backup) ... ok\ntest_schema_incompatible_refuses_before_stop (test_svc_deploy_txn.DeployTxnTests.test_schema_incompatible_refuses_before_stop) ... ok\ntest_replace_failure_keeps_original (test_svc_identity.AtomicWriteTests.test_replace_failure_keeps_original) ... :491: ResourceWarning: unclosed database in \nResourceWarning: Enable tracemalloc to get the object allocation traceback\nok\ntest_I3_start_ensures_sqlite_identity (test_svc_identity.IdentityTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_identity.IdentityTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_identity.IdentityTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_identity.IdentityTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_identity.IdentityTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_identity.IdentityTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_identity.IdentityTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_identity.IdentityTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_identity.IdentityTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_identity.IdentityTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_identity.IdentityTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_identity.IdentityTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_identity.IdentityTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_identity.IdentityTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_identity.IdentityTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_Z_real_pg_not_run (test_svc_identity.IdentityTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_identity.IdentityTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_identity.IdentityTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_identity.IdentityTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_identity.IdentityTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_identity.IdentityTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_identity.IdentityTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_identity.IdentityTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_identity.IdentityTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_identity.IdentityTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_identity.IdentityTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_identity.IdentityTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_identity.IdentityTests.test_watchdog_print_plan) ... ok\ntest_caller_identity_env_does_not_reach_serve (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_caller_identity_env_does_not_reach_serve) ... ok\ntest_recover_fails_when_port_stolen (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_two_bare_restarts_keep_identity (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_two_bare_restarts_keep_identity) ... ok\ntest_watchdog_print_plan (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_watchdog_print_plan) ... ok\ntest_deploy_reuses_selection_and_gates_clearing (test_svc_plugins.PluginComposeTests.test_deploy_reuses_selection_and_gates_clearing) ... ok\ntest_dry_run_prints_plugin_sha_without_listening (test_svc_plugins.PluginComposeTests.test_dry_run_prints_plugin_sha_without_listening) ... ok\ntest_help_plugins_and_rejects_with_off_deploy (test_svc_plugins.PluginComposeTests.test_help_plugins_and_rejects_with_off_deploy) ... ok\ntest_prompt_selects_numbered_plugin_on_first_deploy (test_svc_plugins.PluginComposeTests.test_prompt_selects_numbered_plugin_on_first_deploy) ... ok\ntest_unknown_plugin_and_two_web_and_rdm_are_rejected (test_svc_plugins.PluginComposeTests.test_unknown_plugin_and_two_web_and_rdm_are_rejected) ... ok\ntest_addr_defaults_to_default_addr (test_svc_precheck.AgentListenRejectedPrecheck.test_addr_defaults_to_default_addr) ... ok\ntest_incident_combo_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_incident_combo_not_rejected) ... ok\ntest_insecure_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_insecure_not_rejected) ... ok\ntest_loopback_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_loopback_not_rejected) ... ok\ntest_nonloop_auth_off_with_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_auth_off_with_dsn_rejected) ... ok\ntest_nonloop_no_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_no_dsn_rejected) ... ok\ntest_auth_off_beats_dsn (test_svc_precheck.DbAuthEnabledMatrix.test_auth_off_beats_dsn) ... ok\ntest_auth_on_explicit (test_svc_precheck.DbAuthEnabledMatrix.test_auth_on_explicit) ... ok\ntest_auto_with_effective_dsn_is_authed (test_svc_precheck.DbAuthEnabledMatrix.test_auto_with_effective_dsn_is_authed) ... ok\ntest_auto_without_dsn_is_denied (test_svc_precheck.DbAuthEnabledMatrix.test_auto_without_dsn_is_denied) ... ok\ntest_no_auth_no_dsn_denied (test_svc_precheck.DbAuthEnabledMatrix.test_no_auth_no_dsn_denied) ... ok\ntest_broken_dbref_refuses (test_svc_precheck.ResolveDbConfigFixtures.test_broken_dbref_refuses) ... ok\ntest_legacy_exec_dsn_migrates_to_recoverable_keys (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_migrates_to_recoverable_keys) ... ok\ntest_legacy_exec_dsn_without_instance_goes_to_dsn_key (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_without_instance_goes_to_dsn_key) ... ok\ntest_migration_is_idempotent (test_svc_precheck.ResolveDbConfigFixtures.test_migration_is_idempotent) ... ok\ntest_no_dsn_no_dbref_is_sqlite (test_svc_precheck.ResolveDbConfigFixtures.test_no_dsn_no_dbref_is_sqlite) ... ok\ntest_post_g17_exec_restores_dsn_from_dbref (test_svc_precheck.ResolveDbConfigFixtures.test_post_g17_exec_restores_dsn_from_dbref) ... ok\ntest_env_config_resets_identity_env (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_identity_env) ... ok\ntest_env_config_resets_pidcheck_runtime_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_pidcheck_runtime_state) ... ok\ntest_env_config_resets_resolver_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_resolver_state) ... ok\ntest_help_topic_lists_rdm_admin (test_svc_rdm_admin.RdmAdminTests.test_help_topic_lists_rdm_admin) ... ok\ntest_recover_fails_when_port_stolen (test_svc_rdm_admin.RdmAdminTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_rdm_admin.RdmAdminTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_rdm_admin.RdmAdminTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_rdm_admin.RdmAdminTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_rdm_admin.RdmAdminTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_rdm_admin.RdmAdminTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_rdm_admin.RdmAdminTests.test_recover_skips_when_lock_held) ... ok\ntest_refuses_when_base_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_base_db_missing) ... ok\ntest_refuses_when_rdm_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_rdm_db_missing) ... ok\ntest_show_empty_ledger_hint (test_svc_rdm_admin.RdmAdminTests.test_show_empty_ledger_hint) ... ok\ntest_show_known_owner_no_warning (test_svc_rdm_admin.RdmAdminTests.test_show_known_owner_no_warning) ... ok\ntest_show_prints_ledger_and_flags_unknown_owner (test_svc_rdm_admin.RdmAdminTests.test_show_prints_ledger_and_flags_unknown_owner) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_rdm_admin.RdmAdminTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_rdm_admin.RdmAdminTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_rdm_admin.RdmAdminTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_status_lists_rdm_admin_row_and_warning (test_svc_rdm_admin.RdmAdminTests.test_status_lists_rdm_admin_row_and_warning) ... ok\ntest_status_silent_without_rdm_db (test_svc_rdm_admin.RdmAdminTests.test_status_silent_without_rdm_db) ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_rdm_admin.RdmAdminTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_transfer_idempotent_when_already_owner (test_svc_rdm_admin.RdmAdminTests.test_transfer_idempotent_when_already_owner) ... ok\ntest_transfer_rejects_empty_ledger (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_empty_ledger) ... ok\ntest_transfer_rejects_owner_missing_from_base_users (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_owner_missing_from_base_users) ... ok\ntest_transfer_rewrites_single_row_with_provenance (test_svc_rdm_admin.RdmAdminTests.test_transfer_rewrites_single_row_with_provenance) ... ok\ntest_unknown_subcommand_usage_exit_2 (test_svc_rdm_admin.RdmAdminTests.test_unknown_subcommand_usage_exit_2) ... ok\ntest_watchdog_print_plan (test_svc_rdm_admin.RdmAdminTests.test_watchdog_print_plan) ... ok\ntest_U3_real_agent_identity_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_agent_identity_lifecycle_sqlite)\n真实组合二进制:领养 ensure → verify → 两次裸重启身份/锚点稳定; ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_pg_identity_env_delivery (test_svc_realcombo.RealComboTests.test_U3_real_pg_identity_env_delivery)\n真实 PostgreSQL:AGENT_SYSTEM_DSN 环境交付 ensure/verify(凭据不进 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_binary_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_rdm_binary_lifecycle_sqlite)\n真实 RDM 组合二进制:identity 接线(Backend 公共 CLI)→ serve 门禁 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_full_deploy_track (test_svc_realcombo.RealComboTests.test_U3_real_rdm_full_deploy_track)\n全轨:materialize(真实 make build)→ 候选身份门禁 → release 切换 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_realcombo.RealComboTests.test_recover_fails_when_port_stolen) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_ignores_never_started_service (test_svc_realcombo.RealComboTests.test_recover_ignores_never_started_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_noop_while_running (test_svc_realcombo.RealComboTests.test_recover_noop_while_running) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_reserved_name_rejected (test_svc_realcombo.RealComboTests.test_recover_reserved_name_rejected) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_respects_explicit_stop (test_svc_realcombo.RealComboTests.test_recover_respects_explicit_stop) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_restarts_sigkilled_service (test_svc_realcombo.RealComboTests.test_recover_restarts_sigkilled_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_skips_when_lock_held (test_svc_realcombo.RealComboTests.test_recover_skips_when_lock_held) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_realcombo.RealComboTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_records_autostart_and_stop_clears (test_svc_realcombo.RealComboTests.test_start_records_autostart_and_stop_clears) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_rejects_foreign_port_occupant (test_svc_realcombo.RealComboTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_stop_on_dead_process_clears_autostart (test_svc_realcombo.RealComboTests.test_stop_on_dead_process_clears_autostart) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_watchdog_print_plan (test_svc_realcombo.RealComboTests.test_watchdog_print_plan) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_recover.SvcAutoRecoverTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_recover.SvcAutoRecoverTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_recover.SvcAutoRecoverTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_recover.SvcAutoRecoverTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_recover.SvcAutoRecoverTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_recover.SvcAutoRecoverTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_recover.SvcAutoRecoverTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_recover.SvcAutoRecoverTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_recover.SvcAutoRecoverTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_recover.SvcAutoRecoverTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_recover.SvcAutoRecoverTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_recover.SvcAutoRecoverTests.test_watchdog_print_plan) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_u2.U2ReleaseTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_u2.U2ReleaseTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_u2.U2ReleaseTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_u2.U2ReleaseTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_u2.U2ReleaseTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_u2.U2ReleaseTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_u2.U2ReleaseTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_u2.U2ReleaseTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_u2.U2ReleaseTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_u2.U2ReleaseTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_u2.U2ReleaseTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_u2.U2ReleaseTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_u2.U2ReleaseTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_U2_build_failure_keeps_old_running (test_svc_u2.U2ReleaseTests.test_U2_build_failure_keeps_old_running) ... ok\ntest_U2_fault_after_switch_rolls_back_on_next_start (test_svc_u2.U2ReleaseTests.test_U2_fault_after_switch_rolls_back_on_next_start) ... ok\ntest_U2_health_timeout_rolls_back (test_svc_u2.U2ReleaseTests.test_U2_health_timeout_rolls_back) ... ok\ntest_U2_journal_interrupt_resolved_on_start (test_svc_u2.U2ReleaseTests.test_U2_journal_interrupt_resolved_on_start) ... ok\ntest_U2_layout_switch_and_rollback_on_start_failure (test_svc_u2.U2ReleaseTests.test_U2_layout_switch_and_rollback_on_start_failure) ... ok\ntest_U2_legacy_layout_bare_lifecycle_still_works (test_svc_u2.U2ReleaseTests.test_U2_legacy_layout_bare_lifecycle_still_works) ... ok\ntest_U2_schema_advance_blocks_rollback (test_svc_u2.U2ReleaseTests.test_U2_schema_advance_blocks_rollback) ... ok\ntest_Z_real_pg_not_run (test_svc_u2.U2ReleaseTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_u2.U2ReleaseTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_u2.U2ReleaseTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_u2.U2ReleaseTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_u2.U2ReleaseTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_u2.U2ReleaseTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_u2.U2ReleaseTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_u2.U2ReleaseTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_u2.U2ReleaseTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_u2.U2ReleaseTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_u2.U2ReleaseTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_u2.U2ReleaseTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_u2.U2ReleaseTests.test_watchdog_print_plan) ... ok\ntest_T1_user_list_binds_manifest_data (test_svc_user_binding.UserBindingTests.test_T1_user_list_binds_manifest_data) ... ok\ntest_T2_reject_override_data_flag (test_svc_user_binding.UserBindingTests.test_T2_reject_override_data_flag) ... ok\ntest_T2b_reject_literal_default_data (test_svc_user_binding.UserBindingTests.test_T2b_reject_literal_default_data) ... ok\ntest_T3_missing_data_root_rejected (test_svc_user_binding.UserBindingTests.test_T3_missing_data_root_rejected) ... ok\ntest_T4_no_flock_rejects_user_and_deploy (test_svc_user_binding.UserBindingTests.test_T4_no_flock_rejects_user_and_deploy) ... ok\ntest_T5_identity_regression_smoke (test_svc_user_binding.UserBindingTests.test_T5_identity_regression_smoke) ... ok\ntest_recover_fails_when_port_stolen (test_svc_user_binding.UserBindingTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_user_binding.UserBindingTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_user_binding.UserBindingTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_user_binding.UserBindingTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_user_binding.UserBindingTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_user_binding.UserBindingTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_user_binding.UserBindingTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_user_binding.UserBindingTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_user_binding.UserBindingTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_user_binding.UserBindingTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_user_binding.UserBindingTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_user_binding.UserBindingTests.test_watchdog_print_plan) ... ok\ntest_full_help_mentions_user_binding (test_svc_user_help.UserHelpTests.test_full_help_mentions_user_binding) ... ok\ntest_help_accounts_lists_six_commands (test_svc_user_help.UserHelpTests.test_help_accounts_lists_six_commands) ... ok\ntest_topics_and_short_and_lifecycle_mention_accounts (test_svc_user_help.UserHelpTests.test_topics_and_short_and_lifecycle_mention_accounts) ... ok\ntest_ide_lock_in_git_dir_does_not_block_finish (test_task.FinishGuardFixTests.test_ide_lock_in_git_dir_does_not_block_finish) ... ok\ntest_local_default_branch_at_origin_main_does_not_block (test_task.FinishGuardFixTests.test_local_default_branch_at_origin_main_does_not_block)\n克隆默认分支停在 origin/main 顶端(pin 为 feature 顶端时不在其历史内) ... ok\ntest_local_unique_commit_still_preserved (test_task.FinishGuardFixTests.test_local_unique_commit_still_preserved) ... ok\ntest_real_git_lock_still_blocks_finish (test_task.FinishGuardFixTests.test_real_git_lock_still_blocks_finish) ... ok\ntest_remote_tracking_refs_do_not_block_finish (test_task.FinishGuardFixTests.test_remote_tracking_refs_do_not_block_finish) ... ok\ntest_close_archives_child_merged_into_initiative_and_names_it (test_task.TaskLifecycleTests.test_close_archives_child_merged_into_initiative_and_names_it) ... ok\ntest_close_backfills_card_landed_as_squash (test_task.TaskLifecycleTests.test_close_backfills_card_landed_as_squash) ... /home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/case.py:704: ResourceWarning: unclosed \n function, args, kwargs = self._cleanups.pop()\nResourceWarning: Enable tracemalloc to get the object allocation traceback\nok\ntest_close_child_still_closable_after_initiative_merged_and_deleted (test_task.TaskLifecycleTests.test_close_child_still_closable_after_initiative_merged_and_deleted) ... ok\ntest_close_ignores_squash_claim_when_sha_not_on_main (test_task.TaskLifecycleTests.test_close_ignores_squash_claim_when_sha_not_on_main) ... /home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/case.py:704: ResourceWarning: unclosed \n function, args, kwargs = self._cleanups.pop()\nResourceWarning: Enable tracemalloc to get the object allocation traceback\nok\ntest_delivery_child_fails_when_remote_parent_is_deleted_after_triage (test_task.TaskLifecycleTests.test_delivery_child_fails_when_remote_parent_is_deleted_after_triage) ... ok\ntest_delivery_child_ignores_ahead_local_parent (test_task.TaskLifecycleTests.test_delivery_child_ignores_ahead_local_parent) ... ok\ntest_delivery_child_ignores_stale_local_parent (test_task.TaskLifecycleTests.test_delivery_child_ignores_stale_local_parent) ... ok\ntest_finish_abandon_retains_local_remote_tips_and_reason (test_task.TaskLifecycleTests.test_finish_abandon_retains_local_remote_tips_and_reason) ... ok\ntest_finish_abandon_without_reason_preserves_checkout_and_refs (test_task.TaskLifecycleTests.test_finish_abandon_without_reason_preserves_checkout_and_refs) ... ok\ntest_finish_clean_worktree_has_accurate_remote_result (test_task.TaskLifecycleTests.test_finish_clean_worktree_has_accurate_remote_result) ... ok\ntest_finish_deletes_only_merged_remote_branch (test_task.TaskLifecycleTests.test_finish_deletes_only_merged_remote_branch) ... ok\ntest_finish_preserves_component_commits_off_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_component_commits_off_the_pinned_head) ... ok\ntest_finish_preserves_component_untracked_file (test_task.TaskLifecycleTests.test_finish_preserves_component_untracked_file) ... ok\ntest_finish_preserves_linked_component_worktrees_at_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_linked_component_worktrees_at_the_pinned_head) ... ok\ntest_finish_preserves_linked_nested_component_worktree (test_task.TaskLifecycleTests.test_finish_preserves_linked_nested_component_worktree) ... ok\ntest_finish_preserves_locked_worktree (test_task.TaskLifecycleTests.test_finish_preserves_locked_worktree) ... ok\ntest_finish_preserves_main_and_active_index_lock (test_task.TaskLifecycleTests.test_finish_preserves_main_and_active_index_lock) ... ok\ntest_finish_preserves_modified_untracked_and_ignored_files (test_task.TaskLifecycleTests.test_finish_preserves_modified_untracked_and_ignored_files) ... ok\ntest_finish_preserves_remote_unmerged_tip (test_task.TaskLifecycleTests.test_finish_preserves_remote_unmerged_tip) ... ok\ntest_finish_recycles_child_merged_into_parent_initiative (test_task.TaskLifecycleTests.test_finish_recycles_child_merged_into_parent_initiative) ... ok\ntest_finish_recycles_clean_submodule_without_shared_config_changes (test_task.TaskLifecycleTests.test_finish_recycles_clean_submodule_without_shared_config_changes) ... ok\ntest_finish_rejects_subdirectory_without_deleting_it (test_task.TaskLifecycleTests.test_finish_rejects_subdirectory_without_deleting_it) ... ok\ntest_finish_remote_deletion_lease_preserves_concurrent_update (test_task.TaskLifecycleTests.test_finish_remote_deletion_lease_preserves_concurrent_update) ... ok\ntest_finish_requires_writer_exit_confirmation (test_task.TaskLifecycleTests.test_finish_requires_writer_exit_confirmation) ... ok\ntest_legacy_card_defaults_to_standalone_main (test_task.TaskLifecycleTests.test_legacy_card_defaults_to_standalone_main) ... ok\ntest_local_mode_child_uses_local_parent_and_marks_local_source (test_task.TaskLifecycleTests.test_local_mode_child_uses_local_parent_and_marks_local_source) ... ok\ntest_long_merge_history_keeps_merged_card_visible_and_closable (test_task.TaskLifecycleTests.test_long_merge_history_keeps_merged_card_visible_and_closable) ... ok\ntest_multiple_remote_candidates_stop_at_decision_required (test_task.TaskLifecycleTests.test_multiple_remote_candidates_stop_at_decision_required) ... ok\ntest_post_merge_is_silent_outside_main_checkout (test_task.TaskLifecycleTests.test_post_merge_is_silent_outside_main_checkout) ... ok\ntest_post_merge_main_merge_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_merge_only_reminds_owner) ... ok\ntest_post_merge_main_pull_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_pull_only_reminds_owner) ... ok\ntest_precheck_facts_row_with_escaped_pipe_stays_fresh (test_task.TaskLifecycleTests.test_precheck_facts_row_with_escaped_pipe_stays_fresh) ... ok\ntest_precheck_feature_behind_requires_sync (test_task.TaskLifecycleTests.test_precheck_feature_behind_requires_sync) ... ok\ntest_precheck_rejects_unreachable_authority (test_task.TaskLifecycleTests.test_precheck_rejects_unreachable_authority) ... ok\ntest_precheck_reports_active_initiatives (test_task.TaskLifecycleTests.test_precheck_reports_active_initiatives) ... ok\ntest_precheck_routes_existing_project_delivery_policy (test_task.TaskLifecycleTests.test_precheck_routes_existing_project_delivery_policy) ... ok\ntest_remote_initiative_needs_explicit_decision_and_never_auto_joins (test_task.TaskLifecycleTests.test_remote_initiative_needs_explicit_decision_and_never_auto_joins) ... ok\ntest_resume_child_rejects_rewound_immediate_target (test_task.TaskLifecycleTests.test_resume_child_rejects_rewound_immediate_target) ... ok\ntest_resume_child_reports_parent_as_immediate_target (test_task.TaskLifecycleTests.test_resume_child_reports_parent_as_immediate_target) ... ok\ntest_start_child_records_parent_head_and_immediate_target (test_task.TaskLifecycleTests.test_start_child_records_parent_head_and_immediate_target) ... ok\ntest_start_child_refuses_non_join_receipt_without_side_effects (test_task.TaskLifecycleTests.test_start_child_refuses_non_join_receipt_without_side_effects) ... ok\ntest_start_child_rejects_missing_initiative_or_wrong_slug (test_task.TaskLifecycleTests.test_start_child_rejects_missing_initiative_or_wrong_slug) ... ok\ntest_start_imports_precheck_and_creates_four_part_commit (test_task.TaskLifecycleTests.test_start_imports_precheck_and_creates_four_part_commit) ... ok\ntest_start_initiative_records_branch_metadata (test_task.TaskLifecycleTests.test_start_initiative_records_branch_metadata) ... ok\ntest_start_offline_does_not_create_worktree (test_task.TaskLifecycleTests.test_start_offline_does_not_create_worktree) ... ok\ntest_start_preserves_merged_local_and_remote_branch_names (test_task.TaskLifecycleTests.test_start_preserves_merged_local_and_remote_branch_names) ... ok\ntest_start_refuses_receipt_when_remote_initiative_moved_after_triage (test_task.TaskLifecycleTests.test_start_refuses_receipt_when_remote_initiative_moved_after_triage) ... ok\ntest_start_rejects_receipt_when_authoritative_base_changed (test_task.TaskLifecycleTests.test_start_rejects_receipt_when_authoritative_base_changed) ... ok\ntest_start_requires_precheck_receipt_before_creating_worktree (test_task.TaskLifecycleTests.test_start_requires_precheck_receipt_before_creating_worktree) ... ok\ntest_start_stacked_branch_records_parent_and_main_baseline (test_task.TaskLifecycleTests.test_start_stacked_branch_records_parent_and_main_baseline) ... ok\ntest_start_standalone_records_default_metadata (test_task.TaskLifecycleTests.test_start_standalone_records_default_metadata) ... ok\ntest_start_without_triage_receipt_creates_no_worktree_or_branch (test_task.TaskLifecycleTests.test_start_without_triage_receipt_creates_no_worktree_or_branch) ... ok\ntest_sync_child_merges_new_parent_initiative_commits (test_task.TaskLifecycleTests.test_sync_child_merges_new_parent_initiative_commits) ... ok\ntest_sync_commit_failure_never_reports_synced (test_task.TaskLifecycleTests.test_sync_commit_failure_never_reports_synced) ... ok\ntest_sync_conflict_is_not_reported_as_synced (test_task.TaskLifecycleTests.test_sync_conflict_is_not_reported_as_synced) ... ok\ntest_sync_does_not_execute_json_receipt_command (test_task.TaskLifecycleTests.test_sync_does_not_execute_json_receipt_command) ... ok\ntest_sync_keeps_json_evidence_fresh_after_metadata_only_changes (test_task.TaskLifecycleTests.test_sync_keeps_json_evidence_fresh_after_metadata_only_changes) ... ok\ntest_sync_keeps_unchanged_component_branch (test_task.TaskLifecycleTests.test_sync_keeps_unchanged_component_branch) ... ok\ntest_sync_materializes_nested_detached_components (test_task.TaskLifecycleTests.test_sync_materializes_nested_detached_components) ... ok\ntest_sync_materializes_updated_component (test_task.TaskLifecycleTests.test_sync_materializes_updated_component) ... ok\ntest_sync_new_base_reports_actual_final_head (test_task.TaskLifecycleTests.test_sync_new_base_reports_actual_final_head) ... ok\ntest_sync_preserves_component_feature_branch (test_task.TaskLifecycleTests.test_sync_preserves_component_feature_branch) ... ok\ntest_sync_preserves_dirty_child (test_task.TaskLifecycleTests.test_sync_preserves_dirty_child) ... ok\ntest_sync_preserves_dirty_parent_and_staged_changes (test_task.TaskLifecycleTests.test_sync_preserves_dirty_parent_and_staged_changes) ... ok\ntest_sync_preserves_nested_feature_branch_when_parent_pin_changes (test_task.TaskLifecycleTests.test_sync_preserves_nested_feature_branch_when_parent_pin_changes) ... ok\ntest_sync_reads_legacy_commands_with_escaped_pipes (test_task.TaskLifecycleTests.test_sync_reads_legacy_commands_with_escaped_pipes) ... ok\ntest_sync_rejects_unreachable_target_without_changing_head (test_task.TaskLifecycleTests.test_sync_rejects_unreachable_target_without_changing_head) ... ok\ntest_sync_same_base_preserves_head_and_card (test_task.TaskLifecycleTests.test_sync_same_base_preserves_head_and_card) ... ok\ntest_sync_still_warns_for_stale_legacy_table_evidence (test_task.TaskLifecycleTests.test_sync_still_warns_for_stale_legacy_table_evidence) ... ok\ntest_sync_warns_for_malformed_json_evidence (test_task.TaskLifecycleTests.test_sync_warns_for_malformed_json_evidence) ... ok\ntest_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum (test_task.TaskLifecycleTests.test_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum) ... ok\ntest_sync_warns_for_unresolved_json_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_json_evidence_head) ... ok\ntest_sync_warns_for_unresolved_legacy_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_legacy_evidence_head) ... ok\ntest_sync_warns_when_json_after_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_after_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_before_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_before_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_evidence_predates_noncard_changes (test_task.TaskLifecycleTests.test_sync_warns_when_json_evidence_predates_noncard_changes) ... ok\ntest_triage_ignores_local_cards_and_records_new_without_remote_initiative (test_task.TaskLifecycleTests.test_triage_ignores_local_cards_and_records_new_without_remote_initiative) ... ok\ntest_triage_without_receipt_is_refused (test_task.TaskLifecycleTests.test_triage_without_receipt_is_refused) ... ok\ntest_verify_rejects_recursive_drift_even_when_root_has_local_edits (test_task.TaskLifecycleTests.test_verify_rejects_recursive_drift_even_when_root_has_local_edits) ... ok\ntest_verify_rejects_uninitialized_component (test_task.TaskLifecycleTests.test_verify_rejects_uninitialized_component) ... ok\ntest_child_is_rejected_when_parent_initiative_pr_is_closed (test_task_pr_check.PrCheckTests.test_child_is_rejected_when_parent_initiative_pr_is_closed) ... ok\ntest_child_pr_into_initiative_passes (test_task_pr_check.PrCheckTests.test_child_pr_into_initiative_passes) ... ok\ntest_child_pr_into_main_is_rejected (test_task_pr_check.PrCheckTests.test_child_pr_into_main_is_rejected) ... ok\ntest_ci_mode_gates_pull_request_base_against_head_card (test_task_pr_check.PrCheckTests.test_ci_mode_gates_pull_request_base_against_head_card) ... ok\ntest_closed_and_merged_prs_are_rejected (test_task_pr_check.PrCheckTests.test_closed_and_merged_prs_are_rejected) ... ok\ntest_final_rejects_initiative_still_accepting_requirements (test_task_pr_check.PrCheckTests.test_final_rejects_initiative_still_accepting_requirements) ... ok\ntest_final_requires_required_children_merged_or_deferred (test_task_pr_check.PrCheckTests.test_final_requires_required_children_merged_or_deferred) ... ok\ntest_pr_lookup_requires_one_open_pr_or_explicit_number (test_task_pr_check.PrCheckTests.test_pr_lookup_requires_one_open_pr_or_explicit_number) ... ok\ntest_remote_branch_head_differing_from_local_is_rejected (test_task_pr_check.PrCheckTests.test_remote_branch_head_differing_from_local_is_rejected) ... ok\ntest_stale_pr_head_is_rejected (test_task_pr_check.PrCheckTests.test_stale_pr_head_is_rejected) ... ok\ntest_standalone_and_initiative_base_gate (test_task_pr_check.PrCheckTests.test_standalone_and_initiative_base_gate) ... ok\ntest_token_is_first_access_token_line_of_secrets_file (test_task_pr_check.PrCheckTests.test_token_is_first_access_token_line_of_secrets_file) ... ok\ntest_unreachable_or_unauthorized_api_fails_closed_with_exit_6 (test_task_pr_check.PrCheckTests.test_unreachable_or_unauthorized_api_fails_closed_with_exit_6) ... ok\ntest_local_precheck_allows_known_lag_without_changing_head (test_task_recovery.TaskRecoveryTests.test_local_precheck_allows_known_lag_without_changing_head) ... ok\ntest_local_precheck_never_advertises_delivery_even_when_current (test_task_recovery.TaskRecoveryTests.test_local_precheck_never_advertises_delivery_even_when_current) ... ok\ntest_local_precheck_rejects_dirty_state_and_unknown_remote (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_dirty_state_and_unknown_remote) ... ok\ntest_local_precheck_rejects_foreign_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_foreign_registration) ... ok\ntest_local_precheck_rejects_invalid_baseline (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_invalid_baseline) ... ok\ntest_local_precheck_rejects_main_and_missing_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_main_and_missing_registration) ... ok\ntest_local_precheck_rejects_wrong_branch_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_wrong_branch_registration) ... ok\ntest_local_receipt_cannot_start_a_task_or_resume_for_delivery (test_task_recovery.TaskRecoveryTests.test_local_receipt_cannot_start_a_task_or_resume_for_delivery) ... ok\ntest_local_resume_imports_original_receipt_without_sync (test_task_recovery.TaskRecoveryTests.test_local_resume_imports_original_receipt_without_sync) ... ok\ntest_local_resume_rejects_divergent_target_before_import (test_task_recovery.TaskRecoveryTests.test_local_resume_rejects_divergent_target_before_import) ... ok\ntest_local_resume_rejects_target_rewind_before_import (test_task_recovery.TaskRecoveryTests.test_local_resume_rejects_target_rewind_before_import) ... ok\ntest_make_resume_exports_the_selected_mode_and_receipt (test_task_recovery.TaskRecoveryTests.test_make_resume_exports_the_selected_mode_and_receipt) ... ok\ntest_resume_rejects_another_worktree_with_same_head (test_task_recovery.TaskRecoveryTests.test_resume_rejects_another_worktree_with_same_head) ... ok\ntest_resume_rejects_changed_source_head (test_task_recovery.TaskRecoveryTests.test_resume_rejects_changed_source_head) ... ok\ntest_strict_resume_imports_current_ready_receipt (test_task_recovery.TaskRecoveryTests.test_strict_resume_imports_current_ready_receipt) ... ok\ntest_strict_resume_rejects_target_advance (test_task_recovery.TaskRecoveryTests.test_strict_resume_rejects_target_advance) ... ok\ntest_unknown_validation_purpose_is_rejected (test_task_recovery.TaskRecoveryTests.test_unknown_validation_purpose_is_rejected) ... ok\ntest_unknown_work_mode_is_rejected (test_task_recovery.TaskRecoveryTests.test_unknown_work_mode_is_rejected) ... ok\ntest_userinfo_is_stripped_from_urls_and_scp_forms (test_task_triage.RedactionTests.test_userinfo_is_stripped_from_urls_and_scp_forms) ... ok\ntest_api_unreachable_yields_remote_unverified_without_receipt (test_task_triage.TriageTests.test_api_unreachable_yields_remote_unverified_without_receipt) ... ok\ntest_card_filters_ignore_closed_intake_done_plain_and_other_root (test_task_triage.TriageTests.test_card_filters_ignore_closed_intake_done_plain_and_other_root) ... ok\ntest_decide_rejects_candidate_head_change_and_keeps_receipt (test_task_triage.TriageTests.test_decide_rejects_candidate_head_change_and_keeps_receipt) ... ok\ntest_decide_rejects_unknown_initiative_or_missing_reason_without_changing_receipt (test_task_triage.TriageTests.test_decide_rejects_unknown_initiative_or_missing_reason_without_changing_receipt) ... ok\ntest_discover_requires_requirement_text (test_task_triage.TriageTests.test_discover_requires_requirement_text) ... ok\ntest_join_decision_succeeds_and_verifies_child (test_task_triage.TriageTests.test_join_decision_succeeds_and_verifies_child) ... ok\ntest_ls_remote_failure_yields_remote_unverified_without_receipt (test_task_triage.TriageTests.test_ls_remote_failure_yields_remote_unverified_without_receipt) ... ok\ntest_multiple_candidates_stop_at_decision_required (test_task_triage.TriageTests.test_multiple_candidates_stop_at_decision_required) ... ok\ntest_new_decision_for_single_non_fitting_candidate_requires_reason (test_task_triage.TriageTests.test_new_decision_for_single_non_fitting_candidate_requires_reason) ... ok\ntest_pr_base_not_main_and_closed_pr_are_ignored (test_task_triage.TriageTests.test_pr_base_not_main_and_closed_pr_are_ignored) ... ok\ntest_remote_discovery_paginates_until_empty (test_task_triage.TriageTests.test_remote_discovery_paginates_until_empty) ... ok\ntest_remote_initiative_absent_from_main_tree_is_discovered (test_task_triage.TriageTests.test_remote_initiative_absent_from_main_tree_is_discovered) ... ok\ntest_repo_slug_is_derived_from_origin_when_gitea_repo_unset (test_task_triage.TriageTests.test_repo_slug_is_derived_from_origin_when_gitea_repo_unset) ... ok\ntest_single_candidate_requires_decision_never_auto_join (test_task_triage.TriageTests.test_single_candidate_requires_decision_never_auto_join) ... ok\ntest_token_from_secrets_file_is_used_and_never_printed (test_task_triage.TriageTests.test_token_from_secrets_file_is_used_and_never_printed) ... ok\ntest_verify_rejects_changed_candidate_head (test_task_triage.TriageTests.test_verify_rejects_changed_candidate_head) ... ok\ntest_verify_rejects_changed_card_digest (test_task_triage.TriageTests.test_verify_rejects_changed_card_digest) ... ok\ntest_verify_rejects_child_with_wrong_initiative (test_task_triage.TriageTests.test_verify_rejects_child_with_wrong_initiative) ... ok\ntest_verify_rejects_root_target_mismatch (test_task_triage.TriageTests.test_verify_rejects_root_target_mismatch) ... ok\ntest_verify_rejects_stale_receipt (test_task_triage.TriageTests.test_verify_rejects_stale_receipt) ... ok\ntest_verify_rejects_verdict_and_kind_mismatch (test_task_triage.TriageTests.test_verify_rejects_verdict_and_kind_mismatch) ... ok\ntest_verify_rejects_wrong_schema_and_missing_receipt (test_task_triage.TriageTests.test_verify_rejects_wrong_schema_and_missing_receipt) ... ok\ntest_zero_candidates_yields_new_without_selecting_an_initiative (test_task_triage.TriageTests.test_zero_candidates_yields_new_without_selecting_an_initiative) ... ok\ntest_deleting_main_symlink_to_outside_is_denied (test_write_guard.WriteGuardTests.test_deleting_main_symlink_to_outside_is_denied) ... ok\ntest_detached_and_bad_branches_are_denied (test_write_guard.WriteGuardTests.test_detached_and_bad_branches_are_denied) ... ok\ntest_every_patch_file_and_move_destination_is_checked (test_write_guard.WriteGuardTests.test_every_patch_file_and_move_destination_is_checked) ... ok\ntest_feature_missing_parent_is_allowed (test_write_guard.WriteGuardTests.test_feature_missing_parent_is_allowed) ... ok\ntest_invalid_json_is_denied (test_write_guard.WriteGuardTests.test_invalid_json_is_denied) ... ok\ntest_missing_parent_on_main_is_denied (test_write_guard.WriteGuardTests.test_missing_parent_on_main_is_denied) ... ok\ntest_missing_unknown_and_malformed_write_input_are_denied (test_write_guard.WriteGuardTests.test_missing_unknown_and_malformed_write_input_are_denied) ... ok\ntest_non_git_destination_is_explicitly_outside_scope (test_write_guard.WriteGuardTests.test_non_git_destination_is_explicitly_outside_scope) ... ok\ntest_nonwrite_tools_are_outside_scope (test_write_guard.WriteGuardTests.test_nonwrite_tools_are_outside_scope) ... ok\ntest_relative_path_uses_hook_cwd_not_process_cwd (test_write_guard.WriteGuardTests.test_relative_path_uses_hook_cwd_not_process_cwd) ... ok\ntest_symlink_into_main_with_missing_parents_is_denied (test_write_guard.WriteGuardTests.test_symlink_into_main_with_missing_parents_is_denied) ... ok\ntest_valid_multi_file_patch_on_feature_is_allowed (test_write_guard.WriteGuardTests.test_valid_multi_file_patch_on_feature_is_allowed) ... ok\n\n======================================================================\nFAIL: test_legacy_exec_dsn_survives_consecutive_restarts (test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity/tests/test_svc.py\", line 302, in test_legacy_exec_dsn_survives_consecutive_restarts\n self.svc(\"dev\", \"restart\")\n ~~~~~~~~^^^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity/tests/test_svc.py\", line 222, in svc\n self.assertEqual(proc.returncode, 0, proc.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 0 : \u001b[1;33m[svc]\u001b[0m [dev] 跳过 manifest 迁移:需 python3 与 scripts/svc_manifest.py\n\u001b[1;34m[svc]\u001b[0m [dev] 存量 exec DSN 已迁移为托管绑定 dbref=pg1/agent(DSN 改由实例登记重建)\n\u001b[1;34m[svc]\u001b[0m [dev] 无 pidfile——没有由本脚本启动的实例\n\u001b[1;31m[svc]\u001b[0m [dev] 端口被占用(非本服务):LISTEN 0 4096 127.0.0.1:18791 0.0.0.0:* users:((\"agent-system-rd\",pid=188020,fd=10)) \n\u001b[1;31m[svc]\u001b[0m 处理:停掉该进程,或换端口(--port / --addr)\n\n\n----------------------------------------------------------------------\nRan 542 tests in 357.412s\n\nFAILED (failures=1, skipped=19)\nmake[1]: *** [Makefile:203: test-governance] Error 1\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity'\n", + "root_target": "main", + "immediate_target": "feature/development-governance-v2", + "output_sha256": "382afed8bd133c5052b634470db1339fe1497e0bb142358cb82e155dd5aa4120", + "receipt_sha256": "fe2fe978237f27fe01e901690c282732d0acc44a77a9f732e801ff4f28699dc1" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-17T02:25:11.759726+00:00", + "command": "scripts/check-pins.sh", + "command_sha256": "d6254c6dc53661c81c8ed1316a1e98c50ed32a4f174e3c4a632b21d7b237a403", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-development-governance-v2-target-integrity", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "dfb684830f899837e260f2a438e8572537484d63", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": " M .task/feature-development-governance-v2-target-integrity.md\n", + "tracked_diff_sha256": "735e8dc01f37cf946dfb4631b4c9e510ac09fcd2d211bed8cc88c1c2f9c85745", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after": { + "head": "dfb684830f899837e260f2a438e8572537484d63", + "branch": "feature/development-governance-v2-target-integrity", + "target_branch": "main", + "target_head": "aa3c7eae40264ee47d5505a162074cfd77b1a099", + "status": " M .task/feature-development-governance-v2-target-integrity.md\n", + "tracked_diff_sha256": "735e8dc01f37cf946dfb4631b4c9e510ac09fcd2d211bed8cc88c1c2f9c85745", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n ab12fea4745cf22fb7648c1c25b18433ac8a3650 modules/backend (v0.5.0-23-gab12fea)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/backend/deps/agent-system-core (v0.4.0-3-g1a5ef6b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 1a5ef6b75cc74088786487d82b6f6b70bf977280 modules/core (v0.4.0-3-g1a5ef6b)\n 73bbb4cea686eb84826d5066bb4c44bf883c9365 modules/documents (remotes/origin/feature/layered-python-env)\n d66bd7941cfbd014b0d3921b21cc76c847d16b58 modules/frontend (v0.4.0-51-gd66bd79)\n c9187473fb1ae9e8f3946cdf9b67055ee732054a modules/ui (v0.4.0-9-gc918747)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "ok modules/backend agent-command\nok modules/backend agent-intent\nok modules/backend agent-native\nok modules/backend agent-squad\nok modules/backend agent-system-core\nok modules/backend error-code-system\nok modules/backend logging-system\nok deps/agent-native agent-intent\nwarn: deps/agent-native deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5\nok deps/agent-native error-code-system\nok deps/agent-native logging-system\nok deps/agent-squad agent-intent\nok deps/agent-squad agent-native\nwarn: deps/agent-squad deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5\nok deps/agent-squad error-code-system\nok deps/agent-squad logging-system\nwarn: deps/agent-intent deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5\nok deps/agent-intent error-code-system\nok deps/agent-intent logging-system\npins ok\n", + "root_target": "main", + "immediate_target": "feature/development-governance-v2", + "output_sha256": "43cbe0f2ad905233d68ee1c410ea82e9f18e9355e4640961e78944fd5892c3cf", + "receipt_sha256": "aa8c954fb8ccebff49b0d59b0e73ced2bc1d380bb271e35925a7932730512ada" +} +```