893 lines
26 KiB
JSON
893 lines
26 KiB
JSON
{
|
|
"$schema": "https://hwlab.pikastech.local/schemas/dev-gate-report.schema.json",
|
|
"$id": "https://hwlab.pikastech.local/reports/dev-gate/dev-deploy-report.json",
|
|
"reportVersion": "v1",
|
|
"issue": "pikasTech/HWLAB#33",
|
|
"supports": [
|
|
"pikasTech/HWLAB#50",
|
|
"pikasTech/HWLAB#7",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#17",
|
|
"pikasTech/HWLAB#32",
|
|
"pikasTech/HWLAB#30"
|
|
],
|
|
"taskId": "dev-deploy-apply",
|
|
"commitId": "9b47ebe49f70",
|
|
"acceptanceLevel": "dev_deploy_apply",
|
|
"devOnly": true,
|
|
"prodDisabled": true,
|
|
"status": "blocked",
|
|
"generatedAt": "2026-05-21T17:57:43.720Z",
|
|
"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-deploy-apply.md",
|
|
"docs/artifact-catalog.md",
|
|
"deploy/README.md"
|
|
],
|
|
"summary": "DEV deploy apply is pinned to hwlab-dev and the frozen HWLAB service IDs"
|
|
},
|
|
"validationCommands": [
|
|
"node --check scripts/validate-dev-gate-report.mjs",
|
|
"node scripts/validate-dev-gate-report.mjs",
|
|
"node --check scripts/dev-deploy-apply.mjs",
|
|
"node --check scripts/src/dev-deploy-apply.mjs",
|
|
"node scripts/dev-deploy-apply.mjs --dry-run --expect-blocked"
|
|
],
|
|
"localSmoke": {
|
|
"status": "not_run",
|
|
"commands": [
|
|
"node scripts/m1-contract-smoke.mjs"
|
|
],
|
|
"evidence": [
|
|
"This deploy apply task did not run local smoke because artifact/executor blockers stop promotion first."
|
|
],
|
|
"summary": "Local smoke remains available but is not a substitute for DEV artifact publish evidence."
|
|
},
|
|
"dryRun": {
|
|
"status": "blocked",
|
|
"commands": [
|
|
"node tools/hwlab-cli/bin/hwlab-cli.mjs test e2e --env dev --mvp --dry-run",
|
|
"node scripts/dev-deploy-apply.mjs --dry-run --expect-blocked"
|
|
],
|
|
"evidence": [
|
|
"artifact services checked: 13",
|
|
"expected artifact commit: 24eb3bf",
|
|
"namespace: hwlab-dev",
|
|
"workloads planned: 13",
|
|
"kubectl executor: missing",
|
|
"live health: not_run"
|
|
],
|
|
"summary": "DEV apply is blocked before mutation."
|
|
},
|
|
"devPreconditions": {
|
|
"status": "blocked",
|
|
"requirements": [
|
|
"DEV artifact catalog must contain CI publish evidence and registry digests",
|
|
"kubectl must be available for D601 hwlab-dev and must not target PROD",
|
|
"hwlab-cloud-api /health/live must report serviceId, dev environment, and DB env readiness without exposing secret values",
|
|
"pods, services, configmaps, and image commit tags must be observable in hwlab-dev"
|
|
],
|
|
"summary": "One or more required DEV deploy preconditions are blocked."
|
|
},
|
|
"devDeployApply": {
|
|
"mode": "dry-run",
|
|
"conclusion": {
|
|
"status": "blocked",
|
|
"reason": "4 blocker(s) must be cleared before any live DEV apply.",
|
|
"blockerCount": 4
|
|
},
|
|
"applyBoundary": {
|
|
"currentMode": "dry-run",
|
|
"defaultNoWrite": true,
|
|
"mutationAttempted": false,
|
|
"mutationAllowed": false,
|
|
"applyRequiresFlags": [
|
|
"--apply",
|
|
"--confirm-dev",
|
|
"--confirmed-non-production"
|
|
],
|
|
"writeScope": "kubectl apply -k deploy/k8s/dev, namespace hwlab-dev only",
|
|
"noWriteScope": "source/catalog/k8s validation, optional DEV health probe, kubectl read, and server-side dry-run only",
|
|
"forbiddenActions": [
|
|
"prod-deploy",
|
|
"secret-read",
|
|
"runtime-substitute",
|
|
"unidesk-restart",
|
|
"code-queue-restart",
|
|
"backend-core-restart",
|
|
"heavy-master-e2e",
|
|
"force-push"
|
|
]
|
|
},
|
|
"mutationAttempted": false,
|
|
"target": {
|
|
"environment": "dev",
|
|
"namespace": "hwlab-dev",
|
|
"endpoint": "http://74.48.78.17:6667",
|
|
"prodDisabled": true
|
|
},
|
|
"artifactPlan": {
|
|
"expectedArtifactCommit": "24eb3bf",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"sourceCommitId": "9b47ebe49f70",
|
|
"serviceCommitIds": [
|
|
"24eb3bf"
|
|
],
|
|
"matchesSourceCommit": false,
|
|
"published": false,
|
|
"registryVerified": false,
|
|
"imageCount": 13,
|
|
"unpublishedServices": [
|
|
"hwlab-cloud-api",
|
|
"hwlab-cloud-web",
|
|
"hwlab-agent-mgr",
|
|
"hwlab-agent-worker",
|
|
"hwlab-gateway",
|
|
"hwlab-gateway-simu",
|
|
"hwlab-box-simu",
|
|
"hwlab-patch-panel",
|
|
"hwlab-router",
|
|
"hwlab-tunnel-client",
|
|
"hwlab-edge-proxy",
|
|
"hwlab-cli",
|
|
"hwlab-agent-skills"
|
|
]
|
|
},
|
|
"workloadPlan": [
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-api",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-cloud-api"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-cloud-api",
|
|
"serviceId": "hwlab-cloud-api",
|
|
"image": "ghcr.io/pikastech/hwlab-cloud-api:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-web",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-cloud-web"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-cloud-web",
|
|
"serviceId": "hwlab-cloud-web",
|
|
"image": "ghcr.io/pikastech/hwlab-cloud-web:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-mgr",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-agent-mgr"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-agent-mgr",
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-mgr:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Job",
|
|
"name": "hwlab-agent-worker-template",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 0,
|
|
"serviceIds": [
|
|
"hwlab-agent-worker"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-agent-worker",
|
|
"serviceId": "hwlab-agent-worker",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-worker:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 0,
|
|
"serviceIds": [
|
|
"hwlab-gateway"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-gateway",
|
|
"serviceId": "hwlab-gateway",
|
|
"image": "ghcr.io/pikastech/hwlab-gateway:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway-simu",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 2,
|
|
"serviceIds": [
|
|
"hwlab-gateway-simu"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-gateway-simu",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"image": "ghcr.io/pikastech/hwlab-gateway-simu:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-box-simu",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 2,
|
|
"serviceIds": [
|
|
"hwlab-box-simu"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-box-simu",
|
|
"serviceId": "hwlab-box-simu",
|
|
"image": "ghcr.io/pikastech/hwlab-box-simu:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-patch-panel",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-patch-panel"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-patch-panel",
|
|
"serviceId": "hwlab-patch-panel",
|
|
"image": "ghcr.io/pikastech/hwlab-patch-panel:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-router",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-router"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-router",
|
|
"serviceId": "hwlab-router",
|
|
"image": "ghcr.io/pikastech/hwlab-router:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-tunnel-client",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-tunnel-client"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-tunnel-client",
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-edge-proxy",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-edge-proxy"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-edge-proxy",
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Job",
|
|
"name": "hwlab-cli-template",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 0,
|
|
"serviceIds": [
|
|
"hwlab-cli"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-cli",
|
|
"serviceId": "hwlab-cli",
|
|
"image": "ghcr.io/pikastech/hwlab-cli:24eb3bf"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-skills",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-agent-skills"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-agent-skills",
|
|
"serviceId": "hwlab-agent-skills",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-skills:24eb3bf"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"servicePlan": [
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cloud-api",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-cloud-api",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 6667,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cloud-web",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-cloud-web",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 8080,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-gateway",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-gateway",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7001,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cli",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-cli",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7501,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-agent-skills",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-agent-skills",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7502,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-agent-mgr",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7410,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-gateway-simu",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7101,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-box-simu",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-box-simu",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7201,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-patch-panel",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-patch-panel",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7301,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-router",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-router",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7401,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-tunnel-client",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7402,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-edge-proxy",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 6667,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"applyStep": {
|
|
"status": "not_run",
|
|
"summary": "Skipped because preflight blockers are open"
|
|
},
|
|
"manualCommands": {
|
|
"status": "blocked",
|
|
"beforeHumanApproval": [
|
|
"node scripts/dev-deploy-apply.mjs --dry-run --expect-blocked --write-report",
|
|
"node scripts/validate-dev-gate-report.mjs"
|
|
],
|
|
"afterHumanApproval": [],
|
|
"summary": "No apply command is offered while blockers remain open."
|
|
},
|
|
"rollbackHint": {
|
|
"namespace": "hwlab-dev",
|
|
"strategy": "DEV-only Kubernetes rollback using deployment revision history; do not touch PROD or UniDesk services.",
|
|
"captureBeforeApply": [
|
|
"kubectl -n hwlab-dev get pods,services,configmaps,deployments,jobs -o wide",
|
|
"kubectl -n hwlab-dev get deployments -o json"
|
|
],
|
|
"deploymentRollbackCommands": [
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-cloud-api",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-cloud-web",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-agent-mgr",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-gateway",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-gateway-simu",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-box-simu",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-patch-panel",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-router",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-tunnel-client",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-edge-proxy",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-agent-skills"
|
|
],
|
|
"jobCleanupCommands": [
|
|
"kubectl -n hwlab-dev delete job hwlab-agent-worker-template --ignore-not-found",
|
|
"kubectl -n hwlab-dev delete job hwlab-cli-template --ignore-not-found"
|
|
],
|
|
"postRollbackChecks": [
|
|
"kubectl -n hwlab-dev rollout status deployment/hwlab-cloud-api --timeout=120s",
|
|
"curl -fsS http://74.48.78.17:6667/health/live"
|
|
]
|
|
},
|
|
"remainingBlockers": [
|
|
{
|
|
"type": "observability_blocker",
|
|
"scope": "artifact-source-commit",
|
|
"status": "open",
|
|
"summary": "deploy/catalog artifact commit 24eb3bf/24eb3bf does not match source 9b47ebe49f70",
|
|
"unblockHint": "Regenerate deploy/deploy.json and deploy/artifact-catalog.dev.json for the source commit that will be promoted."
|
|
},
|
|
{
|
|
"type": "observability_blocker",
|
|
"scope": "artifact-publish",
|
|
"status": "open",
|
|
"summary": "DEV artifact catalog has no CI publish, registry verification, or registry digests",
|
|
"unblockHint": "Publish DEV images from the intended commit and update the catalog with registry digests and verification evidence."
|
|
},
|
|
{
|
|
"type": "runtime_blocker",
|
|
"scope": "cloud-api-db",
|
|
"status": "open",
|
|
"summary": "cloud-api health reports DB config blocked; missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE",
|
|
"unblockHint": "Configure and verify the DEV cloud-api DB env readiness through health output, without reading secret values."
|
|
},
|
|
{
|
|
"type": "environment_blocker",
|
|
"scope": "kubectl",
|
|
"status": "open",
|
|
"summary": "kubectl is not installed in the runner",
|
|
"unblockHint": "Provide a kubectl client configured for the D601 DEV k3s context without exposing token or secret values."
|
|
}
|
|
],
|
|
"artifactEvidence": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-cloud-api:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-cloud-web:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-mgr:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-worker:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-gateway:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-gateway-simu:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-box-simu:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-patch-panel:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-router:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-cli:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"deployCommitId": "24eb3bf",
|
|
"catalogCommitId": "24eb3bf",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-skills:24eb3bf",
|
|
"digest": "not_published",
|
|
"publishState": "skeleton-only"
|
|
}
|
|
],
|
|
"cloudApiDb": {
|
|
"status": "contract-ready",
|
|
"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
|
|
}
|
|
],
|
|
"missingManifest": [],
|
|
"missingK8s": [],
|
|
"missingSecretRefs": [],
|
|
"runtimeHealth": {
|
|
"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
|
|
},
|
|
"secretMaterialRead": false,
|
|
"valuesRedacted": true,
|
|
"liveDbEvidence": false,
|
|
"fixtureEvidence": false,
|
|
"note": "This check records DB env/Secret reference presence only. It is not live DB evidence."
|
|
},
|
|
"k8sManifest": {
|
|
"resourceCounts": {
|
|
"workloads": 13,
|
|
"services": 12,
|
|
"configMaps": 1
|
|
},
|
|
"images": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"image": "ghcr.io/pikastech/hwlab-cloud-api:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-api"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"image": "ghcr.io/pikastech/hwlab-cloud-web:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-web"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-mgr:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-mgr"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-worker:24eb3bf",
|
|
"kind": "Job",
|
|
"name": "hwlab-agent-worker-template"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"image": "ghcr.io/pikastech/hwlab-gateway:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"image": "ghcr.io/pikastech/hwlab-gateway-simu:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway-simu"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"image": "ghcr.io/pikastech/hwlab-box-simu:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-box-simu"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"image": "ghcr.io/pikastech/hwlab-patch-panel:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-patch-panel"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"image": "ghcr.io/pikastech/hwlab-router:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-router"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-tunnel-client"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-edge-proxy"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"image": "ghcr.io/pikastech/hwlab-cli:24eb3bf",
|
|
"kind": "Job",
|
|
"name": "hwlab-cli-template"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"image": "ghcr.io/pikastech/hwlab-agent-skills:24eb3bf",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-skills"
|
|
}
|
|
]
|
|
},
|
|
"clusterObservation": {
|
|
"status": "blocked",
|
|
"executor": "missing",
|
|
"resources": []
|
|
},
|
|
"liveProbe": {
|
|
"status": "not_run",
|
|
"reason": "--skip-live-probe"
|
|
}
|
|
},
|
|
"blockers": [
|
|
{
|
|
"type": "observability_blocker",
|
|
"scope": "artifact-source-commit",
|
|
"status": "open",
|
|
"summary": "deploy/catalog artifact commit 24eb3bf/24eb3bf does not match source 9b47ebe49f70"
|
|
},
|
|
{
|
|
"type": "observability_blocker",
|
|
"scope": "artifact-publish",
|
|
"status": "open",
|
|
"summary": "DEV artifact catalog has no CI publish, registry verification, or registry digests"
|
|
},
|
|
{
|
|
"type": "runtime_blocker",
|
|
"scope": "cloud-api-db",
|
|
"status": "open",
|
|
"summary": "cloud-api health reports DB config blocked; missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE"
|
|
},
|
|
{
|
|
"type": "environment_blocker",
|
|
"scope": "kubectl",
|
|
"status": "open",
|
|
"summary": "kubectl is not installed in the runner"
|
|
}
|
|
],
|
|
"notes": "DEV-only result. No PROD resources, secret values, force push, heavy e2e, browser e2e, or UniDesk runtime substitute were used."
|
|
}
|