diff --git a/server-tools/lake-lamp-authz/architecture-provision-broker.js b/server-tools/lake-lamp-authz/architecture-provision-broker.js index afd7052..bf9b3a8 100644 --- a/server-tools/lake-lamp-authz/architecture-provision-broker.js +++ b/server-tools/lake-lamp-authz/architecture-provision-broker.js @@ -8,7 +8,7 @@ const { execFile } = require("node:child_process"); const SOCKET_PATH = process.env.LAKE_LAMP_ARCHITECTURE_PROVISION_SOCKET || "/run/guanghu-architecture-provision/provision.sock"; const REPO_DIR = process.env.ARCHITECTURE_PROVISION_REPO_DIR || "/var/lib/guanghu/architecture-provision/repo"; -const REPO_URL = process.env.ARCHITECTURE_PROVISION_REPO_URL || "https://guanghulab.com/fifth-domain/bingshuo/fifth-domain.git"; +const REPO_URL = process.env.ARCHITECTURE_PROVISION_REPO_URL || "https://guanghulab.com/code/bingshuo/guanghu-ice-heart.git"; const RELEASES_DIR = process.env.ARCHITECTURE_PROVISION_RELEASES_DIR || "/opt/guanghu/architecture-releases"; const UNIT_DIR = process.env.ARCHITECTURE_PROVISION_UNIT_DIR || "/etc/systemd/system"; const RECEIPTS_DIR = process.env.ARCHITECTURE_PROVISION_RECEIPTS_DIR || "/var/lib/guanghu/architecture-provision/receipts"; diff --git a/server-tools/lake-lamp-authz/architecture-provision-broker.test.js b/server-tools/lake-lamp-authz/architecture-provision-broker.test.js index 398dead..7679022 100644 --- a/server-tools/lake-lamp-authz/architecture-provision-broker.test.js +++ b/server-tools/lake-lamp-authz/architecture-provision-broker.test.js @@ -27,6 +27,14 @@ test("resource and manifest are immutable and path constrained", () => { assert.equal(validateManifest(manifest(), { requestId, commit }).unit, "example.service"); }); +test("architecture deployment defaults to the current Fifth Domain code channel", () => { + const source = fs.readFileSync(path.join(__dirname, "architecture-provision-broker.js"), "utf8"); + const environment = fs.readFileSync(path.join(__dirname, "authorization.env.example"), "utf8"); + assert.match(source, /https:\/\/guanghulab\.com\/code\/bingshuo\/guanghu-ice-heart\.git/); + assert.match(environment, /^ARCHITECTURE_PROVISION_REPO_URL=https:\/\/guanghulab\.com\/code\/bingshuo\/guanghu-ice-heart\.git$/m); + assert.doesNotMatch(source, /ARCHITECTURE_PROVISION_REPO_URL \|\| "https:\/\/guanghulab\.com\/fifth-domain\//); +}); + test("unit requires non-root systemd hardening and release placeholder", () => { const unit = "[Service]\nUser=guanghu\nGroup=guanghu\nNoNewPrivileges=true\nPrivateTmp=true\nProtectSystem=strict\nProtectHome=true\nExecStart=/usr/bin/node __RELEASE_ROOT__/server.js\n"; assert.equal(validateUnit(unit), unit); diff --git a/server-tools/lake-lamp-authz/authorization.env.example b/server-tools/lake-lamp-authz/authorization.env.example index 485f348..2d359ec 100644 --- a/server-tools/lake-lamp-authz/authorization.env.example +++ b/server-tools/lake-lamp-authz/authorization.env.example @@ -21,7 +21,7 @@ SMTP_PORT=465 SMTP_USER=SET_IN_PRIVATE_SERVER_FILE QQ_SMTP_AUTH_CODE=SET_IN_PRIVATE_SERVER_FILE LAKE_LAMP_ARCHITECTURE_PROVISION_SOCKET=/run/guanghu-architecture-provision/provision.sock -ARCHITECTURE_PROVISION_REPO_URL=https://guanghulab.com/fifth-domain/bingshuo/fifth-domain.git +ARCHITECTURE_PROVISION_REPO_URL=https://guanghulab.com/code/bingshuo/guanghu-ice-heart.git ARCHITECTURE_PROVISION_REPO_DIR=/var/lib/guanghu/architecture-provision/repo ARCHITECTURE_PROVISION_RELEASES_DIR=/opt/guanghu/architecture-releases ARCHITECTURE_PROVISION_UNIT_DIR=/etc/systemd/system diff --git a/tonggan-bridge/BRIDGE-REGISTRY.json b/tonggan-bridge/BRIDGE-REGISTRY.json index df5906e..b33ed8e 100644 --- a/tonggan-bridge/BRIDGE-REGISTRY.json +++ b/tonggan-bridge/BRIDGE-REGISTRY.json @@ -9,7 +9,7 @@ "records": [ { "bridge_id": "TGB-20260727-001", - "state": "BLOCKED_RUNTIME_NOT_DEPLOYED", + "state": "BLOCKED_SOURCE_REPOSITORY_MISMATCH", "record_path": "tonggan-bridge/records/TGB-20260727-001.json", "reasoning_path": "tonggan-bridge/reasoning/TGB-20260727-001.hdlp", "repo": "bingshuo/guanghu-ice-heart", diff --git a/tonggan-bridge/bridge-registry.test.js b/tonggan-bridge/bridge-registry.test.js index 447df36..ad4318a 100644 --- a/tonggan-bridge/bridge-registry.test.js +++ b/tonggan-bridge/bridge-registry.test.js @@ -29,12 +29,13 @@ test("every bridge record binds one existing immutable engineering commit and sa } }); -test("blocked bridge stores no fabricated workorder or deployment receipt", () => { +test("blocked bridge stores the approved failed-before-mutation workorder without secrets", () => { const workorder = readJson("tonggan-bridge/workorders/TGB-20260727-001.json"); const receipt = readJson("tonggan-bridge/receipts/TGB-20260727-001.json"); - assert.equal(workorder.workorder_id, null); - assert.equal(workorder.owner_email_approval, "not_requested"); - assert.equal(receipt.deployment_result, "NOT_DEPLOYED"); + assert.equal(workorder.workorder_id, "56f6ca23-d242-4fab-88f3-81fed692e00d"); + assert.equal(workorder.owner_email_approval, "approved"); + assert.equal(receipt.deployment_result, "FAILED_BEFORE_MUTATION"); + assert.equal(receipt.diagnostic_code, "DEPLOYMENT_SOURCE_COMMIT_NOT_FOUND_IN_CONFIGURED_REPOSITORY"); assert.equal(receipt.server_runtime_proven, false); assert.equal(receipt.public_route_proven, false); assert.doesNotMatch(JSON.stringify({ workorder, receipt }), /Bearer |session_token|approval_token|password|private_key/i); diff --git a/tonggan-bridge/reasoning/TGB-20260727-001.hdlp b/tonggan-bridge/reasoning/TGB-20260727-001.hdlp index 1485c4a..9a7b291 100644 --- a/tonggan-bridge/reasoning/TGB-20260727-001.hdlp +++ b/tonggan-bridge/reasoning/TGB-20260727-001.hdlp @@ -50,3 +50,14 @@ ICE-P 规范编号已成为仓库事实 - 常驻 Agent 必须证明:提交 SHA、清单同名绑定、旧单元存在、备份完成、重启完成、四项本机验收通过或全部回滚。 - 语言层必须再证明:公开 `/api/ai/v1/subjects`、两个旧编号解析、`REPO-012` 解析与健康接口均正确。 - 只有两层证明同时成立,状态才可从 `BLOCKED_RUNTIME_NOT_DEPLOYED` 变为 `DEPLOYED_AND_PUBLICLY_VERIFIED`。 + +## 5 · 第一次现实执行回执 + +- 工单:`56f6ca23-d242-4fab-88f3-81fed692e00d` +- 邮箱批准:已批准。 +- 执行动作:`provision-approved-architecture` +- 结果:`FAILED_BEFORE_MUTATION` +- 服务器诊断:部署器尝试从旧 `fifth-domain` 历史仓库获取 `2739104088fa199fb8762e56a3a7cf285dc82f3f`,远端返回 `not our ref`。 +- 因果判断:批准资源和当前代码频道提交本身正确;现实部署器的 `ARCHITECTURE_PROVISION_REPO_URL` 仍指向历史仓库。失败发生在复制、安装和重启之前,AI 服务未改变。 +- 修正规则:部署器默认来源与环境示例统一改为 `https://guanghulab.com/code/bingshuo/guanghu-ice-heart.git`。不得为迎合旧部署器把当前补丁反向复制进历史仓库。 +- 后续条件:先通过受控固定动作更新京东部署器并读回来源;之后为原始不可变工程资源重新建单。原工程 SHA 不因部署器修复而伪造变化。 diff --git a/tonggan-bridge/receipts/TGB-20260727-001.json b/tonggan-bridge/receipts/TGB-20260727-001.json index df196a6..943f2cb 100644 --- a/tonggan-bridge/receipts/TGB-20260727-001.json +++ b/tonggan-bridge/receipts/TGB-20260727-001.json @@ -2,11 +2,14 @@ "schema": "guanghu.tonggan-bridge-receipt/v1", "bridge_id": "TGB-20260727-001", "state": "BLOCKED", - "diagnostic_code": "BOOTSTRAP_ACTION_NOT_DEPLOYED", - "deployment_result": "NOT_DEPLOYED", + "diagnostic_code": "DEPLOYMENT_SOURCE_COMMIT_NOT_FOUND_IN_CONFIGURED_REPOSITORY", + "deployment_result": "FAILED_BEFORE_MUTATION", "server_runtime_proven": false, "public_route_proven": false, "rollback_performed": false, - "next_step": "先通过已有主人邮件批准的固定管理动作部署并读回通感桥运行时;若该动作不存在,保持阻断,不恢复人类登录,不打开云后台冒充部署。", + "workorder_id": "56f6ca23-d242-4fab-88f3-81fed692e00d", + "observed_error": "command_failed:git:remote error: upload-pack: not our ref 2739104088fa199fb8762e56a3a7cf285dc82f3f", + "occurred_at": "2026-07-27T07:45:58Z", + "next_step": "把架构部署器的仓库来源修正为当前代码频道 guanghu-ice-heart,部署并读回执行器后,再为同一不可变 AI 更新资源申请新工单;不得把补丁复制到历史仓库。", "contains_secrets": false } diff --git a/tonggan-bridge/records/TGB-20260727-001.json b/tonggan-bridge/records/TGB-20260727-001.json index 03fa591..15ff23a 100644 --- a/tonggan-bridge/records/TGB-20260727-001.json +++ b/tonggan-bridge/records/TGB-20260727-001.json @@ -1,7 +1,7 @@ { "schema": "guanghu.tonggan-bridge-record/v1", "bridge_id": "TGB-20260727-001", - "state": "BLOCKED_RUNTIME_NOT_DEPLOYED", + "state": "BLOCKED_SOURCE_REPOSITORY_MISMATCH", "module": { "name": "光湖 AI 发现服务 · ICE-P 规范编号自动导航更新", "why_server_deployment_is_required": "仓库中的身份与路径地图只是语言层事实;只有京东主节点上的 guanghu-ai-discovery.service 加载这些文件,外部 AI 才能通过公开接口从旧编号自动抵达 ICE-P-ZY001。" @@ -22,7 +22,8 @@ "human_confirmation": { "authorizer_id": "ICE-GL∞", "fact": "冰朔已确认按恢复后的目的继续准备工程包和通感桥绑定。", - "deployment_email_approval": "not_requested" + "deployment_email_approval": "approved", + "workorder_id": "56f6ca23-d242-4fab-88f3-81fed692e00d" }, "runtime_prerequisite": { "required": [ @@ -31,7 +32,7 @@ "lake-lamp-deployment-event-worker.service", "existing-service-update executor" ], - "observed_state": "SERVER_NOT_DEPLOYED", + "observed_state": "DEPLOYMENT_EXECUTOR_SOURCE_POINTS_TO_HISTORICAL_REPOSITORY", "rule": "先完成受控运行时引导并读回 active 与 capability;不得恢复人类 SSH,不得用云控制台状态代替部署回执。" }, "security": { diff --git a/tonggan-bridge/workorders/TGB-20260727-001.json b/tonggan-bridge/workorders/TGB-20260727-001.json index 6c7f65a..5e17e8b 100644 --- a/tonggan-bridge/workorders/TGB-20260727-001.json +++ b/tonggan-bridge/workorders/TGB-20260727-001.json @@ -1,13 +1,13 @@ { "schema": "guanghu.tonggan-bridge-workorder-map/v1", "bridge_id": "TGB-20260727-001", - "state": "NOT_CREATED_RUNTIME_NOT_DEPLOYED", + "state": "APPROVED_EXECUTION_FAILED_BEFORE_MUTATION", "target": "JD-FD-PRIMARY", "scope": "server-ops", "action": "dispatch-approved-deployment", "resource": "AI-DISCOVERY-ICE-P-ROUTE-20260727@2739104088fa199fb8762e56a3a7cf285dc82f3f", - "workorder_id": null, - "owner_email_approval": "not_requested", - "reason": "现实层尚未证明部署派发端、事件 worker 与已有服务更新执行器;禁止创建服务器不能消费的假工单。", + "workorder_id": "56f6ca23-d242-4fab-88f3-81fed692e00d", + "owner_email_approval": "approved", + "reason": "执行器从旧 fifth-domain 历史仓库获取当前代码频道提交,远端返回 not our ref;执行在复制或修改服务文件之前停止。", "contains_secrets": false }