219 lines
6.7 KiB
JSON
219 lines
6.7 KiB
JSON
{
|
|
"$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"
|
|
}
|
|
}
|