{ "$schema": "https://hwlab.pikastech.local/schemas/dev-m3-hardware-loop-report.schema.json", "$id": "https://hwlab.pikastech.local/reports/dev-gate/dev-m3-hardware-loop.json", "reportVersion": "v1", "issue": "pikasTech/HWLAB#38", "taskId": "dev-m3-hardware-loop", "commitId": "70bb9168ead2", "acceptanceLevel": "dev_m3_hardware_loop", "devOnly": true, "prodDisabled": true, "sourceContract": { "status": "pass", "documents": [ "docs/dev-acceptance-matrix.md", "docs/m3-hardware-loop.md", "fixtures/mvp/m3-hardware-loop/topology.json" ], "summary": "Source contracts define DEV-only M3 simulator wiring and prohibit fixture output as live evidence." }, "validationCommands": [ "node --check scripts/dev-m3-hardware-loop-smoke.mjs", "node --check scripts/validate-dev-m3-cardinality.mjs", "node scripts/validate-dev-m3-cardinality.mjs", "node scripts/dev-m3-hardware-loop-smoke.mjs --live --confirm-dev --confirmed-non-production", "node --check scripts/validate-dev-gate-report.mjs", "node scripts/validate-dev-gate-report.mjs" ], "runtimeTarget": { "endpoint": "http://74.48.78.17:6667", "namespace": "hwlab-dev", "environment": "dev", "requiredBoxSimulators": 2, "requiredGatewaySimulators": 2, "realHardwareAllowed": false, "prodAllowed": false }, "safetyGates": { "liveFlagRequired": true, "confirmDevRequired": true, "confirmedNonProductionRequired": true, "prodForbidden": true, "realHardwareForbidden": true, "secretReadForbidden": true, "forcePushForbidden": true, "unideskRuntimeSubstitutionForbidden": true }, "liveChecks": [ { "id": "static-contract-parse", "status": "pass", "summary": "DEV M3 smoke contract files were readable before live probing.", "evidence": [ "docs/dev-acceptance-matrix.md", "docs/m3-hardware-loop.md" ] }, { "id": "endpoint-freeze", "status": "pass", "summary": "DEV endpoint is frozen at http://74.48.78.17:6667.", "evidence": [ "http://74.48.78.17:6667" ] }, { "id": "dev-ingress-health", "status": "blocked", "blockerClass": "network_blocker", "summary": "DEV ingress at http://74.48.78.17:6667 did not return reachable HWLAB DEV health.", "evidence": [ "{\"url\":\"http://74.48.78.17:6667/health/live\",\"method\":\"GET\",\"startedAt\":\"2026-05-21T17:29:33.794Z\",\"observedAt\":\"2026-05-21T17:29:33.964Z\",\"reached\":false,\"ok\":false,\"error\":{\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 74.48.78.17:6667\",\"code\":\"ECONNREFUSED\"}}", "{\"url\":\"http://74.48.78.17:6667/health\",\"method\":\"GET\",\"startedAt\":\"2026-05-21T17:29:33.964Z\",\"observedAt\":\"2026-05-21T17:29:34.132Z\",\"reached\":false,\"ok\":false,\"error\":{\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 74.48.78.17:6667\",\"code\":\"ECONNREFUSED\"}}", "{\"url\":\"http://74.48.78.17:6667/live\",\"method\":\"GET\",\"startedAt\":\"2026-05-21T17:29:34.132Z\",\"observedAt\":\"2026-05-21T17:29:34.313Z\",\"reached\":false,\"ok\":false,\"error\":{\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 74.48.78.17:6667\",\"code\":\"ECONNREFUSED\"}}", "{\"url\":\"http://74.48.78.17:6667/v1\",\"method\":\"GET\",\"startedAt\":\"2026-05-21T17:29:34.314Z\",\"observedAt\":\"2026-05-21T17:29:34.479Z\",\"reached\":false,\"ok\":false,\"error\":{\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 74.48.78.17:6667\",\"code\":\"ECONNREFUSED\"}}" ] }, { "id": "two-box-simu-online", "status": "not_run", "summary": "Stopped at DEV ingress per the DEV smoke matrix.", "evidence": [ "No live DEV evidence collected for this check." ] }, { "id": "two-gateway-simu-online", "status": "not_run", "summary": "Stopped at DEV ingress per the DEV smoke matrix.", "evidence": [ "No live DEV evidence collected for this check." ] }, { "id": "patch-panel-healthy", "status": "not_run", "summary": "Stopped at DEV ingress per the DEV smoke matrix.", "evidence": [ "No live DEV evidence collected for this check." ] }, { "id": "wiring-do1-di1-applied", "status": "not_run", "summary": "Stopped at DEV ingress per the DEV smoke matrix.", "evidence": [ "No live DEV evidence collected for this check." ] }, { "id": "direct-call-do-write-di-read", "status": "not_run", "summary": "Stopped at DEV ingress per the DEV smoke matrix.", "evidence": [ "No live DEV evidence collected for this check." ] }, { "id": "audit-evidence-traceable", "status": "not_run", "summary": "Stopped at DEV ingress per the DEV smoke matrix.", "evidence": [ "No live DEV evidence collected for this check." ] } ], "readOnlySupplementalEvidence": [ { "id": "deploy-skeleton-m3-cardinality", "status": "manifest-ready", "blockerClass": null, "source": "deploy/k8s/base/workloads.yaml", "summary": "Checked-in DEV deploy skeleton declares M3 cardinality: two box simulators, two gateway simulators, and one patch panel.", "evidence": { "required": { "hwlab-box-simu": 2, "hwlab-gateway-simu": 2, "hwlab-patch-panel": 1, "wiring": "box-simu-1 DO1 -> box-simu-2 DI1" }, "observed": { "hwlab-box-simu": { "replicas": 2, "env": { "HWLAB_BOX_ID": "boxsimu_1,boxsimu_2" } }, "hwlab-gateway-simu": { "replicas": 2, "env": { "HWLAB_BOX_RESOURCES": "res_boxsimu_1,res_boxsimu_2" } }, "hwlab-patch-panel": { "replicas": 1, "env": {} } } }, "validationCommand": "node scripts/validate-dev-m3-cardinality.mjs", "requiredFollowUp": "Static DEV manifest cardinality is source-ready; live DEV M3 evidence still depends on edge/runtime reachability and direct DEV simulator targets." } ], "localRuntimeObservations": [ { "id": "docker-hwlab-containers", "status": "not_observed", "command": "docker ps --format {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}", "summary": "No running docker container name/image/port line contained hwlab-." }, { "id": "kubectl-hwlab-dev", "status": "unavailable", "command": "command -v kubectl", "summary": "kubectl is not available in this runner, so hwlab-dev namespace state was not observed." } ], "liveOperation": { "status": "not_run", "operationId": "not_observed", "traceId": "not_observed", "auditId": "not_observed", "evidenceId": "not_observed", "summary": "No live do.write -> di.read operation was attempted because DEV ingress is blocked." }, "blockers": [ { "type": "network_blocker", "scope": "dev-ingress-health", "status": "open", "summary": "Blocked at the #33 DEV runtime readiness condition: public DEV ingress does not accept HWLAB health requests, so #36/M3 hardware-loop checks were not reached." } ], "summary": { "status": "blocked", "observedAt": "2026-05-21T17:29:33.789Z", "result": "No live DEV M3 evidence was produced; fixture-backed local evidence was not used as a substitute." } }