1806 lines
58 KiB
JSON
1806 lines
58 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#164",
|
||
"pikasTech/HWLAB#143",
|
||
"pikasTech/HWLAB#99",
|
||
"pikasTech/HWLAB#63",
|
||
"pikasTech/HWLAB#50",
|
||
"pikasTech/HWLAB#7",
|
||
"pikasTech/HWLAB#33",
|
||
"pikasTech/HWLAB#17",
|
||
"pikasTech/HWLAB#32",
|
||
"pikasTech/HWLAB#30"
|
||
],
|
||
"taskId": "dev-deploy-apply",
|
||
"commitId": "e6d4bd5",
|
||
"acceptanceLevel": "dev_deploy_apply",
|
||
"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 deploy apply report; active public API/health endpoint is 16667 and browser endpoint is 16666."
|
||
},
|
||
"status": "pass",
|
||
"generatedAt": "2026-05-23T21:48:14.125Z",
|
||
"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-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": "pass",
|
||
"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: e6d4bd5",
|
||
"namespace: hwlab-dev",
|
||
"workloads planned: 13",
|
||
"kubectl executor: /usr/local/bin/kubectl",
|
||
"kubectl kubeconfig source: flag:--kubeconfig",
|
||
"kubectl kubeconfig: /etc/rancher/k3s/k3s.yaml",
|
||
"live health: pass",
|
||
"code agent provider desired-state: pass",
|
||
"code agent provider live env before apply: blocked",
|
||
"template job replacements: 2",
|
||
"legacy simulator deployment cleanups: 0"
|
||
],
|
||
"summary": "DEV dry-run preflight passed."
|
||
},
|
||
"devPreconditions": {
|
||
"status": "pass",
|
||
"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",
|
||
"hwlab-cloud-api must declare and preserve OPENAI_API_KEY from hwlab-code-agent-provider/openai-api-key plus the DEV Code Agent egress proxy env without reading Secret values",
|
||
"pods, services, configmaps, and image commit tags must be observable in hwlab-dev"
|
||
],
|
||
"summary": "DEV deploy preconditions are satisfied."
|
||
},
|
||
"devDeployApply": {
|
||
"mode": "apply",
|
||
"conclusion": {
|
||
"status": "ready",
|
||
"reason": "All DEV-only preconditions passed; human approval is still required before apply.",
|
||
"blockerCount": 0
|
||
},
|
||
"applyBoundary": {
|
||
"currentMode": "apply-requested",
|
||
"defaultNoWrite": false,
|
||
"mutationAttempted": true,
|
||
"mutationAllowed": true,
|
||
"applyRequiresFlags": [
|
||
"--apply",
|
||
"--confirm-dev",
|
||
"--confirmed-non-production"
|
||
],
|
||
"kubeconfigSource": "flag:--kubeconfig",
|
||
"writeScope": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl apply -k deploy/k8s/dev, namespace hwlab-dev only; delete/recreate is allowed only for explicitly allowlisted suspended DEV template Jobs and stale legacy simulator Deployments",
|
||
"noWriteScope": "source/catalog/k8s validation, optional DEV health probe, KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl read, replacement planning, 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": true,
|
||
"target": {
|
||
"environment": "dev",
|
||
"namespace": "hwlab-dev",
|
||
"endpoint": "http://74.48.78.17:16667",
|
||
"prodDisabled": true
|
||
},
|
||
"artifactPlan": {
|
||
"expectedArtifactCommit": "e6d4bd5",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"sourceCommitId": "e6d4bd5",
|
||
"serviceCommitIds": [
|
||
"e6d4bd5"
|
||
],
|
||
"matchesSourceCommit": true,
|
||
"published": true,
|
||
"registryVerified": true,
|
||
"imageCount": 13,
|
||
"requiredServiceCount": 13,
|
||
"disabledServiceCount": 0,
|
||
"unpublishedServices": []
|
||
},
|
||
"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": "127.0.0.1:5000/hwlab/hwlab-cloud-api:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"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": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"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": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"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": "127.0.0.1:5000/hwlab/hwlab-agent-worker:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-gateway",
|
||
"namespace": "hwlab-dev",
|
||
"replicas": 0,
|
||
"serviceIds": [
|
||
"hwlab-gateway"
|
||
],
|
||
"containers": [
|
||
{
|
||
"name": "hwlab-gateway",
|
||
"serviceId": "hwlab-gateway",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"kind": "StatefulSet",
|
||
"name": "hwlab-gateway-simu",
|
||
"namespace": "hwlab-dev",
|
||
"replicas": 2,
|
||
"serviceIds": [
|
||
"hwlab-gateway-simu"
|
||
],
|
||
"containers": [
|
||
{
|
||
"name": "hwlab-gateway-simu",
|
||
"serviceId": "hwlab-gateway-simu",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"kind": "StatefulSet",
|
||
"name": "hwlab-box-simu",
|
||
"namespace": "hwlab-dev",
|
||
"replicas": 2,
|
||
"serviceIds": [
|
||
"hwlab-box-simu"
|
||
],
|
||
"containers": [
|
||
{
|
||
"name": "hwlab-box-simu",
|
||
"serviceId": "hwlab-box-simu",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"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": "127.0.0.1:5000/hwlab/hwlab-patch-panel:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-router",
|
||
"namespace": "hwlab-dev",
|
||
"replicas": 1,
|
||
"serviceIds": [
|
||
"hwlab-router"
|
||
],
|
||
"containers": [
|
||
{
|
||
"name": "hwlab-router",
|
||
"serviceId": "hwlab-router",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-router:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"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": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"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": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"kind": "Job",
|
||
"name": "hwlab-cli-template",
|
||
"namespace": "hwlab-dev",
|
||
"replicas": 0,
|
||
"serviceIds": [
|
||
"hwlab-cli"
|
||
],
|
||
"containers": [
|
||
{
|
||
"name": "hwlab-cli",
|
||
"serviceId": "hwlab-cli",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cli:e6d4bd5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"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": "127.0.0.1:5000/hwlab/hwlab-agent-skills:e6d4bd5"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"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-gateway-simu-1",
|
||
"namespace": "hwlab-dev",
|
||
"serviceId": "hwlab-gateway-simu",
|
||
"type": "ClusterIP",
|
||
"ports": [
|
||
{
|
||
"name": "http",
|
||
"port": 7101,
|
||
"targetPort": "http"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-gateway-simu-2",
|
||
"namespace": "hwlab-dev",
|
||
"serviceId": "hwlab-gateway-simu",
|
||
"type": "ClusterIP",
|
||
"ports": [
|
||
{
|
||
"name": "http",
|
||
"port": 7101,
|
||
"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-box-simu-1",
|
||
"namespace": "hwlab-dev",
|
||
"serviceId": "hwlab-box-simu",
|
||
"type": "ClusterIP",
|
||
"ports": [
|
||
{
|
||
"name": "http",
|
||
"port": 7201,
|
||
"targetPort": "http"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-box-simu-2",
|
||
"namespace": "hwlab-dev",
|
||
"serviceId": "hwlab-box-simu",
|
||
"type": "ClusterIP",
|
||
"ports": [
|
||
{
|
||
"name": "http",
|
||
"port": 7201,
|
||
"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": 7430,
|
||
"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"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"templateJobReplacementPolicy": {
|
||
"status": "active",
|
||
"namespace": "hwlab-dev",
|
||
"scope": "DEV-only suspended template Jobs",
|
||
"allowedJobs": [
|
||
{
|
||
"name": "hwlab-agent-worker-template",
|
||
"serviceId": "hwlab-agent-worker",
|
||
"reason": "suspended session worker template Job has immutable spec.template"
|
||
},
|
||
{
|
||
"name": "hwlab-cli-template",
|
||
"serviceId": "hwlab-cli",
|
||
"reason": "suspended CLI template Job has immutable spec.template"
|
||
}
|
||
]
|
||
},
|
||
"templateJobReplacements": [
|
||
{
|
||
"namespace": "hwlab-dev",
|
||
"jobName": "hwlab-agent-worker-template",
|
||
"allowed": true,
|
||
"desiredSuspended": true,
|
||
"liveExists": true,
|
||
"liveSuspended": true,
|
||
"oldImage": "127.0.0.1:5000/hwlab/hwlab-agent-worker:b02ac5b",
|
||
"newImage": "127.0.0.1:5000/hwlab/hwlab-agent-worker:e6d4bd5",
|
||
"oldImages": [
|
||
{
|
||
"name": "hwlab-agent-worker",
|
||
"serviceId": "hwlab-agent-worker",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:b02ac5b"
|
||
}
|
||
],
|
||
"newImages": [
|
||
{
|
||
"name": "hwlab-agent-worker",
|
||
"serviceId": "hwlab-agent-worker",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:e6d4bd5"
|
||
}
|
||
],
|
||
"replace": true,
|
||
"result": "replaced",
|
||
"reason": "Live suspended template Job was deleted and recreated by kubectl apply.",
|
||
"deleteCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev delete job hwlab-agent-worker-template --ignore-not-found=true",
|
||
"deleteStdout": "job.batch \"hwlab-agent-worker-template\" deleted from hwlab-dev namespace",
|
||
"deleteStderr": ""
|
||
},
|
||
{
|
||
"namespace": "hwlab-dev",
|
||
"jobName": "hwlab-cli-template",
|
||
"allowed": true,
|
||
"desiredSuspended": true,
|
||
"liveExists": true,
|
||
"liveSuspended": true,
|
||
"oldImage": "127.0.0.1:5000/hwlab/hwlab-cli:b02ac5b",
|
||
"newImage": "127.0.0.1:5000/hwlab/hwlab-cli:e6d4bd5",
|
||
"oldImages": [
|
||
{
|
||
"name": "hwlab-cli",
|
||
"serviceId": "hwlab-cli",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cli:b02ac5b"
|
||
}
|
||
],
|
||
"newImages": [
|
||
{
|
||
"name": "hwlab-cli",
|
||
"serviceId": "hwlab-cli",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cli:e6d4bd5"
|
||
}
|
||
],
|
||
"replace": true,
|
||
"result": "replaced",
|
||
"reason": "Live suspended template Job was deleted and recreated by kubectl apply.",
|
||
"deleteCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev delete job hwlab-cli-template --ignore-not-found=true",
|
||
"deleteStdout": "job.batch \"hwlab-cli-template\" deleted from hwlab-dev namespace",
|
||
"deleteStderr": ""
|
||
}
|
||
],
|
||
"legacySimulatorDeploymentCleanupPolicy": {
|
||
"status": "active",
|
||
"namespace": "hwlab-dev",
|
||
"scope": "DEV-only stale simulator Deployments replaced by indexed StatefulSets",
|
||
"allowedDeployments": [
|
||
{
|
||
"name": "hwlab-gateway-simu",
|
||
"serviceId": "hwlab-gateway-simu",
|
||
"replacementKind": "StatefulSet",
|
||
"reason": "M3 DEV requires exactly two indexed gateway-simu identities/sessions"
|
||
},
|
||
{
|
||
"name": "hwlab-box-simu",
|
||
"serviceId": "hwlab-box-simu",
|
||
"replacementKind": "StatefulSet",
|
||
"reason": "M3 DEV requires exactly two indexed box-simu resource identities"
|
||
}
|
||
]
|
||
},
|
||
"legacySimulatorDeploymentCleanups": [
|
||
{
|
||
"namespace": "hwlab-dev",
|
||
"deploymentName": "hwlab-gateway-simu",
|
||
"serviceId": "hwlab-gateway-simu",
|
||
"allowed": true,
|
||
"desiredReplacementExists": true,
|
||
"desiredReplacementKind": "StatefulSet",
|
||
"liveExists": false,
|
||
"oldImage": null,
|
||
"newImage": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:e6d4bd5",
|
||
"oldImages": [],
|
||
"newImages": [
|
||
{
|
||
"name": "hwlab-gateway-simu",
|
||
"serviceId": "hwlab-gateway-simu",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:e6d4bd5"
|
||
}
|
||
],
|
||
"cleanup": false,
|
||
"result": "not_found",
|
||
"reason": "Live legacy Deployment is absent; no cleanup is needed."
|
||
},
|
||
{
|
||
"namespace": "hwlab-dev",
|
||
"deploymentName": "hwlab-box-simu",
|
||
"serviceId": "hwlab-box-simu",
|
||
"allowed": true,
|
||
"desiredReplacementExists": true,
|
||
"desiredReplacementKind": "StatefulSet",
|
||
"liveExists": false,
|
||
"oldImage": null,
|
||
"newImage": "127.0.0.1:5000/hwlab/hwlab-box-simu:e6d4bd5",
|
||
"oldImages": [],
|
||
"newImages": [
|
||
{
|
||
"name": "hwlab-box-simu",
|
||
"serviceId": "hwlab-box-simu",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:e6d4bd5"
|
||
}
|
||
],
|
||
"cleanup": false,
|
||
"result": "not_found",
|
||
"reason": "Live legacy Deployment is absent; no cleanup is needed."
|
||
}
|
||
],
|
||
"cloudWebRollout": {
|
||
"serviceId": "hwlab-cloud-web",
|
||
"namespace": "hwlab-dev",
|
||
"status": "observed",
|
||
"observationPhase": "after_apply",
|
||
"sourceCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"imageTag": "e6d4bd5",
|
||
"digest": "sha256:f43ac97da69212e3ff74cfed36a04d65f0cd9cc7b8cb48f0eaf6f1f19d7dd6da",
|
||
"repositoryDigest": null,
|
||
"publishState": "published",
|
||
"rolloutRevision": "41",
|
||
"liveImage": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"imageMatchesDesired": true,
|
||
"expectedRuntimeEnv": {
|
||
"HWLAB_COMMIT_ID": "e6d4bd5",
|
||
"HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"HWLAB_IMAGE_TAG": "e6d4bd5"
|
||
},
|
||
"liveRuntimeEnv": {
|
||
"status": "match",
|
||
"matchesDesired": true,
|
||
"fields": [
|
||
{
|
||
"name": "HWLAB_COMMIT_ID",
|
||
"expected": "e6d4bd5",
|
||
"actual": "e6d4bd5",
|
||
"status": "match"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE",
|
||
"expected": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"actual": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"status": "match"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE_TAG",
|
||
"expected": "e6d4bd5",
|
||
"actual": "e6d4bd5",
|
||
"status": "match"
|
||
}
|
||
],
|
||
"drift": []
|
||
},
|
||
"runtimeEnvMatchesDesired": true,
|
||
"runtimeEnvDrift": [],
|
||
"verificationCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout status deployment/hwlab-cloud-web --timeout=180s",
|
||
"readCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev get deployment hwlab-cloud-web -o json",
|
||
"kubeconfig": "/etc/rancher/k3s/k3s.yaml",
|
||
"kubeconfigSource": "flag:--kubeconfig"
|
||
},
|
||
"cloudWebRolloutBeforeApply": {
|
||
"serviceId": "hwlab-cloud-web",
|
||
"namespace": "hwlab-dev",
|
||
"status": "observed",
|
||
"observationPhase": "before_apply",
|
||
"sourceCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"imageTag": "e6d4bd5",
|
||
"digest": "sha256:f43ac97da69212e3ff74cfed36a04d65f0cd9cc7b8cb48f0eaf6f1f19d7dd6da",
|
||
"repositoryDigest": null,
|
||
"publishState": "published",
|
||
"rolloutRevision": "40",
|
||
"liveImage": "127.0.0.1:5000/hwlab/hwlab-cloud-web:b02ac5b",
|
||
"imageMatchesDesired": false,
|
||
"expectedRuntimeEnv": {
|
||
"HWLAB_COMMIT_ID": "e6d4bd5",
|
||
"HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"HWLAB_IMAGE_TAG": "e6d4bd5"
|
||
},
|
||
"liveRuntimeEnv": {
|
||
"status": "drift",
|
||
"matchesDesired": false,
|
||
"fields": [
|
||
{
|
||
"name": "HWLAB_COMMIT_ID",
|
||
"expected": "e6d4bd5",
|
||
"actual": "b02ac5b",
|
||
"status": "drift"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE",
|
||
"expected": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"actual": "127.0.0.1:5000/hwlab/hwlab-cloud-web:b02ac5b",
|
||
"status": "drift"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE_TAG",
|
||
"expected": "e6d4bd5",
|
||
"actual": "b02ac5b",
|
||
"status": "drift"
|
||
}
|
||
],
|
||
"drift": [
|
||
{
|
||
"name": "HWLAB_COMMIT_ID",
|
||
"expected": "e6d4bd5",
|
||
"actual": "b02ac5b",
|
||
"status": "drift"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE",
|
||
"expected": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"actual": "127.0.0.1:5000/hwlab/hwlab-cloud-web:b02ac5b",
|
||
"status": "drift"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE_TAG",
|
||
"expected": "e6d4bd5",
|
||
"actual": "b02ac5b",
|
||
"status": "drift"
|
||
}
|
||
]
|
||
},
|
||
"runtimeEnvMatchesDesired": false,
|
||
"runtimeEnvDrift": [
|
||
{
|
||
"name": "HWLAB_COMMIT_ID",
|
||
"expected": "e6d4bd5",
|
||
"actual": "b02ac5b",
|
||
"status": "drift"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE",
|
||
"expected": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"actual": "127.0.0.1:5000/hwlab/hwlab-cloud-web:b02ac5b",
|
||
"status": "drift"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE_TAG",
|
||
"expected": "e6d4bd5",
|
||
"actual": "b02ac5b",
|
||
"status": "drift"
|
||
}
|
||
],
|
||
"verificationCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout status deployment/hwlab-cloud-web --timeout=180s",
|
||
"readCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev get deployment hwlab-cloud-web -o json",
|
||
"kubeconfig": "/etc/rancher/k3s/k3s.yaml",
|
||
"kubeconfigSource": "flag:--kubeconfig"
|
||
},
|
||
"cloudWebRolloutAfterApply": {
|
||
"serviceId": "hwlab-cloud-web",
|
||
"namespace": "hwlab-dev",
|
||
"status": "observed",
|
||
"observationPhase": "after_apply",
|
||
"sourceCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"imageTag": "e6d4bd5",
|
||
"digest": "sha256:f43ac97da69212e3ff74cfed36a04d65f0cd9cc7b8cb48f0eaf6f1f19d7dd6da",
|
||
"repositoryDigest": null,
|
||
"publishState": "published",
|
||
"rolloutRevision": "41",
|
||
"liveImage": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"imageMatchesDesired": true,
|
||
"expectedRuntimeEnv": {
|
||
"HWLAB_COMMIT_ID": "e6d4bd5",
|
||
"HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"HWLAB_IMAGE_TAG": "e6d4bd5"
|
||
},
|
||
"liveRuntimeEnv": {
|
||
"status": "match",
|
||
"matchesDesired": true,
|
||
"fields": [
|
||
{
|
||
"name": "HWLAB_COMMIT_ID",
|
||
"expected": "e6d4bd5",
|
||
"actual": "e6d4bd5",
|
||
"status": "match"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE",
|
||
"expected": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"actual": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"status": "match"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE_TAG",
|
||
"expected": "e6d4bd5",
|
||
"actual": "e6d4bd5",
|
||
"status": "match"
|
||
}
|
||
],
|
||
"drift": []
|
||
},
|
||
"runtimeEnvMatchesDesired": true,
|
||
"runtimeEnvDrift": [],
|
||
"verificationCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout status deployment/hwlab-cloud-web --timeout=180s",
|
||
"readCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev get deployment hwlab-cloud-web -o json",
|
||
"kubeconfig": "/etc/rancher/k3s/k3s.yaml",
|
||
"kubeconfigSource": "flag:--kubeconfig"
|
||
},
|
||
"codeAgentProvider": {
|
||
"desiredState": {
|
||
"contractVersion": "v1",
|
||
"environment": "dev",
|
||
"provider": "codex-stdio",
|
||
"runtimeProvider": "openai-responses",
|
||
"backend": "hwlab-cloud-api/codex-mcp-stdio",
|
||
"model": "gpt-5.5",
|
||
"status": "pass",
|
||
"ready": true,
|
||
"requiredEnv": [
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_PROVIDER",
|
||
"deployPresent": true,
|
||
"workloadPresent": true,
|
||
"redacted": false,
|
||
"source": "runtime-env"
|
||
},
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_MODEL",
|
||
"deployPresent": true,
|
||
"workloadPresent": true,
|
||
"redacted": false,
|
||
"source": "runtime-env"
|
||
},
|
||
{
|
||
"name": "OPENAI_API_KEY",
|
||
"deployPresent": true,
|
||
"workloadPresent": true,
|
||
"redacted": true,
|
||
"source": "k8s-secret-ref"
|
||
},
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_OPENAI_BASE_URL",
|
||
"deployPresent": true,
|
||
"workloadPresent": true,
|
||
"redacted": true,
|
||
"source": "runtime-env"
|
||
}
|
||
],
|
||
"secretRef": {
|
||
"env": "OPENAI_API_KEY",
|
||
"secretName": "hwlab-code-agent-provider",
|
||
"secretKey": "openai-api-key",
|
||
"deployPlaceholderPresent": true,
|
||
"workloadSecretRefPresent": true,
|
||
"present": true,
|
||
"redacted": true
|
||
},
|
||
"egress": {
|
||
"env": "HWLAB_CODE_AGENT_OPENAI_BASE_URL",
|
||
"target": "dev-egress-proxy",
|
||
"deployPresent": true,
|
||
"workloadPresent": true,
|
||
"deployMatchesDevProxy": true,
|
||
"workloadMatchesDevProxy": true,
|
||
"directPublicOpenAi": false,
|
||
"valueRedacted": true
|
||
},
|
||
"missingDeployEnv": [],
|
||
"missingWorkloadEnv": [],
|
||
"deployMismatches": [],
|
||
"workloadMismatches": [],
|
||
"missingSecretRefs": [],
|
||
"missingEgressContract": [],
|
||
"secretMaterialRead": false,
|
||
"valuesRedacted": true,
|
||
"providerConnected": false,
|
||
"fixtureEvidence": false
|
||
},
|
||
"liveBeforeApply": {
|
||
"phase": "before_apply",
|
||
"namespace": "hwlab-dev",
|
||
"serviceId": "hwlab-cloud-api",
|
||
"status": "blocked",
|
||
"readCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev get deployment hwlab-cloud-api -o json",
|
||
"kubeconfig": "/etc/rancher/k3s/k3s.yaml",
|
||
"expectedSecretRef": "hwlab-code-agent-provider/openai-api-key",
|
||
"expectedEgressTarget": "dev-egress-proxy",
|
||
"secretValuesRead": false,
|
||
"kubernetesSecretDataRead": false,
|
||
"valuesRedacted": true,
|
||
"contractVersion": "v1",
|
||
"environment": "dev",
|
||
"provider": "codex-stdio",
|
||
"runtimeProvider": "openai-responses",
|
||
"backend": "hwlab-cloud-api/codex-mcp-stdio",
|
||
"model": "gpt-5.5",
|
||
"ready": false,
|
||
"requiredEnv": [
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_PROVIDER",
|
||
"present": true,
|
||
"redacted": false,
|
||
"source": "runtime-env"
|
||
},
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_MODEL",
|
||
"present": true,
|
||
"redacted": false,
|
||
"source": "runtime-env"
|
||
},
|
||
{
|
||
"name": "OPENAI_API_KEY",
|
||
"present": true,
|
||
"redacted": true,
|
||
"source": "k8s-secret-ref"
|
||
},
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_OPENAI_BASE_URL",
|
||
"present": true,
|
||
"redacted": true,
|
||
"source": "runtime-env"
|
||
}
|
||
],
|
||
"missingEnv": [],
|
||
"mismatchedEnv": [
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_PROVIDER",
|
||
"expected": "codex-stdio",
|
||
"redacted": false
|
||
}
|
||
],
|
||
"secretRef": {
|
||
"env": "OPENAI_API_KEY",
|
||
"secretName": "hwlab-code-agent-provider",
|
||
"secretKey": "openai-api-key",
|
||
"present": true,
|
||
"redacted": true
|
||
},
|
||
"egress": {
|
||
"env": "HWLAB_CODE_AGENT_OPENAI_BASE_URL",
|
||
"target": "dev-egress-proxy",
|
||
"present": true,
|
||
"matchesDevProxy": true,
|
||
"directPublicOpenAi": false,
|
||
"valueRedacted": true
|
||
},
|
||
"secretMaterialRead": false,
|
||
"providerConnected": false,
|
||
"deployment": "hwlab-cloud-api",
|
||
"container": "hwlab-cloud-api",
|
||
"validationScope": "deployment-env-and-secretKeyRef-metadata-only"
|
||
},
|
||
"liveAfterApply": {
|
||
"phase": "after_apply",
|
||
"namespace": "hwlab-dev",
|
||
"serviceId": "hwlab-cloud-api",
|
||
"status": "pass",
|
||
"readCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev get deployment hwlab-cloud-api -o json",
|
||
"kubeconfig": "/etc/rancher/k3s/k3s.yaml",
|
||
"expectedSecretRef": "hwlab-code-agent-provider/openai-api-key",
|
||
"expectedEgressTarget": "dev-egress-proxy",
|
||
"secretValuesRead": false,
|
||
"kubernetesSecretDataRead": false,
|
||
"valuesRedacted": true,
|
||
"contractVersion": "v1",
|
||
"environment": "dev",
|
||
"provider": "codex-stdio",
|
||
"runtimeProvider": "openai-responses",
|
||
"backend": "hwlab-cloud-api/codex-mcp-stdio",
|
||
"model": "gpt-5.5",
|
||
"ready": true,
|
||
"requiredEnv": [
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_PROVIDER",
|
||
"present": true,
|
||
"redacted": false,
|
||
"source": "runtime-env"
|
||
},
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_MODEL",
|
||
"present": true,
|
||
"redacted": false,
|
||
"source": "runtime-env"
|
||
},
|
||
{
|
||
"name": "OPENAI_API_KEY",
|
||
"present": true,
|
||
"redacted": true,
|
||
"source": "k8s-secret-ref"
|
||
},
|
||
{
|
||
"name": "HWLAB_CODE_AGENT_OPENAI_BASE_URL",
|
||
"present": true,
|
||
"redacted": true,
|
||
"source": "runtime-env"
|
||
}
|
||
],
|
||
"missingEnv": [],
|
||
"mismatchedEnv": [],
|
||
"secretRef": {
|
||
"env": "OPENAI_API_KEY",
|
||
"secretName": "hwlab-code-agent-provider",
|
||
"secretKey": "openai-api-key",
|
||
"present": true,
|
||
"redacted": true
|
||
},
|
||
"egress": {
|
||
"env": "HWLAB_CODE_AGENT_OPENAI_BASE_URL",
|
||
"target": "dev-egress-proxy",
|
||
"present": true,
|
||
"matchesDevProxy": true,
|
||
"directPublicOpenAi": false,
|
||
"valueRedacted": true
|
||
},
|
||
"secretMaterialRead": false,
|
||
"providerConnected": false,
|
||
"deployment": "hwlab-cloud-api",
|
||
"container": "hwlab-cloud-api",
|
||
"validationScope": "deployment-env-and-secretKeyRef-metadata-only"
|
||
},
|
||
"validationGate": "no-secret provider env/secretKeyRef preservation",
|
||
"providerCallAttempted": false,
|
||
"secretValuesRead": false,
|
||
"kubernetesSecretDataRead": false,
|
||
"valuesRedacted": true
|
||
},
|
||
"applyStep": {
|
||
"status": "pass",
|
||
"command": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl apply -k deploy/k8s/dev",
|
||
"stdout": "namespace/hwlab-dev unchanged\nconfigmap/hwlab-dev-health-contract unchanged\nservice/hwlab-agent-mgr unchanged\nservice/hwlab-agent-skills unchanged\nservice/hwlab-box-simu unchanged\nservice/hwlab-box-simu-1 unchanged\nservice/hwlab-box-simu-2 unchanged\nservice/hwlab-cli unchanged\nservice/hwlab-cloud-api unchanged\nservice/hwlab-cloud-web unchanged\nservice/hwlab-edge-proxy unchanged\nservice/hwlab-gateway unchanged\nservice/hwlab-gateway-simu unchanged\nservice/hwlab-gateway-simu-1 unchanged\nservice/hwlab-gateway-simu-2 unchanged\nservice/hwlab-patch-panel unchanged\nservice/hwlab-router unchanged\nservice/hwlab-tunnel-client unchanged\ndeployment.apps/hwlab-agent-mgr configured\ndeployment.apps/hwlab-agent-skills configured\ndeployment.apps/hwlab-cloud-api configured\ndeployment.apps/hwlab-cloud-web configured\ndeployment.apps/hwlab-edge-proxy configured\ndeployment.apps/hwlab-gateway configured\ndeployment.apps/hwlab-patch-panel configured\ndeployment.apps/hwlab-router configured\ndeployment.apps/hwlab-tunnel-client configured\nstatefulset.apps/hwlab-box-simu configured\nstatefulset.apps/hwlab-gateway-simu configured\njob.batch/hwlab-agent-worker-template created\njob.batch/hwlab-cli-template created",
|
||
"stderr": "# Warning: 'commonLabels' is deprecated. Please use 'labels' instead. Run 'kustomize edit fix' to update your Kustomization automatically.\n# Warning: 'commonLabels' is deprecated. Please use 'labels' instead. Run 'kustomize edit fix' to update your Kustomization automatically.",
|
||
"mutationAttempted": true,
|
||
"expectedImmutableTemplateJobDryRun": false,
|
||
"expectedImmutableTemplateJobs": []
|
||
},
|
||
"manualCommands": {
|
||
"status": "ready",
|
||
"beforeHumanApproval": [
|
||
"node scripts/dev-deploy-apply.mjs --dry-run --write-report",
|
||
"node scripts/validate-dev-gate-report.mjs"
|
||
],
|
||
"afterHumanApproval": [
|
||
"node scripts/dev-cd-apply.mjs --apply --confirm-dev --confirmed-non-production --write-report"
|
||
],
|
||
"summary": "Run the dry-run plan and validator immediately before requesting human approval; live apply still requires the explicit DEV confirmation flags."
|
||
},
|
||
"rollbackHint": {
|
||
"namespace": "hwlab-dev",
|
||
"strategy": "DEV-only Kubernetes rollback using deployment revision history; do not touch PROD or UniDesk services.",
|
||
"captureBeforeApply": [
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev get pods,services,configmaps,deployments,jobs -o wide",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev get deployments -o json"
|
||
],
|
||
"deploymentRollbackCommands": [
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-cloud-api",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-cloud-web",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-agent-mgr",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-gateway",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-patch-panel",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-router",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-tunnel-client",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-edge-proxy",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout undo deployment/hwlab-agent-skills"
|
||
],
|
||
"jobCleanupCommands": [
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev delete job hwlab-agent-worker-template --ignore-not-found",
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev delete job hwlab-cli-template --ignore-not-found"
|
||
],
|
||
"postRollbackChecks": [
|
||
"KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl -n hwlab-dev rollout status deployment/hwlab-cloud-api --timeout=120s",
|
||
"curl -fsS http://74.48.78.17:16667/health/live"
|
||
]
|
||
},
|
||
"remainingBlockers": [],
|
||
"artifactEvidence": [
|
||
{
|
||
"serviceId": "hwlab-cloud-api",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:e6d4bd5",
|
||
"digest": "sha256:8a0677290ce3626d3589d1d22a943b49290e74451d75263cdbda3044a6ba105d",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-cloud-web",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"digest": "sha256:f43ac97da69212e3ff74cfed36a04d65f0cd9cc7b8cb48f0eaf6f1f19d7dd6da",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-agent-mgr",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:e6d4bd5",
|
||
"digest": "sha256:f37e9b4dd6262ff4c30826fae1a0e01b184d0e57812c7876de73566263ff0c35",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-agent-worker",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:e6d4bd5",
|
||
"digest": "sha256:afdc241c799fe53561b60a37199c73cfb612ea0381ecfba82e66eb08566a8336",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-gateway",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:e6d4bd5",
|
||
"digest": "sha256:27303c093330bddf4c1eb8e3791dce6dbbe97aab28ff17c1faf761b05333cce0",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-gateway-simu",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:e6d4bd5",
|
||
"digest": "sha256:38c0372ec72e8f17b26f2fcf83d35718023a81c48529e459d83e36f8cc56ec3a",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-box-simu",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:e6d4bd5",
|
||
"digest": "sha256:d551c22242fff6016f15672c4b8b06dbfc85da2c00ecfdd4e40486668b58a56f",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-patch-panel",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:e6d4bd5",
|
||
"digest": "sha256:6c7f3600a71131c11b994a625fd6ced65ac3bb7f109f3c7f941513cbd1d2def5",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-router",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-router:e6d4bd5",
|
||
"digest": "sha256:8d9084f3d23e44d3ffe628e9d100ebbad260c857d06b1fbb5791ecd11bfc4d9f",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-tunnel-client",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:e6d4bd5",
|
||
"digest": "sha256:d6dff1383912ccfed1b1b91dc5ae8323e345f42f57145d7bda788e9941a4ca5a",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-edge-proxy",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:e6d4bd5",
|
||
"digest": "sha256:6ce280c0fd17218dd5719d1118b5e72fd0c4107dc33951e09b35c374f7affacd",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-cli",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cli:e6d4bd5",
|
||
"digest": "sha256:09a015e727738cd188853af557ecd8ea4adfa8a2250692e7442549e9c80eae1f",
|
||
"publishState": "published"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-agent-skills",
|
||
"deployCommitId": "e6d4bd5",
|
||
"catalogCommitId": "e6d4bd5",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:e6d4bd5",
|
||
"digest": "sha256:45602b9d09ef22095ab75bd95e2f310626bce61bc4e39a7205009fe9620c2d4f",
|
||
"publishState": "published"
|
||
}
|
||
],
|
||
"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": [],
|
||
"mismatchedNonSecretEnv": [],
|
||
"missingDnsContract": [],
|
||
"dns": {
|
||
"ready": true,
|
||
"source": "optional-public-dns-alias",
|
||
"serviceName": "cloud-api-db",
|
||
"namespace": "hwlab-dev",
|
||
"port": 5432,
|
||
"portName": "postgres",
|
||
"requiredForReadiness": false,
|
||
"usedForProbe": false,
|
||
"servicePresent": false,
|
||
"secretMaterialRead": false,
|
||
"liveDbEvidence": false,
|
||
"missing": [],
|
||
"actual": {}
|
||
},
|
||
"runtimeHealth": {
|
||
"status": "degraded",
|
||
"ready": false,
|
||
"configReady": true,
|
||
"connected": false,
|
||
"liveConnected": false,
|
||
"connectionChecked": false,
|
||
"connectionAttempted": false,
|
||
"connectionResult": "unknown",
|
||
"liveDbEvidence": false,
|
||
"requiredEnv": [
|
||
{
|
||
"name": "HWLAB_CLOUD_DB_URL",
|
||
"present": true,
|
||
"redacted": true
|
||
},
|
||
{
|
||
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
||
"present": true,
|
||
"redacted": false
|
||
}
|
||
],
|
||
"missingEnv": [],
|
||
"secretRefs": [
|
||
{
|
||
"env": "HWLAB_CLOUD_DB_URL",
|
||
"secretName": "hwlab-cloud-api-dev-db",
|
||
"secretKey": "database-url",
|
||
"present": true,
|
||
"envInjected": true,
|
||
"secretPresent": "not_observed",
|
||
"secretKeyPresent": "not_observed",
|
||
"redacted": true
|
||
}
|
||
],
|
||
"endpointSource": "secret-url-host",
|
||
"optionalPublicDnsAlias": {
|
||
"source": "optional-public-dns-alias",
|
||
"serviceName": "cloud-api-db",
|
||
"namespace": "hwlab-dev",
|
||
"port": 5432,
|
||
"portName": "postgres",
|
||
"requiredForReadiness": false,
|
||
"usedForProbe": false,
|
||
"envPresent": false,
|
||
"readyGate": "not_readiness_authority"
|
||
},
|
||
"connection": {
|
||
"attempted": false,
|
||
"result": "unknown",
|
||
"endpointRedacted": true,
|
||
"valueRedacted": true
|
||
},
|
||
"redaction": {
|
||
"valuesRedacted": true,
|
||
"endpointRedacted": true,
|
||
"valueRedacted": true,
|
||
"secretMaterialRead": false,
|
||
"secretRefsOnly": true
|
||
},
|
||
"readinessLayers": {
|
||
"dns": {
|
||
"status": "not_proven",
|
||
"result": "unknown"
|
||
},
|
||
"tcp": {
|
||
"status": "not_proven",
|
||
"result": "unknown"
|
||
},
|
||
"ssl": {
|
||
"status": "not_proven",
|
||
"result": "unknown"
|
||
},
|
||
"auth": {
|
||
"status": "not_proven",
|
||
"result": "unknown"
|
||
},
|
||
"schema": {
|
||
"status": "not_proven",
|
||
"result": "unknown"
|
||
},
|
||
"migration": {
|
||
"status": "not_proven",
|
||
"result": "unknown"
|
||
},
|
||
"durability": {
|
||
"status": "not_proven",
|
||
"result": "unknown"
|
||
}
|
||
},
|
||
"blocker": null,
|
||
"fixtureEvidence": false
|
||
},
|
||
"secretMaterialRead": false,
|
||
"valuesRedacted": true,
|
||
"liveDbEvidence": false,
|
||
"fixtureEvidence": false,
|
||
"note": "This check records DB env, Secret reference, and Secret URL host authority only. Optional cloud-api-db alias presence is diagnostic and is not live DB evidence."
|
||
},
|
||
"k8sManifest": {
|
||
"resourceCounts": {
|
||
"workloads": 13,
|
||
"services": 16,
|
||
"configMaps": 1
|
||
},
|
||
"images": [
|
||
{
|
||
"serviceId": "hwlab-cloud-api",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-cloud-api"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-cloud-web",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-cloud-web"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-agent-mgr",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-agent-mgr"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-agent-worker",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:e6d4bd5",
|
||
"kind": "Job",
|
||
"name": "hwlab-agent-worker-template"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-gateway",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-gateway"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-gateway-simu",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:e6d4bd5",
|
||
"kind": "StatefulSet",
|
||
"name": "hwlab-gateway-simu"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-box-simu",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:e6d4bd5",
|
||
"kind": "StatefulSet",
|
||
"name": "hwlab-box-simu"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-patch-panel",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-patch-panel"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-router",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-router:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-router"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-tunnel-client",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-tunnel-client"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-edge-proxy",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-edge-proxy"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-cli",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-cli:e6d4bd5",
|
||
"kind": "Job",
|
||
"name": "hwlab-cli-template"
|
||
},
|
||
{
|
||
"serviceId": "hwlab-agent-skills",
|
||
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:e6d4bd5",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-agent-skills"
|
||
}
|
||
],
|
||
"runtimeIdentityEnv": [
|
||
{
|
||
"serviceId": "hwlab-cloud-web",
|
||
"kind": "Deployment",
|
||
"name": "hwlab-cloud-web",
|
||
"container": "hwlab-cloud-web",
|
||
"expected": {
|
||
"HWLAB_COMMIT_ID": "e6d4bd5",
|
||
"HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"HWLAB_IMAGE_TAG": "e6d4bd5"
|
||
},
|
||
"status": "match",
|
||
"matchesDesired": true,
|
||
"fields": [
|
||
{
|
||
"name": "HWLAB_COMMIT_ID",
|
||
"expected": "e6d4bd5",
|
||
"actual": "e6d4bd5",
|
||
"status": "match"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE",
|
||
"expected": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"actual": "127.0.0.1:5000/hwlab/hwlab-cloud-web:e6d4bd5",
|
||
"status": "match"
|
||
},
|
||
{
|
||
"name": "HWLAB_IMAGE_TAG",
|
||
"expected": "e6d4bd5",
|
||
"actual": "e6d4bd5",
|
||
"status": "match"
|
||
}
|
||
],
|
||
"drift": []
|
||
}
|
||
]
|
||
},
|
||
"clusterObservation": {
|
||
"status": "pass",
|
||
"executor": "/usr/local/bin/kubectl",
|
||
"kubeconfig": "/etc/rancher/k3s/k3s.yaml",
|
||
"kubeconfigSource": "flag:--kubeconfig",
|
||
"commandPrefix": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl",
|
||
"readCommand": "KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl get pods,services,configmaps,deployments,jobs -n hwlab-dev -o json",
|
||
"version": "clientVersion:\n buildDate: \"2026-05-12T09:54:35Z\"\n compiler: gc\n gitCommit: 756939600b9a7180fc2df6550a4585b638875e67\n gitTreeState: clean\n gitVersion: v1.36.1\n goVersion: go1.26.2\n major: \"1\"\n minor: \"36\"\n platform: linux/amd64\nkustomizeVersion: v5.8.1",
|
||
"resources": [
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-agent-mgr-99d44c747-mfqzj",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-agent-skills-7f99b49598-lqjdd",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-box-simu-0",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-box-simu-1",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-cloud-api-57cfcfc587-kdvg9",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-cloud-web-67c684947b-lkvtj",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-edge-proxy-85db66bcc9-mv8pv",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-frpc-59f57d479c-tgjhl",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-gateway-simu-0",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-gateway-simu-1",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-patch-panel-7cd9d9d597-kwnm6",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-router-65dc5579fb-d2r8l",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-runtime-migrate-35e3d897-kfr4m",
|
||
"phase": "Succeeded"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-runtime-provision-35e3d897-jk2rc",
|
||
"phase": "Succeeded"
|
||
},
|
||
{
|
||
"kind": "Pod",
|
||
"name": "hwlab-tunnel-client-54d968477d-mf2qk",
|
||
"phase": "Running"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-agent-mgr"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-agent-skills"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-box-simu"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-box-simu-1"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-box-simu-2"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-cli"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-cloud-api"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-cloud-web"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-edge-proxy"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-gateway"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-gateway-simu"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-gateway-simu-1"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-gateway-simu-2"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-patch-panel"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-router"
|
||
},
|
||
{
|
||
"kind": "Service",
|
||
"name": "hwlab-tunnel-client"
|
||
},
|
||
{
|
||
"kind": "ConfigMap",
|
||
"name": "hwlab-dev-health-contract"
|
||
},
|
||
{
|
||
"kind": "ConfigMap",
|
||
"name": "hwlab-frpc-config"
|
||
},
|
||
{
|
||
"kind": "ConfigMap",
|
||
"name": "kube-root-ca.crt"
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-agent-mgr",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-agent-skills",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-cloud-api",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-cloud-web",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-edge-proxy",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-frpc",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-gateway"
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-patch-panel",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-router",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Deployment",
|
||
"name": "hwlab-tunnel-client",
|
||
"readyReplicas": 1,
|
||
"replicas": 1
|
||
},
|
||
{
|
||
"kind": "Job",
|
||
"name": "hwlab-agent-worker-template"
|
||
},
|
||
{
|
||
"kind": "Job",
|
||
"name": "hwlab-cli-template"
|
||
},
|
||
{
|
||
"kind": "Job",
|
||
"name": "hwlab-runtime-migrate-35e3d897"
|
||
},
|
||
{
|
||
"kind": "Job",
|
||
"name": "hwlab-runtime-provision-35e3d897"
|
||
}
|
||
]
|
||
},
|
||
"liveProbe": {
|
||
"status": "pass",
|
||
"url": "http://74.48.78.17:16667/health/live",
|
||
"httpStatus": 200,
|
||
"body": "{\"serviceId\":\"hwlab-cloud-api\",\"environment\":\"dev\",\"status\":\"degraded\",\"ready\":false,\"revision\":\"b02ac5becad13aeeab0d5cb7d8f01300bccb78c2\",\"readiness\":{\"contractVersion\":\"v3\",\"ready\":false,\"status\":\"degraded\",\"blockerCodes\":[\"stdio_protocol_not_wired\"],\"blockers\":[{\"code\":\"stdio_protocol_not_wired\",\"type\":\"agent_blocker\",\"scope\":\"code-agent-long-lived-session\",\"status\":\"open\",\"sourceIssue\":\"pikasTech/HWLAB#275\",\"summary\":\"普通聊天可走 OpenAI Responses fallback,pwd/skills 走受控只读 runner,M3 IO 走 Skill CLI"
|
||
}
|
||
},
|
||
"blockers": [],
|
||
"notes": "DEV-only result. No PROD resources, secret values, force push, heavy e2e, browser e2e, or UniDesk runtime substitute were used."
|
||
}
|