From 419380187dcb49daefd3bb5609bac964b7e7b3bb Mon Sep 17 00:00:00 2001 From: weichen Date: Sun, 11 Oct 2026 20:46:03 +0000 Subject: [PATCH] Add an rdm deploy source to svc (downstream composite binary) Why: RDM capabilities (two-trees-one-net, rdm.* trace-audit command face) only exist in the downstream Agent-System-RDM composite binary; svc's three existing sources all produce the Dev binary, so none of it could be deployed or lifecycle-managed. This adds --from rdm[@] with the same isolated source-repo semantics as the dev source. Evidence: make test-governance 138/138 (two new stub cases: deploy E2E and commits/update track); real deployment rdm@2aef3fc recorded in the task card (pins materialized, pure-Go build, web workbench to htdocs, serve health OK, rdm.ping/rdm.inspect.capabilities committed, update --check reports latest); make test full suite exit=0. All segments written by make evidence. Impact: scripts/svc.sh (rdm source resolution/materialization/deploy/update/ commits, probe timeouts, rdm seed skip, ELF env-DSN evidence fallback), docs/svc.md 5.4, tests/test_svc.py. RDM-side CLI alignment landed as RDM PR #228; no base submodules touched. Refs: task card .task/feature-svc-rdm-source.md; RDM PR #228/#229. --- .task/feature-svc-rdm-source.md | 106 +++++++++++++++-- docs/svc.md | 48 ++++++-- scripts/svc.sh | 203 +++++++++++++++++++++++++++++--- tests/test_svc.py | 73 ++++++++++++ 4 files changed, 398 insertions(+), 32 deletions(-) diff --git a/.task/feature-svc-rdm-source.md b/.task/feature-svc-rdm-source.md index 86dd4631..fb5c30a3 100644 --- a/.task/feature-svc-rdm-source.md +++ b/.task/feature-svc-rdm-source.md @@ -7,15 +7,26 @@ - 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= acc8bf124c04b89ed05093467ebce865934bdddc - 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source(worktree);分支:feature/svc-rdm-source -- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> +- 授权与交付终点:用户批准的实施计划(2026-10-11「RDM 经 svc 集成与可视化的实施计划」WP2):新增 svc rdm 部署源 + RDM 仓 CLI 对齐 + 测试/文档 + PR 合入;不含 AdminZone 分区(WP3 另卡)。 - 交付模式:manual(逐阶段人工评审);明确授权后可记为 authorized-continuous -- 自动推进授权:无;授权范围:无;授权来源:无;授权终点:无;停止条件:无(未授权) -- 当前阶段:需求拆解;当前增量:I1(待定义) +- 自动推进授权:用户计划批准(WP2 全链:实现→测试→PR→合入);授权范围:本卡改动文件 + RDM 仓配套对齐(另卡 feature/svc-cli-alignment,PR #228);授权来源:会话计划批准;授权终点:PR 合入 + 卡闭合;停止条件:CI/治理测试失败或评审驳回 +- 当前阶段:实施与自检(完成,待评审合入);当前增量:I1(rdm 部署源单一增量,已实现) - 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位) ## 目标与非目标 -<预期结果、受影响入口/模块/契约;明确不做什么。> +**目标**:svc.sh 新增第四种部署源 `--from rdm[@]`——独立 RDM 源仓(默认 +`~/.cache/agent-system-svc/rdm-src`,`SVC_RDM_SRC_DIR`/`SVC_RDM_ORIGIN` 覆盖)物化 +`pins/` 后 `make build` 出组合二进制 `agent-system-rdm`;插件目录按空集安装;`web/` +工作台随环境落 `htdocs/`;`commits rdm`/`--pick rdm`/`update` 的 `rdm@` 轨道;启动 +探测 timeout 护栏;rdm 形态跳过基座专属设置播种;`bin_env_dsn_supported` 对无 +`config explain` 的 ELF 组合产物以静态引用兜底。受影响:`scripts/svc.sh`、 +`docs/svc.md` §5、`tests/test_svc.py`。配套 RDM 仓对齐(serve 容忍/version/ +AGENT_SYSTEM_DSN)在 RDM PR #228(已合入)。 + +**非目标**:不做 AdminZone 管理区扩展分区(WP3 另立);不改基座子模块(backend/ +frontend pin 不动);不做 rdm 源的 static 构建与 Releases 打包;不改 `--mock`/ +`--config` 不受支持的组合 CLI 限制(文档化)。 ## 关联方向与规划 @@ -27,13 +38,16 @@ | ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | |---|---|---|---|---|---|---| -| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 | +| R1 | svc 可从 RDM 远端部署组合二进制 | 双仓架构(INV-2)下 RDM 产物只能经自有二进制集成;svc 三源均产 Dev 二进制 | 高 | `svc deploy --from rdm` 端到端成功:物化 pins→构建→产物落位→健康 | RDM CLI 对齐(PR #228) | 已满足(真实部署 rdm@2aef3fc + 桩用例) | +| R2 | rdm 源纳入 commits/--pick/update 生命周期 | 与 dev 源同构的运维语义 | 高 | `commits rdm` 列表;`update rdm1 --check` 报告 ✓ 最新/可更新;真更新换 sha | R1 | 已满足(桩用例 + 真实 --check) | +| R3 | 凭据与失败语义不回退 | G1-7 DSN 环境纪律 + fail-closed | 高 | 播种跳过(rdm 形态);env-DSN 门禁对 ELF 静态证据兜底;探测挂死护栏(timeout) | R1 | 已满足(桩用例 + strings 实测) | +| R4 | 治理回归不回退 | svc.sh 属治理脚本 | 高 | `make test-governance` 全绿(含新增 2 用例) | — | 已满足(138/138) | ## 方案与计划 -- 方案引用:待填写(含对象版本) -- 实施计划引用:待填写(含增量与需求 ID) -- 测试计划引用:待填写(含需求 ID 与验收条件) +- 方案引用:会话批准计划 WP2(2026-10-11,本卡);探查依据 docs/svc.md §4.1/§3.2 与 svc.sh 现有 dev 源机制 +- 实施计划引用:单一增量 I1=rdm 部署源(resolve/materialize/deploy/update/commits/启动护栏/文档/测试),对应 R1-R4 +- 测试计划引用:tests/test_svc.py 新增 `test_rdm_source_deploy_end_to_end`(R1/R3)与 `test_rdm_source_commits_and_update_track`(R2);真实部署验收记录于本卡证据段(R1-R3) ## 阶段评审 @@ -126,3 +140,79 @@ "receipt_sha256": "710a777e07355ff557ea9087450b14b4f673f562ddb215f0b658098ba5d709b8" } ``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-11T20:43:51.979934+00:00", + "command": "make test", + "command_sha256": "22cc66aa7d2624b4eb4d5b61658614cd6c32477b123afbf7dbc7fc3d7d0f3713", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "effb4edfcd0f1e81b94666863e2c570643a34133", + "branch": "feature/svc-rdm-source", + "target_branch": "main", + "target_head": "6933ec3979fef58e94461f3b80bb79fca3874c99", + "status": " M docs/svc.md\n M scripts/svc.sh\n M tests/test_svc.py\n", + "tracked_diff_sha256": "651bb062b947253241d3621234fccf1bab4f587e9ec080741463873c2a364037", + "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 af199eeaa23c5b39e08b4649f2513d7572dc5274 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 409390fff188d5d412101ff54b2ddd9e33544cd7 modules/backend (v0.3.0-86-g409390f)\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 89f3906c390027512ef47b5333088c3d3a019e84 modules/backend/deps/agent-system-core (v0.3.0-9-g89f3906)\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 89f3906c390027512ef47b5333088c3d3a019e84 modules/core (v0.3.0-9-g89f3906)\n 23e2276905eaf3d5b266a5218a53a12a38321284 modules/documents (heads/main)\n 7acfef0a1f6d1b59f6fca5e544d05df364257802 modules/frontend (v0.3.0-33-g7acfef0)\n bfecf8b51f9a0fdbd9a13590cddf8fc06b7ae700 modules/ui (v0.3.0-17-gbfecf8b)\n" + }, + "after": { + "head": "effb4edfcd0f1e81b94666863e2c570643a34133", + "branch": "feature/svc-rdm-source", + "target_branch": "main", + "target_head": "6933ec3979fef58e94461f3b80bb79fca3874c99", + "status": " M docs/svc.md\n M scripts/svc.sh\n M tests/test_svc.py\n", + "tracked_diff_sha256": "651bb062b947253241d3621234fccf1bab4f587e9ec080741463873c2a364037", + "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 af199eeaa23c5b39e08b4649f2513d7572dc5274 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 409390fff188d5d412101ff54b2ddd9e33544cd7 modules/backend (v0.3.0-86-g409390f)\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 89f3906c390027512ef47b5333088c3d3a019e84 modules/backend/deps/agent-system-core (v0.3.0-9-g89f3906)\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 89f3906c390027512ef47b5333088c3d3a019e84 modules/core (v0.3.0-9-g89f3906)\n 23e2276905eaf3d5b266a5218a53a12a38321284 modules/documents (heads/main)\n 7acfef0a1f6d1b59f6fca5e544d05df364257802 modules/frontend (v0.3.0-33-g7acfef0)\n bfecf8b51f9a0fdbd9a13590cddf8fc06b7ae700 modules/ui (v0.3.0-17-gbfecf8b)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source'\npython3 scripts/check-worktree.py verify\n[worktree] verify: recursive component checks passed\nPYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p 'test_*.py' -v\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_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_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_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_write_failure_cannot_claim_success (test_evidence.EvidenceTests.test_receipt_write_failure_cannot_claim_success) ... 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_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_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) ... ok\ntest_mock_conflict_and_legacy_binary_refuse (test_svc.SvcDbRecoveryTests.test_mock_conflict_and_legacy_binary_refuse) ... ok\ntest_rdm_source_commits_and_update_track (test_svc.SvcDbRecoveryTests.test_rdm_source_commits_and_update_track) ... [main 2ef1bec] rdm v2\n 1 file changed, 1 insertion(+)\n create mode 100644 marker\nTo /tmp/svc-db-regress-d09rr113/rdmremote.git\n 6135e14..2ef1bec 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_sequential_restarts_no_cross_dsn_and_no_secret_leak (test_svc.SvcDbRecoveryTests.test_sequential_restarts_no_cross_dsn_and_no_secret_leak) ... ok\ntest_update_preserves_binding (test_svc.SvcDbRecoveryTests.test_update_preserves_binding) ... 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_resolver_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_resolver_state) ... 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_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_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_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_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_routes_existing_project_delivery_policy (test_task.TaskLifecycleTests.test_precheck_routes_existing_project_delivery_policy) ... 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_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_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_sync_commit_failure_never_reports_synced (test_task.TaskLifecycleTests.test_sync_commit_failure_never_reports_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_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_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_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_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_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----------------------------------------------------------------------\nRan 138 tests in 44.127s\n\nOK\nbash scripts/lint-boundaries.sh\narchitecture ok (82 edges)\narchitecture negative ok\nboundaries ok\nbash scripts/check-pins.sh\nok 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 af199eeaa23c\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 af199eeaa23c\nok deps/agent-squad error-code-system\nok deps/agent-squad logging-system\nwarn: deps/agent-intent deps/development-guidelines is 26b562d2e34f, Dev is af199eeaa23c\nok deps/agent-intent error-code-system\nok deps/agent-intent logging-system\npins ok\ncd deps/agent-intent && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...\nok \tagent-intent/catalogcheck\t0.002s\nok \tagent-intent/cmd/intentctl\t0.004s\nok \tagent-intent/conformance\t0.004s\nok \tagent-intent/examples\t0.002s\nok \tagent-intent/intent\t0.005s\nok \tagent-intent/schema\t0.002s\ncd deps/agent-native && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...\nok \tagent-native/adapters/native\t0.196s\nok \tagent-native/adapters/pitransport\t0.034s\nok \tagent-native/catalogcheck\t0.002s\n? \tagent-native/cmd/agent-native\t[no test files]\nok \tagent-native/conformance\t0.052s\nok \tagent-native/exec\t0.150s\nok \tagent-native/rpc\t0.003s\nok \tagent-native/runtime\t1.318s\nok \tagent-native/runtime/agentspec\t0.003s\nok \tagent-native/runtime/checkpoint\t0.003s\nok \tagent-native/runtime/codeorch\t0.074s\nok \tagent-native/runtime/ext\t0.024s\n? \tagent-native/runtime/ext/pkg\t[no test files]\nok \tagent-native/runtime/filestate\t0.022s\nok \tagent-native/runtime/gates\t0.003s\nok \tagent-native/runtime/guardrails\t0.002s\nok \tagent-native/runtime/hooks\t0.002s\nok \tagent-native/runtime/llm\t0.250s\nok \tagent-native/runtime/mcp\t13.263s\nok \tagent-native/runtime/memory\t0.003s\nok \tagent-native/runtime/policy\t0.002s\nok \tagent-native/runtime/promptx\t0.002s\nok \tagent-native/runtime/reminders\t0.002s\nok \tagent-native/runtime/resources\t0.002s\nok \tagent-native/runtime/session\t0.009s\nok \tagent-native/runtime/skills\t0.003s\nok \tagent-native/runtime/subagent\t0.004s\nok \tagent-native/runtime/telemetry\t0.003s\nok \tagent-native/runtime/tools\t11.284s\nok \tagent-native/schema\t0.001s\ncd deps/agent-squad && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...\nok \tagent-squad/schema\t0.002s\nok \tagent-squad/squad\t0.970s\nok \tagent-squad/store\t0.004s\nok \tagent-squad/textextract\t0.001s\ncd deps/agent-squad/adapters/intent && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...\nok \tagent-squad/adapters/intent\t0.008s\ncd deps/agent-squad/adapters/native && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...\nok \tagent-squad/adapters/native\t0.003s\ncd deps/agent-squad/adapters/sqlite && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...\nok \tagent-squad/adapters/sqlite\t0.018s\ncd deps/agent-squad/cmd/agent-squad && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...\n? \tagent-squad/cmd/agent-squad\t[no test files]\nok \tagent-squad/cmd/agent-squad/cli\t0.003s\nok \tagent-squad/cmd/agent-squad/conformance\t0.005s\nok \tagent-squad/cmd/agent-squad/server\t0.572s\ncd modules/core && go test ./...\nok \tagent-system-core\t0.004s\ncd modules/backend && go test ./...\n? \tagent-system-backend/cmd/agent-system\t[no test files]\nok \tagent-system-backend/cmd/storage-migrate\t0.046s\nok \tagent-system-backend/eval\t0.002s\nok \tagent-system-backend/internal/app\t0.118s\nok \tagent-system-backend/internal/blobstore\t0.005s\nok \tagent-system-backend/internal/bus\t0.002s\nok \tagent-system-backend/internal/cardsvc\t0.081s\nok \tagent-system-backend/internal/cmdbus\t0.017s\nok \tagent-system-backend/internal/config\t0.004s\nok \tagent-system-backend/internal/ctxasm\t0.005s\nok \tagent-system-backend/internal/docgen\t0.005s\nok \tagent-system-backend/internal/evalgold\t0.003s\nok \tagent-system-backend/internal/genui\t0.041s\nok \tagent-system-backend/internal/hostapi\t0.026s\nok \tagent-system-backend/internal/ingest\t0.493s\nok \tagent-system-backend/internal/intentgate\t0.004s\nok \tagent-system-backend/internal/intentsem\t0.003s\nok \tagent-system-backend/internal/pgbus\t0.003s\nok \tagent-system-backend/internal/plugins\t0.188s\n? \tagent-system-backend/internal/profiles\t[no test files]\nok \tagent-system-backend/internal/prompts\t0.047s\nok \tagent-system-backend/internal/quality\t0.103s\nok \tagent-system-backend/internal/rag\t0.102s\nok \tagent-system-backend/internal/ratelimit\t0.254s\nok \tagent-system-backend/internal/route\t0.003s\nok \tagent-system-backend/internal/runmgr\t0.681s\nok \tagent-system-backend/internal/runtime\t1.137s\nok \tagent-system-backend/internal/server\t5.854s\nok \tagent-system-backend/internal/settings\t0.015s\nok \tagent-system-backend/internal/skills\t1.143s\nok \tagent-system-backend/internal/squadadapter\t0.090s\nok \tagent-system-backend/internal/store\t1.837s\nok \tagent-system-backend/internal/surfacesvc\t0.084s\nok \tagent-system-backend/internal/tools\t13.188s\nok \tagent-system-backend/internal/wfcompile\t0.039s\nok \tagent-system-backend/internal/workflow\t0.002s\nok \tagent-system-backend/pkg/extension\t0.003s\n? \tagent-system-backend/pkg/extension/link\t[no test files]\n? \tagent-system-backend/web\t[no test files]\ncp modules/core/ts/types.ts modules/frontend/src/contracts.ts.tmp\n{ echo \"// 从 Agent-System-Core ts/types.ts 同步(make contracts 生成;Core 为权威)。\"; cat modules/frontend/src/contracts.ts.tmp; } > modules/frontend/src/contracts.ts\nrm modules/frontend/src/contracts.ts.tmp\ncp modules/core/ts/types.ts modules/ui/src/contracts.ts.tmp\n{ echo \"// 从 Agent-System-Core ts/types.ts 同步(make contracts 生成;Core 为权威)。\"; cat modules/ui/src/contracts.ts.tmp; } > modules/ui/src/contracts.ts\nrm modules/ui/src/contracts.ts.tmp\ncd modules/frontend && npm ci --no-fund --no-audit && npx vitest run && node scripts/check-knip.mjs\nnpm warn deprecated uuid@10.0.0: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).\n\nadded 176 packages in 1s\nnpm warn install-scripts 1 package has install scripts not yet covered by allowScripts:\nnpm warn install-scripts esbuild@0.25.12 (postinstall: node install.js)\nnpm warn install-scripts\nnpm warn install-scripts Run `npm install-scripts ls` to review, or `npm install-scripts approve ` to allow.\n\n RUN v4.1.11 /home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/frontend\n\n ✓ test/contracts.test.ts (5 tests) 4ms\n ✓ test/html-sinks.test.ts (1 test) 3ms\n ✓ test/design-guard.test.ts (6 tests) 5ms\n ✓ test/previewfit.test.ts (4 tests) 4ms\n ✓ test/tasklist.test.ts (6 tests) 5ms\n ✓ test/toolkind.test.ts (5 tests) 5ms\n ✓ test/live.test.ts (19 tests) 8ms\n ✓ src/surface_action.test.ts (1 test) 7ms\n ✓ test/messageparts.test.ts (11 tests) 7ms\n(node:2322221) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n ✓ src/artifactGrouping.test.ts (2 tests) 4ms\n ✓ test/previewtabs.test.ts (2 tests) 3ms\n ✓ test/outbox.test.ts (3 tests) 3ms\n ✓ test/preview-empty-state.test.ts (3 tests) 3ms\n ✓ test/scrollsync.test.ts (2 tests) 2ms\n(node:2322222) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n ✓ test/workspaces.test.ts (4 tests) 6ms\n ✓ test/theme.test.ts (3 tests) 3ms\n(node:2322226) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2322227) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2322175) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n ✓ test/auth.test.ts (5 tests) 24ms\n ✓ test/send.test.ts (4 tests) 3ms\n ✓ src/surface.test.ts (4 tests) 5ms\n ✓ test/loginpage.test.ts (6 tests) 3ms\n ✓ test/notice.test.ts (2 tests) 6ms\n ✓ src/runstate.test.ts (2 tests) 277ms\n\n Test Files 22 passed (22)\n Tests 100 passed (100)\n Start at 20:45:14\n Duration 490ms (transform 1.25s, setup 0ms, import 1.97s, tests 392ms, environment 2ms)\n\nknip unused exports 43 <= 43\ncd modules/ui && npm ci --no-fund --no-audit && npx tsc --noEmit && npx vitest run && node scripts/check-knip.mjs\nnpm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation\n\nadded 162 packages in 566ms\n\n RUN v4.1.11 /home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui\n\n ✓ test/contrast-guard.test.ts (19 tests) 11ms\n ✓ test/design-guard.test.ts (9 tests) 9ms\n ✓ test/html-sinks.test.ts (1 test) 4ms\n ✓ test/safe-html.test.tsx (3 tests) 43ms\n ✓ test/toolblock.test.tsx (4 tests) 71ms\n ✓ test/tabstrip.test.tsx (3 tests) 60ms\nstderr | test/file-preview.test.tsx > OfficePreview 注入槽 > renders via injected loader and surfaces errors\n[preview:docx] 坏.docx Error: bad zip\n at docx (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/test/file-preview.test.tsx:69:61)\n at /home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/src/FilePreview.tsx:169:5\n at Object.react_stack_bottom_frame (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:28656:20)\n at runWithFiberInDEV (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:1048:13)\n at commitHookEffectListMount (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:13748:29)\n at commitHookPassiveMountEffects (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:13835:11)\n at commitPassiveMountOnFiber (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:16906:13)\n at recursivelyTraversePassiveMountEffects (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:16851:13)\n at commitPassiveMountOnFiber (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:17183:11)\n at recursivelyTraversePassiveMountEffects (/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:16851:13)\n\n ✓ test/collapsible.test.tsx (5 tests) 80ms\n ✓ test/overlay-host.test.tsx (6 tests) 61ms\n ✓ test/file-preview.test.tsx (9 tests) 84ms\n ✓ test/surfaceview.test.tsx (4 tests) 72ms\n ✓ test/inline-confirm.test.tsx (7 tests) 89ms\n ✓ test/ui.test.tsx (6 tests) 66ms\n ✓ test/inbox.test.tsx (14 tests) 87ms\n ✓ test/card-anchor.test.tsx (4 tests) 94ms\n ✓ test/capability.test.tsx (14 tests) 142ms\n\n Test Files 15 passed (15)\n Tests 108 passed (108)\n Start at 20:45:18\n Duration 605ms (transform 451ms, setup 0ms, import 1.41s, tests 973ms, environment 3.41s)\n\nknip unused exports 57 <= 57\ncd deps/agent-command && go vet ./... && go test -count=1 ./...\nok \tagent-command\t0.002s\nok \tagent-command/conformance\t0.002s\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source'\n", + "output_sha256": "5cd382c0a4db6b593700dfaa4b158575023b252410c4e539c7629c1e844e63f2", + "receipt_sha256": "e6ff99b61ea0785adb6e26993b638b305dc5fdf388b4677bfdc3b9e063df356f" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-11T20:45:34.474821+00:00", + "command": "curl -s http://127.0.0.1:9015/api/health && curl -s -X POST http://127.0.0.1:9015/api/commands/rdm.ping -H 'Content-Type: application/json' -d '{\"params\":{}}' && curl -s -X POST http://127.0.0.1:9015/api/commands/rdm.inspect.capabilities -H 'Content-Type: application/json' -d '{\"params\":{}}' && scripts/svc.sh rdm1 status", + "command_sha256": "0af2bc10232392ba1f3df6df139a2aa2d33293eead001b2fe81e3cc5a4c92886", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "effb4edfcd0f1e81b94666863e2c570643a34133", + "branch": "feature/svc-rdm-source", + "target_branch": "main", + "target_head": "6933ec3979fef58e94461f3b80bb79fca3874c99", + "status": " M .task/feature-svc-rdm-source.md\n M docs/svc.md\n M scripts/svc.sh\n M tests/test_svc.py\n", + "tracked_diff_sha256": "1aced7c1c1c294e4b88d91c91234e7afa5d3798f3630339569666c8f7e3d37be", + "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 af199eeaa23c5b39e08b4649f2513d7572dc5274 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 409390fff188d5d412101ff54b2ddd9e33544cd7 modules/backend (v0.3.0-86-g409390f)\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 89f3906c390027512ef47b5333088c3d3a019e84 modules/backend/deps/agent-system-core (v0.3.0-9-g89f3906)\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 89f3906c390027512ef47b5333088c3d3a019e84 modules/core (v0.3.0-9-g89f3906)\n 23e2276905eaf3d5b266a5218a53a12a38321284 modules/documents (heads/main)\n 7acfef0a1f6d1b59f6fca5e544d05df364257802 modules/frontend (v0.3.0-33-g7acfef0)\n bfecf8b51f9a0fdbd9a13590cddf8fc06b7ae700 modules/ui (v0.3.0-17-gbfecf8b)\n" + }, + "after": { + "head": "effb4edfcd0f1e81b94666863e2c570643a34133", + "branch": "feature/svc-rdm-source", + "target_branch": "main", + "target_head": "6933ec3979fef58e94461f3b80bb79fca3874c99", + "status": " M .task/feature-svc-rdm-source.md\n M docs/svc.md\n M scripts/svc.sh\n M tests/test_svc.py\n", + "tracked_diff_sha256": "1aced7c1c1c294e4b88d91c91234e7afa5d3798f3630339569666c8f7e3d37be", + "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 af199eeaa23c5b39e08b4649f2513d7572dc5274 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 409390fff188d5d412101ff54b2ddd9e33544cd7 modules/backend (v0.3.0-86-g409390f)\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 89f3906c390027512ef47b5333088c3d3a019e84 modules/backend/deps/agent-system-core (v0.3.0-9-g89f3906)\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 89f3906c390027512ef47b5333088c3d3a019e84 modules/core (v0.3.0-9-g89f3906)\n 23e2276905eaf3d5b266a5218a53a12a38321284 modules/documents (heads/main)\n 7acfef0a1f6d1b59f6fca5e544d05df364257802 modules/frontend (v0.3.0-33-g7acfef0)\n bfecf8b51f9a0fdbd9a13590cddf8fc06b7ae700 modules/ui (v0.3.0-17-gbfecf8b)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "{\"ok\":true,\"ts\":\"2026-10-11T20:45:34.479558457Z\"}\n{\"payload\":{\"artifact\":\"\",\"owner\":\"local\",\"plugin\":\"rdm\",\"pong\":true},\"receipt\":{\"commandId\":\"rdm.ping\",\"state\":\"committed\",\"operationId\":\"op_rdm_ping_1791751534484965306\",\"time\":\"2026-10-11T20:45:34.485383134Z\"}}\n{\"payload\":{\"actor\":\"local\",\"crossProject\":false,\"projects\":[]},\"receipt\":{\"commandId\":\"rdm.inspect.capabilities\",\"state\":\"committed\",\"operationId\":\"op_rdm_inspect_capabilities_1791751534487935207\",\"time\":\"2026-10-11T20:45:34.488316886Z\"}}\n [rdm1] agent 运行中 pid=2279391\n 地址 127.0.0.1:9015 数据 /home/weichen/projects/Agent-System-Dev-wt-feature-svc-rdm-source/runtime/rdm1/data\n 来源 rdm@2aef3fc 版本 agent-system-rdm v0.1.1-0.20261011204217-2aef3fc1274d\n 数据库 无(内嵌 SQLite 档;绑定: db )\n 配置文件 无(命令行参数形态; config 绑定)\n 监听守卫 insecureListen= allowedHosts=\n", + "output_sha256": "55a0775fadd7fd87b704655da843f8470a95dd5617e9463e6c0bb96232d89fb3", + "receipt_sha256": "b55e8ed4e7f792deb4a808aeb2d30ff846d3d23597779d59466978c00889a150" +} +``` diff --git a/docs/svc.md b/docs/svc.md index 9fd50aa7..eacfbdd6 100644 --- a/docs/svc.md +++ b/docs/svc.md @@ -168,7 +168,7 @@ scripts/svc.sh ui deploy --kind static --dir ../dist # 直接服务既有 | `SVC__ALLOWED_HOSTS` | 逗号分隔的额外主机名,传给 `AGENT_SYSTEM_ALLOWED_HOSTS`,供反向代理的 Host / Origin 校验 | | `--model-base/--model-key/--model-name`、`--light-*`、`--tavily-keys` | 启动健康后播种 | | `--dry-run` | 只解析并打印部署计划(来源、物化路径、产物去向、启动参数) | -| `--pick [dev\|release]` | 交互式编号选提交(需 TTY) | +| `--pick [dev\|release\|rdm]` | 交互式编号选提交(需 TTY) | | `--config FILE` / `--env FILE` | 配置文件(见 §9) | | `-- <剩余参数>` | 原样透传给 `agent-system serve` | @@ -268,7 +268,8 @@ scripts/svc.sh config --clear # 移除(回命令行参数 ## 5. 命令参考:部署来源 -`deploy --from` 支持三种来源(**缺省 = `dev` 远端最新**),agent 与 static 共用: +`deploy --from` 支持四种来源(**缺省 = `dev` 远端最新**):dev/local/release 通用于 +agent 与 static,rdm 仅限 agent。 ### 5.1 dev(缺省)—— 远端最新 / 指定提交 @@ -315,12 +316,44 @@ dev 源的提交解析、`commits` 列举与构建 worktree 物化全部基于 仓库定位:`SVC_RELEASES_DIR` > `../Agent-System-Releases`。制品缺失时提示先在 Releases 仓跑 `scripts/build-release.sh `。 -### 5.4 辅助 +### 5.4 rdm —— 下游组合仓 Agent-System-RDM(agent 专用) + +``` +--from rdm # RDM 源仓 origin/main 最新 +--from rdm@ # 指定提交 +``` + +部署**下游组合二进制**(基座 + RDM 领域插件:两树一网与 `rdm.*` 追溯审计命令面)。 +与 dev 源同构的独立源仓机制:默认 `~/.cache/agent-system-svc/rdm-src` +(`SVC_RDM_SRC_DIR` 覆盖路径;克隆来源 `SVC_RDM_ORIGIN` 覆盖,缺省为 RDM 远端 ssh +地址),流程 = fetch → `worktree add --detach runtime/.worktrees/rdm-` → +`git submodule update --init --recursive`(物化 `pins/` 基座钉入组合)→ `make build` +(纯 Go,无需 npm)→ `bin/agent-system-rdm` 复制为环境二进制 → worktree 回收。 + +与基座部署的差异: + +- **插件目录按空集安装**:RDM 组合插件编译进二进制(`extension.RegisterCompiled`), + 无声明式插件资产;管理页「插件管理」列表只反映目录插件,组合插件经 + `/api/registry` 与命令面可见; +- **web/ 工作台**:RDM 自带零构建静态工作台(直连后端 API),deploy 时复制到 + `runtime//htdocs/`,用伴生 static 服务伺服 + (`scripts/svc.sh web deploy --kind static --dir runtime//htdocs`; + 注意该目录随本环境 `rm --purge` 一并删除); +- **启动兼容**:组合二进制容忍基座风格的首位 `serve` 子命令并提供 `version` + 子命令;svc 的 `version`/`serve -h` 探测带 timeout 护栏; +- **不支持** `--mock` 与 `--config`(组合 CLI 无此旗标);模型设置播种 + (`--model-*`/`--tavily-keys`)仅基座产物支持,rdm 源跳过(登记态 + `source=rdm@*` 即识别形态,跨裸 start/restart 稳定); +- **PG 档**:`db ` 绑定同样走 `AGENT_SYSTEM_DSN` 环境交付;RDM CLI 在 + `-dsn` 为空时回退读该环境变量(无 `config explain` 子命令时,svc 以 ELF 内静态 + 引用作能力证据)。 + +### 5.5 辅助 ```bash -scripts/svc.sh commits [dev|release] [N] # 可部署提交表(默认 20 条) -scripts/svc.sh deploy --pick # 交互式编号选择 -scripts/svc.sh deploy --dry-run # 只打印计划 +scripts/svc.sh commits [dev|release|rdm] [N] # 可部署提交表(默认 20 条) +scripts/svc.sh deploy --pick # 交互式编号选择 +scripts/svc.sh deploy --dry-run # 只打印计划 ``` `commits` 表格:dev 源标注 `[最新]`(源仓 origin/main 顶)与 `[已部署:<服务名>]` @@ -422,6 +455,7 @@ scripts/svc.sh update [name...] [--check] [--all] [--no-fetch] |---|---| | `local@` / `dev@` | 一律 `deploy --from dev@<远端 main 最新>`(独立部署源仓 + 隔离 worktree 构建;不 pull 主检出、不看工作树状态) | | `release@<版本>` | `deploy --from release@`(sha256 校验) | +| `rdm@` | `deploy --from rdm@`(组合二进制;见 §5.4) | 任一服务失败不中断其余服务;最终汇总 `成功/失败/跳过`。退出码:0 全部成功或最新; 1 有失败;2 用法错误。 @@ -615,7 +649,7 @@ scripts/svc.sh prod deploy --env .env.prod # 等价 | `pid` | 最近启动 pid | | `addr` | 监听地址(持久化,下次 start 复用) | | `tags` | 标签(逗号分隔) | -| `source` | 部署来源:`local@` / `dev@` / `release@<版本>` / `dir@<路径>` / `postgres@local` / `clone@<名>` | +| `source` | 部署来源:`local@` / `dev@` / `release@<版本>` / `rdm@` / `dir@<路径>` / `postgres@local` / `clone@<名>` | | `version` | 产物版本串(`agent-system version` 输出) | | `started` | 最近启动时间 | | `pidcheck` | 进程判定标记(见 §6.1) | diff --git a/scripts/svc.sh b/scripts/svc.sh index 01bbb6cf..70b4e1df 100755 --- a/scripts/svc.sh +++ b/scripts/svc.sh @@ -20,7 +20,7 @@ # scripts/svc.sh db copy [--db X] [--force] 跨实例搬库(双方须运行) # scripts/svc.sh db ls 实例内数据库列表 # scripts/svc.sh db set [...] 等价于 set -# scripts/svc.sh commits [dev|release] [N] 可部署提交列表(默认 dev,N=20) +# scripts/svc.sh commits [dev|release|rdm] [N] 可部署提交列表(默认 dev,N=20) # scripts/svc.sh history [name] [N] 事件历史(默认全部,最近 20 条) # scripts/svc.sh update [name] [--check] [--all] 检测远端最新并更新过时服务(与当前工作区状态无关) # scripts/svc.sh help [主题] 分主题详细帮助 @@ -32,7 +32,10 @@ # 隔离 worktree(runtime/.worktrees/)进行,不触碰当前工作区 # --from local 构建当前工作区(唯一写主检出构建产物的路径,均 gitignore) # --from release[@<版本|sha>] Releases 仓制品(sha256 对 versions//manifest.json 校验) -# --pick [dev|release] 交互式编号选提交;--dry-run 只打印部署计划 +# --from rdm[@] 下游组合仓 Agent-System-RDM(独立 RDM 源仓物化 pins/ 后 +# make build 出 agent-system-rdm 组合二进制;web/ 工作台静态 +# 资产随环境落 htdocs/,供伴生 static 服务 --dir 使用) +# --pick [dev|release|rdm] 交互式编号选提交;--dry-run 只打印部署计划 # # ════════════════════ 常用参数(服务级)════════════════════ # --config FILE / --env FILE dotenv 配置文件(KEY=VALUE;--env 为兼容别名) @@ -119,6 +122,10 @@ SVC_ENVFILE="" # dev 源的解析/列举/worktree 物化全部基于它——更新与部署因此不依赖当前工作区状态 # (脏树、任意分支均可);目录可随时删除,下次使用自动重建。 SRC_DIR="${SVC_SRC_DIR:-${XDG_CACHE_HOME:-$HOME/.cache}/agent-system-svc/src}" +# 独立 RDM 源仓(下游组合仓 Agent-System-RDM 的干净克隆;SVC_RDM_SRC_DIR 覆盖路径, +# SVC_RDM_ORIGIN 覆盖克隆来源)。rdm 源的解析/列举/物化全部基于它,语义与 SRC_DIR 一致。 +RDM_SRC_DIR="${SVC_RDM_SRC_DIR:-${XDG_CACHE_HOME:-$HOME/.cache}/agent-system-svc/rdm-src}" +RDM_ORIGIN_DEFAULT="ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-RDM.git" # 提示信息走 stderr:stdout 只留给数据(提交表/服务表/DSN),便于 $( ) 捕获组合。 c_info() { printf '\033[1;34m[svc]\033[0m %s\n' "$*" >&2; } @@ -252,7 +259,16 @@ EOF 依赖当前工作区状态的来源。 release[@<版本|sha>] 取 Releases 仓 build//agent-system(+plugins), sha256 对 versions//manifest.json 校验,不符即拒绝。 - --pick [dev|release] 交互式编号选择(需 TTY;列表与提示走 stderr) + rdm[@] 部署下游组合仓 Agent-System-RDM:独立 RDM 源仓 + (SVC_RDM_SRC_DIR,默认 ~/.cache/agent-system-svc/rdm-src, + 首次按 SVC_RDM_ORIGIN——缺省 RDM 远端——克隆)worktree 物化 + pins/ 子模块后 make build(纯 Go,无需 npm),产物 + bin/agent-system-rdm 复制为环境二进制;插件目录按空集安装 + (组合插件编译进二进制),web/ 工作台静态资产随环境落 + htdocs/(伴生 static 服务用 --dir 指向该目录)。 + 注意:rdm 源不支持 --mock 与 --config;模型设置播种 + (--model-*/--tavily-keys)仅基座产物支持。 + --pick [dev|release|rdm] 交互式编号选择(需 TTY;列表与提示走 stderr) --dry-run 只打印部署计划不执行 行为细节: @@ -566,7 +582,7 @@ parse_args() { --seed-owner) need_value "$@"; CLI_SEED_OWNER="$2"; shift 2 ;; --from) need_value "$@"; CLI_FROM="$2"; shift 2 ;; --pick) CLI_PICK="dev" - case "${2:-}" in dev|release) CLI_PICK="$2"; shift 2 ;; *) shift ;; esac ;; + case "${2:-}" in dev|release|rdm) CLI_PICK="$2"; shift 2 ;; *) shift ;; esac ;; --dry-run) CLI_DRYRUN=1; shift ;; --kind) need_value "$@"; CLI_KIND="$2"; shift 2 ;; --dir) need_value "$@"; CLI_DIR="$2"; shift 2 ;; @@ -867,7 +883,8 @@ agent_has_explicit_cfg() { # 旧实现 grep -- '--dsn' 永不命中,把现役二进制的 --dsn/--auth 误当不支持而丢弃)。 adjust_args_for_bin() { local bin="$1" args="$2" out - out="$("$bin" serve -h 2>&1 || true)" + # timeout 护栏:组合二进制若把 serve 当位置参数忽略而直接进入服务态,探测会挂死。 + out="$(timeout 5 "$bin" serve -h 2>&1 || true)" local filtered="" w drop_next=0 flag for w in $args; do case "$w" in @@ -924,6 +941,29 @@ svc_src_ready() { return 0 } +# rdm_src_ready:确保独立 RDM 源仓就绪(缺省从 RDM 远端克隆,SVC_RDM_ORIGIN 覆盖来源、 +# SVC_RDM_SRC_DIR 覆盖路径)并 fetch;--no-fetch 跳过网络。与 svc_src_ready 同构, +# 面向下游组合仓 Agent-System-RDM(构建组合二进制 agent-system-rdm)。 +RDM_SRC_READY_DONE=0 +rdm_src_ready() { + [ "$RDM_SRC_READY_DONE" = 1 ] && return 0 + if [ ! -d "$RDM_SRC_DIR/.git" ]; then + local url="${SVC_RDM_ORIGIN:-$RDM_ORIGIN_DEFAULT}" + c_info "初始化独立 RDM 源仓:$RDM_SRC_DIR(← $url;与当前工作区无关,可随时删除重建)" + mkdir -p "$(dirname "$RDM_SRC_DIR")" + if ! git clone --quiet "$url" "$RDM_SRC_DIR" >&2; then + c_err "RDM 源仓克隆失败:$url → $RDM_SRC_DIR(可用 SVC_RDM_ORIGIN 指定克隆来源)" + return 1 + fi + fi + if [ "${1:-}" != "--no-fetch" ]; then + c_info "git fetch(独立 RDM 源仓:$RDM_SRC_DIR)" + git -C "$RDM_SRC_DIR" fetch origin --quiet 2>/dev/null || c_warn "RDM 源仓 fetch 失败——基于本地缓存($RDM_SRC_DIR)" + fi + RDM_SRC_READY_DONE=1 + return 0 +} + deployed_envs() { local key="$1" d e s out="" for d in "$RUNTIME"/*/; do @@ -955,6 +995,22 @@ print_commit_list() { # SRC N PICK:提交表到 stdout;PICK=1 时填充 PICK printf ' %3d %-9s %-10s %s %s\n' "$n" "$h" "$date" "$subject" "$marks" [ "$pick" = 1 ] && PICK_OPTS+=("$h") done < <(git -C "$SRC_DIR" log -n "$count" --format="%h${sep}%ad${sep}%s" --date=short origin/main) + elif [ "$src" = rdm ]; then + rdm_src_ready || { c_err "RDM 源仓不可用,无法列出可部署提交"; return 1; } + c_info "RDM 仓提交(独立 RDM 源仓 $RDM_SRC_DIR 的 origin/main;倒序取 $count 条)——部署:scripts/svc.sh deploy --from rdm@" + printf ' %3s %-9s %-10s %s\n' '#' 'sha' '日期' '主题' + local latest_short; latest_short="$(git -C "$RDM_SRC_DIR" rev-parse --short origin/main 2>/dev/null || true)" + local n=0 h date subject marks envs + while IFS="$sep" read -r h date subject; do + [ -z "$h" ] && continue + n=$((n + 1)) + marks="" + [ "$h" = "$latest_short" ] && marks="${marks}[最新]" + envs="$(deployed_envs "rdm@$h")" + [ -n "$envs" ] && marks="${marks}[已部署:$envs]" + printf ' %3d %-9s %-10s %s %s\n' "$n" "$h" "$date" "$subject" "$marks" + [ "$pick" = 1 ] && PICK_OPTS+=("$h") + done < <(git -C "$RDM_SRC_DIR" log -n "$count" --format="%h${sep}%ad${sep}%s" --date=short origin/main) else c_info "Releases 仓提交($REL_ROOT;倒序取 $count 条)——部署:scripts/svc.sh deploy --from release@<版本>" printf ' %3s %-9s %-10s %-8s %-9s %s\n' '#' 'sha' '日期' '版本' 'dev提交' '主题' @@ -981,8 +1037,8 @@ print_commit_list() { # SRC N PICK:提交表到 stdout;PICK=1 时填充 PICK cmd_commits() { local src="${1:-dev}" count="${2:-20}" case "$src" in - dev|release) ;; - *) c_err "用法:scripts/svc.sh commits [dev|release] [N]"; exit 2 ;; + dev|release|rdm) ;; + *) c_err "用法:scripts/svc.sh commits [dev|release|rdm] [N]"; exit 2 ;; esac case "$count" in ''|*[!0-9]*|0) c_err "N 须为正整数"; exit 2 ;; esac [ "$src" = release ] && releases_root @@ -1059,8 +1115,23 @@ resolve_source() { # → SRC_KINDSRC(local|dev|release) + SRC_LABEL(+SRC_FULL/ SRC_KINDSRC=release SRC_LABEL="release@$REL_VERSION" ;; + rdm|rdm@*) + # 缺省 ref=origin/main(独立 RDM 源仓远端最新);显式 @ 亦可。 + local ref="origin/main" + case "$spec" in rdm@*) ref="${spec#rdm@}" ;; esac + rdm_src_ready || { c_err "独立 RDM 源仓不可用——rdm 源依赖它(可用 SVC_RDM_ORIGIN 指定克隆来源、SVC_RDM_SRC_DIR 指定路径)"; exit 2; } + local full + full="$(git -C "$RDM_SRC_DIR" rev-parse --verify --quiet "${ref}^{commit}")" || { + c_err "RDM 源仓无此提交:$ref(已自动 fetch;可用项:scripts/svc.sh commits rdm)" + exit 2 + } + SRC_KINDSRC=rdm + SRC_FULL="$full" + SRC_SHA="$(git -C "$RDM_SRC_DIR" rev-parse --short "$full")" + SRC_LABEL="rdm@$SRC_SHA" + ;; *) - c_err "无法解析 --from $spec(可用:local | dev[@] | release[@<版本|sha>])" + c_err "无法解析 --from $spec(可用:local | dev[@] | release[@<版本|sha>] | rdm[@])" exit 2 ;; esac @@ -1102,12 +1173,39 @@ materialize_dev_commit() { echo "$wt" } -# recycle_worktree SHA:回收构建 worktree(尽力而为)。 +# recycle_worktree SHA [REPO]:回收构建 worktree(尽力而为)。REPO 缺省为 Dev 源仓。 recycle_worktree() { + local repo="${2:-$SRC_DIR}" local wt="$RUNTIME/.worktrees/$1" c_info "[$ENV_NAME] 回收构建 worktree" - git -C "$SRC_DIR" worktree remove --force "$wt" >/dev/null 2>&1 \ - || c_warn "[$ENV_NAME] worktree 回收失败,可手动:git -C $SRC_DIR worktree remove --force $wt" + git -C "$repo" worktree remove --force "$wt" >/dev/null 2>&1 \ + || c_warn "[$ENV_NAME] worktree 回收失败,可手动:git -C $repo worktree remove --force $wt" +} + +# materialize_rdm_commit FULL SHA:RDM 源的隔离 worktree 物化+构建;stdout 只回显 +# worktree 路径。构建 = make build(纯 Go:pins/ 子模块经 go.mod replace 就位后无需 +# npm 与网络);产物固定为 bin/agent-system-rdm(缺失即失败,绝不装半成品)。 +materialize_rdm_commit() { + local full="$1" sha="$2" + local wt="$RUNTIME/.worktrees/rdm-$sha" + if [ -d "$wt" ]; then + c_info "[$ENV_NAME] 复用已有构建 worktree:$wt" + else + c_info "[$ENV_NAME] 物化 RDM 提交 $sha → 隔离 worktree(源:独立 RDM 源仓 $RDM_SRC_DIR,不触碰当前工作区)" + git -C "$RDM_SRC_DIR" worktree add --detach "$wt" "$full" >/dev/null || return 1 + fi + c_info "[$ENV_NAME] 物化基座 pins(git submodule update --init --recursive;缺对象时需网络)" + git -C "$wt" submodule update --init --recursive >&2 || { + c_err "[$ENV_NAME] pins 子模块物化失败(网络或对象缺失;重试会自动 fetch RDM 源仓)" + return 1 + } + c_info "[$ENV_NAME] 构建(make build:纯 Go,无需 npm)" + make -C "$wt" build >&2 || return 1 + [ -x "$wt/bin/agent-system-rdm" ] || { + c_err "[$ENV_NAME] 构建产物缺失:$wt/bin/agent-system-rdm(RDM Makefile 的 build 目标应产出该名称)" + return 1 + } + echo "$wt" } materialize_release() { @@ -1165,6 +1263,25 @@ agent_do_deploy() { release) materialize_release || { hist_event deploy fail "$(read_pid)" "物化/校验失败($SRC_LABEL)"; return 1; } ;; + rdm) + wt="$(materialize_rdm_commit "$SRC_FULL" "$SRC_SHA")" \ + || { hist_event deploy fail "$(read_pid)" "物化/构建失败($SRC_LABEL)"; return 1; } + # RDM 组合插件编译进二进制(provides 无声明式资产)——插件目录按空集安装。 + mkdir -p "$wt/.svc-empty-plugins" + install_artifacts "$wt/bin/agent-system-rdm" "$wt/.svc-empty-plugins" \ + || { hist_event deploy fail "$(read_pid)" "产物复制失败"; return 1; } + # RDM 自带零构建工作台(web/,直连后端 API 的静态资产)随环境落 htdocs/, + # 供伴生 static 服务直接 --dir 使用(注意:随本环境 rm --purge 一并删除)。 + if [ -d "$wt/web" ]; then + rm -rf "$ENV_DIR/htdocs" + if cp -r "$wt/web" "$ENV_DIR/htdocs"; then + c_ok "[$ENV_NAME] RDM 工作台就位:$ENV_DIR/htdocs(伴生服务:scripts/svc.sh ${ENV_NAME}web deploy --kind static --dir $ENV_DIR/htdocs)" + else + c_warn "[$ENV_NAME] RDM web/ 工作台复制失败(不影响 API 服务启动)" + fi + fi + recycle_worktree "rdm-$SRC_SHA" "$RDM_SRC_DIR" + ;; esac # 新产物承接能力复核(环境 DSN 交付):不支持即失败——绑定保持可恢复,不降级启动。 if [ "$DB_MODE" = pg ] && [ "$DB_SOURCE" != conffile ] && ! bin_env_dsn_supported "$ENV_BIN"; then @@ -1194,6 +1311,11 @@ print_agent_plan() { local art="$REL_ROOT/build/$REL_VERSION/agent-system" if [ -f "$art" ]; then printf ' 制品:%s(存在,将做 sha256 校验)\n' "$art" else printf ' 制品:%s(缺失!需先在 Releases 仓构建,或换版本)\n' "$art"; fi ;; + rdm) + printf ' 来源:%s(完整提交 %s;独立 RDM 源仓 %s)\n' "$SRC_LABEL" "$SRC_FULL" "$RDM_SRC_DIR" + printf ' 物化:worktree %s(pins submodule update --init --recursive + make build)\n' "$RUNTIME/.worktrees/rdm-$SRC_SHA" + printf ' 产物:%s ← bin/agent-system-rdm + 空插件目录(组合插件编译进二进制)\n' "$ENV_BIN" + printf ' 工作台:web/ → %s/htdocs(伴生 static:--kind static --dir 该目录)\n' "$ENV_DIR" ;; esac return 0 } @@ -1535,6 +1657,13 @@ bin_env_dsn_supported() { local out out="$(AGENT_SYSTEM_DSN='postgresql://svcprobe:svcprobe@127.0.0.1:9/svcprobe' "$1" config explain 2>/dev/null || true)" case "$out" in *svcprobe*) return 0 ;; esac + # 无 config explain 子命令的组合二进制(下游仓产物):静态证据兜底——ELF 二进制内 + # 引用 AGENT_SYSTEM_DSN 即视为消费环境层 DSN(下游经基座 extension.Main 的 env + # 回退生效)。仅对 ELF 生效:脚本文本必然含该字符串字样,会把「不支持」误判为 + # 「支持」(回归教训:test_svc 的 legacy 桩即脚本形态)。 + [ "$(head -c 4 "$1" 2>/dev/null)" = $'\x7fELF' ] || return 1 + command -v strings >/dev/null 2>&1 || return 1 + strings "$1" 2>/dev/null | grep -q 'AGENT_SYSTEM_DSN' && return 0 return 1 } @@ -1563,10 +1692,11 @@ agent_do_start() { check_port_free || return 1 if [ ! -x "$ENV_BIN" ]; then c_err "[$ENV_NAME] 环境产物缺失:$ENV_BIN" - c_err "请先部署:scripts/svc.sh $ENV_NAME deploy [--from local|dev[@]|release[@<版本>]]" + c_err "请先部署:scripts/svc.sh $ENV_NAME deploy [--from local|dev[@]|release[@<版本>]|rdm[@]]" return 1 fi - SVC_VERSION="$("$ENV_BIN" version 2>/dev/null || true)" + # timeout 护栏:组合二进制若不识别子命令可能直接进入服务态阻塞探测(旧产物形态)。 + SVC_VERSION="$(timeout 5 "$ENV_BIN" version 2>/dev/null || true)" # 统一解析数据库配置(复用与重建两路共用;失败拒绝启动,绝不静默回退 SQLite)。 # 2026-10-11 修复:复用 exec= 分支此前不查 dbref——G1-7 迁移把 --dsn 剥入环境后 # record_state 写回不含 DSN 的 exec=,重新绑定后的第二次裸 restart 即丢库。 @@ -1661,7 +1791,12 @@ agent_do_start() { record_state c_ok "[$ENV_NAME] 已启动 pid=$(read_pid) → http://$phost:${probe##*:}(来源 ${SVC_SOURCE:-?},日志:$ENV_DIR/svc.log)" hist_event start ok "$(read_pid)" "http://$phost:${probe##*:}" - seed_settings "$phost" "${probe##*:}" + # rdm 组合产物无 user/apikey CLI 子命令:设置播种(--model-*/--tavily-keys)仅 + # 基座产物支持;记录态 svc.env 的 source=rdm@* 跨裸 start/restart 稳定标识形态。 + case "${SVC_SOURCE:-}" in + rdm@*) ;; + *) seed_settings "$phost" "${probe##*:}" ;; + esac return 0 fi pid_alive "$(read_pid)" || { @@ -1709,6 +1844,12 @@ static_do_deploy() { hist_event deploy fail "$(read_pid)" "release 源不支持 static" return 1 ;; + rdm) + c_err "[$ENV_NAME] rdm 源不支持 static 构建(RDM 工作台为 agent 环境内 htdocs/ 的零构建资产)" + c_err " 用法:先 deploy --from rdm,再 scripts/svc.sh deploy --kind static --dir /htdocs" + hist_event deploy fail "$(read_pid)" "rdm 源不支持 static" + return 1 + ;; esac [ -d "$src_dist" ] || { c_err "[$ENV_NAME] 前端产物缺失:$src_dist"; hist_event deploy fail "$(read_pid)" "dist 缺失"; return 1; } mkdir -p "$ENV_DIR" @@ -3231,11 +3372,12 @@ cmd_update() { fi [ "${#targets[@]}" -gt 0 ] || { c_info "暂无已登记服务(db create / deploy 会登记)"; return 0; } - # 按目标来源决定访问哪些仓:local@/dev@ 走独立部署源仓;release@ 走 Releases 仓。 - local latest_sha="" latest_rel="" need_rel=0 need_dev=0 e_src + # 按目标来源决定访问哪些仓:local@/dev@ 走独立部署源仓;release@ 走 Releases 仓; + # rdm@ 走独立 RDM 源仓。 + local latest_sha="" latest_rel="" latest_rdm="" need_rel=0 need_dev=0 need_rdm=0 e_src for e in ${targets[@]+"${targets[@]}"}; do e_src="$(sed -n 's/^source=//p' "$RUNTIME/$e/svc.env" | head -1)" - case "$e_src" in release@*) need_rel=1 ;; local@*|dev@*) need_dev=1 ;; esac + case "$e_src" in release@*) need_rel=1 ;; local@*|dev@*) need_dev=1 ;; rdm@*) need_rdm=1 ;; esac done local fetch_note="" src_args="" [ "$CLI_NOFETCH" = 1 ] && { fetch_note="--no-fetch,基于本地缓存引用"; src_args="--no-fetch"; } @@ -3257,6 +3399,13 @@ cmd_update() { latest_rel="$(git -C "$REL_ROOT" ls-tree --name-only "$rel_head:versions" 2>/dev/null | sort -V | tail -1 || true)" fi fi + if [ "$need_rdm" = 1 ]; then + if rdm_src_ready $src_args; then + latest_rdm="$(git -C "$RDM_SRC_DIR" rev-parse --verify --quiet origin/main || true)" + else + c_warn "独立 RDM 源仓不可用——rdm 源服务本轮无法检测与更新" + fi + fi # 逐服务分析:状态判定 + 收集可更新动作。 c_info "更新检测($fetch_note;root: $ROOT)" @@ -3313,6 +3462,25 @@ cmd_update() { fi fi ;; + rdm@*) + cur="${src##*@}" + if [ -z "$latest_rdm" ]; then + state="RDM 远端 main 未知"; latest_disp="-" + elif ! git -C "$RDM_SRC_DIR" cat-file -e "${cur}^{commit}" 2>/dev/null; then + state="提交不在 RDM 远端(不自动更新;重新 deploy 可纳入更新轨道)" + latest_disp="$(git -C "$RDM_SRC_DIR" rev-parse --short "$latest_rdm" 2>/dev/null || echo "-")" + elif [ "${latest_rdm:0:${#cur}}" = "$cur" ]; then + state="✓ 最新"; latest_disp="$(git -C "$RDM_SRC_DIR" rev-parse --short "$latest_rdm" 2>/dev/null || echo "-")" + elif git -C "$RDM_SRC_DIR" merge-base --is-ancestor "$cur" "$latest_rdm" 2>/dev/null; then + to="$(git -C "$RDM_SRC_DIR" rev-parse --short "$latest_rdm" 2>/dev/null || true)" + latest_disp="$to" + state="可更新" + elif git -C "$RDM_SRC_DIR" merge-base --is-ancestor "$latest_rdm" "$cur" 2>/dev/null; then + state="领先 RDM 远端 main(不动作)"; latest_disp="$(git -C "$RDM_SRC_DIR" rev-parse --short "$latest_rdm" 2>/dev/null || echo "-")" + else + state="与 RDM 远端 main 分叉(不自动更新)"; latest_disp="-" + fi + ;; *) state="来源未知(重新 deploy 后可参与更新)" ;; esac @@ -3346,6 +3514,7 @@ cmd_update() { case "$from" in local@*|dev@*) deploy_from="dev@$tov" ;; release@*) deploy_from="release@$tov" ;; + rdm@*) deploy_from="rdm@$tov" ;; esac c_info "[$name] 更新:$from → $tov($deploy_from)" hist_event update begin "$(read_pid)" "from=$from to=$tov" diff --git a/tests/test_svc.py b/tests/test_svc.py index c4957261..7ba2b4ad 100644 --- a/tests/test_svc.py +++ b/tests/test_svc.py @@ -669,5 +669,78 @@ class SvcDbRecoveryTests(unittest.TestCase): self.assertNotIn("apikey", self.cli_record()) # 认证关闭不铸 key + # ---- 13. rdm 部署源(下游组合仓 Agent-System-RDM):物化/产物/工作台/播种跳过 ---- + + def make_rdm_repo(self): + """构造下游组合仓夹具:Makefile build 产出桩 agent-system-rdm + web/ 工作台。""" + remote = self.root / "rdmremote.git" + work = self.root / "rdmwork" + run = lambda cwd, *args: subprocess.run( + ["git", *args], cwd=cwd, env=self.env, text=True, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, timeout=60, + check=True) + run(self.root, "init", "--bare", "--initial-branch=main", str(remote)) + run(self.root, "init", "--initial-branch=main", str(work)) + (work / "Makefile").write_text( + "build:\n\tmkdir -p bin\n\tcp %s bin/agent-system-rdm\n" % self.stub) + (work / "web").mkdir() + (work / "web" / "index.html").write_text("rdm workbench\n") + run(work, "add", ".") + run(work, "commit", "-m", "rdm v1") + run(work, "remote", "add", "origin", str(remote)) + run(work, "push", "-u", "origin", "main") + return remote, work + + def rdm_env(self, remote): + env = dict(self.env) + env.update({ + "SVC_RDM_SRC_DIR": str(self.root / "rdmcache"), + "SVC_RDM_ORIGIN": str(remote), + "SVC_MODEL_BASE": "https://stub.example/v1", + "SVC_MODEL_KEY": "sk-stub-model", + "SVC_MODEL_NAME": "stub-model", + }) + return env + + def test_rdm_source_deploy_end_to_end(self): + remote, work = self.make_rdm_repo() + env = self.rdm_env(remote) + result = self.svc("rdm1", "deploy", "--from", "rdm", "--port", "18841", env=env) + d = self.runtime("rdm1") + # 组合二进制复制改名落位、插件目录空集、工作台静态资产落 htdocs/。 + self.assertTrue((d / "bin" / "agent-system").exists()) + self.assertTrue((d / "bin" / "agent-system").stat().st_mode & 0o111) + self.assertEqual(self.kv("rdm1", "kind"), "agent") + self.assertTrue(self.kv("rdm1", "source").startswith("rdm@")) + self.assertEqual(list((d / "plugins").iterdir()), []) + self.assertIn("rdm workbench", (d / "htdocs" / "index.html").read_text()) + self.assertIn("args:", self.serve_record()) # 健康通过即登记启动参数 + # rdm 形态跳过设置播种(无 user/apikey 子命令):给了模型键也不产生 PUT/CLI。 + self.assertFalse((self.trace / "put.txt").exists()) + self.assertNotIn("user list", self.cli_record()) + + def test_rdm_source_commits_and_update_track(self): + remote, work = self.make_rdm_repo() + env = self.rdm_env(remote) + # commits rdm 列出来自独立 RDM 源仓的可部署提交。 + result = self.svc("commits", "rdm", env=env) + self.assertIn("RDM 仓提交", result.stdout) + self.assertIn("rdm v1", result.stdout) + # 部署 v1 → 远端推进 v2 → update 检测可更新并真更新(source 保持 rdm@ 轨道)。 + self.svc("rdm1", "deploy", "--from", "rdm", "--port", "18842", env=env) + old = self.kv("rdm1", "source") + (work / "marker").write_text("v2\n") + subprocess.run(["git", "add", "."], cwd=work, env=self.env, timeout=60, check=True) + subprocess.run(["git", "commit", "-m", "rdm v2"], cwd=work, env=self.env, + timeout=60, check=True) + subprocess.run(["git", "push"], cwd=work, env=self.env, timeout=60, check=True) + self.svc("update", "rdm1", "--check", env=env) + self.svc("update", "rdm1", env=env) + new = self.kv("rdm1", "source") + self.assertTrue(new.startswith("rdm@")) + self.assertNotEqual(new, old) + self.assertIn("args:", self.serve_record()) # 更新后健康在跑 + + if __name__ == "__main__": unittest.main()