From 67d6fd81cd8686bd2bd0bd5e93a868eafe59226f Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 01:14:27 +0000 Subject: [PATCH] Require the real lifecycle gate and fault rollback Why: The live deploy journal never called fault injection, and test-lifecycle failed closed on login so CI could not require the real combination cases. Evidence: SELF python3 -m unittest tests.test_svc_u2.U2ReleaseTests -q exit 0 (35 ok, 1 skipped) on 3602a87; receipt sha256 9b5785577751e8e9e7947cf9700fb8854b1c80142f34273ae25f3097ee4c9aa8. Impact: test-pg builds the Dev binary and runs make test-lifecycle. Login and full-track deploy without SVC_RDM_ORIGIN stay NOT_RUN. No live data move and no account CLI. Refs: recovery plan D2/D3; Dev #485 Co-authored-by: Cursor --- .gitea/workflows/ci.yaml | 14 ++++- .task/feature-svc-d3-lifecycle-gate.md | 46 +++++++++++++- Makefile | 2 +- PROJECT.md | 2 +- scripts/svc.sh | 1 + .../integration/lifecycle/lifecycle_suite.py | 60 +++++++++++-------- tests/test_svc_u2.py | 47 +++++++++++++++ 7 files changed, 141 insertions(+), 31 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 64b3c18a..a9e0a399 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -409,15 +409,25 @@ jobs: GIT_CONFIG_VALUE_2 GIT_CONFIG_KEY_3 GIT_CONFIG_VALUE_3 unset SUBMODULE_TOKEN make -C rdm build - - name: Real-combination identity gates over real PostgreSQL (U3, required) + - name: Install Node 22 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz + tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" + - name: Build the real agent-system binary + run: make build + - name: Real-combination lifecycle gate (make test-lifecycle, required) env: AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable run: | set -euo pipefail # 路径变量在脚本内解析(YAML env: 不做 shell 展开)。 + # 不设 SVC_RDM_ORIGIN:全轨 git 部署由 svc-realcombo 作业覆盖。 export SVC_TEST_REAL=1 SVC_TEST_PG=1 + export SVC_REAL_BIN="$PWD/bin/agent-system" export SVC_REAL_RDM_BIN="$PWD/rdm/bin/agent-system-rdm" - python3 -m unittest tests.test_svc_realcombo -v + export SVC_RDM_SRC_DIR="$PWD/rdm" + make test-lifecycle # U3(统一部署方案):真实 Dev/RDM 制品的 svc.sh 生命周期门禁——桩套件 # (test_svc*.py)只证明脚本逻辑;本作业证明「声明≠能力」的最后一道:真实 diff --git a/.task/feature-svc-d3-lifecycle-gate.md b/.task/feature-svc-d3-lifecycle-gate.md index b63fa020..f8c26e1d 100644 --- a/.task/feature-svc-d3-lifecycle-gate.md +++ b/.task/feature-svc-d3-lifecycle-gate.md @@ -7,7 +7,7 @@ - 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 5212fef01e59b7f9e12fa7fc42cd987c6792a786 - 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-svc-d3-lifecycle-gate(worktree);分支:feature/svc-d3-lifecycle-gate -- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> +- 授权与交付终点:补齐 D2 故障注入与健康超时回退测试,并把 `make test-lifecycle` 接到 test-pg。不搬迁 live 数据,不公共化账户 CLI。登录保持 NOT_RUN。 - 交付模式:manual(前序人工决策,智能体 Review/合入);其他阶段明确授权后可记为 authorized-continuous - 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入) - 自动推进授权:无;授权范围:无;授权来源:无;授权终点:无;停止条件:无(未授权) @@ -16,7 +16,9 @@ ## 目标与非目标 -<预期结果、受影响入口/模块/契约;明确不做什么。> +预期:`svc_journal_write` 在活路径上调用故障注入;健康检查未通过时回退上一版本;`make test-lifecycle` 在缺 PG、RDM 源码、Dev 制品或 RDM 制品时失败,齐备时跑 `tests.test_svc_realcombo`。登录与未设置 `SVC_RDM_ORIGIN` 的全轨部署标 NOT_RUN。 + +不做:搬迁 rdm1/rdmcand/dev 数据;公共化 `user`/`apikey`;对 live 实例故障注入。 ## 关联方向与规划 @@ -28,7 +30,7 @@ | ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | |---|---|---|---|---|---|---| -| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 | +| R1 | D3 生命周期门禁跑真实组合,登录保持 NOT_RUN | 符合恢复方案 r3.1 D3;账户 CLI 不在本轮公共化 | 高 | test-pg 必跑 make test-lifecycle;缺制品失败;登录单独 NOT_RUN | 账户方案 U7/U5 | 实施 | ## 方案与计划 @@ -130,3 +132,41 @@ "receipt_sha256": "e12edd2be9f01f226b6dbaa887f42f1ab09c47a0d996d0d1e974cbe7a384e8c6" } ``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T01:12:53.422770+00:00", + "command": "python3 -m unittest tests.test_svc_u2.U2ReleaseTests -q", + "command_sha256": "50b6d5dfb726f7ae76c19d56856d73b2f1b10a9bb0d36e048c504b69b5606cc0", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-svc-d3-lifecycle-gate", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "3602a8735471cc9eb8bf3ffcaa378ecd3b146486", + "branch": "feature/svc-d3-lifecycle-gate", + "target_branch": "main", + "target_head": "5212fef01e59b7f9e12fa7fc42cd987c6792a786", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-svc-d3-lifecycle-gate.md\n M Makefile\n M PROJECT.md\n M scripts/svc.sh\n M tests/integration/lifecycle/lifecycle_suite.py\n M tests/test_svc_u2.py\n", + "tracked_diff_sha256": "b79e6dacb40c2ed6008570fd2a158b588c84eaa66405a064504f6e5967aa8ce4", + "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 0f192a481388184df39f81c28b0587a7e16ec3ca modules/backend (v0.3.0-138-g0f192a4)\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 ba289e7b1780a29855aef8477bf1ac49bd563eb2 modules/backend/deps/agent-system-core (v0.3.0-10-gba289e7)\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 ba289e7b1780a29855aef8477bf1ac49bd563eb2 modules/core (v0.3.0-10-gba289e7)\n cf74a200e877d898d928052e6738681be2b670fc modules/documents (heads/main)\n 43d1933b8c3377ae548eb495305e9f0de29dcb59 modules/frontend (v0.3.0-74-g43d1933)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "3602a8735471cc9eb8bf3ffcaa378ecd3b146486", + "branch": "feature/svc-d3-lifecycle-gate", + "target_branch": "main", + "target_head": "5212fef01e59b7f9e12fa7fc42cd987c6792a786", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-svc-d3-lifecycle-gate.md\n M Makefile\n M PROJECT.md\n M scripts/svc.sh\n M tests/integration/lifecycle/lifecycle_suite.py\n M tests/test_svc_u2.py\n", + "tracked_diff_sha256": "b79e6dacb40c2ed6008570fd2a158b588c84eaa66405a064504f6e5967aa8ce4", + "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 0f192a481388184df39f81c28b0587a7e16ec3ca modules/backend (v0.3.0-138-g0f192a4)\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 ba289e7b1780a29855aef8477bf1ac49bd563eb2 modules/backend/deps/agent-system-core (v0.3.0-10-gba289e7)\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 ba289e7b1780a29855aef8477bf1ac49bd563eb2 modules/core (v0.3.0-10-gba289e7)\n cf74a200e877d898d928052e6738681be2b670fc modules/documents (heads/main)\n 43d1933b8c3377ae548eb495305e9f0de29dcb59 modules/frontend (v0.3.0-74-g43d1933)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "----------------------------------------------------------------------\nRan 35 tests in 74.099s\n\nOK (skipped=1)\n", + "output_sha256": "f6f6e168c63100a9c04baf61091129f1a8180348e2d5e55708c30a35efe4dab4", + "receipt_sha256": "9b5785577751e8e9e7947cf9700fb8854b1c80142f34273ae25f3097ee4c9aa8" +} +``` diff --git a/Makefile b/Makefile index 3dc10e86..cec357de 100644 --- a/Makefile +++ b/Makefile @@ -113,7 +113,7 @@ test-backend-pg: cd $(BACKEND) && go test -count=1 ./... # 真实 Dev/RDM + PostgreSQL 生命周期门禁。缺环境直接失败,不静默跳过。 -# 登录入口未就绪时套件保持失败(NOT_RUN),不把 D3 报成完成。 +# 登录单独标 NOT_RUN(依赖账户方案 U7/U5),不把其余真实组合场景记成失败。 test-lifecycle: @test -n "$${AGENT_PG_TEST_DSN}" || { echo "test-lifecycle: AGENT_PG_TEST_DSN 未设置(真实 PostgreSQL 必需,不静默跳过)"; exit 1; } @test -n "$${SVC_RDM_SRC_DIR}" || { echo "test-lifecycle: SVC_RDM_SRC_DIR 未设置(RDM 检出必需,不静默跳过)"; exit 1; } diff --git a/PROJECT.md b/PROJECT.md index 1d30a922..4e0ccd7f 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -41,7 +41,7 @@ U2 起实施与部署分别评审。 - [服务重启与全量数据恢复方案 r3.1](modules/documents/docs/proposals/2026-10-12-service-restart-data-recovery.md): svc 启停、异常进程/主机退出后的依赖、配置/数据身份、任务/HITL/副作用、文件与组合备份恢复; r2 已批准。r3.1 增补 D1 实例身份收尾、D2 可回滚切换、D3 真实组合门禁,并记录 2026-10-12 rdmcand 数据归属:会话不在 dev 库的 rdmcand 窗口内,领域事件为空,不跨实例搬迁。 - D1/D2/D3 按实施计划推进到可合入;r3 其余未批条款仍待人工评审。 + D1 与 D2 已合入 Backend #184、RDM #291、Dev #485。D3 的 `make test-lifecycle` 跑真实组合用例;登录仍是 NOT_RUN,依赖账户方案 U7/U5,不在本轮公共化账户 CLI。r3 其余未批条款仍待人工评审。 - [svc 统一部署与一次性登录 Key 方案 r1](modules/documents/docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md): 二进制/源码统一部署、环境准备、无初始密码开户与账户恢复;一次性 Key 仅兑换设密受限会话; diff --git a/scripts/svc.sh b/scripts/svc.sh index 203a051e..70c5d196 100755 --- a/scripts/svc.sh +++ b/scripts/svc.sh @@ -2074,6 +2074,7 @@ with open(tmp, "w") as f: f.write(json.dumps(j, ensure_ascii=False) + "\n") os.replace(tmp, out) PYJ + svc_fault_check "$phase" } svc_journal_get() { # KEY → 值(journal 缺失/损坏 → 空) diff --git a/tests/integration/lifecycle/lifecycle_suite.py b/tests/integration/lifecycle/lifecycle_suite.py index f3d0a193..c7e187fa 100644 --- a/tests/integration/lifecycle/lifecycle_suite.py +++ b/tests/integration/lifecycle/lifecycle_suite.py @@ -1,9 +1,11 @@ """真实 Dev/RDM 组合门禁。由 make test-lifecycle 调用。 缺 PostgreSQL、RDM 源码或制品时直接失败,不静默跳过。 -RDM 登录依赖账户 CLI 公共化(账户方案 U7/U5),当前标 NOT_RUN,本套件因此不能报完成。 +登录依赖账户 CLI 公共化(账户方案 U7/U5),单独标 NOT_RUN, +不因此把已经跑过的真实组合场景记成失败。 """ import os +import subprocess import sys from pathlib import Path @@ -15,32 +17,42 @@ def main(): missing = [] if not os.environ.get("AGENT_PG_TEST_DSN"): missing.append("AGENT_PG_TEST_DSN") - if not os.environ.get("SVC_RDM_SRC_DIR") or not Path(os.environ.get("SVC_RDM_SRC_DIR", "")).is_dir(): + src = os.environ.get("SVC_RDM_SRC_DIR", "") + if not src or not Path(src).is_dir(): missing.append("SVC_RDM_SRC_DIR") - if not (ROOT / "bin" / "agent-system").is_file() and not os.environ.get("SVC_DEV_BIN"): - missing.append("Dev 制品(make build 或 SVC_DEV_BIN)") + dev = os.environ.get("SVC_REAL_BIN") or str(ROOT / "bin" / "agent-system") + rdm = os.environ.get("SVC_REAL_RDM_BIN", "") + if not Path(dev).is_file(): + missing.append("Dev 制品(SVC_REAL_BIN 或 bin/agent-system)") + if not rdm or not Path(rdm).is_file(): + missing.append("RDM 制品(SVC_REAL_RDM_BIN)") + if missing: + print("test-lifecycle 失败。缺:%s" % ", ".join(missing)) + return 1 + print("组合清单") print("pin", PIN.read_text().strip()) - print("login NOT_RUN:RDM 二进制没有 user/apikey,工作台登录依赖账户 CLI 公共化") - scenarios = [ - "双向混合批次更新", - "无 manifest 各入口一致", - "legacy/缺行/不匹配停服前拒绝", - "两次裸重启与换端口换版本换目录", - "构建失败与启动失败回滚", - "中断对账", - "PG 绑定与跨实例错绑拒绝", - "凭据不进 cmdline/日志", - "RDM 页面、rdm.ping、升级前领域数据仍在", - "登录", - ] - for name in scenarios: - state = "NOT_RUN" if missing or name == "登录" else "PENDING" - print("%s %s" % (state, name)) - if missing or True: - # 登录依赖未就绪时保持未完成。缺环境同样失败。 - print("test-lifecycle 未完成。缺:%s" % (", ".join(missing) if missing else "登录入口")) - return 1 + print("rdm_src", src) + print("dev_bin", dev) + print("rdm_bin", rdm) + print("将运行 tests.test_svc_realcombo:SQLite 身份、RDM 二进制生命周期、PostgreSQL 身份环境交付") + if os.environ.get("SVC_RDM_ORIGIN"): + print("将运行全轨部署:SVC_RDM_ORIGIN 已设置") + else: + print("全轨部署 NOT_RUN:未设置 SVC_RDM_ORIGIN(由 svc-realcombo 作业覆盖)") + print("登录 NOT_RUN:RDM 二进制没有 user/apikey,工作台登录依赖账户方案 U7/U5") + env = os.environ.copy() + env["SVC_TEST_REAL"] = "1" + env["SVC_TEST_PG"] = "1" + env["SVC_REAL_BIN"] = dev + env["SVC_REAL_RDM_BIN"] = rdm + proc = subprocess.run( + [sys.executable, "-m", "unittest", "tests.test_svc_realcombo", "-q"], + cwd=str(ROOT), env=env) + if proc.returncode != 0: + print("test-lifecycle 失败:真实组合用例未通过") + return proc.returncode + print("test-lifecycle 可跑场景通过;登录与未设 origin 的全轨部署保持 NOT_RUN") return 0 diff --git a/tests/test_svc_u2.py b/tests/test_svc_u2.py index a82500b7..eff05791 100644 --- a/tests/test_svc_u2.py +++ b/tests/test_svc_u2.py @@ -229,6 +229,53 @@ class U2ReleaseTests(tsi.IdentityTests): # ---- T5:legacy 布局未迁移 → 裸 start/restart 仍走原路径(兼容) ---- + def test_U2_fault_after_switch_rolls_back_on_next_start(self): + self.seed_agent("u2f", 9466) + self.set_makefile(self.stub) + self.svc("u2f", "deploy", "--from", "local") + v1 = self.cur_release("u2f") + self.svc("u2f", "stop") + env = dict(self.env) + env["SVC_TEST_FAULTS"] = "1" + env["SVC_FAULT_AT"] = "switched" + result = self.svc("u2f", "deploy", "--from", "local", check=False, env=env) + self.assertEqual(result.returncode, 86, result.stdout) + self.assertIn("故障注入于 switched", result.stdout) + result = self.svc("u2f", "start") + self.assertIn("已回退上一版本", result.stdout) + self.assertEqual(self.cur_release("u2f"), v1) + self.assertTrue(self.running("u2f")) + self.svc("u2f", "stop") + + def test_U2_health_timeout_rolls_back(self): + self.seed_agent("u2g", 9467) + self.set_makefile(self.stub) + self.svc("u2g", "deploy", "--from", "local") + v1 = self.cur_release("u2g") + good = self.active_bin("u2g").read_bytes() + self.set_makefile(self.hang_stub()) + result = self.svc("u2g", "deploy", "--from", "local", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("健康检查未通过", result.stdout) + self.assertIn("已回退上一版本", result.stdout) + self.assertEqual(self.cur_release("u2g"), v1) + self.assertEqual(self.active_bin("u2g").read_bytes(), good) + self.assertTrue(self.running("u2g")) + self.svc("u2g", "stop") + + def hang_stub(self): + """identity 可用、serve 挂起且不监听,用来触发健康检查超时。""" + p = self.root / "stub-agent-system-hang" + if not p.exists(): + stub = tsr.STUB + head, sep, tail = stub.partition(" serve)") + assert sep, "STUB 缺 serve 分支锚点" + _, sep2, tail2 = tail.partition(' wait "$child"\n ;;') + assert sep2, "STUB 缺 serve 分支结尾锚点" + p.write_text(head + " serve)\n shift\n sleep 60\n exit 0 ;;" + tail2) + p.chmod(0o755) + return p + def test_U2_legacy_layout_bare_lifecycle_still_works(self): self.seed_agent("u2e", 9465) self.start_ok("u2e")