Files
pikasTech-HWLAB/web/hwlab-cloud-web/gate-summary.mjs
T
Lyon 7a0648088c fix: wire distinct M3 simulator identities
Merge PR #159 after Code Queue rebase and validation. Runner verified M3 cardinality, hardware-loop smoke, patch-panel runtime smoke, m3 readonly contract, and git diff check. This is source/config blocker removal only; it does not claim DEV-LIVE M3 pass.
2026-05-23 00:09:29 +08:00

884 lines
28 KiB
JavaScript

// Generated from reports/dev-gate/dev-mvp-gate-report.json and fixtures/mvp/m5-e2e/dry-run-plan.json.
// Run node scripts/export-web-gate-summary.mjs after changing those fixtures.
export const gateSummary = {
"generatedFrom": {
"gateReport": "reports/dev-gate/dev-mvp-gate-report.json",
"m5Plan": "fixtures/mvp/m5-e2e/dry-run-plan.json"
},
"issue": "pikasTech/HWLAB#56",
"supports": [
"pikasTech/HWLAB#7",
"pikasTech/HWLAB#9"
],
"gateStatus": "blocked",
"blocked": true,
"acceptanceLevel": "dev_mvp_gate",
"reportCommitId": "86d769525caf1db513b93cb67c2c8ee8863dd4b1",
"dryRunOnly": true,
"devOnly": true,
"prodDisabled": true,
"environment": "dev",
"endpoint": "http://74.48.78.17:16667",
"namespace": "hwlab-dev",
"sourceSummary": "The DEV gate is anchored to the frozen matrix, gate contract, and M0-M5 milestone docs on origin/main.",
"localSmoke": {
"status": "pass",
"commands": [
"node scripts/validate-contract.mjs",
"node scripts/validate-m0-contract.mjs",
"node scripts/validate-artifact-catalog.mjs",
"node scripts/validate-runtime-boundary.mjs",
"node scripts/validate-schema-drift-map.mjs",
"node scripts/validate-evidence-chain.mjs",
"node scripts/m1-contract-smoke.mjs",
"node scripts/m2-dev-deploy-smoke.mjs --dry-run",
"node scripts/m3-hardware-loop-smoke.mjs",
"node scripts/m4-agent-loop-smoke.mjs"
],
"evidence": [
"validated 15 JSON files and 13 service ids",
"validated M0 contract examples: 7 JSON files, 13 service ids",
"validated 13 DEV artifact catalog services at 24eb3bf",
"validated HWLAB runtime boundary guard for 13 services; forbidden substitutes: unidesk-backend, provider-gateway, microservice-proxy",
"validated schema drift map with 59 aligned fields and 12 gaps",
"validated 2 evidence chain fixtures and 2 evidence records",
"[m1-smoke] passed",
"[m2-smoke] validated 11 service contracts",
"[m2-smoke] mode=dry-run endpoint=http://74.48.78.17:16667",
"[m2-smoke] no real DEV/PROD request was made",
"M3 hardware loop smoke passed",
"[m4-smoke] ok m4-agent-automation-loop-local-contract-smoke"
],
"summary": "M0-M4 contract and smoke checks pass locally without contacting the live DEV ingress."
},
"dryRun": {
"status": "pass",
"commands": [
"node tools/hwlab-cli/bin/hwlab-cli.mjs health",
"node tools/hwlab-cli/bin/hwlab-cli.mjs test e2e --env dev --mvp --dry-run",
"node scripts/m5-mvp-e2e-dry-run.mjs"
],
"evidence": [
"hwlab-cli health -> status: ok, environment: dev, endpoint: http://74.48.78.17:16667, projects: 2",
"hwlab-cli dry-run -> 9 steps, 13 artifacts, 14 health contracts, 2 hardware operations, 2 evidence records, 0 network calls",
"M5 MVP E2E dry-run passed: 9 steps, 13 artifacts, 14 health contracts, 2 hardware operations, 2 evidence records, 0 network calls"
],
"summary": "The M5 orchestration dry-run is green, but it remains fixture-only and does not establish a live DEV gate."
},
"devPreconditions": {
"status": "blocked",
"classification": "DB live; hardware loop",
"requirements": [
"http://74.48.78.17:16666/ returns the DEV browser entry",
"http://74.48.78.17:16667/health returns HWLAB DEV edge JSON",
"http://74.48.78.17:16667/health/live returns HWLAB cloud-api JSON with DB live readiness",
"M3 hardware loop proves box-simu-1 DO1 -> box-simu-2 DI1 via patch-panel",
"M4 agent runtime/evidence path is only attempted after DB live and M3 readiness are not blocked",
"Keep the run DEV-only and avoid PROD, heavy e2e, secrets, restarts, or UniDesk substitution"
],
"commands": [
"curl -fsS --max-time 8 http://74.48.78.17:16666/",
"curl -fsS --max-time 8 http://74.48.78.17:16667/health/live",
"curl -fsS --max-time 8 http://74.48.78.17:16667/health",
"HWLAB_DEV_BOX_SIMU_1_URL=http://10.42.0.200:7201 HWLAB_DEV_BOX_SIMU_2_URL=http://10.42.0.208:7201 HWLAB_DEV_GATEWAY_SIMU_1_URL=http://10.42.0.209:7101 HWLAB_DEV_GATEWAY_SIMU_2_URL=http://10.42.0.204:7101 HWLAB_DEV_PATCH_PANEL_URL=http://10.42.0.205:7301 node scripts/dev-m3-hardware-loop-smoke.mjs --live --confirm-dev --confirmed-non-production",
"node scripts/dev-m4-agent-loop-smoke.mjs --live --confirm-dev --confirmed-non-production"
],
"evidence": [
"http://74.48.78.17:16666/ -> HTTP 200 text/html, title=HWLAB DEV MVP Gate",
"http://74.48.78.17:16667/health -> HTTP 200 serviceId=hwlab-edge-proxy status=ok commit=cb35ada6860653b27269b0a57991184118cbf4b1",
"http://74.48.78.17:16667/health/live -> HTTP 200 serviceId=hwlab-cloud-api status=degraded db.ready=false db.connected=false db.connectionChecked=false",
"dev-edge-health active report -> blocked by DB live readiness, while public 16667 TCP/HTTP and frp control/tunnel health are reachable",
"dev-m3-hardware-loop active report -> blocked, classification=hardware loop, summary=patch-panel active DO1 -> DI1 connection missing",
"dev-m4-agent-loop active report -> blocked, classification=DB live, summary=cloud-api /health/live reports DB degraded; connected=false; ready=false"
],
"summary": "Public DEV route/frp is reachable on 16666/16667, but live MVP remains blocked by DB live readiness and the M3 hardware loop topology; no historical 6667 failure is counted as active evidence."
},
"blockers": [
{
"type": "runtime_blocker",
"scope": "db-live",
"status": "open",
"summary": "cloud-api /health/live reports DB degraded; db.ready=false, db.connected=false, and live DB evidence is not established."
},
{
"type": "runtime_blocker",
"scope": "m3-hardware-loop-runtime",
"status": "open",
"summary": "Live M3 smoke reached DEV simulators, but patch-panel active DO1 -> DI1 connection is missing."
}
],
"milestones": [
{
"id": "M0",
"status": "pass",
"commandCount": 6,
"evidenceCount": 6,
"summary": "Frozen contract, artifact, boundary, drift, and evidence fixtures are parseable and aligned to the DEV boundary."
},
{
"id": "M1",
"status": "pass",
"commandCount": 1,
"evidenceCount": 4,
"summary": "The local M1 contract smoke passes."
},
{
"id": "M2",
"status": "pass",
"commandCount": 1,
"evidenceCount": 3,
"summary": "The deploy smoke remains fixture-only and validates the frozen route phases and artifact metadata."
},
{
"id": "M3",
"status": "blocked",
"commandCount": 2,
"evidenceCount": 3,
"summary": "Local M3 remains green, but active DEV-LIVE M3 is blocked by hardware loop topology."
},
{
"id": "M4",
"status": "blocked",
"commandCount": 2,
"evidenceCount": 2,
"summary": "Local M4 remains green, but active DEV-LIVE M4 is blocked at DB live readiness before agent runtime scheduling."
},
{
"id": "M5",
"status": "blocked",
"commandCount": 3,
"evidenceCount": 4,
"summary": "The M5 orchestration is green in dry-run mode, but active DEV-LIVE acceptance is blocked by DB live and hardware loop evidence."
}
],
"artifactCount": 13,
"healthCount": 14,
"gatewaySessionCount": 2,
"boxResourceCount": 2,
"patchPanelCount": 1,
"operationCount": 2,
"evidenceCount": 2,
"traceCount": 8,
"auditCount": 7,
"cleanupCount": 2,
"artifacts": [
{
"serviceId": "hwlab-edge-proxy",
"commitId": "caa9ed0",
"image": "hwlab-edge-proxy",
"tag": "dry-run-caa9ed0",
"digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-tunnel-client",
"commitId": "caa9ed0",
"image": "hwlab-tunnel-client",
"tag": "dry-run-caa9ed0",
"digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-router",
"commitId": "caa9ed0",
"image": "hwlab-router",
"tag": "dry-run-caa9ed0",
"digest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-cloud-api",
"commitId": "caa9ed0",
"image": "hwlab-cloud-api",
"tag": "dry-run-caa9ed0",
"digest": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-cloud-web",
"commitId": "caa9ed0",
"image": "hwlab-cloud-web-static-assets",
"tag": "dry-run-caa9ed0",
"digest": "not_applicable",
"digestNotApplicableReason": "static asset digest is produced by the future DEV build pipeline, not this local dry-run fixture",
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-gateway",
"commitId": "caa9ed0",
"image": "hwlab-gateway",
"tag": "dry-run-caa9ed0",
"digest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-gateway-simu",
"commitId": "caa9ed0",
"image": "hwlab-gateway-simu",
"tag": "dry-run-caa9ed0",
"digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-box-simu",
"commitId": "caa9ed0",
"image": "hwlab-box-simu",
"tag": "dry-run-caa9ed0",
"digest": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-patch-panel",
"commitId": "caa9ed0",
"image": "hwlab-patch-panel",
"tag": "dry-run-caa9ed0",
"digest": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-agent-mgr",
"commitId": "caa9ed0",
"image": "hwlab-agent-mgr",
"tag": "dry-run-caa9ed0",
"digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-agent-worker",
"commitId": "caa9ed0",
"image": "hwlab-agent-worker",
"tag": "dry-run-caa9ed0",
"digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"digestNotApplicableReason": null,
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-agent-skills",
"commitId": "caa9ed0",
"image": "hwlab-agent-runtime-skills",
"tag": "dry-run-caa9ed0",
"digest": "not_applicable",
"digestNotApplicableReason": "skill bundle digest is produced by the future DEV build pipeline, not this local dry-run fixture",
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"serviceId": "hwlab-cli",
"commitId": "caa9ed0",
"image": "hwlab-cli-npm-package",
"tag": "dry-run-caa9ed0",
"digest": "not_applicable",
"digestNotApplicableReason": "local CLI package is not containerized in this dry-run fixture",
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
"deployEnv": "dev",
"healthTimestamp": "2026-05-21T00:00:00.000Z"
}
],
"health": [
{
"healthId": "hlt_m5-dev-ingress",
"serviceId": "hwlab-edge-proxy",
"component": "DEV ingress",
"status": "healthy",
"deployEnv": "dev",
"endpoint": "http://74.48.78.17:16667/health",
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-edge-route",
"serviceId": "hwlab-edge-proxy",
"component": "master edge proxy",
"status": "healthy",
"deployEnv": "dev",
"endpoint": "http://74.48.78.17:16667",
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-frp",
"serviceId": "hwlab-tunnel-client",
"component": "frp",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-router",
"serviceId": "hwlab-router",
"component": "D601 router",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-cloud-api",
"serviceId": "hwlab-cloud-api",
"component": "Cloud API",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-cloud-web",
"serviceId": "hwlab-cloud-web",
"component": "Cloud Web",
"status": "healthy",
"deployEnv": "dev",
"endpoint": "http://74.48.78.17:16667",
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-gateway",
"serviceId": "hwlab-gateway",
"component": "Gateway",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-gateway-simu",
"serviceId": "hwlab-gateway-simu",
"component": "Gateway simulator",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-box-simu",
"serviceId": "hwlab-box-simu",
"component": "Box simulator",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-patch-panel",
"serviceId": "hwlab-patch-panel",
"component": "Patch panel",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-agent-mgr",
"serviceId": "hwlab-agent-mgr",
"component": "Agent manager",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-agent-worker",
"serviceId": "hwlab-agent-worker",
"component": "Agent worker",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-agent-skills",
"serviceId": "hwlab-agent-skills",
"component": "Agent skills",
"status": "healthy",
"deployEnv": "dev",
"endpoint": null,
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
},
{
"healthId": "hlt_m5-cli",
"serviceId": "hwlab-cli",
"component": "CLI",
"status": "healthy",
"deployEnv": "dev",
"endpoint": "http://74.48.78.17:16667",
"observedBy": "fixture",
"dryRun": true,
"healthTimestamp": "2026-05-21T00:00:00.000Z"
}
],
"topology": {
"projectId": "prj_m3_hardware_loop",
"projectStatus": "blocked",
"gateways": [
{
"gatewaySessionId": "gws_gwsimu_1",
"serviceId": "hwlab-gateway-simu",
"gatewayId": "gwsimu_1",
"status": "connected",
"environment": "dev",
"endpoint": null
},
{
"gatewaySessionId": "gws_gwsimu_2",
"serviceId": "hwlab-gateway-simu",
"gatewayId": "gwsimu_2",
"status": "connected",
"environment": "dev",
"endpoint": null
}
],
"boxResources": [
{
"resourceId": "res_boxsimu_1",
"gatewaySessionId": "gws_gwsimu_1",
"boxId": "boxsimu_1",
"resourceType": "simulator_endpoint",
"name": "BOX-SIMU 1 source DO1",
"state": "available",
"environment": "dev"
},
{
"resourceId": "res_boxsimu_2",
"gatewaySessionId": "gws_gwsimu_2",
"boxId": "boxsimu_2",
"resourceType": "simulator_endpoint",
"name": "BOX-SIMU 2 target DI1",
"state": "available",
"environment": "dev"
}
],
"patchPanel": {
"patchPanelStatusId": "pps_m3_hardware_loop",
"serviceId": "hwlab-patch-panel",
"state": "blocked",
"environment": "dev",
"activeConnectionCount": 1,
"activeConnections": [
{
"fromResourceId": "res_boxsimu_1",
"fromPort": "DO1",
"toResourceId": "res_boxsimu_2",
"toPort": "DI1"
}
]
}
},
"m5DryRunTopology": {
"projectId": "proj_m5-mvp-e2e",
"projectStatus": "active",
"gateways": [
{
"gatewaySessionId": "gws_m5-0001",
"serviceId": "hwlab-gateway",
"gatewayId": "gtw_m5-dev-boundary",
"status": "connected",
"environment": "dev",
"endpoint": "http://74.48.78.17:16667/gateway"
},
{
"gatewaySessionId": "gws_m5-simu-0001",
"serviceId": "hwlab-gateway-simu",
"gatewayId": "gtw_m5-simu",
"status": "connected",
"environment": "dev",
"endpoint": null
}
],
"boxResources": [
{
"resourceId": "res_m5-control-relay",
"gatewaySessionId": "gws_m5-0001",
"boxId": "box_m5-control",
"resourceType": "relay",
"name": "M5 control relay",
"state": "available",
"environment": "dev"
},
{
"resourceId": "res_m5-target-board",
"gatewaySessionId": "gws_m5-0001",
"boxId": "box_m5-target",
"resourceType": "board",
"name": "M5 target board",
"state": "available",
"environment": "dev"
}
],
"patchPanel": {
"patchPanelStatusId": "pps_m5-0001",
"serviceId": "hwlab-patch-panel",
"state": "active",
"environment": "dev",
"activeConnectionCount": 1,
"activeConnections": [
{
"fromResourceId": "res_m5-control-relay",
"fromPort": "out1",
"toResourceId": "res_m5-target-board",
"toPort": "reset"
}
]
}
},
"agent": {
"agentSessionId": "agt_m5-0001",
"agentServiceId": "hwlab-agent-mgr",
"agentStatus": "completed",
"workerSessionId": "wkr_m5-0001",
"workerServiceId": "hwlab-agent-worker",
"workerStatus": "completed",
"projectId": "proj_m5-mvp-e2e",
"environment": "dev",
"cleanupId": "cln_m5-worker"
},
"operations": [
{
"operationId": "op_m5-direct-0001",
"requestedBy": "user_m5-dry-run",
"status": "succeeded",
"resourceId": "res_m5-control-relay",
"capabilityId": "cap_m5-relay-set",
"agentSessionId": null,
"workerSessionId": null,
"environment": "dev"
},
{
"operationId": "op_m5-agent-0001",
"requestedBy": "agent_m5-dry-run",
"status": "succeeded",
"resourceId": "res_m5-control-relay",
"capabilityId": "cap_m5-relay-set",
"agentSessionId": "agt_m5-0001",
"workerSessionId": "wkr_m5-0001",
"environment": "dev"
}
],
"evidenceRecords": [
{
"evidenceId": "evi_m5-direct-0001",
"operationId": "op_m5-direct-0001",
"agentSessionId": null,
"workerSessionId": null,
"kind": "trace",
"uri": "fixtures/mvp/m5-e2e/evidence/direct-operation.txt",
"sha256": "4cd5cc2c942501b55f7a32f4184e9a1c920b31f13110f44ec68ddc0ad7dc1e34",
"serviceId": "hwlab-cloud-api",
"environment": "dev",
"dryRun": true
},
{
"evidenceId": "evi_m5-agent-0001",
"operationId": "op_m5-agent-0001",
"agentSessionId": "agt_m5-0001",
"workerSessionId": "wkr_m5-0001",
"kind": "trace",
"uri": "fixtures/mvp/m5-e2e/evidence/agent-operation.txt",
"sha256": "96e7ffa99efd78b3d5d1b1dfd08be2f077f618dacf786b47f764794714c15c1c",
"serviceId": "hwlab-agent-worker",
"environment": "dev",
"dryRun": true
}
],
"steps": [
{
"id": "step-dev-health",
"order": 1,
"title": "DEV health",
"kind": "health",
"requires": [],
"inputs": [
"endpoint",
"health:hlt_m5-dev-ingress",
"health:hlt_m5-edge-route",
"health:hlt_m5-frp",
"health:hlt_m5-router",
"health:hlt_m5-cloud-api",
"health:hlt_m5-cloud-web"
],
"outputs": [
"route_m5-dev",
"tun_m5-d601",
"hwlab-dev",
"hwlab-cloud-api",
"hwlab-cloud-web"
],
"acceptanceStepIds": [
"static-contract-parse",
"endpoint-freeze",
"dev-ingress-health",
"edge-route",
"frp-tunnel",
"d601-router",
"cloud-surface"
]
},
{
"id": "step-gateway-box-status",
"order": 2,
"title": "gateway/box status",
"kind": "status",
"requires": [
"step-dev-health"
],
"inputs": [
"gatewaySession:gws_m5-0001",
"gatewaySession:gws_m5-simu-0001",
"boxResource:res_m5-control-relay",
"boxResource:res_m5-target-board",
"capability:cap_m5-relay-set",
"capability:cap_m5-board-reset"
],
"outputs": [
"gws_m5-0001",
"res_m5-control-relay",
"res_m5-target-board",
"cap_m5-relay-set",
"cap_m5-board-reset"
],
"acceptanceStepIds": [
"gateway-sim-patch-panel"
]
},
{
"id": "step-wiring",
"order": 3,
"title": "wiring",
"kind": "wiring",
"requires": [
"step-gateway-box-status"
],
"inputs": [
"wiringConfig:wir_m5-0001",
"patchPanelStatus:pps_m5-0001"
],
"outputs": [
"wir_m5-0001",
"pps_m5-0001"
],
"acceptanceStepIds": [
"gateway-sim-patch-panel"
]
},
{
"id": "step-direct-hardware-call",
"order": 4,
"title": "direct hardware call",
"kind": "hardware_operation",
"requires": [
"step-wiring"
],
"inputs": [
"rpc:direct-hardware-request",
"operation:op_m5-direct-0001",
"resource:res_m5-control-relay",
"capability:cap_m5-relay-set",
"patchPanelStatus:pps_m5-0001"
],
"outputs": [
"op_m5-direct-0001",
"trc_m5-direct-0001"
],
"acceptanceStepIds": [
"gateway-sim-patch-panel"
]
},
{
"id": "step-audit",
"order": 5,
"title": "audit",
"kind": "audit",
"requires": [
"step-direct-hardware-call"
],
"inputs": [
"audit:aud_m5-project-selected",
"audit:aud_m5-gateway-started",
"audit:aud_m5-wiring-applied",
"audit:aud_m5-direct-operation"
],
"outputs": [
"aud_m5-direct-operation"
],
"acceptanceStepIds": [
"artifact-observability"
]
},
{
"id": "step-agent-session",
"order": 6,
"title": "agent session",
"kind": "agent",
"requires": [
"step-audit"
],
"inputs": [
"agentSession:agt_m5-0001",
"workerSession:wkr_m5-0001",
"health:hlt_m5-agent-mgr",
"health:hlt_m5-agent-worker",
"health:hlt_m5-agent-skills"
],
"outputs": [
"agt_m5-0001",
"wkr_m5-0001"
],
"acceptanceStepIds": [
"agent-runtime"
]
},
{
"id": "step-agent-hardware-call",
"order": 7,
"title": "agent hardware call",
"kind": "hardware_operation",
"requires": [
"step-agent-session",
"step-wiring"
],
"inputs": [
"rpc:agent-hardware-request",
"operation:op_m5-agent-0001",
"agentSession:agt_m5-0001",
"workerSession:wkr_m5-0001",
"resource:res_m5-control-relay",
"capability:cap_m5-relay-set",
"patchPanelStatus:pps_m5-0001"
],
"outputs": [
"op_m5-agent-0001",
"trc_m5-agent-0001"
],
"acceptanceStepIds": [
"agent-runtime"
]
},
{
"id": "step-evidence",
"order": 8,
"title": "evidence",
"kind": "evidence",
"requires": [
"step-direct-hardware-call",
"step-agent-hardware-call"
],
"inputs": [
"trace:trc_m5-direct-0001",
"trace:trc_m5-agent-0001",
"evidence:evi_m5-direct-0001",
"evidence:evi_m5-agent-0001"
],
"outputs": [
"evi_m5-direct-0001",
"evi_m5-agent-0001"
],
"acceptanceStepIds": [
"agent-runtime",
"artifact-observability"
]
},
{
"id": "step-cleanup",
"order": 9,
"title": "cleanup",
"kind": "cleanup",
"requires": [
"step-evidence"
],
"inputs": [
"cleanup:cln_m5-worker",
"cleanup:cln_m5-gateway-state",
"audit:aud_m5-cleanup"
],
"outputs": [
"cln_m5-worker",
"cln_m5-gateway-state"
],
"acceptanceStepIds": [
"agent-runtime"
]
}
],
"realDevGate": {
"sourcePlanCommand": "hwlab-cli test e2e --env dev --mvp",
"command": "hwlab-cli test e2e --env dev --mvp --live --confirm-dev --confirmed-non-production",
"requiresAllBlockersClear": true,
"requiresDryRunPass": true,
"requiresArtifactObservability": true,
"requiresD601RouteObservation": true,
"requiresHumanApprovalForRealDev": true
},
"safety": {
"mode": "dry-run",
"allowNetwork": false,
"allowDeploy": false,
"allowBrowserE2E": false,
"allowSecrets": false,
"prohibitedActions": [
"real-dev-deploy",
"prod-deploy",
"prod-smoke",
"browser-e2e",
"heavyweight-e2e",
"secret-or-token-read",
"force-push",
"unidesk-runtime-substitution"
]
}
};