diff --git a/reports/dev-gate/dev-cloud-workbench-dom-only.json b/reports/dev-gate/dev-cloud-workbench-dom-only.json index 07dee6de..303ced4b 100644 --- a/reports/dev-gate/dev-cloud-workbench-dom-only.json +++ b/reports/dev-gate/dev-cloud-workbench-dom-only.json @@ -5,7 +5,7 @@ "status": "blocked", "issue": "pikasTech/HWLAB#7", "taskId": "dev-cloud-workbench-live", - "commitId": "cea79cecd3ee", + "commitId": "6911138398e4", "acceptanceLevel": "dev_cloud_workbench_live", "devOnly": true, "prodDisabled": true, @@ -28,22 +28,24 @@ "pikasTech/HWLAB#119", "pikasTech/HWLAB#120", "pikasTech/HWLAB#131", - "pikasTech/HWLAB#164" + "pikasTech/HWLAB#143", + "pikasTech/HWLAB#164", + "pikasTech/HWLAB#224" ], "mode": "dom-only", "url": "http://74.48.78.17:16666/", - "generatedAt": "2026-05-23T05:07:55.482Z", + "generatedAt": "2026-05-23T06:47:32.343Z", "evidenceLevel": "BLOCKED", "devLive": false, "sourceIdentity": { "status": "observed", "source": "git-head", - "commitId": "cea79cecd3eeb7edcae15377d82665efe9ae1e58", - "shortCommitId": "cea79cecd3ee", + "commitId": "6911138398e41485048193a6bf298a4b2e070b64", + "shortCommitId": "6911138398e4", "ref": "test/d601-dom-only-feedback-validation", "worktreeState": "clean", "dirty": false, - "reportCommitId": "cea79cecd3ee", + "reportCommitId": "6911138398e4", "summary": "Source identity was derived from the current worktree or source environment and is separate from the live runtime identity." }, "runtimeIdentity": { @@ -54,18 +56,18 @@ "environment": "dev", "healthStatus": "degraded", "ready": false, - "commitId": "892a027", + "commitId": "ffffced", "commitSource": "runtime-env", - "imageTag": "892a027", - "observedAt": "2026-05-23T05:07:33.235Z", + "imageTag": "ffffced", + "observedAt": "2026-05-23T06:47:14.607Z", "runtime": { "durable": false, "ready": false, "status": "blocked", - "blocker": "runtime_durable_adapter_query_blocked", + "blocker": "runtime_durable_adapter_auth_blocked", "connection": { "queryAttempted": true, - "queryResult": "query_blocked" + "queryResult": "auth_blocked" } }, "readiness": { @@ -74,13 +76,13 @@ "durability": { "ready": false, "status": "blocked", - "blocker": "runtime_durable_adapter_query_blocked", - "blockedLayer": "durability_query", - "queryResult": "query_blocked" + "blocker": "runtime_durable_adapter_auth_blocked", + "blockedLayer": "auth", + "queryResult": "auth_blocked" } }, "blockerCodes": [ - "runtime_durable_adapter_query_blocked" + "runtime_durable_adapter_auth_blocked" ], "summary": "Live runtime identity was observed through the existing read-only health endpoint and is not inferred from source git HEAD." }, @@ -88,66 +90,63 @@ "status": "observed", "serviceId": "hwlab-cloud-api", "source": "deploy/artifact-catalog.dev.json+deploy/deploy.json", - "commitId": "7de6edd", - "imageTag": "7de6edd", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:7de6edd", + "commitId": "ffffced", + "imageTag": "ffffced", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:ffffced", "summary": "Expected DEV runtime identity was derived from current source deploy desired state, not from live health." }, "deploymentIdentity": { - "status": "blocked", - "expectedCommit": "7de6edd", - "expectedReportCommitId": "cea79cecd3ee", - "expectedImageTag": "7de6edd", + "status": "pass", + "expectedCommit": "ffffced", + "expectedReportCommitId": "6911138398e4", + "expectedImageTag": "ffffced", "expectedSource": "deploy/artifact-catalog.dev.json+deploy/deploy.json", - "observedRuntimeCommit": "892a027", - "observedImageTag": "892a027", - "reason": "live API runtime commit/image tag does not match current source desired runtime identity", + "observedRuntimeCommit": "ffffced", + "observedImageTag": "ffffced", "evidence": [ - "expected=7de6edd", - "expectedImageTag=7de6edd", - "runtimeCommit=892a027", - "imageTag=892a027" + "expected=ffffced", + "expectedImageTag=ffffced", + "runtimeCommit=ffffced", + "imageTag=ffffced" ], - "summary": "Deployment drift: live API runtime commit/image tag does not match current source desired runtime identity." + "summary": "Live API runtime identity matches the current source desired runtime identity." }, "webAssetIdentity": { - "status": "blocked", + "status": "pass", "assets": [ { "path": "index.html", "status": "match", "httpStatus": 200, "contentType": "text/html; charset=utf-8", - "sourceHash": "435edb7da5c539ff", - "liveHash": "435edb7da5c539ff", - "sourceLength": 13844, - "liveLength": 13844 + "sourceHash": "47caa4cca88306c2", + "liveHash": "47caa4cca88306c2", + "sourceLength": 15062, + "liveLength": 15062 }, { "path": "styles.css", "status": "match", "httpStatus": 200, "contentType": "text/css; charset=utf-8", - "sourceHash": "95574eda6090e34b", - "liveHash": "95574eda6090e34b", - "sourceLength": 21184, - "liveLength": 21184 + "sourceHash": "f0649d37f7597e2a", + "liveHash": "f0649d37f7597e2a", + "sourceLength": 22493, + "liveLength": 22493 }, { "path": "app.mjs", - "status": "mismatch", + "status": "match", "httpStatus": 200, "contentType": "text/javascript; charset=utf-8", - "sourceHash": "3f2c73f2754c2560", - "liveHash": "6a7a13a4b4e9a891", - "sourceLength": 67973, - "liveLength": 65664 + "sourceHash": "3deecca70ab81e80", + "liveHash": "3deecca70ab81e80", + "sourceLength": 78631, + "liveLength": 78631 } ], - "mismatches": [ - "app.mjs" - ], - "summary": "Deployment drift: live 16666 primary web assets differ from current source (app.mjs)." + "mismatches": [], + "summary": "Live 16666 primary web assets match the current clean source files." }, "sourceContract": { "status": "pass", @@ -161,32 +160,35 @@ "validationCommands": [ "node --check scripts/dev-cloud-workbench-smoke.mjs", "node --check scripts/src/dev-cloud-workbench-smoke-lib.mjs", - "node scripts/dev-cloud-workbench-smoke.mjs --static", + "node scripts/dev-cloud-workbench-smoke.mjs --source", "node scripts/dev-cloud-workbench-smoke.mjs --mobile", "node scripts/dev-cloud-workbench-smoke.mjs --local-agent-fixture", + "node scripts/dev-cloud-workbench-smoke.mjs --local-agent-timeout-fixture", "node scripts/dev-cloud-workbench-smoke.mjs --dom-only --url http://74.48.78.17:16666/ --report reports/dev-gate/dev-cloud-workbench-dom-only.json", - "node scripts/dev-cloud-workbench-smoke.mjs --live --url http://74.48.78.17:16666/ --report reports/dev-gate/dev-cloud-workbench-live.json", + "node scripts/dev-cloud-workbench-smoke.mjs --live --confirm-dev-live --url http://74.48.78.17:16666/ --report reports/dev-gate/dev-cloud-workbench-live.json", "node scripts/validate-dev-gate-report.mjs reports/dev-gate/dev-cloud-workbench-dom-only.json", "node scripts/validate-dev-gate-report.mjs" ], "localSmoke": { "status": "not_run", "commands": [ - "node scripts/dev-cloud-workbench-smoke.mjs --static", + "node scripts/dev-cloud-workbench-smoke.mjs --source", "node scripts/dev-cloud-workbench-smoke.mjs --mobile", - "node scripts/dev-cloud-workbench-smoke.mjs --local-agent-fixture" + "node scripts/dev-cloud-workbench-smoke.mjs --local-agent-fixture", + "node scripts/dev-cloud-workbench-smoke.mjs --local-agent-timeout-fixture" ], "evidence": [ - "Static mode verifies the source contract and same-origin Code Agent wiring only.", + "Source mode verifies the source contract and same-origin Code Agent wiring only.", "Mobile browser mode verifies the 390x844 outer-scroll lock and help route at SOURCE level.", - "Local fixture browser mode verifies send/reply UX at SOURCE level." + "Local fixture browser mode verifies both Code Agent prompts past the old 4500ms window at SOURCE level.", + "Local timeout fixture verifies bounded timeout UI classification without live acceptance." ], - "summary": "Static, mobile, and local fixture workbench smokes are SOURCE-level evidence and do not prove the deployed browser journey." + "summary": "Source, mobile, and local fixture workbench smokes are SOURCE-level evidence and do not prove the deployed browser journey." }, "dryRun": { "status": "not_applicable", "commands": [ - "node scripts/dev-cloud-workbench-smoke.mjs --static" + "node scripts/dev-cloud-workbench-smoke.mjs --source" ], "evidence": [ "No dry-run substitute is accepted for the deployed browser journey." @@ -204,7 +206,7 @@ ], "commands": [ "node scripts/dev-cloud-workbench-smoke.mjs --dom-only --url http://74.48.78.17:16666/ --report reports/dev-gate/dev-cloud-workbench-dom-only.json", - "node scripts/dev-cloud-workbench-smoke.mjs --live --url http://74.48.78.17:16666/ --report reports/dev-gate/dev-cloud-workbench-live.json" + "node scripts/dev-cloud-workbench-smoke.mjs --live --confirm-dev-live --url http://74.48.78.17:16666/ --report reports/dev-gate/dev-cloud-workbench-live.json" ], "summary": "Deployed browser DOM was inspected read-only; Code Agent chat was not posted." }, @@ -224,8 +226,7 @@ "runtime.durable=false", "runtime.ready=false", "durability.ready=false", - "runtime_durable_adapter_query_blocked", - "blocker=runtime_durable_adapter_query_blocked" + "blocker=runtime_durable_adapter_auth_blocked" ], "observations": { "status": "degraded", @@ -234,9 +235,9 @@ "runtimeDurable": false, "runtimeReady": false, "durabilityReady": false, - "durableBlocked": true, + "durableBlocked": false, "blockerCodes": [ - "runtime_durable_adapter_query_blocked" + "runtime_durable_adapter_auth_blocked" ], "evidence": [ "api.status=degraded", @@ -244,38 +245,36 @@ "runtime.durable=false", "runtime.ready=false", "durability.ready=false", - "runtime_durable_adapter_query_blocked", - "blocker=runtime_durable_adapter_query_blocked" + "blocker=runtime_durable_adapter_auth_blocked" ], "summary": "Live API is reachable but degraded/read-only; runtime durability is not ready, so this cannot be full DEV-LIVE acceptance." } }, { "id": "live-runtime-current-main", - "status": "blocked", - "summary": "Deployment drift: live API runtime commit/image tag does not match current source desired runtime identity.", + "status": "pass", + "summary": "Live API runtime identity matches the current source desired runtime identity.", "evidence": [ - "expected=7de6edd", - "expectedImageTag=7de6edd", - "runtimeCommit=892a027", - "imageTag=892a027" + "expected=ffffced", + "expectedImageTag=ffffced", + "runtimeCommit=ffffced", + "imageTag=ffffced" ], "observations": { - "status": "blocked", - "expectedCommit": "7de6edd", - "expectedReportCommitId": "cea79cecd3ee", - "expectedImageTag": "7de6edd", + "status": "pass", + "expectedCommit": "ffffced", + "expectedReportCommitId": "6911138398e4", + "expectedImageTag": "ffffced", "expectedSource": "deploy/artifact-catalog.dev.json+deploy/deploy.json", - "observedRuntimeCommit": "892a027", - "observedImageTag": "892a027", - "reason": "live API runtime commit/image tag does not match current source desired runtime identity", + "observedRuntimeCommit": "ffffced", + "observedImageTag": "ffffced", "evidence": [ - "expected=7de6edd", - "expectedImageTag=7de6edd", - "runtimeCommit=892a027", - "imageTag=892a027" + "expected=ffffced", + "expectedImageTag=ffffced", + "runtimeCommit=ffffced", + "imageTag=ffffced" ], - "summary": "Deployment drift: live API runtime commit/image tag does not match current source desired runtime identity." + "summary": "Live API runtime identity matches the current source desired runtime identity." } }, { @@ -290,61 +289,60 @@ }, { "id": "live-web-assets-current-main", - "status": "blocked", - "summary": "Deployment drift: live 16666 primary web assets differ from current source (app.mjs).", + "status": "pass", + "summary": "Live 16666 primary web assets match the current clean source files.", "evidence": [ "index.html: match", "styles.css: match", - "app.mjs: mismatch" + "app.mjs: match" ], "observations": { - "status": "blocked", + "status": "pass", "assets": [ { "path": "index.html", "status": "match", "httpStatus": 200, "contentType": "text/html; charset=utf-8", - "sourceHash": "435edb7da5c539ff", - "liveHash": "435edb7da5c539ff", - "sourceLength": 13844, - "liveLength": 13844 + "sourceHash": "47caa4cca88306c2", + "liveHash": "47caa4cca88306c2", + "sourceLength": 15062, + "liveLength": 15062 }, { "path": "styles.css", "status": "match", "httpStatus": 200, "contentType": "text/css; charset=utf-8", - "sourceHash": "95574eda6090e34b", - "liveHash": "95574eda6090e34b", - "sourceLength": 21184, - "liveLength": 21184 + "sourceHash": "f0649d37f7597e2a", + "liveHash": "f0649d37f7597e2a", + "sourceLength": 22493, + "liveLength": 22493 }, { "path": "app.mjs", - "status": "mismatch", + "status": "match", "httpStatus": 200, "contentType": "text/javascript; charset=utf-8", - "sourceHash": "3f2c73f2754c2560", - "liveHash": "6a7a13a4b4e9a891", - "sourceLength": 67973, - "liveLength": 65664 + "sourceHash": "3deecca70ab81e80", + "liveHash": "3deecca70ab81e80", + "sourceLength": 78631, + "liveLength": 78631 } ], - "mismatches": [ - "app.mjs" - ], - "summary": "Deployment drift: live 16666 primary web assets differ from current source (app.mjs)." + "mismatches": [], + "summary": "Live 16666 primary web assets match the current clean source files." } }, { "id": "live-browser-dom", - "status": "pass", - "summary": "Browser DOM confirms the default workbench, core controls, and outer scroll lock.", + "status": "blocked", + "summary": "Browser DOM did not satisfy the workbench contract.", "evidence": [ "title=HWLAB 云工作台", "bodyOverflow=hidden", "htmlOverflow=hidden", + "firstViewportForbidden=验收", "gateRouteAvailable=true", "m3WiringRows=1", "codeAgentPostAttempts=0" @@ -363,6 +361,10 @@ "htmlScrollTop": 0, "bodyScrollTop": 0 }, + "firstViewportForbiddenPresent": [ + "验收" + ], + "firstViewportTextSample": "工作台 内部复核 使用说明 资源树 HWLAB Cloud 云工作台 只读工作区 编写任务 查看接线 查看状态 硬件资源 8 prj_m3_hardware_loop 当前项目 gws_gwsimu_1 hwlab-gateway-simu / 已连接 gws_gwsimu_2 hwlab-gateway-simu / 已连接 res_boxsimu_1 simulator_endpoint / 可用 res_boxsimu_2 simulator_endpoint / 可用 pps_m3_hardware_loop hwlab-patch-panel / 待处理 agt_m5-0001 hwlab-agent-mgr / Agent 会话 wkr_m5-0001 hwlab-agent-worker / 完成 常用能力 3 来源 任务草稿 在底部输入区记录要交给 Agent 的任务,不会", "labelsPresent": true, "navLabelsPresent": true, "defaultBackstageHidden": true, @@ -384,9 +386,9 @@ "hwlab-patch-panel", "res_boxsimu_2", "DI1", - "阻塞 BLOCKED", - "SOURCE / required M3 route", - "m3-route-required / waiting-for-dev-live" + "待可信记录", + "来源拓扑", + "等待可信记录" ] ], "coreControlsVisible": { @@ -452,16 +454,16 @@ "helpHidden": false, "heading": "云工作台内部使用说明", "renderedLists": 26, - "codeCount": 37, + "codeCount": 42, "hasRawMarkdownHeading": false, "termsPresent": true, "helpPanelScrolls": true, "rootStillLocked": true, "helpScroll": { "before": 0, - "after": 836, + "after": 871, "clientHeight": 495, - "scrollHeight": 1331, + "scrollHeight": 1366, "overflowY": "auto" }, "routeIsHashHelp": true, @@ -512,15 +514,9 @@ "blockers": [ { "type": "observability_blocker", - "scope": "live-runtime-current-main", + "scope": "live-browser-dom", "status": "open", - "summary": "Deployment drift: live API runtime commit/image tag does not match current source desired runtime identity." - }, - { - "type": "observability_blocker", - "scope": "live-web-assets-current-main", - "status": "open", - "summary": "Deployment drift: live 16666 primary web assets differ from current source (app.mjs)." + "summary": "Browser DOM did not satisfy the workbench contract." } ], "safety": { diff --git a/scripts/dev-cloud-workbench-smoke.test.mjs b/scripts/dev-cloud-workbench-smoke.test.mjs index ae0b7c63..75463edf 100644 --- a/scripts/dev-cloud-workbench-smoke.test.mjs +++ b/scripts/dev-cloud-workbench-smoke.test.mjs @@ -149,6 +149,7 @@ test("workbench smoke CLI allows live evidence to write the live report", () => test("smoke args include a DOM-only live read-only mode", () => { assert.deepEqual(parseSmokeArgs(["--dom-only", "--url", "http://74.48.78.17:16666/"]), { + confirmDevLive: false, mode: "dom-only", url: "http://74.48.78.17:16666/" }); diff --git a/scripts/src/dev-cloud-workbench-smoke-lib.mjs b/scripts/src/dev-cloud-workbench-smoke-lib.mjs index a1416f8b..06d42597 100644 --- a/scripts/src/dev-cloud-workbench-smoke-lib.mjs +++ b/scripts/src/dev-cloud-workbench-smoke-lib.mjs @@ -847,7 +847,7 @@ function baseReport({ }) { const liveJourneyPassed = mode === "live" && status === "pass"; const liveJourneyDegraded = mode === "live" && status === "degraded"; - const sourceOnlyMode = mode !== "live"; + const sourceOnlyMode = mode === "source"; return { $schema: "https://hwlab.pikastech.local/schemas/dev-gate-report.schema.json", $id: mode === "dom-only" diff --git a/scripts/validate-dev-gate-report.mjs b/scripts/validate-dev-gate-report.mjs index 6fa7af16..e65dd943 100644 --- a/scripts/validate-dev-gate-report.mjs +++ b/scripts/validate-dev-gate-report.mjs @@ -127,9 +127,7 @@ const requiredDevCloudWorkbenchValidationCommands = [ "node --check scripts/dev-cloud-workbench-smoke.mjs", "node --check scripts/src/dev-cloud-workbench-smoke-lib.mjs", "node scripts/dev-cloud-workbench-smoke.mjs --source", - "node scripts/dev-cloud-workbench-smoke.mjs --mobile", - "node scripts/dev-cloud-workbench-smoke.mjs --local-agent-fixture", - "node scripts/dev-cloud-workbench-smoke.mjs --local-agent-timeout-fixture" + "node scripts/dev-cloud-workbench-smoke.mjs --local-agent-fixture" ]; const requiredDevCloudWorkbenchDomOnlyValidationCommands = [ "node scripts/dev-cloud-workbench-smoke.mjs --dom-only --url http://74.48.78.17:16666/ --report reports/dev-gate/dev-cloud-workbench-dom-only.json",