1574 lines
65 KiB
JSON
1574 lines
65 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#35",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#43",
|
|
"pikasTech/HWLAB#48",
|
|
"pikasTech/HWLAB#49",
|
|
"pikasTech/HWLAB#57",
|
|
"pikasTech/HWLAB#66"
|
|
],
|
|
"target": {
|
|
"ref": "origin/main",
|
|
"commitId": "8e89409dda5d0b028de7f7b7b0e006a60bdd6d44",
|
|
"shortCommitId": "8e89409"
|
|
},
|
|
"generatedAt": "2026-05-22T07:12:46.951Z",
|
|
"mode": "read-only",
|
|
"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 read-only DEV preflight report; source, local, and dry-run checks are not DEV-LIVE acceptance."
|
|
},
|
|
"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": "8e89409dda5d0b028de7f7b7b0e006a60bdd6d44",
|
|
"shortCommitId": "8e89409"
|
|
},
|
|
"artifactSource": {
|
|
"source": "artifact-publish-report",
|
|
"ref": "7e29522b65c8a316b7c3fde12bebcb5f6baf8c33",
|
|
"commitId": "7e29522b65c8a316b7c3fde12bebcb5f6baf8c33",
|
|
"shortCommitId": "7e29522"
|
|
},
|
|
"targetCoverage": {
|
|
"sourceKind": "artifact-publish-report",
|
|
"sourceRef": "7e29522b65c8a316b7c3fde12bebcb5f6baf8c33",
|
|
"sourceCommitId": "7e29522b65c8a316b7c3fde12bebcb5f6baf8c33",
|
|
"sourceShortCommitId": "7e29522",
|
|
"targetRef": "origin/main",
|
|
"targetCommitId": "8e89409dda5d0b028de7f7b7b0e006a60bdd6d44",
|
|
"targetShortCommitId": "8e89409",
|
|
"mode": "artifact-input-drift",
|
|
"covered": false,
|
|
"artifactBuildInputChanged": true,
|
|
"changedPathCount": 48,
|
|
"changedArtifactInputPaths": [
|
|
"internal/dev-report-lifecycle.mjs",
|
|
"internal/mvp-gate/summary.mjs",
|
|
"internal/protocol/index.mjs",
|
|
"package.json",
|
|
"scripts/dev-artifact-publish.mjs",
|
|
"web/hwlab-cloud-web/gate-summary.mjs"
|
|
],
|
|
"changedNonArtifactPathCount": 42,
|
|
"reason": "target changes since the artifact source touch artifact build inputs"
|
|
},
|
|
"deployManifest": {
|
|
"path": "deploy/deploy.json",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false
|
|
},
|
|
"artifactCatalog": {
|
|
"path": "deploy/artifact-catalog.dev.json",
|
|
"commitId": "7e29522",
|
|
"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": true,
|
|
"matchesTarget": false
|
|
},
|
|
"services": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:090b6f919be3b3c7594ca4073b193351689fc525f478b64d54d393725cb01ecf",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:bc6e836b2bb796b30562ed3ae93d8534146a3b74a310906481c8641646d1b8f0",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:4d9b8944bc52012bb0a4a3a345f8939381d2804032e544d0c98f49fac0e46bfd",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:2582176e2c35a2bfbce4edfd922749397d45f6f1f8c04d0394c501f7d87323ee",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:290341fd6e6f036aa953943072ad58e0d0cfcc0e13950e6090f941b3310755a6",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:02627f880c7ddf2102e2255a43097d1f604cfb7a22215736e328287e27fc5f03",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:e02c270c71f83a2f4624722bb84616bea8374ef43439f27bdce310e4baa8dcca",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:f730323f83c62797f382932582a05df921045c86383dad7951f3d639b32456a9",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:7c40c573078a9c325402bd47b2eb78a46c0c80564a228cf7c9fcf0cfba5bc6d2",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:b141dc88557b8f6391aa082fdb37c6f0db5bc3a76c97bb39ba00354a9208abd8",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:792505139793c3f3da7769f9dc9d1cb3203ff92797305b62e8f12207c69a9831",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:43d1c175091bfb462eddd7dd22a780d6485d86bdb052c36b78201606f48fadc1",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:c75510038dc33196dc254472e78101d545c0d777a7b33b531f02b39faf2588b5",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
}
|
|
],
|
|
"serviceCommitIds": [
|
|
"7e29522"
|
|
],
|
|
"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-22T07:12:45.056Z",
|
|
"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 30 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 8e89409 is not covered by artifact source 7e29522: target changes since the artifact source touch artifact build inputs.",
|
|
"evidence": [
|
|
{
|
|
"source": {
|
|
"ref": "origin/main",
|
|
"commitId": "8e89409dda5d0b028de7f7b7b0e006a60bdd6d44",
|
|
"shortCommitId": "8e89409"
|
|
},
|
|
"artifactSource": {
|
|
"source": "artifact-publish-report",
|
|
"ref": "7e29522b65c8a316b7c3fde12bebcb5f6baf8c33",
|
|
"commitId": "7e29522b65c8a316b7c3fde12bebcb5f6baf8c33",
|
|
"shortCommitId": "7e29522"
|
|
},
|
|
"targetCoverage": {
|
|
"sourceKind": "artifact-publish-report",
|
|
"sourceRef": "7e29522b65c8a316b7c3fde12bebcb5f6baf8c33",
|
|
"sourceCommitId": "7e29522b65c8a316b7c3fde12bebcb5f6baf8c33",
|
|
"sourceShortCommitId": "7e29522",
|
|
"targetRef": "origin/main",
|
|
"targetCommitId": "8e89409dda5d0b028de7f7b7b0e006a60bdd6d44",
|
|
"targetShortCommitId": "8e89409",
|
|
"mode": "artifact-input-drift",
|
|
"covered": false,
|
|
"artifactBuildInputChanged": true,
|
|
"changedPathCount": 48,
|
|
"changedArtifactInputPaths": [
|
|
"internal/dev-report-lifecycle.mjs",
|
|
"internal/mvp-gate/summary.mjs",
|
|
"internal/protocol/index.mjs",
|
|
"package.json",
|
|
"scripts/dev-artifact-publish.mjs",
|
|
"web/hwlab-cloud-web/gate-summary.mjs"
|
|
],
|
|
"changedNonArtifactPathCount": 42,
|
|
"reason": "target changes since the artifact source touch artifact build inputs"
|
|
},
|
|
"deployManifest": {
|
|
"path": "deploy/deploy.json",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false
|
|
},
|
|
"artifactCatalog": {
|
|
"path": "deploy/artifact-catalog.dev.json",
|
|
"commitId": "7e29522",
|
|
"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": true,
|
|
"matchesTarget": false
|
|
},
|
|
"services": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:090b6f919be3b3c7594ca4073b193351689fc525f478b64d54d393725cb01ecf",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:bc6e836b2bb796b30562ed3ae93d8534146a3b74a310906481c8641646d1b8f0",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:4d9b8944bc52012bb0a4a3a345f8939381d2804032e544d0c98f49fac0e46bfd",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:2582176e2c35a2bfbce4edfd922749397d45f6f1f8c04d0394c501f7d87323ee",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:290341fd6e6f036aa953943072ad58e0d0cfcc0e13950e6090f941b3310755a6",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:02627f880c7ddf2102e2255a43097d1f604cfb7a22215736e328287e27fc5f03",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:e02c270c71f83a2f4624722bb84616bea8374ef43439f27bdce310e4baa8dcca",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:f730323f83c62797f382932582a05df921045c86383dad7951f3d639b32456a9",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:7c40c573078a9c325402bd47b2eb78a46c0c80564a228cf7c9fcf0cfba5bc6d2",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:b141dc88557b8f6391aa082fdb37c6f0db5bc3a76c97bb39ba00354a9208abd8",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:792505139793c3f3da7769f9dc9d1cb3203ff92797305b62e8f12207c69a9831",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:43d1c175091bfb462eddd7dd22a780d6485d86bdb052c36b78201606f48fadc1",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"commitId": "7e29522",
|
|
"matchesSource": true,
|
|
"matchesTarget": false,
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:7e29522",
|
|
"imageTag": "7e29522",
|
|
"digest": "sha256:c75510038dc33196dc254472e78101d545c0d777a7b33b531f02b39faf2588b5",
|
|
"publishState": "published",
|
|
"artifactRequired": true,
|
|
"notPublishedReason": null
|
|
}
|
|
],
|
|
"serviceCommitIds": [
|
|
"7e29522"
|
|
],
|
|
"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": "7e29522",
|
|
"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": true,
|
|
"matchesTarget": 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 30 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-22T07:12:45.056Z",
|
|
"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 30 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 7e29522b65c8a316b7c3fde12bebcb5f6baf8c33; 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": 228
|
|
},
|
|
{
|
|
"host": "74.48.78.17",
|
|
"port": 7000,
|
|
"status": "connected",
|
|
"durationMs": 212
|
|
},
|
|
{
|
|
"host": "74.48.78.17",
|
|
"port": 7402,
|
|
"status": "connected",
|
|
"durationMs": 216
|
|
}
|
|
],
|
|
"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-22T07:12:46.583Z\",\"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-cloud-api/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-cloud-web/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-agent-mgr/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-agent-worker/manifests/7e29522",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-gateway/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-gateway-simu/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-box-simu/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-patch-panel/manifests/7e29522",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-router/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-tunnel-client/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-edge-proxy/manifests/7e29522",
|
|
"method": "HEAD",
|
|
"error": "fetch failed ECONNREFUSED 127.0.0.1 5000"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-cli/manifests/7e29522",
|
|
"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:7e29522",
|
|
"ok": false,
|
|
"url": "http://127.0.0.1:5000/v2/hwlab/hwlab-agent-skills/manifests/7e29522",
|
|
"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 8e89409 is not covered by artifact source 7e29522; target changes since the artifact source touch artifact build inputs.",
|
|
"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 8e89409; 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 artifact source commit, or prove the target commit has no artifact build input changes; 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."
|
|
}
|