298 lines
10 KiB
JSON
298 lines
10 KiB
JSON
{
|
|
"$schema": "https://hwlab.pikastech.local/schemas/dev-gate-preflight-report.schema.json",
|
|
"$id": "https://hwlab.pikastech.local/reports/dev-gate/dev-preflight-report.json",
|
|
"reportVersion": "v1",
|
|
"reportKind": "dev-gate-preflight",
|
|
"issue": "pikasTech/HWLAB#34",
|
|
"supports": [
|
|
"pikasTech/HWLAB#7",
|
|
"pikasTech/HWLAB#12",
|
|
"pikasTech/HWLAB#22",
|
|
"pikasTech/HWLAB#23",
|
|
"pikasTech/HWLAB#29",
|
|
"pikasTech/HWLAB#30",
|
|
"pikasTech/HWLAB#31"
|
|
],
|
|
"target": {
|
|
"ref": "origin/main",
|
|
"commitId": "eddfe3ba70db5725682cba2008b10a7a786bef92",
|
|
"shortCommitId": "eddfe3b"
|
|
},
|
|
"generatedAt": "2026-05-21T16:48:18.417Z",
|
|
"mode": "read-only",
|
|
"devOnly": true,
|
|
"prodDisabled": true,
|
|
"forbiddenActions": [
|
|
"prod-deploy",
|
|
"secret-material-read",
|
|
"unidesk-runtime-substitute",
|
|
"heavy-e2e",
|
|
"browser-e2e",
|
|
"force-push",
|
|
"runtime-restart"
|
|
],
|
|
"validationCommands": [
|
|
"node --check scripts/dev-gate-preflight.mjs",
|
|
"node --check scripts/src/dev-gate-preflight.mjs",
|
|
"node scripts/dev-gate-preflight.mjs",
|
|
"node --check scripts/validate-dev-gate-report.mjs",
|
|
"node scripts/validate-dev-gate-report.mjs"
|
|
],
|
|
"conclusion": "blocked",
|
|
"checks": [
|
|
{
|
|
"id": "source-contract-static",
|
|
"category": "contract",
|
|
"status": "pass",
|
|
"summary": "Local deploy manifest and artifact catalog are internally consistent.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "target-commit-pinning",
|
|
"category": "contract",
|
|
"status": "blocked",
|
|
"summary": "deploy/catalog commitId 24eb3bf does not match origin/main eddfe3b.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "artifact-catalog-publish-state",
|
|
"category": "registry",
|
|
"status": "blocked",
|
|
"summary": "Artifact catalog is still a skeleton and does not carry registry digests.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "k8s-manifest-static",
|
|
"category": "k3s",
|
|
"status": "pass",
|
|
"summary": "DEV k3s manifest files parse and stay scoped to hwlab-dev.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "dev-artifact-publish-report",
|
|
"category": "registry",
|
|
"status": "blocked",
|
|
"summary": "DEV artifact publish report status is blocked with 9/13 published for source 1e8d009e9531d71cef0762998663b4e3731032c6.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "frp-master-edge-static",
|
|
"category": "edge",
|
|
"status": "pass",
|
|
"summary": "FRP and master-edge contracts describe D601-to-master DEV on port 6667.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "runtime-substitution-boundary",
|
|
"category": "safety",
|
|
"status": "pass",
|
|
"summary": "Deploy images do not point at UniDesk/provider-gateway/microservice-proxy substitutes.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "d601-k3s-read-access",
|
|
"category": "k3s",
|
|
"status": "blocked",
|
|
"summary": "kubectl is not installed in this runner, so hwlab-dev live cluster evidence cannot be collected.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "public-dev-edge-health",
|
|
"category": "edge",
|
|
"status": "blocked",
|
|
"summary": "Public DEV health endpoint did not respond successfully.",
|
|
"evidence": [
|
|
{
|
|
"ok": false,
|
|
"url": "http://74.48.78.17:6667/health/live",
|
|
"method": "GET",
|
|
"error": "fetch failed"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "ghcr-anonymous-manifest-read",
|
|
"category": "registry",
|
|
"status": "blocked",
|
|
"summary": "One or more catalog images could not be verified through anonymous GHCR manifest HEAD probes.",
|
|
"evidence": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"image": "ghcr.io/pikastech/hwlab-cloud-api:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-cloud-api/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"image": "ghcr.io/pikastech/hwlab-cloud-web:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-cloud-web/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-mgr:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-agent-mgr/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-worker:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-agent-worker/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"image": "ghcr.io/pikastech/hwlab-gateway:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-gateway/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"image": "ghcr.io/pikastech/hwlab-gateway-simu:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-gateway-simu/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"image": "ghcr.io/pikastech/hwlab-box-simu:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-box-simu/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"image": "ghcr.io/pikastech/hwlab-patch-panel:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-patch-panel/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"image": "ghcr.io/pikastech/hwlab-router:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-router/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-tunnel-client/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-edge-proxy/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"image": "ghcr.io/pikastech/hwlab-cli:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-cli/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-skills:24eb3bf",
|
|
"ok": false,
|
|
"url": "https://ghcr.io/v2/pikastech/hwlab-agent-skills/manifests/24eb3bf",
|
|
"method": "HEAD",
|
|
"status": 401,
|
|
"statusText": "Unauthorized",
|
|
"body": ""
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"blockers": [
|
|
{
|
|
"status": "open",
|
|
"type": "contract_blocker",
|
|
"scope": "deploy-target",
|
|
"summary": "deploy/deploy.json and deploy/artifact-catalog.dev.json still target 24eb3bf, not origin/main eddfe3b.",
|
|
"nextTask": "Publish or select a DEV artifact set for the current origin/main commit and update deploy/deploy.json plus deploy/artifact-catalog.dev.json to that immutable commit/tag."
|
|
},
|
|
{
|
|
"status": "open",
|
|
"type": "runtime_blocker",
|
|
"scope": "artifact-catalog",
|
|
"summary": "deploy/artifact-catalog.dev.json has ciPublished=false, registryVerified=false, and not_published digests.",
|
|
"nextTask": "Run the DEV image publishing workflow and record immutable GHCR digests before real deployment."
|
|
},
|
|
{
|
|
"status": "open",
|
|
"type": "runtime_blocker",
|
|
"scope": "dev-artifact-publish",
|
|
"summary": "reports/dev-gate/dev-artifacts.json does not prove all HWLAB service artifacts for origin/main eddfe3b; current status is blocked with 9/13 published.",
|
|
"nextTask": "Complete DEV artifact publishing for every frozen HWLAB service at the current origin/main commit and record immutable registry digests."
|
|
},
|
|
{
|
|
"status": "open",
|
|
"type": "environment_blocker",
|
|
"scope": "d601-k3s",
|
|
"summary": "D601 runner lacks kubectl and no default kubeconfig was used by this preflight.",
|
|
"nextTask": "Provide a read-only kubectl/kubeconfig path for the real D601 hwlab-dev k3s cluster, then rerun this preflight."
|
|
},
|
|
{
|
|
"status": "open",
|
|
"type": "network_blocker",
|
|
"scope": "dev-edge",
|
|
"summary": "http://74.48.78.17:6667/health/live is not reachable from this runner.",
|
|
"nextTask": "Bring up or repair the D601-to-master frp route and hwlab-edge-proxy, then rerun the health probe."
|
|
},
|
|
{
|
|
"status": "open",
|
|
"type": "runtime_blocker",
|
|
"scope": "ghcr",
|
|
"summary": "This preflight could not verify GHCR manifests for the DEV catalog images without reading credentials.",
|
|
"nextTask": "Publish public DEV images or provide a non-secret registry evidence artifact with immutable digests for each HWLAB service."
|
|
}
|
|
],
|
|
"notes": "No PROD action, secret read, UniDesk runtime substitution, heavy e2e, browser e2e, runtime restart, or force push was performed."
|
|
}
|