// Generated from source:mvp-gate-summary and fixtures/mvp/m5-e2e/dry-run-plan.json. // Run node scripts/export-web-gate-summary.mjs after changing that source summary or fixture. export const gateSummary = { "generatedFrom": { "gateReport": "source:mvp-gate-summary", "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": "source-summary", "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 source docs; progress and acceptance evidence live in GitHub issue or PR comments, not repository report files.", "localSmoke": { "status": "pass", "commands": [ "node scripts/validate-contract.mjs", "node scripts/validate-artifact-catalog.mjs", "node scripts/m1-contract-smoke.mjs", "node scripts/m2-dev-deploy-smoke.mjs --dry-run" ], "evidence": [ "Source contracts remain parseable.", "MVP dry-run fixtures remain local/source only.", "Repository report directory is forbidden by repo guard." ], "summary": "M0-M2 contract and smoke checks remain local/source scoped and do not create repository report files." }, "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" ], "evidence": [ "Dry-run uses fixtures and performs no DEV/PROD mutations.", "Dry-run evidence is not live acceptance." ], "summary": "The M5 orchestration dry-run is fixture-only and does not establish a live DEV gate." }, "devPreconditions": { "status": "blocked", "classification": "runtime durable adapter; skills injection; hardware loop", "requirements": [ "Current DEV route and health checks must be rerun when needed and summarized in GitHub.", "Runtime durable adapter proves postgres schema, migration, and read-query readiness before M4/M5 can promote.", "Agent manager, skills service, and worker jobs expose explicit skill commit/version before M4/M5 can promote.", "M3 hardware loop proves box-simu-1 DO1 to box-simu-2 DI1 via patch-panel.", "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", "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": [ "Repository report files were removed and no longer qualify as current evidence.", "Live DEV acceptance must be represented in #7, the owning issue, daily brief, or PR comments." ], "summary": "Live MVP remains blocked until current DEV checks clear runtime durability, skills injection, and M3 hardware-loop blockers outside repository report files." }, "blockers": [ { "type": "runtime_blocker", "scope": "runtime-durable-adapter", "status": "open", "summary": "cloud-api durable runtime adapter readiness is blocked by runtime_durable_adapter_query_blocked; it must prove schema, migration, and read-query durability before M4/M5 promotion." }, { "type": "agent_blocker", "scope": "skills-commit-version-injection", "status": "open", "summary": "DEV skills injection must expose explicit skills commit and version across manager, skills, and worker paths." }, { "type": "runtime_blocker", "scope": "m3-hardware-loop-runtime", "status": "open", "summary": "Live M3 must prove the patch-panel trusted loop with operation, trace, audit, and evidence identifiers." } ], "milestones": [ { "id": "M0", "status": "pass", "commandCount": 1, "evidenceCount": 1, "summary": "Frozen contracts remain source-ready." }, { "id": "M1", "status": "pass", "commandCount": 1, "evidenceCount": 1, "summary": "The local M1 contract smoke passes." }, { "id": "M2", "status": "pass", "commandCount": 1, "evidenceCount": 1, "summary": "The deploy smoke validates source contracts without live acceptance." }, { "id": "M3", "status": "blocked", "commandCount": 1, "evidenceCount": 1, "summary": "Active DEV-LIVE M3 remains blocked by hardware loop topology until the trusted loop is proven." }, { "id": "M4", "status": "blocked", "commandCount": 1, "evidenceCount": 1, "summary": "Active DEV-LIVE M4 remains blocked by runtime durable adapter readiness and skills commit/version injection." }, { "id": "M5", "status": "blocked", "commandCount": 1, "evidenceCount": 1, "summary": "The M5 orchestration is green in dry-run mode, but active DEV-LIVE acceptance remains blocked." } ], "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", "dryRun": true, "requestedAt": "2026-05-21T00:02:00.000Z", "updatedAt": "2026-05-21T00:02:30.000Z" }, { "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", "dryRun": true, "requestedAt": "2026-05-21T00:03:00.000Z", "updatedAt": "2026-05-21T00:03:30.000Z" } ], "auditEvents": [ { "auditId": "aud_m5-project-selected", "traceId": "trc_m5-project", "action": "project.select", "targetType": "project", "targetId": "proj_m5-mvp-e2e", "projectId": "proj_m5-mvp-e2e", "gatewaySessionId": null, "operationId": null, "workerSessionId": null, "serviceId": "hwlab-cloud-api", "environment": "dev", "outcome": "succeeded", "dryRun": true, "occurredAt": "2026-05-21T00:00:00.000Z" }, { "auditId": "aud_m5-gateway-started", "traceId": "trc_m5-gateway", "action": "gateway.session.start", "targetType": "gateway_session", "targetId": "gws_m5-0001", "projectId": "proj_m5-mvp-e2e", "gatewaySessionId": "gws_m5-0001", "operationId": null, "workerSessionId": null, "serviceId": "hwlab-gateway", "environment": "dev", "outcome": "succeeded", "dryRun": true, "occurredAt": "2026-05-21T00:00:30.000Z" }, { "auditId": "aud_m5-wiring-applied", "traceId": "trc_m5-wiring", "action": "wiring.apply", "targetType": "wiring_config", "targetId": "wir_m5-0001", "projectId": "proj_m5-mvp-e2e", "gatewaySessionId": "gws_m5-0001", "operationId": null, "workerSessionId": null, "serviceId": "hwlab-patch-panel", "environment": "dev", "outcome": "succeeded", "dryRun": true, "occurredAt": "2026-05-21T00:01:00.000Z" }, { "auditId": "aud_m5-direct-operation", "traceId": "trc_m5-direct-0001", "action": "hardware.operation.request", "targetType": "hardware_operation", "targetId": "op_m5-direct-0001", "projectId": "proj_m5-mvp-e2e", "gatewaySessionId": "gws_m5-0001", "operationId": "op_m5-direct-0001", "workerSessionId": null, "serviceId": "hwlab-cloud-api", "environment": "dev", "outcome": "succeeded", "dryRun": true, "occurredAt": "2026-05-21T00:02:30.000Z" }, { "auditId": "aud_m5-agent-session", "traceId": "trc_m5-agent-session", "action": "agent.session.start", "targetType": "agent_session", "targetId": "agt_m5-0001", "projectId": "proj_m5-mvp-e2e", "gatewaySessionId": null, "operationId": null, "workerSessionId": "wkr_m5-0001", "serviceId": "hwlab-agent-mgr", "environment": "dev", "outcome": "succeeded", "dryRun": true, "occurredAt": "2026-05-21T00:02:45.000Z" }, { "auditId": "aud_m5-agent-operation", "traceId": "trc_m5-agent-0001", "action": "hardware.operation.request", "targetType": "hardware_operation", "targetId": "op_m5-agent-0001", "projectId": "proj_m5-mvp-e2e", "gatewaySessionId": "gws_m5-0001", "operationId": "op_m5-agent-0001", "workerSessionId": "wkr_m5-0001", "serviceId": "hwlab-agent-worker", "environment": "dev", "outcome": "succeeded", "dryRun": true, "occurredAt": "2026-05-21T00:03:30.000Z" }, { "auditId": "aud_m5-cleanup", "traceId": "trc_m5-cleanup", "action": "worker.cleanup", "targetType": "worker_session", "targetId": "wkr_m5-0001", "projectId": "proj_m5-mvp-e2e", "gatewaySessionId": "gws_m5-0001", "operationId": null, "workerSessionId": "wkr_m5-0001", "serviceId": "hwlab-agent-worker", "environment": "dev", "outcome": "succeeded", "dryRun": true, "occurredAt": "2026-05-21T00:05:00.000Z" } ], "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", "traceId": "trc_m5-direct-0001", "dryRun": true, "createdAt": "2026-05-21T00:02:40.000Z" }, { "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", "traceId": "trc_m5-agent-0001", "dryRun": true, "createdAt": "2026-05-21T00:03:40.000Z" } ], "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" ] } };