fix(deploy): source immutable packages from current code channel
This commit is contained in:
parent
ee07b4c04b
commit
0bf220c917
9 changed files with 41 additions and 17 deletions
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 不因部署器修复而伪造变化。
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue