979 lines
34 KiB
JSON
979 lines
34 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": "c7de4745f491",
|
|
"acceptanceLevel": "dev_edge_health",
|
|
"devOnly": true,
|
|
"prodDisabled": true,
|
|
"reportLifecycle": {
|
|
"version": "v1",
|
|
"state": "active",
|
|
"activeEndpoint": "http://74.48.78.17:16667",
|
|
"activeBrowserEndpoint": "http://74.48.78.17:16666",
|
|
"deprecatedEndpoint": null,
|
|
"summary": "Current DEV edge-health report; deprecated public 6666/6667 endpoints are not valid active evidence."
|
|
},
|
|
"status": "blocked",
|
|
"generatedAt": "2026-05-22T13:45:42.982Z",
|
|
"namespace": "hwlab-dev",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"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 --test scripts/src/dev-edge-health-smoke-lib.test.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:16667/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": "DB endpoint DNS resolution failed from the cloud-api runtime"
|
|
},
|
|
"blockers": [
|
|
{
|
|
"type": "runtime_blocker",
|
|
"scope": "cloud-api-db",
|
|
"status": "open",
|
|
"summary": "DB endpoint DNS resolution failed from the cloud-api runtime",
|
|
"classification": "dns_resolution_failed",
|
|
"sourceIssue": "pikasTech/HWLAB#49",
|
|
"impact": {
|
|
"blocks": [
|
|
"DB live readiness",
|
|
"M4 live agent scheduling precondition",
|
|
"M5 DEV-LIVE acceptance"
|
|
],
|
|
"separateFrom": [
|
|
"pikasTech/HWLAB#143 provider Secret",
|
|
"M3 hardware trusted-loop proof"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"type": "agent_blocker",
|
|
"scope": "code-agent-provider-secret",
|
|
"status": "open",
|
|
"summary": "Code Agent provider Secret hwlab-code-agent-provider/openai-api-key is not present as key-presence evidence; #143 real provider-backed chat remains blocked",
|
|
"classification": "provider_secret_missing",
|
|
"sourceIssue": "pikasTech/HWLAB#143",
|
|
"impact": {
|
|
"blocks": [
|
|
"#143 provider-backed Code Agent chat",
|
|
"M4 provider-backed agent execution",
|
|
"M5 DEV-LIVE acceptance"
|
|
],
|
|
"separateFrom": [
|
|
"pikasTech/HWLAB#49 DB live readiness",
|
|
"M3 hardware trusted-loop proof"
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"edgeHealth": {
|
|
"generatedAt": "2026-05-22T13:45:42.982Z",
|
|
"mode": "live-read-only",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"safety": {
|
|
"environment": "dev",
|
|
"prodTouched": false,
|
|
"secretsRead": false,
|
|
"restarts": false,
|
|
"unideskRuntimeSubstitute": false
|
|
},
|
|
"contracts": {
|
|
"devEndpoint": "http://74.48.78.17:16667",
|
|
"frp": {
|
|
"frpcTargetsEdgeProxy": true,
|
|
"frpcTargetsCloudWeb": true,
|
|
"frpsTcpRemotePort16667": true,
|
|
"frpsTcpRemotePort16666": true,
|
|
"frpsUsesVhostEdgePort": false,
|
|
"configRisk": "none"
|
|
},
|
|
"masterEdge": {
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"reverseLinkMode": "frp",
|
|
"reverseLinkClient": "hwlab-tunnel-client",
|
|
"publicPort": 16667
|
|
},
|
|
"deploy": {
|
|
"environment": "dev",
|
|
"namespace": "hwlab-dev",
|
|
"serviceCount": 13,
|
|
"edgeProxy": {
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:7e29522",
|
|
"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": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:7e29522",
|
|
"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": "16667",
|
|
"HWLAB_FRP_WEB_PUBLIC_PORT": "16666"
|
|
}
|
|
},
|
|
"cloudApiDb": {
|
|
"status": "degraded",
|
|
"ready": false,
|
|
"configReady": true,
|
|
"connected": false,
|
|
"liveConnected": false,
|
|
"connectionChecked": false,
|
|
"connectionAttempted": false,
|
|
"connectionResult": "manifest_only_not_attempted",
|
|
"liveDbEvidence": false,
|
|
"requiredEnv": [
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_URL",
|
|
"present": true,
|
|
"redacted": true,
|
|
"source": "k8s-secret-ref"
|
|
},
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
|
"present": true,
|
|
"redacted": false,
|
|
"source": "runtime-env"
|
|
}
|
|
],
|
|
"missingEnv": [],
|
|
"secretRefs": [
|
|
{
|
|
"env": "HWLAB_CLOUD_DB_URL",
|
|
"secretName": "hwlab-cloud-api-dev-db",
|
|
"secretKey": "database-url",
|
|
"present": true,
|
|
"envInjected": false,
|
|
"secretPresent": "not_observed_by_manifest",
|
|
"secretKeyPresent": "declared",
|
|
"redacted": true
|
|
}
|
|
],
|
|
"connection": {
|
|
"attempted": false,
|
|
"networkAttempted": false,
|
|
"result": "manifest_only_not_attempted",
|
|
"classification": "manifest_only",
|
|
"probeType": "tcp-connect",
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true,
|
|
"timeoutMs": null,
|
|
"durationMs": 0,
|
|
"errorCode": null
|
|
},
|
|
"redaction": {
|
|
"valuesRedacted": true,
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true,
|
|
"secretMaterialRead": false,
|
|
"secretRefsOnly": true
|
|
},
|
|
"blocker": "Manifest declares DB env/Secret references but does not prove runtime env injection or live DB connection",
|
|
"fixtureEvidence": false,
|
|
"manifestConfigReady": true,
|
|
"envInjected": false,
|
|
"secretMaterialRead": false,
|
|
"valuesRedacted": true,
|
|
"note": "Manifest-only DB env placeholder; this is not runtime env injection or live DB evidence."
|
|
},
|
|
"codeAgentProvider": {
|
|
"status": "degraded",
|
|
"sourceIssue": "pikasTech/HWLAB#143",
|
|
"requiredEnv": [
|
|
{
|
|
"name": "OPENAI_API_KEY",
|
|
"present": true,
|
|
"redacted": true,
|
|
"source": "k8s-secret-ref"
|
|
}
|
|
],
|
|
"secretRef": {
|
|
"env": "OPENAI_API_KEY",
|
|
"secretName": "hwlab-code-agent-provider",
|
|
"secretKey": "openai-api-key",
|
|
"present": true,
|
|
"envInjected": false,
|
|
"secretPresent": "not_observed_by_manifest",
|
|
"secretKeyPresent": "declared",
|
|
"secretValueRead": false,
|
|
"redacted": true
|
|
},
|
|
"secretMaterialRead": false,
|
|
"valuesRedacted": true,
|
|
"note": "Manifest-only Code Agent provider Secret reference; this is not runtime Secret injection or provider connectivity evidence."
|
|
}
|
|
}
|
|
},
|
|
"publicTcp": [
|
|
{
|
|
"host": "74.48.78.17",
|
|
"port": 16667,
|
|
"status": "connected",
|
|
"durationMs": 206
|
|
},
|
|
{
|
|
"host": "74.48.78.17",
|
|
"port": 7000,
|
|
"status": "connected",
|
|
"durationMs": 218
|
|
},
|
|
{
|
|
"host": "74.48.78.17",
|
|
"port": 7402,
|
|
"status": "connected",
|
|
"durationMs": 207
|
|
}
|
|
],
|
|
"publicHttp": [
|
|
{
|
|
"url": "http://74.48.78.17:16667/health",
|
|
"ok": true,
|
|
"status": 200,
|
|
"statusText": "OK",
|
|
"headers": {
|
|
"connection": "keep-alive",
|
|
"content-length": "661",
|
|
"content-type": "application/json; charset=utf-8",
|
|
"date": "Fri, 22 May 2026 13:45:42 GMT",
|
|
"keep-alive": "timeout=5"
|
|
},
|
|
"json": {
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"environment": "dev",
|
|
"status": "ok",
|
|
"service": {
|
|
"id": "hwlab-edge-proxy",
|
|
"role": "public-dev-ingress",
|
|
"healthPath": "/health",
|
|
"livePath": "/health/live"
|
|
},
|
|
"commit": {
|
|
"id": "cb35ada6860653b27269b0a57991184118cbf4b1",
|
|
"source": "runtime-env"
|
|
},
|
|
"image": {
|
|
"reference": "ghcr.io/pikastech/hwlab-edge-proxy:cb35ada",
|
|
"tag": "cb35ada",
|
|
"digest": "unknown"
|
|
},
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"observedAt": "2026-05-22T13:45:42.602Z",
|
|
"details": {
|
|
"upstream": "http://hwlab-cloud-api.hwlab-dev.svc.cluster.local:6667",
|
|
"mode": "dev-edge-proxy"
|
|
}
|
|
},
|
|
"bodyPreview": "{\n \"serviceId\": \"hwlab-edge-proxy\",\n \"environment\": \"dev\",\n \"status\": \"ok\",\n \"service\": {\n \"id\": \"hwlab-edge-proxy\",\n \"role\": \"public-dev-ingress\",\n \"healthPath\": \"/health\",\n \"livePath\": \"/health/live\"\n },\n \"commit\": {\n \"id\": \"cb35ada6860653b27269b0a57991184118cbf4b1\",\n \"source\": \"runtime-env\"\n },\n \"image\": {\n \"reference\": \"ghcr.io/pikastech/hwlab-edge-proxy:cb35ada\",\n \"tag\": \"cb35ada\",\n \"digest\": \"unknown\"\n },\n \"endpoint\": \"http://74.48.78.17:16667\",\n \"obse",
|
|
"durationMs": 837
|
|
},
|
|
{
|
|
"url": "http://74.48.78.17:16667/health/live",
|
|
"ok": true,
|
|
"status": 200,
|
|
"statusText": "OK",
|
|
"headers": {
|
|
"cache-control": "no-store",
|
|
"connection": "keep-alive",
|
|
"content-type": "application/json; charset=utf-8",
|
|
"date": "Fri, 22 May 2026 13:45:42 GMT",
|
|
"keep-alive": "timeout=5",
|
|
"transfer-encoding": "chunked"
|
|
},
|
|
"json": {
|
|
"serviceId": "hwlab-cloud-api",
|
|
"environment": "dev",
|
|
"status": "degraded",
|
|
"service": {
|
|
"id": "hwlab-cloud-api",
|
|
"role": "cloud-api",
|
|
"healthPath": "/health",
|
|
"livePath": "/health/live"
|
|
},
|
|
"commit": {
|
|
"id": "c7de474",
|
|
"source": "runtime-env"
|
|
},
|
|
"image": {
|
|
"reference": "127.0.0.1:5000/hwlab/hwlab-cloud-api:c7de474",
|
|
"tag": "c7de474",
|
|
"digest": "unknown"
|
|
},
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"observedAt": "2026-05-22T13:45:42.604Z",
|
|
"db": {
|
|
"contractVersion": "v1",
|
|
"environment": "dev",
|
|
"connected": false,
|
|
"liveConnected": false,
|
|
"liveDbEvidence": false,
|
|
"connectionChecked": true,
|
|
"connectionAttempted": true,
|
|
"connectionResult": "dns_error",
|
|
"configReady": true,
|
|
"ready": false,
|
|
"status": "degraded",
|
|
"mode": "live_connection_blocked",
|
|
"fields": [
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_URL",
|
|
"present": true,
|
|
"redacted": true,
|
|
"source": "k8s-secret-ref",
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
|
"present": true,
|
|
"redacted": false,
|
|
"source": "runtime-env",
|
|
"required": true
|
|
}
|
|
],
|
|
"missingEnv": [],
|
|
"secretRefs": [
|
|
{
|
|
"env": "HWLAB_CLOUD_DB_URL",
|
|
"secretName": "hwlab-cloud-api-dev-db",
|
|
"secretKey": "database-url",
|
|
"present": true,
|
|
"envInjected": true,
|
|
"secretPresent": "not_observed_by_runtime",
|
|
"secretKeyPresent": "not_observed_by_runtime",
|
|
"redacted": true
|
|
}
|
|
],
|
|
"connection": {
|
|
"attempted": true,
|
|
"networkAttempted": true,
|
|
"probeType": "tcp-connect",
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true,
|
|
"timeoutMs": 1200,
|
|
"durationMs": 1,
|
|
"missingEnv": [],
|
|
"result": "dns_error",
|
|
"classification": "dns_resolution_failed",
|
|
"errorCode": "ENOTFOUND"
|
|
},
|
|
"redaction": {
|
|
"valuesRedacted": true,
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true,
|
|
"secretMaterialRead": false,
|
|
"secretRefsOnly": true
|
|
},
|
|
"safety": {
|
|
"devOnly": true,
|
|
"prodAllowed": false,
|
|
"secretsRead": false,
|
|
"secretMaterialRead": false,
|
|
"valuesRedacted": true,
|
|
"endpointRedacted": true,
|
|
"liveDbEvidence": false,
|
|
"liveDbConnectedEvidence": false
|
|
},
|
|
"blocker": "DB endpoint DNS resolution failed from the cloud-api runtime",
|
|
"evidence": "live_db_tcp_connection_blocked"
|
|
},
|
|
"runtime": {
|
|
"adapter": "memory",
|
|
"durable": false,
|
|
"status": "degraded",
|
|
"reason": "live DB persistence is not connected; L1 runtime writes are process-local only",
|
|
"counts": {
|
|
"gatewaySessions": 0,
|
|
"boxResources": 0,
|
|
"boxCapabilities": 0,
|
|
"hardwareOperations": 0,
|
|
"auditEvents": 0,
|
|
"evidenceRecords": 0
|
|
}
|
|
}
|
|
},
|
|
"bodyPreview": "{\"serviceId\":\"hwlab-cloud-api\",\"environment\":\"dev\",\"status\":\"degraded\",\"service\":{\"id\":\"hwlab-cloud-api\",\"role\":\"cloud-api\",\"healthPath\":\"/health\",\"livePath\":\"/health/live\"},\"commit\":{\"id\":\"c7de474\",\"source\":\"runtime-env\"},\"image\":{\"reference\":\"127.0.0.1:5000/hwlab/hwlab-cloud-api:c7de474\",\"tag\":\"c7de474\",\"digest\":\"unknown\"},\"endpoint\":\"http://74.48.78.17:16667\",\"observedAt\":\"2026-05-22T13:45:42.604Z\",\"db\":{\"contractVersion\":\"v1\",\"environment\":\"dev\",\"connected\":false,\"liveConnected\":false,\"liveD",
|
|
"durationMs": 810
|
|
}
|
|
],
|
|
"kubernetes": {
|
|
"observable": true,
|
|
"namespace": "hwlab-dev",
|
|
"context": {
|
|
"exitCode": 0,
|
|
"value": "in-cluster",
|
|
"stderr": ""
|
|
},
|
|
"services": [
|
|
{
|
|
"name": "hwlab-cloud-api",
|
|
"type": "ClusterIP",
|
|
"clusterIP": "10.43.88.144",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 6667,
|
|
"targetPort": "http"
|
|
}
|
|
],
|
|
"selector": {
|
|
"app.kubernetes.io/name": "hwlab-cloud-api",
|
|
"app.kubernetes.io/part-of": "hwlab",
|
|
"hwlab.pikastech.local/environment": "dev",
|
|
"hwlab.pikastech.local/profile": "dev"
|
|
}
|
|
},
|
|
{
|
|
"name": "hwlab-edge-proxy",
|
|
"type": "ClusterIP",
|
|
"clusterIP": "10.43.104.107",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 6667,
|
|
"targetPort": "http"
|
|
}
|
|
],
|
|
"selector": {
|
|
"app.kubernetes.io/name": "hwlab-edge-proxy",
|
|
"app.kubernetes.io/part-of": "hwlab",
|
|
"hwlab.pikastech.local/environment": "dev",
|
|
"hwlab.pikastech.local/profile": "dev"
|
|
}
|
|
},
|
|
{
|
|
"name": "hwlab-tunnel-client",
|
|
"type": "ClusterIP",
|
|
"clusterIP": "10.43.129.225",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7402,
|
|
"targetPort": "http"
|
|
}
|
|
],
|
|
"selector": {
|
|
"app.kubernetes.io/name": "hwlab-tunnel-client",
|
|
"app.kubernetes.io/part-of": "hwlab",
|
|
"hwlab.pikastech.local/environment": "dev",
|
|
"hwlab.pikastech.local/profile": "dev"
|
|
}
|
|
},
|
|
{
|
|
"name": "hwlab-router",
|
|
"type": "ClusterIP",
|
|
"clusterIP": "10.43.6.240",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7401,
|
|
"targetPort": "http"
|
|
}
|
|
],
|
|
"selector": {
|
|
"app.kubernetes.io/name": "hwlab-router",
|
|
"app.kubernetes.io/part-of": "hwlab",
|
|
"hwlab.pikastech.local/environment": "dev",
|
|
"hwlab.pikastech.local/profile": "dev"
|
|
}
|
|
}
|
|
],
|
|
"endpoints": [
|
|
{
|
|
"name": "hwlab-cloud-api",
|
|
"readyAddresses": [
|
|
"10.42.0.226"
|
|
],
|
|
"notReadyAddresses": [],
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 6667
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-edge-proxy",
|
|
"readyAddresses": [
|
|
"10.42.0.203"
|
|
],
|
|
"notReadyAddresses": [],
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 6667
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-tunnel-client",
|
|
"readyAddresses": [
|
|
"10.42.0.207"
|
|
],
|
|
"notReadyAddresses": [],
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7402
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-router",
|
|
"readyAddresses": [
|
|
"10.42.0.206"
|
|
],
|
|
"notReadyAddresses": [],
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7401
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"pods": [
|
|
{
|
|
"name": "hwlab-agent-mgr-75544c7747-5dzt9",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-agent-mgr",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-agent-mgr@sha256:c16c733306a28ae9385087653b79f5bb2f28724d917a89bb296646f6a02c5318"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-agent-skills-849d9976f4-2nsmw",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-agent-skills",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-agent-skills",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-agent-skills@sha256:246fb7bb48597a7179aab62cb091e8213e47b71b6871ba94e6028032992e916c"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-box-simu-55688cbcc7-pftxc",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-box-simu",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-box-simu",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:ae5fcc06a276918561c2d752f2221156bd2bd4db7fb93967ae76af97bfdc51bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-box-simu-55688cbcc7-sq5fx",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-box-simu",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-box-simu",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:ae5fcc06a276918561c2d752f2221156bd2bd4db7fb93967ae76af97bfdc51bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-cloud-api-74c969765d-kzvdd",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-cloud-api",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-cloud-api",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:c7de474",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-api@sha256:86fe92c0dd5d5883851b38805e6f5acc49d2876552599c18f85480cf0d3bf981"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-cloud-web-7d48b84f4b-n6hw6",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-cloud-web",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-cloud-web",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:c7de474",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-web@sha256:91cfacc1fc011a96bb47ff00d2ab09ee3c93003b7ec482308ec5ac35004e5627"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-edge-proxy-567f978cdd-8fwc8",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-edge-proxy",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-edge-proxy@sha256:384832fc579063b9b0a940973690734bb402607720fd36f4662e4ee6fa5a57d2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-gateway-simu-699fd486b-j9pk7",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-gateway-simu",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:00599721b910b5667b6be43c416cab4c410c6cc29b7f56ecdfb6eff71123d01c"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-gateway-simu-699fd486b-phcgp",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-gateway-simu",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:00599721b910b5667b6be43c416cab4c410c6cc29b7f56ecdfb6eff71123d01c"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-patch-panel-757f9f44d5-7np8r",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-patch-panel",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-patch-panel",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-patch-panel@sha256:5b3aa6505492c2ed398d21cbd35a8754672114acd0fa97faa3351d4b6a6dfd5a"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-router-5d9cbdf89b-p7r94",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-router",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-router",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-router@sha256:217b1fdb0f704c4183e9d8503644177f0c8bae674da0433985c19ef909f0e342"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "hwlab-tunnel-client-65c7858c8-wjqsh",
|
|
"phase": "Running",
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-tunnel-client",
|
|
"ready": true,
|
|
"restartCount": 0,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-tunnel-client@sha256:9bcdd8a58132d7bc4dbfc71297f802fc0ab407a1b5c1bb1ea58e0791147a243b"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"dbSecret": {
|
|
"observable": true,
|
|
"secretName": "hwlab-cloud-api-dev-db",
|
|
"secretKey": "database-url",
|
|
"secretPresent": true,
|
|
"secretKeyPresent": true,
|
|
"secretValueRead": false,
|
|
"redacted": true,
|
|
"command": "kubectl describe secret <name> (key-presence-only)",
|
|
"error": null
|
|
},
|
|
"codeAgentProviderSecret": {
|
|
"observable": true,
|
|
"sourceIssue": "pikasTech/HWLAB#143",
|
|
"env": "OPENAI_API_KEY",
|
|
"secretName": "hwlab-code-agent-provider",
|
|
"secretKey": "openai-api-key",
|
|
"secretPresent": false,
|
|
"secretKeyPresent": false,
|
|
"secretValueRead": false,
|
|
"redacted": true,
|
|
"command": "kubectl get secret -o name",
|
|
"error": "Error from server (NotFound): secrets \"hwlab-code-agent-provider\" not found"
|
|
},
|
|
"notes": [
|
|
"kubectl Code Agent provider Secret presence probe failed: Error from server (NotFound): secrets \"hwlab-code-agent-provider\" not found"
|
|
]
|
|
},
|
|
"clusterDns": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"host": "hwlab-cloud-api.hwlab-dev.svc.cluster.local",
|
|
"port": 6667,
|
|
"resolved": true,
|
|
"output": "10.43.88.144 hwlab-cloud-api.hwlab-dev.svc.cluster.local"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"host": "hwlab-router.hwlab-dev.svc.cluster.local",
|
|
"port": 7401,
|
|
"resolved": true,
|
|
"output": "10.43.6.240 hwlab-router.hwlab-dev.svc.cluster.local"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"host": "hwlab-tunnel-client.hwlab-dev.svc.cluster.local",
|
|
"port": 7402,
|
|
"resolved": true,
|
|
"output": "10.43.129.225 hwlab-tunnel-client.hwlab-dev.svc.cluster.local"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"host": "hwlab-edge-proxy.hwlab-dev.svc.cluster.local",
|
|
"port": 6667,
|
|
"resolved": true,
|
|
"output": "10.43.104.107 hwlab-edge-proxy.hwlab-dev.svc.cluster.local"
|
|
}
|
|
],
|
|
"runtimeDbReadiness": {
|
|
"status": "blocked",
|
|
"configReady": true,
|
|
"envInjected": true,
|
|
"secret": {
|
|
"observable": true,
|
|
"secretName": "hwlab-cloud-api-dev-db",
|
|
"secretKey": "database-url",
|
|
"secretPresent": true,
|
|
"secretKeyPresent": true,
|
|
"secretValueRead": false,
|
|
"redacted": true,
|
|
"command": "kubectl describe secret <name> (key-presence-only)",
|
|
"error": null,
|
|
"secretRefPresent": true,
|
|
"envInjected": true
|
|
},
|
|
"connectionAttempted": true,
|
|
"connectionResult": "dns_error",
|
|
"connectionClassification": "dns_resolution_failed",
|
|
"liveConnected": false,
|
|
"valuesRedacted": true,
|
|
"secretMaterialRead": false,
|
|
"liveDbEvidence": false,
|
|
"blocker": "DB endpoint DNS resolution failed from the cloud-api runtime",
|
|
"evidence": [
|
|
{
|
|
"configReady": true,
|
|
"missingEnv": [],
|
|
"connectionAttempted": true,
|
|
"connectionResult": "dns_error",
|
|
"classification": "dns_resolution_failed",
|
|
"liveConnected": false,
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true
|
|
}
|
|
]
|
|
},
|
|
"status": "blocker",
|
|
"classification": "app_health_blocker",
|
|
"blocker": "DB endpoint DNS resolution failed from the cloud-api runtime",
|
|
"diagnosis": {
|
|
"likelyLayer": "cloud-api-db",
|
|
"confidence": "high",
|
|
"likelyCause": "DB endpoint DNS resolution failed from the cloud-api runtime",
|
|
"evidence": [
|
|
{
|
|
"configReady": true,
|
|
"missingEnv": [],
|
|
"connectionAttempted": true,
|
|
"connectionResult": "dns_error",
|
|
"classification": "dns_resolution_failed",
|
|
"liveConnected": false,
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true
|
|
}
|
|
],
|
|
"notProven": [
|
|
"authenticated SQL query readiness"
|
|
],
|
|
"nextTask": "Deploy cloud-api DB runtime readiness probe and/or repair DEV DB connectivity, then rerun the read-only health smoke without reading or printing the DB secret value."
|
|
},
|
|
"providerSecretReadiness": {
|
|
"status": "blocked",
|
|
"sourceIssue": "pikasTech/HWLAB#143",
|
|
"provider": "openai-responses",
|
|
"requiredEnv": "OPENAI_API_KEY",
|
|
"manifestRefPresent": true,
|
|
"secret": {
|
|
"observable": true,
|
|
"sourceIssue": "pikasTech/HWLAB#143",
|
|
"env": "OPENAI_API_KEY",
|
|
"secretName": "hwlab-code-agent-provider",
|
|
"secretKey": "openai-api-key",
|
|
"secretPresent": false,
|
|
"secretKeyPresent": false,
|
|
"secretValueRead": false,
|
|
"redacted": true,
|
|
"command": "kubectl get secret -o name",
|
|
"error": "Error from server (NotFound): secrets \"hwlab-code-agent-provider\" not found"
|
|
},
|
|
"providerCallAttempted": false,
|
|
"providerConnected": false,
|
|
"secretMaterialRead": false,
|
|
"valuesRedacted": true,
|
|
"classification": "provider_secret_missing",
|
|
"blocker": "Code Agent provider Secret hwlab-code-agent-provider/openai-api-key is not present as key-presence evidence; #143 real provider-backed chat remains blocked",
|
|
"evidence": [
|
|
{
|
|
"source": "kubernetes-secret-presence",
|
|
"manifestRefPresent": true,
|
|
"secretPresent": false,
|
|
"secretKeyPresent": false,
|
|
"secretValueRead": false,
|
|
"redacted": true
|
|
}
|
|
]
|
|
},
|
|
"parallelBlockers": [
|
|
{
|
|
"id": "cloud-api-db-live",
|
|
"type": "runtime_blocker",
|
|
"scope": "cloud-api-db",
|
|
"status": "open",
|
|
"sourceIssue": "pikasTech/HWLAB#49",
|
|
"classification": "dns_resolution_failed",
|
|
"summary": "DB endpoint DNS resolution failed from the cloud-api runtime",
|
|
"impact": {
|
|
"blocks": [
|
|
"DB live readiness",
|
|
"M4 live agent scheduling precondition",
|
|
"M5 DEV-LIVE acceptance"
|
|
],
|
|
"separateFrom": [
|
|
"pikasTech/HWLAB#143 provider Secret",
|
|
"M3 hardware trusted-loop proof"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "code-agent-provider-secret",
|
|
"type": "agent_blocker",
|
|
"scope": "code-agent-provider-secret",
|
|
"status": "open",
|
|
"sourceIssue": "pikasTech/HWLAB#143",
|
|
"classification": "provider_secret_missing",
|
|
"summary": "Code Agent provider Secret hwlab-code-agent-provider/openai-api-key is not present as key-presence evidence; #143 real provider-backed chat remains blocked",
|
|
"impact": {
|
|
"blocks": [
|
|
"#143 provider-backed Code Agent chat",
|
|
"M4 provider-backed agent execution",
|
|
"M5 DEV-LIVE acceptance"
|
|
],
|
|
"separateFrom": [
|
|
"pikasTech/HWLAB#49 DB live readiness",
|
|
"M3 hardware trusted-loop proof"
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"milestoneImpact": {
|
|
"M3": {
|
|
"status": "separate_blocker",
|
|
"summary": "M3 still requires real DEV hardware trusted-loop operation/trace/audit/evidence; DB DNS failure and #143 provider Secret absence do not prove or clear M3."
|
|
},
|
|
"M4": {
|
|
"status": "blocked",
|
|
"blockedBy": [
|
|
"cloud-api-db-live",
|
|
"code-agent-provider-secret"
|
|
],
|
|
"summary": "M4 live agent-loop remains blocked until DB live readiness and provider-backed agent prerequisites are independently green."
|
|
},
|
|
"M5": {
|
|
"status": "blocked",
|
|
"blockedBy": [
|
|
"cloud-api-db-live",
|
|
"code-agent-provider-secret"
|
|
],
|
|
"summary": "M5 DEV-LIVE acceptance cannot be promoted from route health, env presence, or provider manifest refs while DB live and #143 provider Secret blockers remain open."
|
|
}
|
|
}
|
|
}
|
|
}
|