Files
pikasTech-HWLAB/reports/dev-gate/dev-preflight-report.json
T
2026-05-21 18:00:33 +00:00

812 lines
27 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#14",
"pikasTech/HWLAB#22",
"pikasTech/HWLAB#23",
"pikasTech/HWLAB#29",
"pikasTech/HWLAB#30",
"pikasTech/HWLAB#31",
"pikasTech/HWLAB#33",
"pikasTech/HWLAB#39",
"pikasTech/HWLAB#49",
"pikasTech/HWLAB#33",
"pikasTech/HWLAB#35",
"pikasTech/HWLAB#48"
],
"target": {
"ref": "origin/main",
"commitId": "1a2efd4915b2d7a6f640a22cc22087e7cae4c654",
"shortCommitId": "1a2efd4"
},
"generatedAt": "2026-05-21T18:00:08.924Z",
"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 --check scripts/refresh-artifact-catalog.mjs",
"node scripts/dev-gate-preflight.mjs",
"node --check scripts/validate-dev-gate-report.mjs",
"node scripts/validate-dev-gate-report.mjs"
],
"artifactIdentity": {
"source": {
"ref": "origin/main",
"commitId": "1a2efd4915b2d7a6f640a22cc22087e7cae4c654",
"shortCommitId": "1a2efd4"
},
"deployManifest": {
"path": "deploy/deploy.json",
"commitId": "1a2efd4",
"matchesSource": true
},
"artifactCatalog": {
"path": "deploy/artifact-catalog.dev.json",
"commitId": "1a2efd4",
"artifactState": "contract-skeleton",
"ciPublished": false,
"registryVerified": false,
"provenance": "not_available_until_publish",
"digestCounts": {
"sha256": 0,
"notPublished": 13,
"invalid": 0
},
"matchesSource": true
},
"services": [
{
"serviceId": "hwlab-cloud-api",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-cloud-api:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-cloud-web",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-cloud-web:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-agent-mgr",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-agent-mgr:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-agent-worker",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-agent-worker:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-gateway",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-gateway:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-gateway-simu",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-gateway-simu:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-box-simu",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-box-simu:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-patch-panel",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-patch-panel:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-router",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-router:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-tunnel-client",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-tunnel-client:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-edge-proxy",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-edge-proxy:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-cli",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-cli:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-agent-skills",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-agent-skills:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
}
],
"serviceCommitIds": [
"1a2efd4"
],
"matchesSource": true,
"publishVerified": false,
"refreshCommands": {
"blocked": "node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked",
"published": "node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json"
}
},
"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": "pass",
"summary": "Source origin/main 1a2efd4 matches deploy/catalog artifact commit 1a2efd4.",
"evidence": [
{
"source": {
"ref": "origin/main",
"commitId": "1a2efd4915b2d7a6f640a22cc22087e7cae4c654",
"shortCommitId": "1a2efd4"
},
"deployManifest": {
"path": "deploy/deploy.json",
"commitId": "1a2efd4",
"matchesSource": true
},
"artifactCatalog": {
"path": "deploy/artifact-catalog.dev.json",
"commitId": "1a2efd4",
"artifactState": "contract-skeleton",
"ciPublished": false,
"registryVerified": false,
"provenance": "not_available_until_publish",
"digestCounts": {
"sha256": 0,
"notPublished": 13,
"invalid": 0
},
"matchesSource": true
},
"services": [
{
"serviceId": "hwlab-cloud-api",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-cloud-api:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-cloud-web",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-cloud-web:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-agent-mgr",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-agent-mgr:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-agent-worker",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-agent-worker:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-gateway",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-gateway:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-gateway-simu",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-gateway-simu:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-box-simu",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-box-simu:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-patch-panel",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-patch-panel:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-router",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-router:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-tunnel-client",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-tunnel-client:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-edge-proxy",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-edge-proxy:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-cli",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-cli:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
},
{
"serviceId": "hwlab-agent-skills",
"commitId": "1a2efd4",
"matchesSource": true,
"image": "ghcr.io/pikastech/hwlab-agent-skills:1a2efd4",
"imageTag": "1a2efd4",
"digest": "not_published",
"publishState": "skeleton-only"
}
],
"serviceCommitIds": [
"1a2efd4"
],
"matchesSource": true,
"publishVerified": false,
"refreshCommands": {
"blocked": "node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked",
"published": "node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json"
}
}
]
},
{
"id": "artifact-catalog-publish-state",
"category": "registry",
"status": "blocked",
"summary": "Artifact catalog publish state is contract-skeleton; ciPublished=false, registryVerified=false, digests sha256=0, not_published=13, invalid=0.",
"evidence": [
{
"path": "deploy/artifact-catalog.dev.json",
"commitId": "1a2efd4",
"artifactState": "contract-skeleton",
"ciPublished": false,
"registryVerified": false,
"provenance": "not_available_until_publish",
"digestCounts": {
"sha256": 0,
"notPublished": 13,
"invalid": 0
},
"matchesSource": true
}
]
},
{
"id": "k8s-manifest-static",
"category": "k3s",
"status": "pass",
"summary": "DEV k3s manifest files parse and stay scoped to hwlab-dev.",
"evidence": []
},
{
"id": "cloud-api-db-env-contract",
"category": "db",
"status": "pass",
"summary": "cloud-api DEV DB manifest declares the required env names and redacted Secret reference.",
"evidence": [
{
"staticContract": {
"contractVersion": "v1",
"environment": "dev",
"ready": true,
"requiredEnv": [
{
"name": "HWLAB_CLOUD_DB_URL",
"manifestPresent": true,
"k8sPresent": true,
"redacted": true,
"source": "k8s-secret-ref",
"secretRef": {
"secretName": "hwlab-cloud-api-dev-db",
"secretKey": "database-url",
"present": true,
"redacted": true
}
},
{
"name": "HWLAB_CLOUD_DB_SSL_MODE",
"manifestPresent": true,
"k8sPresent": true,
"redacted": false,
"source": "runtime-env",
"secretRef": null
}
],
"missingDeployEnv": [],
"missingK8sEnv": [],
"missingSecretRefs": [],
"secretMaterialRead": false,
"valuesRedacted": true,
"liveDbEvidence": false,
"fixtureEvidence": false
},
"healthContract": {
"status": "blocked",
"ready": false,
"configReady": false,
"connected": false,
"connectionChecked": false,
"requiredEnv": [
{
"name": "HWLAB_CLOUD_DB_URL",
"present": false,
"redacted": true
},
{
"name": "HWLAB_CLOUD_DB_SSL_MODE",
"present": false,
"redacted": false
}
],
"missingEnv": [
"HWLAB_CLOUD_DB_URL",
"HWLAB_CLOUD_DB_SSL_MODE"
],
"secretRefs": [
{
"env": "HWLAB_CLOUD_DB_URL",
"secretName": "hwlab-cloud-api-dev-db",
"secretKey": "database-url",
"present": false,
"redacted": true
}
],
"liveDbEvidence": false,
"fixtureEvidence": false
},
"fixtureEvidence": false,
"liveDbEvidence": false
}
]
},
{
"id": "cloud-api-db-health-gate",
"category": "db",
"status": "blocked",
"summary": "cloud-api DB health gate is missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE.",
"evidence": [
{
"staticContract": {
"contractVersion": "v1",
"environment": "dev",
"ready": true,
"requiredEnv": [
{
"name": "HWLAB_CLOUD_DB_URL",
"manifestPresent": true,
"k8sPresent": true,
"redacted": true,
"source": "k8s-secret-ref",
"secretRef": {
"secretName": "hwlab-cloud-api-dev-db",
"secretKey": "database-url",
"present": true,
"redacted": true
}
},
{
"name": "HWLAB_CLOUD_DB_SSL_MODE",
"manifestPresent": true,
"k8sPresent": true,
"redacted": false,
"source": "runtime-env",
"secretRef": null
}
],
"missingDeployEnv": [],
"missingK8sEnv": [],
"missingSecretRefs": [],
"secretMaterialRead": false,
"valuesRedacted": true,
"liveDbEvidence": false,
"fixtureEvidence": false
},
"healthContract": {
"status": "blocked",
"ready": false,
"configReady": false,
"connected": false,
"connectionChecked": false,
"requiredEnv": [
{
"name": "HWLAB_CLOUD_DB_URL",
"present": false,
"redacted": true
},
{
"name": "HWLAB_CLOUD_DB_SSL_MODE",
"present": false,
"redacted": false
}
],
"missingEnv": [
"HWLAB_CLOUD_DB_URL",
"HWLAB_CLOUD_DB_SSL_MODE"
],
"secretRefs": [
{
"env": "HWLAB_CLOUD_DB_URL",
"secretName": "hwlab-cloud-api-dev-db",
"secretKey": "database-url",
"present": false,
"redacted": true
}
],
"liveDbEvidence": false,
"fixtureEvidence": false
},
"fixtureEvidence": false,
"liveDbEvidence": false
}
]
},
{
"id": "dev-artifact-publish-report",
"category": "registry",
"status": "blocked",
"summary": "DEV artifact publish report status is blocked with 0/13 published for source 70bb9168ead272ec1f77b752df8e178e70858df4.",
"evidence": []
},
{
"id": "dev-edge-health-report",
"category": "edge",
"status": "blocked",
"summary": "Committed DEV edge health report is not_run with classification not_run.",
"evidence": [
{
"report": "reports/dev-gate/dev-edge-health.json",
"status": "not_run",
"classification": "not_run",
"publicTcp": [],
"kubernetesObservable": false
}
]
},
{
"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:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-cloud-api/manifests/1a2efd4",
"method": "HEAD",
"error": "This operation was aborted"
},
{
"serviceId": "hwlab-cloud-web",
"image": "ghcr.io/pikastech/hwlab-cloud-web:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-cloud-web/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-agent-mgr",
"image": "ghcr.io/pikastech/hwlab-agent-mgr:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-agent-mgr/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-agent-worker",
"image": "ghcr.io/pikastech/hwlab-agent-worker:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-agent-worker/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-gateway",
"image": "ghcr.io/pikastech/hwlab-gateway:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-gateway/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-gateway-simu",
"image": "ghcr.io/pikastech/hwlab-gateway-simu:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-gateway-simu/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-box-simu",
"image": "ghcr.io/pikastech/hwlab-box-simu:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-box-simu/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-patch-panel",
"image": "ghcr.io/pikastech/hwlab-patch-panel:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-patch-panel/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-router",
"image": "ghcr.io/pikastech/hwlab-router:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-router/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-tunnel-client",
"image": "ghcr.io/pikastech/hwlab-tunnel-client:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-tunnel-client/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-edge-proxy",
"image": "ghcr.io/pikastech/hwlab-edge-proxy:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-edge-proxy/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-cli",
"image": "ghcr.io/pikastech/hwlab-cli:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-cli/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
},
{
"serviceId": "hwlab-agent-skills",
"image": "ghcr.io/pikastech/hwlab-agent-skills:1a2efd4",
"ok": false,
"url": "https://ghcr.io/v2/pikastech/hwlab-agent-skills/manifests/1a2efd4",
"method": "HEAD",
"status": 401,
"statusText": "Unauthorized",
"body": ""
}
]
}
],
"blockers": [
{
"status": "open",
"type": "runtime_blocker",
"scope": "artifact-catalog",
"summary": "deploy/artifact-catalog.dev.json does not prove published artifacts for origin/main 1a2efd4; ciPublished=false, registryVerified=false, not_published=13.",
"nextTask": "Run the DEV artifact publish workflow, then record only real sha256 digests with `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json`; if publish is still blocked, keep not_published via `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked`."
},
{
"status": "open",
"type": "runtime_blocker",
"scope": "cloud-api-db-health-gate",
"summary": "cloud-api DB runtime env is not ready; missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE.",
"nextTask": "Configure DEV hwlab-cloud-api with Secret hwlab-cloud-api-dev-db/database-url and HWLAB_CLOUD_DB_SSL_MODE=require, then rerun health/preflight without printing the secret value."
},
{
"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 1a2efd4; current status is blocked with 0/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": "network_blocker",
"scope": "dev-edge-health",
"summary": "live network probes require --live",
"nextTask": "Repair the master frps/public DEV edge route and rerun the read-only DEV edge health smoke before real deployment."
},
{
"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."
}