Files
pikasTech-HWLAB/reports/dev-gate/dev-deploy-report.json
T
2026-05-22 11:39:20 +08:00

1035 lines
32 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": "73b379f4441d",
"acceptanceLevel": "dev_deploy_apply",
"devOnly": true,
"prodDisabled": true,
"status": "pass",
"generatedAt": "2026-05-22T03:38:26.155Z",
"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: 73b379f",
"namespace: hwlab-dev",
"workloads planned: 13",
"kubectl executor: /usr/local/bin/kubectl",
"live health: pass"
],
"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",
"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"
],
"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": true,
"target": {
"environment": "dev",
"namespace": "hwlab-dev",
"endpoint": "http://74.48.78.17:16667",
"prodDisabled": true
},
"artifactPlan": {
"expectedArtifactCommit": "73b379f",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"sourceCommitId": "73b379f4441d",
"serviceCommitIds": [
"73b379f"
],
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f"
}
]
},
{
"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": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
},
{
"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:73b379f"
}
]
}
],
"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": 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"
}
]
}
],
"applyStep": {
"status": "pass",
"command": "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-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-patch-panel unchanged\nservice/hwlab-router unchanged\nservice/hwlab-tunnel-client unchanged\ndeployment.apps/hwlab-agent-mgr unchanged\ndeployment.apps/hwlab-agent-skills unchanged\ndeployment.apps/hwlab-box-simu unchanged\ndeployment.apps/hwlab-cloud-api unchanged\ndeployment.apps/hwlab-cloud-web unchanged\ndeployment.apps/hwlab-edge-proxy unchanged\ndeployment.apps/hwlab-gateway unchanged\ndeployment.apps/hwlab-gateway-simu unchanged\ndeployment.apps/hwlab-patch-panel unchanged\ndeployment.apps/hwlab-router unchanged\ndeployment.apps/hwlab-tunnel-client unchanged\njob.batch/hwlab-agent-worker-template unchanged\njob.batch/hwlab-cli-template unchanged",
"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."
},
"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-deploy-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": [
"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:16667/health/live"
]
},
"remainingBlockers": [],
"artifactEvidence": [
{
"serviceId": "hwlab-cloud-api",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f",
"digest": "sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf",
"publishState": "published"
},
{
"serviceId": "hwlab-cloud-web",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f",
"digest": "sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2",
"publishState": "published"
},
{
"serviceId": "hwlab-agent-mgr",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f",
"digest": "sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef",
"publishState": "published"
},
{
"serviceId": "hwlab-agent-worker",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f",
"digest": "sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8",
"publishState": "published"
},
{
"serviceId": "hwlab-gateway",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f",
"digest": "sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008",
"publishState": "published"
},
{
"serviceId": "hwlab-gateway-simu",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f",
"digest": "sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082",
"publishState": "published"
},
{
"serviceId": "hwlab-box-simu",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f",
"digest": "sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf",
"publishState": "published"
},
{
"serviceId": "hwlab-patch-panel",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f",
"digest": "sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286",
"publishState": "published"
},
{
"serviceId": "hwlab-router",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f",
"digest": "sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8",
"publishState": "published"
},
{
"serviceId": "hwlab-tunnel-client",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f",
"digest": "sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49",
"publishState": "published"
},
{
"serviceId": "hwlab-edge-proxy",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f",
"digest": "sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38",
"publishState": "published"
},
{
"serviceId": "hwlab-cli",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f",
"digest": "sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5",
"publishState": "published"
},
{
"serviceId": "hwlab-agent-skills",
"deployCommitId": "73b379f",
"catalogCommitId": "73b379f",
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f",
"digest": "sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573",
"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": [],
"runtimeHealth": {
"status": "degraded",
"ready": false,
"configReady": true,
"connected": false,
"connectionChecked": 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,
"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": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f",
"kind": "Deployment",
"name": "hwlab-cloud-api"
},
{
"serviceId": "hwlab-cloud-web",
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f",
"kind": "Deployment",
"name": "hwlab-cloud-web"
},
{
"serviceId": "hwlab-agent-mgr",
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f",
"kind": "Deployment",
"name": "hwlab-agent-mgr"
},
{
"serviceId": "hwlab-agent-worker",
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f",
"kind": "Job",
"name": "hwlab-agent-worker-template"
},
{
"serviceId": "hwlab-gateway",
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f",
"kind": "Deployment",
"name": "hwlab-gateway"
},
{
"serviceId": "hwlab-gateway-simu",
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f",
"kind": "Deployment",
"name": "hwlab-gateway-simu"
},
{
"serviceId": "hwlab-box-simu",
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f",
"kind": "Deployment",
"name": "hwlab-box-simu"
},
{
"serviceId": "hwlab-patch-panel",
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f",
"kind": "Deployment",
"name": "hwlab-patch-panel"
},
{
"serviceId": "hwlab-router",
"image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f",
"kind": "Deployment",
"name": "hwlab-router"
},
{
"serviceId": "hwlab-tunnel-client",
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f",
"kind": "Deployment",
"name": "hwlab-tunnel-client"
},
{
"serviceId": "hwlab-edge-proxy",
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f",
"kind": "Deployment",
"name": "hwlab-edge-proxy"
},
{
"serviceId": "hwlab-cli",
"image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f",
"kind": "Job",
"name": "hwlab-cli-template"
},
{
"serviceId": "hwlab-agent-skills",
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f",
"kind": "Deployment",
"name": "hwlab-agent-skills"
}
]
},
"clusterObservation": {
"status": "pass",
"executor": "/usr/local/bin/kubectl",
"version": "clientVersion:\n buildDate: \"2025-09-09T19:44:50Z\"\n compiler: gc\n gitCommit: 93248f9ae092f571eb870b7664c534bfc7d00f03\n gitTreeState: clean\n gitVersion: v1.34.1\n goVersion: go1.24.6\n major: \"1\"\n minor: \"34\"\n platform: linux/amd64\nkustomizeVersion: v5.7.1",
"resources": [
{
"kind": "Pod",
"name": "hwlab-agent-mgr-6b4976cb77-rjc2f",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-agent-skills-76b5d4f4bb-8x55z",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-box-simu-5d574d4675-jb6vb",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-box-simu-5d574d4675-qwp84",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-cloud-api-769848bfd8-k2hdb",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-cloud-web-bc56bc464-l7mdl",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-edge-proxy-544886546-656nq",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-frpc-59f57d479c-wm5l2",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-gateway-simu-744ffffbbd-66q2c",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-gateway-simu-744ffffbbd-rmlzq",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-patch-panel-7d9487bb6c-82qqk",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-router-77465567b6-9qs6t",
"phase": "Running"
},
{
"kind": "Pod",
"name": "hwlab-tunnel-client-6449fcb5fb-27sk2",
"phase": "Running"
},
{
"kind": "Service",
"name": "hwlab-agent-mgr"
},
{
"kind": "Service",
"name": "hwlab-agent-skills"
},
{
"kind": "Service",
"name": "hwlab-box-simu"
},
{
"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-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-box-simu",
"readyReplicas": 2,
"replicas": 2
},
{
"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-gateway-simu",
"readyReplicas": 2,
"replicas": 2
},
{
"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"
}
]
},
"liveProbe": {
"status": "pass",
"url": "http://74.48.78.17:16667/health/live",
"httpStatus": 200,
"body": "{\"serviceId\":\"hwlab-cloud-api\",\"environment\":\"dev\",\"status\":\"degraded\",\"service\":{\"id\":\"hwlab-cloud-api\",\"role\":\"cloud-api\",\"healthPath\":\"/health\",\"livePath\":\"/health/live\"},\"commit\":{\"id\":\"73b379f\",\"source\":\"runtime-env\"},\"image\":{\"reference\":\"127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f\",\"tag\":\"73b379f\",\"digest\":\"unknown\"},\"endpoint\":\"http://74.48.78.17:16667\",\"observedAt\":\"2026-05-22T03:38:25.142Z\",\"db\":{\"contractVersion\":\"v1\",\"environment\":\"dev\",\"connected\":false,\"connectionChecked\":false,\"c"
}
},
"blockers": [],
"notes": "DEV-only result. No PROD resources, secret values, force push, heavy e2e, browser e2e, or UniDesk runtime substitute were used."
}