{ "$schema": "https://hwlab.pikastech.local/schemas/dev-gate-report.schema.json", "$id": "https://hwlab.pikastech.local/reports/dev-gate/dev-edge-health.json", "reportVersion": "v1", "issue": "pikasTech/HWLAB#36", "taskId": "dev-edge-health", "commitId": "7092eb981459", "acceptanceLevel": "dev_edge_health", "devOnly": true, "prodDisabled": true, "status": "blocked", "generatedAt": "2026-05-21T16:48:05.275Z", "namespace": "hwlab-dev", "endpoint": "http://74.48.78.17:6667", "sourceContract": { "status": "pass", "documents": [ "docs/dev-acceptance-matrix.md", "docs/m0-contract-audit.md", "docs/dev-edge-health.md", "deploy/frp/README.md", "deploy/master-edge/README.md" ], "summary": "DEV edge health is pinned to the frozen HWLAB endpoint, frp reverse link, master edge proxy, and hwlab-dev services." }, "validationCommands": [ "node --check scripts/validate-dev-gate-report.mjs", "node scripts/validate-dev-gate-report.mjs", "node --check scripts/dev-edge-health-smoke.mjs", "node --check scripts/src/dev-edge-health-smoke-lib.mjs", "node scripts/dev-edge-health-smoke.mjs --live --write-report" ], "localSmoke": { "status": "pass", "commands": [ "node scripts/m1-contract-smoke.mjs" ], "evidence": [ "npm run check includes internal/cloud/server.test.mjs and validates /health plus /health/live." ], "summary": "Local cloud-api health checks pass and include service, commit, and image evidence fields." }, "dryRun": { "status": "not_run", "commands": [ "node tools/hwlab-cli/bin/hwlab-cli.mjs test e2e --env dev --mvp --dry-run" ], "evidence": [ "This edge-health task used the dedicated read-only smoke instead of the MVP e2e dry-run." ], "summary": "MVP dry-run remains the generic gate command; edge health uses a narrower route smoke." }, "devPreconditions": { "status": "blocked", "requirements": [ "http://74.48.78.17:6667/health returns HWLAB DEV JSON with service, commit, and image evidence", "frps control on 74.48.78.17:7000 accepts the D601 frp client", "hwlab-dev hwlab-edge-proxy, hwlab-tunnel-client, hwlab-router, and hwlab-cloud-api are observable", "No PROD endpoint, secret read, restart, or UniDesk runtime substitute is used" ], "summary": "public 6667 and frps control 7000 both refuse TCP connections; frps is not reachable on the master edge" }, "blockers": [ { "type": "network_blocker", "scope": "frp_blocker", "status": "open", "summary": "public 6667 and frps control 7000 both refuse TCP connections; frps is not reachable on the master edge" } ], "edgeHealth": { "generatedAt": "2026-05-21T16:48:05.275Z", "mode": "live-read-only", "endpoint": "http://74.48.78.17:6667", "safety": { "environment": "dev", "prodTouched": false, "secretsRead": false, "restarts": false, "unideskRuntimeSubstitute": false }, "contracts": { "devEndpoint": "http://74.48.78.17:6667", "frp": { "frpcTargetsEdgeProxy": true, "frpsTcpRemotePort6667": true, "frpsUsesVhost6667": false, "configRisk": "none" }, "masterEdge": { "endpoint": "http://74.48.78.17:6667", "reverseLinkMode": "frp", "reverseLinkClient": "hwlab-tunnel-client", "publicPort": 6667 }, "deploy": { "environment": "dev", "namespace": "hwlab-dev", "serviceCount": 13, "edgeProxy": { "serviceId": "hwlab-edge-proxy", "image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "env": { "HWLAB_EDGE_LISTEN": "0.0.0.0:6667", "HWLAB_EDGE_UPSTREAM": "http://hwlab-cloud-api.hwlab-dev.svc.cluster.local:6667" } }, "tunnelClient": { "serviceId": "hwlab-tunnel-client", "image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "env": { "HWLAB_TUNNEL_MODE": "frp-client", "HWLAB_FRP_SERVER_ADDR": "74.48.78.17", "HWLAB_FRP_PUBLIC_PORT": "6667" } } } }, "publicTcp": [ { "host": "74.48.78.17", "port": 6667, "status": "error", "code": "ECONNREFUSED", "message": "connect ECONNREFUSED 74.48.78.17:6667", "durationMs": 221 }, { "host": "74.48.78.17", "port": 7000, "status": "error", "code": "ECONNREFUSED", "message": "connect ECONNREFUSED 74.48.78.17:7000", "durationMs": 218 }, { "host": "74.48.78.17", "port": 7402, "status": "error", "code": "ECONNREFUSED", "message": "connect ECONNREFUSED 74.48.78.17:7402", "durationMs": 207 } ], "publicHttp": [ { "url": "http://74.48.78.17:6667/health", "ok": false, "error": { "name": "TypeError", "message": "fetch failed" }, "durationMs": 34 }, { "url": "http://74.48.78.17:6667/health/live", "ok": false, "error": { "name": "TypeError", "message": "fetch failed" }, "durationMs": 5 } ], "kubernetes": { "observable": false, "namespace": "hwlab-dev", "context": null, "services": [], "endpoints": [], "pods": [], "notes": [ "kubectl is not installed in this runner" ] }, "clusterDns": [ { "serviceId": "hwlab-cloud-api", "host": "hwlab-cloud-api.hwlab-dev.svc.cluster.local", "port": 6667, "resolved": false, "output": "" }, { "serviceId": "hwlab-router", "host": "hwlab-router.hwlab-dev.svc.cluster.local", "port": 7401, "resolved": false, "output": "" }, { "serviceId": "hwlab-tunnel-client", "host": "hwlab-tunnel-client.hwlab-dev.svc.cluster.local", "port": 7402, "resolved": false, "output": "" }, { "serviceId": "hwlab-edge-proxy", "host": "hwlab-edge-proxy.hwlab-dev.svc.cluster.local", "port": 6667, "resolved": false, "output": "" } ], "status": "blocker", "classification": "frp_blocker", "blocker": "public 6667 and frps control 7000 both refuse TCP connections; frps is not reachable on the master edge" } }