7e29522b65
Refs #66. Merged by commander after reviewing Code Queue task codex_1779422778882_1. Separates process HTTP, Docker daemon push, and k3s pull registry capabilities so runner loopback HTTP degradation does not block artifact publish when Docker/k3s paths are proven.
1476 lines
61 KiB
JSON
1476 lines
61 KiB
JSON
{
|
|
"$schema": "https://hwlab.pikastech.local/schemas/dev-gate-preflight-report.schema.json",
|
|
"$id": "https://hwlab.pikastech.local/reports/dev-gate/dev-preflight-report.json",
|
|
"reportVersion": "v1",
|
|
"reportKind": "dev-gate-preflight",
|
|
"issue": "pikasTech/HWLAB#34",
|
|
"supports": [
|
|
"pikasTech/HWLAB#7",
|
|
"pikasTech/HWLAB#12",
|
|
"pikasTech/HWLAB#14",
|
|
"pikasTech/HWLAB#22",
|
|
"pikasTech/HWLAB#23",
|
|
"pikasTech/HWLAB#29",
|
|
"pikasTech/HWLAB#30",
|
|
"pikasTech/HWLAB#31",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#49",
|
|
"pikasTech/HWLAB#66",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#35",
|
|
"pikasTech/HWLAB#48"
|
|
],
|
|
"target": {
|
|
"ref": "origin/main",
|
|
"commitId": "a1c3cb58da0067a12424277d47d9d50d0cbf7a9d",
|
|
"shortCommitId": "a1c3cb5"
|
|
},
|
|
"generatedAt": "2026-05-22T04:31:08.449Z",
|
|
"mode": "read-only",
|
|
"devOnly": true,
|
|
"prodDisabled": true,
|
|
"forbiddenActions": [
|
|
"prod-deploy",
|
|
"secret-material-read",
|
|
"unidesk-runtime-substitute",
|
|
"heavy-e2e",
|
|
"browser-e2e",
|
|
"force-push",
|
|
"runtime-restart"
|
|
],
|
|
"validationCommands": [
|
|
"node --check scripts/dev-gate-preflight.mjs",
|
|
"node --check scripts/src/dev-gate-preflight.mjs",
|
|
"node --check scripts/src/registry-capabilities.mjs",
|
|
"node --check scripts/refresh-artifact-catalog.mjs",
|
|
"node scripts/dev-gate-preflight.mjs",
|
|
"node --check scripts/validate-dev-gate-report.mjs",
|
|
"node scripts/validate-dev-gate-report.mjs"
|
|
],
|
|
"artifactIdentity": {
|
|
"source": {
|
|
"ref": "origin/main",
|
|
"commitId": "a1c3cb58da0067a12424277d47d9d50d0cbf7a9d",
|
|
"shortCommitId": "a1c3cb5"
|
|
},
|
|
"deployManifest": {
|
|
"path": "deploy/deploy.json",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false
|
|
},
|
|
"artifactCatalog": {
|
|
"path": "deploy/artifact-catalog.dev.json",
|
|
"commitId": "73b379f",
|
|
"artifactState": "published",
|
|
"ciPublished": true,
|
|
"registryVerified": true,
|
|
"provenance": "reports/dev-gate/dev-artifacts.json",
|
|
"digestCounts": {
|
|
"sha256": 13,
|
|
"notPublished": 0,
|
|
"invalid": 0
|
|
},
|
|
"requiredServiceCount": 13,
|
|
"disabledServiceCount": 0,
|
|
"matchesSource": false
|
|
},
|
|
"services": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
}
|
|
],
|
|
"serviceCommitIds": [
|
|
"73b379f"
|
|
],
|
|
"matchesSource": false,
|
|
"publishVerified": true,
|
|
"refreshCommands": {
|
|
"blocked": "node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked",
|
|
"published": "node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json"
|
|
}
|
|
},
|
|
"registryCapabilities": {
|
|
"version": "v1",
|
|
"registryPrefix": "127.0.0.1:5000/hwlab",
|
|
"generatedAt": "2026-05-22T04:31:07.663Z",
|
|
"classification": "degraded",
|
|
"dimensions": {
|
|
"processHttpAccess": {
|
|
"id": "process-http-access",
|
|
"status": "degraded",
|
|
"requiredForPublish": false,
|
|
"requiredForDeploy": false,
|
|
"endpoint": "http://127.0.0.1:5000/v2/",
|
|
"probeKind": "runner-process-http-v2",
|
|
"summary": "Runner process cannot reach http://127.0.0.1:5000/v2/; this is process HTTP access only and does not prove Docker daemon push failure.",
|
|
"evidence": {
|
|
"probe": {
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/",
|
|
"method": "GET",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
"publishFailure": false
|
|
}
|
|
},
|
|
"dockerDaemonPushAccess": {
|
|
"id": "docker-daemon-push-access",
|
|
"status": "pass",
|
|
"requiredForPublish": true,
|
|
"requiredForDeploy": false,
|
|
"endpoint": "127.0.0.1:5000/hwlab",
|
|
"probeKind": "docker-ps-read-only",
|
|
"summary": "Docker daemon can see a local/internal registry target for publish preflight purposes; no push was attempted.",
|
|
"evidence": {
|
|
"dockerVersion": {
|
|
"command": "docker --version",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "Docker version 26.1.5+dfsg1, build a72d7cd",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"registryPrefix": "127.0.0.1:5000/hwlab",
|
|
"loopbackPort5000": true,
|
|
"registryContainerVisible": true,
|
|
"matchingContainers": [
|
|
{
|
|
"id": "00091efce380",
|
|
"image": "registry:2.8.3",
|
|
"names": "unidesk-artifact-registry",
|
|
"ports": "127.0.0.1:5000->5000/tcp",
|
|
"state": "running",
|
|
"status": "Up 27 hours"
|
|
}
|
|
],
|
|
"pushAttempted": false,
|
|
"mutationAttempted": false
|
|
}
|
|
},
|
|
"k3sPullAccess": {
|
|
"id": "k3s-pull-access",
|
|
"status": "pass",
|
|
"requiredForPublish": false,
|
|
"requiredForDeploy": true,
|
|
"endpoint": "127.0.0.1:5000/hwlab",
|
|
"probeKind": "kubectl-read-only",
|
|
"summary": "Read-only kubectl observed hwlab-dev pods with pulled registry images.",
|
|
"evidence": {
|
|
"kubectlAvailable": true,
|
|
"context": {
|
|
"command": "kubectl config current-context",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "in-cluster",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"canGetPods": {
|
|
"command": "kubectl auth can-i get pods -n hwlab-dev",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "yes",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"podCount": 13,
|
|
"pulledImages": [
|
|
{
|
|
"pod": "hwlab-agent-mgr-75544c7747-5dzt9",
|
|
"container": "hwlab-agent-mgr",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-agent-mgr@sha256:c16c733306a28ae9385087653b79f5bb2f28724d917a89bb296646f6a02c5318"
|
|
},
|
|
{
|
|
"pod": "hwlab-agent-skills-849d9976f4-2nsmw",
|
|
"container": "hwlab-agent-skills",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-agent-skills@sha256:246fb7bb48597a7179aab62cb091e8213e47b71b6871ba94e6028032992e916c"
|
|
},
|
|
{
|
|
"pod": "hwlab-box-simu-55688cbcc7-pftxc",
|
|
"container": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:ae5fcc06a276918561c2d752f2221156bd2bd4db7fb93967ae76af97bfdc51bf"
|
|
},
|
|
{
|
|
"pod": "hwlab-box-simu-55688cbcc7-sq5fx",
|
|
"container": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:ae5fcc06a276918561c2d752f2221156bd2bd4db7fb93967ae76af97bfdc51bf"
|
|
},
|
|
{
|
|
"pod": "hwlab-cloud-api-f48dcdfb-9n6zh",
|
|
"container": "hwlab-cloud-api",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-api@sha256:3946efdd7360409cea6a897cb03a6f3172f14819d3132df3aab821621909513f"
|
|
},
|
|
{
|
|
"pod": "hwlab-cloud-web-cd9655b98-gxtmc",
|
|
"container": "hwlab-cloud-web",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-web@sha256:868e2a11c56cc1a27c77de3fa71a7b092f21ae98a4052104e9071bd93960abfa"
|
|
},
|
|
{
|
|
"pod": "hwlab-edge-proxy-567f978cdd-8fwc8",
|
|
"container": "hwlab-edge-proxy",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-edge-proxy@sha256:384832fc579063b9b0a940973690734bb402607720fd36f4662e4ee6fa5a57d2"
|
|
},
|
|
{
|
|
"pod": "hwlab-frpc-59f57d479c-wm5l2",
|
|
"container": "frpc",
|
|
"image": "127.0.0.1:5000/hwlab/frpc:v0.68.1",
|
|
"imageID": "127.0.0.1:5000/hwlab/frpc@sha256:ce400cda42a260964e40ab1ca68b868f72c569cdce4b243aef36ce40194d287b"
|
|
},
|
|
{
|
|
"pod": "hwlab-gateway-simu-699fd486b-j9pk7",
|
|
"container": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:00599721b910b5667b6be43c416cab4c410c6cc29b7f56ecdfb6eff71123d01c"
|
|
},
|
|
{
|
|
"pod": "hwlab-gateway-simu-699fd486b-phcgp",
|
|
"container": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:00599721b910b5667b6be43c416cab4c410c6cc29b7f56ecdfb6eff71123d01c"
|
|
},
|
|
{
|
|
"pod": "hwlab-patch-panel-757f9f44d5-7np8r",
|
|
"container": "hwlab-patch-panel",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-patch-panel@sha256:5b3aa6505492c2ed398d21cbd35a8754672114acd0fa97faa3351d4b6a6dfd5a"
|
|
},
|
|
{
|
|
"pod": "hwlab-router-5d9cbdf89b-p7r94",
|
|
"container": "hwlab-router",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-router@sha256:217b1fdb0f704c4183e9d8503644177f0c8bae674da0433985c19ef909f0e342"
|
|
},
|
|
{
|
|
"pod": "hwlab-tunnel-client-65c7858c8-wjqsh",
|
|
"container": "hwlab-tunnel-client",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-tunnel-client@sha256:9bcdd8a58132d7bc4dbfc71297f802fc0ab407a1b5c1bb1ea58e0791147a243b"
|
|
}
|
|
],
|
|
"pullFailures": [],
|
|
"pullAttempted": false,
|
|
"mutationAttempted": false
|
|
}
|
|
}
|
|
},
|
|
"interpretation": {
|
|
"processHttpAccess": "Runner process HTTP access to /v2/ is diagnostic only and must not be treated as Docker daemon push access.",
|
|
"dockerDaemonPushAccess": "Docker daemon push access is the publish-path capability. This probe is read-only and does not push.",
|
|
"k3sPullAccess": "k3s pull access is the deploy-path capability. This probe is read-only and does not create pods or read secrets."
|
|
}
|
|
},
|
|
"conclusion": "blocked",
|
|
"checks": [
|
|
{
|
|
"id": "source-contract-static",
|
|
"category": "contract",
|
|
"status": "pass",
|
|
"summary": "Local deploy manifest and artifact catalog are internally consistent.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "target-commit-pinning",
|
|
"category": "contract",
|
|
"status": "blocked",
|
|
"summary": "Source origin/main a1c3cb5 is not covered by deploy commit 73b379f, catalog commit 73b379f, service commits 73b379f.",
|
|
"evidence": [
|
|
{
|
|
"source": {
|
|
"ref": "origin/main",
|
|
"commitId": "a1c3cb58da0067a12424277d47d9d50d0cbf7a9d",
|
|
"shortCommitId": "a1c3cb5"
|
|
},
|
|
"deployManifest": {
|
|
"path": "deploy/deploy.json",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false
|
|
},
|
|
"artifactCatalog": {
|
|
"path": "deploy/artifact-catalog.dev.json",
|
|
"commitId": "73b379f",
|
|
"artifactState": "published",
|
|
"ciPublished": true,
|
|
"registryVerified": true,
|
|
"provenance": "reports/dev-gate/dev-artifacts.json",
|
|
"digestCounts": {
|
|
"sha256": 13,
|
|
"notPublished": 0,
|
|
"invalid": 0
|
|
},
|
|
"requiredServiceCount": 13,
|
|
"disabledServiceCount": 0,
|
|
"matchesSource": false
|
|
},
|
|
"services": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"commitId": "73b379f",
|
|
"matchesSource": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f",
|
|
"imageTag": "73b379f",
|
|
"digest": "sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
}
|
|
],
|
|
"serviceCommitIds": [
|
|
"73b379f"
|
|
],
|
|
"matchesSource": false,
|
|
"publishVerified": true,
|
|
"refreshCommands": {
|
|
"blocked": "node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked",
|
|
"published": "node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "artifact-catalog-publish-state",
|
|
"category": "registry",
|
|
"status": "pass",
|
|
"summary": "Artifact catalog records CI publish, registry verification, and immutable service digests.",
|
|
"evidence": [
|
|
{
|
|
"path": "deploy/artifact-catalog.dev.json",
|
|
"commitId": "73b379f",
|
|
"artifactState": "published",
|
|
"ciPublished": true,
|
|
"registryVerified": true,
|
|
"provenance": "reports/dev-gate/dev-artifacts.json",
|
|
"digestCounts": {
|
|
"sha256": 13,
|
|
"notPublished": 0,
|
|
"invalid": 0
|
|
},
|
|
"requiredServiceCount": 13,
|
|
"disabledServiceCount": 0,
|
|
"matchesSource": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "k8s-manifest-static",
|
|
"category": "k3s",
|
|
"status": "pass",
|
|
"summary": "DEV k3s manifest files parse and stay scoped to hwlab-dev.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "registry-capability-process-http-access",
|
|
"category": "registry",
|
|
"status": "degraded",
|
|
"summary": "Runner process cannot reach http://127.0.0.1:5000/v2/; this is process HTTP access only and does not prove Docker daemon push failure.",
|
|
"evidence": [
|
|
{
|
|
"id": "process-http-access",
|
|
"status": "degraded",
|
|
"requiredForPublish": false,
|
|
"requiredForDeploy": false,
|
|
"endpoint": "http://127.0.0.1:5000/v2/",
|
|
"probeKind": "runner-process-http-v2",
|
|
"summary": "Runner process cannot reach http://127.0.0.1:5000/v2/; this is process HTTP access only and does not prove Docker daemon push failure.",
|
|
"evidence": {
|
|
"probe": {
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/",
|
|
"method": "GET",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
"publishFailure": false
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "registry-capability-docker-daemon-push-access",
|
|
"category": "registry",
|
|
"status": "pass",
|
|
"summary": "Docker daemon can see a local/internal registry target for publish preflight purposes; no push was attempted.",
|
|
"evidence": [
|
|
{
|
|
"id": "docker-daemon-push-access",
|
|
"status": "pass",
|
|
"requiredForPublish": true,
|
|
"requiredForDeploy": false,
|
|
"endpoint": "127.0.0.1:5000/hwlab",
|
|
"probeKind": "docker-ps-read-only",
|
|
"summary": "Docker daemon can see a local/internal registry target for publish preflight purposes; no push was attempted.",
|
|
"evidence": {
|
|
"dockerVersion": {
|
|
"command": "docker --version",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "Docker version 26.1.5+dfsg1, build a72d7cd",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"registryPrefix": "127.0.0.1:5000/hwlab",
|
|
"loopbackPort5000": true,
|
|
"registryContainerVisible": true,
|
|
"matchingContainers": [
|
|
{
|
|
"id": "00091efce380",
|
|
"image": "registry:2.8.3",
|
|
"names": "unidesk-artifact-registry",
|
|
"ports": "127.0.0.1:5000->5000/tcp",
|
|
"state": "running",
|
|
"status": "Up 27 hours"
|
|
}
|
|
],
|
|
"pushAttempted": false,
|
|
"mutationAttempted": false
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "registry-capability-k3s-pull-access",
|
|
"category": "registry",
|
|
"status": "pass",
|
|
"summary": "Read-only kubectl observed hwlab-dev pods with pulled registry images.",
|
|
"evidence": [
|
|
{
|
|
"id": "k3s-pull-access",
|
|
"status": "pass",
|
|
"requiredForPublish": false,
|
|
"requiredForDeploy": true,
|
|
"endpoint": "127.0.0.1:5000/hwlab",
|
|
"probeKind": "kubectl-read-only",
|
|
"summary": "Read-only kubectl observed hwlab-dev pods with pulled registry images.",
|
|
"evidence": {
|
|
"kubectlAvailable": true,
|
|
"context": {
|
|
"command": "kubectl config current-context",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "in-cluster",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"canGetPods": {
|
|
"command": "kubectl auth can-i get pods -n hwlab-dev",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "yes",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"podCount": 13,
|
|
"pulledImages": [
|
|
{
|
|
"pod": "hwlab-agent-mgr-75544c7747-5dzt9",
|
|
"container": "hwlab-agent-mgr",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-agent-mgr@sha256:c16c733306a28ae9385087653b79f5bb2f28724d917a89bb296646f6a02c5318"
|
|
},
|
|
{
|
|
"pod": "hwlab-agent-skills-849d9976f4-2nsmw",
|
|
"container": "hwlab-agent-skills",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-agent-skills@sha256:246fb7bb48597a7179aab62cb091e8213e47b71b6871ba94e6028032992e916c"
|
|
},
|
|
{
|
|
"pod": "hwlab-box-simu-55688cbcc7-pftxc",
|
|
"container": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:ae5fcc06a276918561c2d752f2221156bd2bd4db7fb93967ae76af97bfdc51bf"
|
|
},
|
|
{
|
|
"pod": "hwlab-box-simu-55688cbcc7-sq5fx",
|
|
"container": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:ae5fcc06a276918561c2d752f2221156bd2bd4db7fb93967ae76af97bfdc51bf"
|
|
},
|
|
{
|
|
"pod": "hwlab-cloud-api-f48dcdfb-9n6zh",
|
|
"container": "hwlab-cloud-api",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-api@sha256:3946efdd7360409cea6a897cb03a6f3172f14819d3132df3aab821621909513f"
|
|
},
|
|
{
|
|
"pod": "hwlab-cloud-web-cd9655b98-gxtmc",
|
|
"container": "hwlab-cloud-web",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-web@sha256:868e2a11c56cc1a27c77de3fa71a7b092f21ae98a4052104e9071bd93960abfa"
|
|
},
|
|
{
|
|
"pod": "hwlab-edge-proxy-567f978cdd-8fwc8",
|
|
"container": "hwlab-edge-proxy",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-edge-proxy@sha256:384832fc579063b9b0a940973690734bb402607720fd36f4662e4ee6fa5a57d2"
|
|
},
|
|
{
|
|
"pod": "hwlab-frpc-59f57d479c-wm5l2",
|
|
"container": "frpc",
|
|
"image": "127.0.0.1:5000/hwlab/frpc:v0.68.1",
|
|
"imageID": "127.0.0.1:5000/hwlab/frpc@sha256:ce400cda42a260964e40ab1ca68b868f72c569cdce4b243aef36ce40194d287b"
|
|
},
|
|
{
|
|
"pod": "hwlab-gateway-simu-699fd486b-j9pk7",
|
|
"container": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:00599721b910b5667b6be43c416cab4c410c6cc29b7f56ecdfb6eff71123d01c"
|
|
},
|
|
{
|
|
"pod": "hwlab-gateway-simu-699fd486b-phcgp",
|
|
"container": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:00599721b910b5667b6be43c416cab4c410c6cc29b7f56ecdfb6eff71123d01c"
|
|
},
|
|
{
|
|
"pod": "hwlab-patch-panel-757f9f44d5-7np8r",
|
|
"container": "hwlab-patch-panel",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-patch-panel@sha256:5b3aa6505492c2ed398d21cbd35a8754672114acd0fa97faa3351d4b6a6dfd5a"
|
|
},
|
|
{
|
|
"pod": "hwlab-router-5d9cbdf89b-p7r94",
|
|
"container": "hwlab-router",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-router@sha256:217b1fdb0f704c4183e9d8503644177f0c8bae674da0433985c19ef909f0e342"
|
|
},
|
|
{
|
|
"pod": "hwlab-tunnel-client-65c7858c8-wjqsh",
|
|
"container": "hwlab-tunnel-client",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-tunnel-client@sha256:9bcdd8a58132d7bc4dbfc71297f802fc0ab407a1b5c1bb1ea58e0791147a243b"
|
|
}
|
|
],
|
|
"pullFailures": [],
|
|
"pullAttempted": false,
|
|
"mutationAttempted": false
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "registry-capability-classification",
|
|
"category": "registry",
|
|
"status": "degraded",
|
|
"summary": "Registry capability classification is degraded: process HTTP, Docker daemon push path, and k3s pull path are reported separately.",
|
|
"evidence": [
|
|
{
|
|
"version": "v1",
|
|
"registryPrefix": "127.0.0.1:5000/hwlab",
|
|
"generatedAt": "2026-05-22T04:31:07.663Z",
|
|
"classification": "degraded",
|
|
"dimensions": {
|
|
"processHttpAccess": {
|
|
"id": "process-http-access",
|
|
"status": "degraded",
|
|
"requiredForPublish": false,
|
|
"requiredForDeploy": false,
|
|
"endpoint": "http://127.0.0.1:5000/v2/",
|
|
"probeKind": "runner-process-http-v2",
|
|
"summary": "Runner process cannot reach http://127.0.0.1:5000/v2/; this is process HTTP access only and does not prove Docker daemon push failure.",
|
|
"evidence": {
|
|
"probe": {
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/",
|
|
"method": "GET",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
"publishFailure": false
|
|
}
|
|
},
|
|
"dockerDaemonPushAccess": {
|
|
"id": "docker-daemon-push-access",
|
|
"status": "pass",
|
|
"requiredForPublish": true,
|
|
"requiredForDeploy": false,
|
|
"endpoint": "127.0.0.1:5000/hwlab",
|
|
"probeKind": "docker-ps-read-only",
|
|
"summary": "Docker daemon can see a local/internal registry target for publish preflight purposes; no push was attempted.",
|
|
"evidence": {
|
|
"dockerVersion": {
|
|
"command": "docker --version",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "Docker version 26.1.5+dfsg1, build a72d7cd",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"registryPrefix": "127.0.0.1:5000/hwlab",
|
|
"loopbackPort5000": true,
|
|
"registryContainerVisible": true,
|
|
"matchingContainers": [
|
|
{
|
|
"id": "00091efce380",
|
|
"image": "registry:2.8.3",
|
|
"names": "unidesk-artifact-registry",
|
|
"ports": "127.0.0.1:5000->5000/tcp",
|
|
"state": "running",
|
|
"status": "Up 27 hours"
|
|
}
|
|
],
|
|
"pushAttempted": false,
|
|
"mutationAttempted": false
|
|
}
|
|
},
|
|
"k3sPullAccess": {
|
|
"id": "k3s-pull-access",
|
|
"status": "pass",
|
|
"requiredForPublish": false,
|
|
"requiredForDeploy": true,
|
|
"endpoint": "127.0.0.1:5000/hwlab",
|
|
"probeKind": "kubectl-read-only",
|
|
"summary": "Read-only kubectl observed hwlab-dev pods with pulled registry images.",
|
|
"evidence": {
|
|
"kubectlAvailable": true,
|
|
"context": {
|
|
"command": "kubectl config current-context",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "in-cluster",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"canGetPods": {
|
|
"command": "kubectl auth can-i get pods -n hwlab-dev",
|
|
"ok": true,
|
|
"exitCode": 0,
|
|
"stdout": "yes",
|
|
"stderr": "",
|
|
"error": null
|
|
},
|
|
"podCount": 13,
|
|
"pulledImages": [
|
|
{
|
|
"pod": "hwlab-agent-mgr-75544c7747-5dzt9",
|
|
"container": "hwlab-agent-mgr",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-agent-mgr@sha256:c16c733306a28ae9385087653b79f5bb2f28724d917a89bb296646f6a02c5318"
|
|
},
|
|
{
|
|
"pod": "hwlab-agent-skills-849d9976f4-2nsmw",
|
|
"container": "hwlab-agent-skills",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-agent-skills@sha256:246fb7bb48597a7179aab62cb091e8213e47b71b6871ba94e6028032992e916c"
|
|
},
|
|
{
|
|
"pod": "hwlab-box-simu-55688cbcc7-pftxc",
|
|
"container": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:ae5fcc06a276918561c2d752f2221156bd2bd4db7fb93967ae76af97bfdc51bf"
|
|
},
|
|
{
|
|
"pod": "hwlab-box-simu-55688cbcc7-sq5fx",
|
|
"container": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:ae5fcc06a276918561c2d752f2221156bd2bd4db7fb93967ae76af97bfdc51bf"
|
|
},
|
|
{
|
|
"pod": "hwlab-cloud-api-f48dcdfb-9n6zh",
|
|
"container": "hwlab-cloud-api",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-api@sha256:3946efdd7360409cea6a897cb03a6f3172f14819d3132df3aab821621909513f"
|
|
},
|
|
{
|
|
"pod": "hwlab-cloud-web-cd9655b98-gxtmc",
|
|
"container": "hwlab-cloud-web",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-web@sha256:868e2a11c56cc1a27c77de3fa71a7b092f21ae98a4052104e9071bd93960abfa"
|
|
},
|
|
{
|
|
"pod": "hwlab-edge-proxy-567f978cdd-8fwc8",
|
|
"container": "hwlab-edge-proxy",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-edge-proxy@sha256:384832fc579063b9b0a940973690734bb402607720fd36f4662e4ee6fa5a57d2"
|
|
},
|
|
{
|
|
"pod": "hwlab-frpc-59f57d479c-wm5l2",
|
|
"container": "frpc",
|
|
"image": "127.0.0.1:5000/hwlab/frpc:v0.68.1",
|
|
"imageID": "127.0.0.1:5000/hwlab/frpc@sha256:ce400cda42a260964e40ab1ca68b868f72c569cdce4b243aef36ce40194d287b"
|
|
},
|
|
{
|
|
"pod": "hwlab-gateway-simu-699fd486b-j9pk7",
|
|
"container": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:00599721b910b5667b6be43c416cab4c410c6cc29b7f56ecdfb6eff71123d01c"
|
|
},
|
|
{
|
|
"pod": "hwlab-gateway-simu-699fd486b-phcgp",
|
|
"container": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:00599721b910b5667b6be43c416cab4c410c6cc29b7f56ecdfb6eff71123d01c"
|
|
},
|
|
{
|
|
"pod": "hwlab-patch-panel-757f9f44d5-7np8r",
|
|
"container": "hwlab-patch-panel",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-patch-panel@sha256:5b3aa6505492c2ed398d21cbd35a8754672114acd0fa97faa3351d4b6a6dfd5a"
|
|
},
|
|
{
|
|
"pod": "hwlab-router-5d9cbdf89b-p7r94",
|
|
"container": "hwlab-router",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-router@sha256:217b1fdb0f704c4183e9d8503644177f0c8bae674da0433985c19ef909f0e342"
|
|
},
|
|
{
|
|
"pod": "hwlab-tunnel-client-65c7858c8-wjqsh",
|
|
"container": "hwlab-tunnel-client",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:cb35ada",
|
|
"imageID": "127.0.0.1:5000/hwlab/hwlab-tunnel-client@sha256:9bcdd8a58132d7bc4dbfc71297f802fc0ab407a1b5c1bb1ea58e0791147a243b"
|
|
}
|
|
],
|
|
"pullFailures": [],
|
|
"pullAttempted": false,
|
|
"mutationAttempted": false
|
|
}
|
|
}
|
|
},
|
|
"interpretation": {
|
|
"processHttpAccess": "Runner process HTTP access to /v2/ is diagnostic only and must not be treated as Docker daemon push access.",
|
|
"dockerDaemonPushAccess": "Docker daemon push access is the publish-path capability. This probe is read-only and does not push.",
|
|
"k3sPullAccess": "k3s pull access is the deploy-path capability. This probe is read-only and does not create pods or read secrets."
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "cloud-api-db-env-contract",
|
|
"category": "db",
|
|
"status": "pass",
|
|
"summary": "cloud-api DEV DB manifest declares the required env names and redacted Secret reference.",
|
|
"evidence": [
|
|
{
|
|
"staticContract": {
|
|
"contractVersion": "v1",
|
|
"environment": "dev",
|
|
"ready": true,
|
|
"requiredEnv": [
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_URL",
|
|
"manifestPresent": true,
|
|
"k8sPresent": true,
|
|
"redacted": true,
|
|
"source": "k8s-secret-ref",
|
|
"secretRef": {
|
|
"secretName": "hwlab-cloud-api-dev-db",
|
|
"secretKey": "database-url",
|
|
"present": true,
|
|
"redacted": true
|
|
}
|
|
},
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
|
"manifestPresent": true,
|
|
"k8sPresent": true,
|
|
"redacted": false,
|
|
"source": "runtime-env",
|
|
"secretRef": null
|
|
}
|
|
],
|
|
"missingDeployEnv": [],
|
|
"missingK8sEnv": [],
|
|
"missingSecretRefs": [],
|
|
"secretMaterialRead": false,
|
|
"valuesRedacted": true,
|
|
"liveDbEvidence": false,
|
|
"fixtureEvidence": false
|
|
},
|
|
"healthContract": {
|
|
"status": "blocked",
|
|
"ready": false,
|
|
"configReady": false,
|
|
"connected": false,
|
|
"liveConnected": false,
|
|
"connectionChecked": false,
|
|
"connectionAttempted": false,
|
|
"connectionResult": "not_attempted_missing_env",
|
|
"requiredEnv": [
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_URL",
|
|
"present": false,
|
|
"redacted": true,
|
|
"source": "k8s-secret-ref"
|
|
},
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
|
"present": false,
|
|
"redacted": false,
|
|
"source": "runtime-env"
|
|
}
|
|
],
|
|
"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,
|
|
"envInjected": false,
|
|
"secretPresent": "not_observed_by_runtime",
|
|
"secretKeyPresent": "not_observed_by_runtime",
|
|
"redacted": true
|
|
}
|
|
],
|
|
"connection": {
|
|
"attempted": false,
|
|
"networkAttempted": false,
|
|
"result": "not_attempted_missing_env",
|
|
"classification": "missing_runtime_env",
|
|
"probeType": "tcp-connect",
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true,
|
|
"timeoutMs": null,
|
|
"durationMs": 0,
|
|
"errorCode": null
|
|
},
|
|
"blocker": "DB runtime config is missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE",
|
|
"liveDbEvidence": false,
|
|
"fixtureEvidence": false
|
|
},
|
|
"fixtureEvidence": false,
|
|
"liveDbEvidence": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "cloud-api-db-health-gate",
|
|
"category": "db",
|
|
"status": "blocked",
|
|
"summary": "cloud-api DB health gate is missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE.",
|
|
"evidence": [
|
|
{
|
|
"staticContract": {
|
|
"contractVersion": "v1",
|
|
"environment": "dev",
|
|
"ready": true,
|
|
"requiredEnv": [
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_URL",
|
|
"manifestPresent": true,
|
|
"k8sPresent": true,
|
|
"redacted": true,
|
|
"source": "k8s-secret-ref",
|
|
"secretRef": {
|
|
"secretName": "hwlab-cloud-api-dev-db",
|
|
"secretKey": "database-url",
|
|
"present": true,
|
|
"redacted": true
|
|
}
|
|
},
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
|
"manifestPresent": true,
|
|
"k8sPresent": true,
|
|
"redacted": false,
|
|
"source": "runtime-env",
|
|
"secretRef": null
|
|
}
|
|
],
|
|
"missingDeployEnv": [],
|
|
"missingK8sEnv": [],
|
|
"missingSecretRefs": [],
|
|
"secretMaterialRead": false,
|
|
"valuesRedacted": true,
|
|
"liveDbEvidence": false,
|
|
"fixtureEvidence": false
|
|
},
|
|
"healthContract": {
|
|
"status": "blocked",
|
|
"ready": false,
|
|
"configReady": false,
|
|
"connected": false,
|
|
"liveConnected": false,
|
|
"connectionChecked": false,
|
|
"connectionAttempted": false,
|
|
"connectionResult": "not_attempted_missing_env",
|
|
"requiredEnv": [
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_URL",
|
|
"present": false,
|
|
"redacted": true,
|
|
"source": "k8s-secret-ref"
|
|
},
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
|
"present": false,
|
|
"redacted": false,
|
|
"source": "runtime-env"
|
|
}
|
|
],
|
|
"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,
|
|
"envInjected": false,
|
|
"secretPresent": "not_observed_by_runtime",
|
|
"secretKeyPresent": "not_observed_by_runtime",
|
|
"redacted": true
|
|
}
|
|
],
|
|
"connection": {
|
|
"attempted": false,
|
|
"networkAttempted": false,
|
|
"result": "not_attempted_missing_env",
|
|
"classification": "missing_runtime_env",
|
|
"probeType": "tcp-connect",
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true,
|
|
"timeoutMs": null,
|
|
"durationMs": 0,
|
|
"errorCode": null
|
|
},
|
|
"blocker": "DB runtime config is missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE",
|
|
"liveDbEvidence": false,
|
|
"fixtureEvidence": false
|
|
},
|
|
"fixtureEvidence": false,
|
|
"liveDbEvidence": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "dev-artifact-publish-report",
|
|
"category": "registry",
|
|
"status": "blocked",
|
|
"summary": "DEV artifact publish report status is published with 13/13 required services published for source 73b379f4441d47a99dfd978a80fd43727410af51; source states resolved: 13 source-present, 0 intentionally-disabled.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "dev-edge-health-report",
|
|
"category": "edge",
|
|
"status": "blocked",
|
|
"summary": "Committed DEV edge health report is blocked with classification app_health_blocker.",
|
|
"evidence": [
|
|
{
|
|
"report": "reports/dev-gate/dev-edge-health.json",
|
|
"status": "blocked",
|
|
"classification": "app_health_blocker",
|
|
"publicTcp": [
|
|
{
|
|
"host": "74.48.78.17",
|
|
"port": 16667,
|
|
"status": "connected",
|
|
"durationMs": 212
|
|
},
|
|
{
|
|
"host": "74.48.78.17",
|
|
"port": 7000,
|
|
"status": "connected",
|
|
"durationMs": 1205
|
|
},
|
|
{
|
|
"host": "74.48.78.17",
|
|
"port": 7402,
|
|
"status": "connected",
|
|
"durationMs": 232
|
|
}
|
|
],
|
|
"kubernetesObservable": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "frp-master-edge-static",
|
|
"category": "edge",
|
|
"status": "pass",
|
|
"summary": "FRP and master-edge contracts describe D601-to-master DEV on public ports 16666/16667.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "runtime-substitution-boundary",
|
|
"category": "safety",
|
|
"status": "pass",
|
|
"summary": "Deploy images do not point at UniDesk/provider-gateway/microservice-proxy substitutes.",
|
|
"evidence": []
|
|
},
|
|
{
|
|
"id": "d601-k3s-read-access",
|
|
"category": "k3s",
|
|
"status": "pass",
|
|
"summary": "Read-only kubectl probes reached hwlab-dev.",
|
|
"evidence": [
|
|
{
|
|
"ok": true,
|
|
"command": "kubectl version --client=true",
|
|
"exitCode": 0,
|
|
"stdout": "Client Version: v1.36.1\nKustomize Version: v5.8.1",
|
|
"stderr": ""
|
|
},
|
|
{
|
|
"ok": true,
|
|
"command": "kubectl config current-context",
|
|
"exitCode": 0,
|
|
"stdout": "in-cluster",
|
|
"stderr": ""
|
|
},
|
|
{
|
|
"ok": true,
|
|
"command": "kubectl auth can-i get pods -n hwlab-dev",
|
|
"exitCode": 0,
|
|
"stdout": "yes",
|
|
"stderr": ""
|
|
},
|
|
{
|
|
"ok": true,
|
|
"command": "kubectl get namespace hwlab-dev -o json",
|
|
"exitCode": 0,
|
|
"stdout": "{\n \"apiVersion\": \"v1\",\n \"kind\": \"Namespace\",\n \"metadata\": {\n \"annotations\": {\n \"kubectl.kubernetes.io/last-applied-configuration\": \"{\\\"apiVersion\\\":\\\"v1\\\",\\\"kind\\\":\\\"Namespace\\\",\\\"metadata\\\":{\\\"annotations\\\":{},\\\"labels\\\":{\\\"app.kubernetes.io/part-of\\\":\\\"hwlab\\\",\\\"hwlab.pikastech.local/environment\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/profile\\\":\\\"dev\\\"},\\\"name\\\":\\\"hwlab-dev\\\"}}\\n\"\n },\n \"creationTimestamp\": \"2026-05-21T23:52:11Z\",\n \"labels\": {\n \"app.kubernetes.io/part-of\": \"hwlab\",\n \"hwlab.pikastech.local/environment\": \"dev\",\n \"hwlab.pikastech.local/profile\": \"dev\",\n \"kubernetes.io/metadata.name\": \"hwlab-dev\"\n },\n \"name\": \"hwlab-dev\",\n \"resourceVersion\": \"1081061\",\n \"uid\": \"97fbde04-c052-46f3-91ee-b15616f7690b\"\n },\n \"spec\": {\n \"finalizers\": [\n \"kubernetes\"\n ]\n },\n \"status\": {\n \"phase\": \"Active\"\n }\n}",
|
|
"stderr": ""
|
|
},
|
|
{
|
|
"ok": true,
|
|
"command": "kubectl -n hwlab-dev get deploy,svc,job,cm -o name",
|
|
"exitCode": 0,
|
|
"stdout": "deployment.apps/hwlab-agent-mgr\ndeployment.apps/hwlab-agent-skills\ndeployment.apps/hwlab-box-simu\ndeployment.apps/hwlab-cloud-api\ndeployment.apps/hwlab-cloud-web\ndeployment.apps/hwlab-edge-proxy\ndeployment.apps/hwlab-frpc\ndeployment.apps/hwlab-gateway\ndeployment.apps/hwlab-gateway-simu\ndeployment.apps/hwlab-patch-panel\ndeployment.apps/hwlab-router\ndeployment.apps/hwlab-tunnel-client\nservice/hwlab-agent-mgr\nservice/hwlab-agent-skills\nservice/hwlab-box-simu\nservice/hwlab-cli\nservice/hwlab-cloud-api\nservice/hwlab-cloud-web\nservice/hwlab-edge-proxy\nservice/hwlab-gateway\nservice/hwlab-gateway-simu\nservice/hwlab-patch-panel\nservice/hwlab-router\nservice/hwlab-tunnel-client\njob.batch/hwlab-agent-worker-template\njob.batch/hwlab-cli-template\nconfigmap/hwlab-dev-health-contract\nconfigmap/hwlab-frpc-config\nconfigmap/kube-root-ca.crt",
|
|
"stderr": ""
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "public-dev-edge-health",
|
|
"category": "edge",
|
|
"status": "pass",
|
|
"summary": "Public DEV health endpoint responded successfully.",
|
|
"evidence": [
|
|
{
|
|
"ok": true,
|
|
"url": "http://74.48.78.17:16667/health/live",
|
|
"method": "GET",
|
|
"status": 200,
|
|
"statusText": "OK",
|
|
"body": "{\"serviceId\":\"hwlab-cloud-api\",\"environment\":\"dev\",\"status\":\"degraded\",\"service\":{\"id\":\"hwlab-cloud-api\",\"role\":\"cloud-api\",\"healthPath\":\"/health\",\"livePath\":\"/health/live\"},\"commit\":{\"id\":\"cb35ada\",\"source\":\"runtime-env\"},\"image\":{\"reference\":\"127.0.0.1:5000/hwlab/hwlab-cloud-api:cb35ada\",\"tag\":\"cb35ada\",\"digest\":\"unknown\"},\"endpoint\":\"http://74.48.78.17:16667\",\"observedAt\":\"2026-05-22T04:31:08.245Z\",\"db\":{\"contractVersion\":\"v1\",\"environment\":\"dev\",\"connected\":false,\"connectionChecked\":false,\"c"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "catalog-image-manifest-read",
|
|
"category": "artifact-catalog",
|
|
"status": "degraded",
|
|
"summary": "One or more required catalog images could not be verified through manifest HEAD probes; this is runner-process catalog evidence, not Docker daemon push access.",
|
|
"evidence": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-cloud-api/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-cloud-web/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-agent-mgr/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-agent-worker/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-gateway/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-gateway-simu/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-box-simu/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-patch-panel/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-router/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-tunnel-client/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-edge-proxy/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-cli/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-agent-skills/manifests/73b379f",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"blockers": [
|
|
{
|
|
"status": "open",
|
|
"type": "contract_blocker",
|
|
"scope": "artifact-source-commit",
|
|
"summary": "source commit origin/main a1c3cb5 does not match deploy/catalog artifact identity: deploy=73b379f, catalog=73b379f, services=73b379f.",
|
|
"nextTask": "Refresh without fake digests using `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked`, or after a successful publish run `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json`."
|
|
},
|
|
{
|
|
"status": "open",
|
|
"type": "runtime_blocker",
|
|
"scope": "cloud-api-db-health-gate",
|
|
"summary": "cloud-api DB runtime env is not ready; missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE.",
|
|
"nextTask": "Configure DEV hwlab-cloud-api with Secret hwlab-cloud-api-dev-db/database-url and HWLAB_CLOUD_DB_SSL_MODE=require, then rerun health/preflight without printing the secret value."
|
|
},
|
|
{
|
|
"status": "open",
|
|
"type": "runtime_blocker",
|
|
"scope": "dev-artifact-publish",
|
|
"summary": "reports/dev-gate/dev-artifacts.json does not prove all required HWLAB service artifacts for origin/main a1c3cb5; current status is published with 13/13 required services published and source states resolved: 13 source-present, 0 intentionally-disabled.",
|
|
"nextTask": "Complete DEV artifact publishing for every enabled required HWLAB service at the current origin/main commit and record immutable registry digests; keep disabled services marked not_published with reasons."
|
|
},
|
|
{
|
|
"status": "open",
|
|
"type": "network_blocker",
|
|
"scope": "cloud-api-db",
|
|
"summary": "cloud-api DB env is injected, but runtime health has not attempted a live DB connection",
|
|
"nextTask": "Deploy cloud-api DB runtime readiness probe and/or repair DEV DB connectivity, then rerun the read-only health smoke without reading or printing the DB secret value."
|
|
}
|
|
],
|
|
"notes": "No PROD action, secret read, UniDesk runtime substitution, heavy e2e, browser e2e, runtime restart, or force push was performed."
|
|
}
|