From cb35ada6860653b27269b0a57991184118cbf4b1 Mon Sep 17 00:00:00 2001 From: lyon Date: Fri, 22 May 2026 11:39:20 +0800 Subject: [PATCH] chore: publish dev artifacts for 73b379f --- deploy/artifact-catalog.dev.json | 170 +++---- deploy/deploy.json | 47 +- deploy/k8s/base/services.yaml | 2 +- deploy/k8s/base/workloads.yaml | 46 +- reports/dev-gate/dev-artifacts.json | 496 ++++++++++----------- reports/dev-gate/dev-deploy-report.json | 568 +++++++++++++++--------- reports/dev-gate/dev-edge-health.json | 555 ++++++++++++++++++++++- 7 files changed, 1261 insertions(+), 623 deletions(-) diff --git a/deploy/artifact-catalog.dev.json b/deploy/artifact-catalog.dev.json index bcbb440b..fe8f3396 100644 --- a/deploy/artifact-catalog.dev.json +++ b/deploy/artifact-catalog.dev.json @@ -4,14 +4,14 @@ "environment": "dev", "profile": "dev", "namespace": "hwlab-dev", - "endpoint": "http://74.48.78.17:6667", - "commitId": "35ecb5e", - "artifactState": "contract-skeleton", + "endpoint": "http://74.48.78.17:16667", + "commitId": "73b379f", + "artifactState": "published", "publish": { - "ciPublished": false, - "registryVerified": false, - "provenance": "not_available_until_publish", - "note": "Artifact identity was refreshed to this source commit, but no publish report proved registry digests." + "ciPublished": true, + "registryVerified": true, + "provenance": "reports/dev-gate/dev-artifacts.json", + "note": "Digest fields were copied from a successful DEV artifact publish report for this source commit." }, "healthContract": { "method": "GET", @@ -66,11 +66,11 @@ "services": [ { "serviceId": "hwlab-cloud-api", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", + "imageTag": "73b379f", + "digest": "sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -78,15 +78,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-cloud-web", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f", + "imageTag": "73b379f", + "digest": "sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -94,15 +94,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-agent-mgr", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f", + "imageTag": "73b379f", + "digest": "sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -110,15 +110,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-agent-worker", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f", + "imageTag": "73b379f", + "digest": "sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -126,15 +126,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-gateway", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f", + "imageTag": "73b379f", + "digest": "sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -142,15 +142,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-gateway-simu", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", + "imageTag": "73b379f", + "digest": "sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -158,15 +158,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-box-simu", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", + "imageTag": "73b379f", + "digest": "sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -174,15 +174,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-patch-panel", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f", + "imageTag": "73b379f", + "digest": "sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -190,15 +190,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-router", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-router:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f", + "imageTag": "73b379f", + "digest": "sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -206,15 +206,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-tunnel-client", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", + "imageTag": "73b379f", + "digest": "sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -222,15 +222,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-edge-proxy", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", + "imageTag": "73b379f", + "digest": "sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -238,15 +238,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-cli", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-cli:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f", + "imageTag": "73b379f", + "digest": "sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -254,15 +254,15 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null }, { "serviceId": "hwlab-agent-skills", - "commitId": "35ecb5e", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "publishState": "skeleton-only", + "commitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f", + "imageTag": "73b379f", + "digest": "sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573", + "publishState": "published", "profile": "dev", "namespace": "hwlab-dev", "healthPath": "/health/live", @@ -270,7 +270,7 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "publish_not_run" + "notPublishedReason": null } ], "serviceInventory": { diff --git a/deploy/deploy.json b/deploy/deploy.json index deb434cc..8e5646af 100644 --- a/deploy/deploy.json +++ b/deploy/deploy.json @@ -1,15 +1,15 @@ { "manifestVersion": "v1", "environment": "dev", - "commitId": "35ecb5e", + "commitId": "73b379f", "namespace": "hwlab-dev", - "endpoint": "http://74.48.78.17:6667", + "endpoint": "http://74.48.78.17:16667", "profiles": { "dev": { "name": "dev", "enabled": true, "namespace": "hwlab-dev", - "endpoint": "http://74.48.78.17:6667", + "endpoint": "http://74.48.78.17:16667", "notes": "DEV-only k3s deployment skeleton. D601 reaches the master edge through frp reverse tunnel." }, "prod": { @@ -22,17 +22,17 @@ "services": [ { "serviceId": "hwlab-cloud-api", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "env": { "HWLAB_ENVIRONMENT": "dev", - "HWLAB_PUBLIC_ENDPOINT": "http://74.48.78.17:6667", - "HWLAB_COMMIT_ID": "35ecb5e", - "HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-api:35ecb5e", - "HWLAB_IMAGE_TAG": "35ecb5e", + "HWLAB_PUBLIC_ENDPOINT": "http://74.48.78.17:16667", + "HWLAB_COMMIT_ID": "73b379f", + "HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", + "HWLAB_IMAGE_TAG": "73b379f", "HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN": "unidesk-backend,provider-gateway,microservice-proxy", "HWLAB_CLOUD_DB_URL": "secretRef:hwlab-cloud-api-dev-db/database-url", "HWLAB_CLOUD_DB_SSL_MODE": "require", @@ -41,7 +41,7 @@ }, { "serviceId": "hwlab-cloud-web", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -53,7 +53,7 @@ }, { "serviceId": "hwlab-agent-mgr", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -65,7 +65,7 @@ }, { "serviceId": "hwlab-agent-worker", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -77,7 +77,7 @@ }, { "serviceId": "hwlab-gateway", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -89,7 +89,7 @@ }, { "serviceId": "hwlab-gateway-simu", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -101,7 +101,7 @@ }, { "serviceId": "hwlab-box-simu", - "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -113,7 +113,7 @@ }, { "serviceId": "hwlab-patch-panel", - "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -125,7 +125,7 @@ }, { "serviceId": "hwlab-router", - "image": "127.0.0.1:5000/hwlab/hwlab-router:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -137,7 +137,7 @@ }, { "serviceId": "hwlab-tunnel-client", - "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -145,12 +145,13 @@ "env": { "HWLAB_TUNNEL_MODE": "frp-client", "HWLAB_FRP_SERVER_ADDR": "74.48.78.17", - "HWLAB_FRP_PUBLIC_PORT": "6667" + "HWLAB_FRP_PUBLIC_PORT": "16667", + "HWLAB_FRP_WEB_PUBLIC_PORT": "16666" } }, { "serviceId": "hwlab-edge-proxy", - "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -162,24 +163,24 @@ }, { "serviceId": "hwlab-cli", - "image": "127.0.0.1:5000/hwlab/hwlab-cli:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 0, "env": { - "HWLAB_CLI_ENDPOINT": "http://74.48.78.17:6667" + "HWLAB_CLI_ENDPOINT": "http://74.48.78.17:16667" } }, { "serviceId": "hwlab-agent-skills", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "env": { - "HWLAB_SKILLS_COMMIT_ID": "35ecb5e" + "HWLAB_SKILLS_COMMIT_ID": "73b379f" } } ], diff --git a/deploy/k8s/base/services.yaml b/deploy/k8s/base/services.yaml index c937fce1..52231bfe 100644 --- a/deploy/k8s/base/services.yaml +++ b/deploy/k8s/base/services.yaml @@ -123,7 +123,7 @@ "ports": [ { "name": "http", - "port": 7502, + "port": 7430, "targetPort": "http" } ] diff --git a/deploy/k8s/base/workloads.yaml b/deploy/k8s/base/workloads.yaml index fe668bc3..2274c5a9 100644 --- a/deploy/k8s/base/workloads.yaml +++ b/deploy/k8s/base/workloads.yaml @@ -31,7 +31,7 @@ "containers": [ { "name": "hwlab-cloud-api", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", "ports": [ { "name": "http", @@ -45,19 +45,19 @@ }, { "name": "HWLAB_PUBLIC_ENDPOINT", - "value": "http://74.48.78.17:6667" + "value": "http://74.48.78.17:16667" }, { "name": "HWLAB_COMMIT_ID", - "value": "35ecb5e" + "value": "73b379f" }, { "name": "HWLAB_IMAGE", - "value": "127.0.0.1:5000/hwlab/hwlab-cloud-api:35ecb5e" + "value": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f" }, { "name": "HWLAB_IMAGE_TAG", - "value": "35ecb5e" + "value": "73b379f" }, { "name": "HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN", @@ -129,7 +129,7 @@ "containers": [ { "name": "hwlab-cloud-web", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f", "ports": [ { "name": "http", @@ -189,7 +189,7 @@ "containers": [ { "name": "hwlab-agent-mgr", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f", "ports": [ { "name": "http", @@ -245,7 +245,7 @@ "containers": [ { "name": "hwlab-agent-worker", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f", "env": [ { "name": "HWLAB_AGENT_SESSION_MODE", @@ -288,7 +288,7 @@ "containers": [ { "name": "hwlab-gateway", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f", "ports": [ { "name": "http", @@ -348,7 +348,7 @@ "containers": [ { "name": "hwlab-gateway-simu", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", "ports": [ { "name": "http", @@ -408,7 +408,7 @@ "containers": [ { "name": "hwlab-box-simu", - "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", "ports": [ { "name": "http", @@ -468,7 +468,7 @@ "containers": [ { "name": "hwlab-patch-panel", - "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f", "ports": [ { "name": "http", @@ -522,7 +522,7 @@ "containers": [ { "name": "hwlab-router", - "image": "127.0.0.1:5000/hwlab/hwlab-router:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f", "ports": [ { "name": "http", @@ -582,7 +582,7 @@ "containers": [ { "name": "hwlab-tunnel-client", - "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", "ports": [ { "name": "http", @@ -600,7 +600,11 @@ }, { "name": "HWLAB_FRP_PUBLIC_PORT", - "value": "6667" + "value": "16667" + }, + { + "name": "HWLAB_FRP_WEB_PUBLIC_PORT", + "value": "16666" } ], "readinessProbe": { @@ -650,7 +654,7 @@ "containers": [ { "name": "hwlab-edge-proxy", - "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", "ports": [ { "name": "http", @@ -711,11 +715,11 @@ "containers": [ { "name": "hwlab-cli", - "image": "127.0.0.1:5000/hwlab/hwlab-cli:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f", "env": [ { "name": "HWLAB_CLI_ENDPOINT", - "value": "http://74.48.78.17:6667" + "value": "http://74.48.78.17:16667" } ] } @@ -753,17 +757,17 @@ "containers": [ { "name": "hwlab-agent-skills", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:35ecb5e", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f", "ports": [ { "name": "http", - "containerPort": 7502 + "containerPort": 7430 } ], "env": [ { "name": "HWLAB_SKILLS_COMMIT_ID", - "value": "35ecb5e" + "value": "73b379f" } ], "readinessProbe": { diff --git a/reports/dev-gate/dev-artifacts.json b/reports/dev-gate/dev-artifacts.json index c0035f99..019a2c3b 100644 --- a/reports/dev-gate/dev-artifacts.json +++ b/reports/dev-gate/dev-artifacts.json @@ -4,12 +4,12 @@ "reportVersion": "v1", "issue": "pikasTech/HWLAB#35", "taskId": "dev-artifact-publish", - "commitId": "35ecb5e", + "commitId": "73b379f", "acceptanceLevel": "dev_artifact_publish", "devOnly": true, "prodDisabled": true, "sourceContract": { - "status": "blocked", + "status": "pass", "documents": [ "docs/dev-acceptance-matrix.md", "docs/m0-contract-audit.md", @@ -50,7 +50,7 @@ "summary": "DEV deploy dry-run is not implied by artifact publication." }, "devPreconditions": { - "status": "blocked", + "status": "pass", "requirements": [ "Registry prefix is localhost or private/internal only.", "DEV builder base image preflight returns ready before build or publish.", @@ -58,32 +58,39 @@ "PROD profile remains disabled.", "No secret or token material is required by this workflow." ], - "summary": "Fatal preconditions blocked a full DEV artifact publish." + "summary": "Fatal DEV-only artifact preconditions passed." }, - "blockers": [ - { - "type": "environment_blocker", - "scope": "base-image", - "status": "open", - "summary": "HWLAB_DEV_BASE_IMAGE is not set and no approved local DEV builder base image was found in the Docker image cache; expected node:20-bookworm-slim or 127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim." - } - ], + "blockers": [], "artifactPublish": { "issue": "pikasTech/HWLAB#35", - "status": "blocked", - "mode": "preflight", + "status": "published", + "mode": "publish", "repo": "pikasTech/HWLAB", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryPrefix": "127.0.0.1:5000/hwlab", - "baseImage": null, + "baseImage": "node:20-bookworm-slim", "baseImagePreflight": { - "status": "blocked", - "imageSource": "none", + "status": "ready", + "imageSource": "local-docker-node:20-*", "requestedImage": null, - "localTag": null, - "imageId": null, - "repoDigests": [], - "candidates": [], + "localTag": "node:20-bookworm-slim", + "imageId": "sha256:9da6b4e352d0d5c94963eba1832408f5b7b08839cd8be9b6610c05de5118c704", + "repoDigests": [ + "node@sha256:2cf067cfed83d5ea958367df9f966191a942351a2df77d6f0193e162b5febfc0" + ], + "candidates": [ + { + "source": "local-docker-node:20-*", + "approval": { + "approved": true, + "reason": "local Node 20 builder base image" + }, + "localTag": "node:20-bookworm-slim", + "imageId": "9da6b4e352d0", + "size": "200MB", + "createdSince": "4 weeks ago" + } + ], "rejectedCandidates": [ { "source": "local-docker-node", @@ -92,15 +99,11 @@ "reason": "local Node image is not Node 20 and is not approved as the HWLAB DEV builder base image" } ], - "publishUsable": false, - "blockers": [ - "HWLAB_DEV_BASE_IMAGE is not set and no approved local DEV builder base image was found in the Docker image cache; expected node:20-bookworm-slim or 127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim." - ], + "publishUsable": true, + "blockers": [], "nextSteps": [ - "Preload node:20-bookworm-slim into the D601 Docker cache, or tag it as 127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim.", - "Set HWLAB_DEV_BASE_IMAGE=node:20-bookworm-slim or HWLAB_DEV_BASE_IMAGE=127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim when invoking artifact publish.", - "Rerun this preflight and require status=ready before #35 artifact publish.", - "Do not use UniDesk runtime, Code Queue runner, backend-core, provider-gateway, or microservice-proxy images as substitutes." + "Use the reported localTag as the DEV builder base image for artifact publish.", + "Keep publish DEV-only and record the produced HWLAB service image tags and digests separately." ], "recommendation": { "source": "Preloaded D601 local Docker cache or D601-local registry tag.", @@ -110,8 +113,8 @@ "recommendedEnvValue": "node:20-bookworm-slim" }, "provision": { - "required": true, - "exactBlocker": "HWLAB_DEV_BASE_IMAGE is not set and no approved local DEV builder base image was found in the Docker image cache; expected node:20-bookworm-slim or 127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim.", + "required": false, + "exactBlocker": null, "expectedImageTag": "node:20-bookworm-slim", "recommendedEnv": { "name": "HWLAB_DEV_BASE_IMAGE", @@ -119,7 +122,7 @@ "assignment": "HWLAB_DEV_BASE_IMAGE=node:20-bookworm-slim" }, "recommendedHwlabImageTag": "127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim", - "nextHumanCommand": "docker pull node:20-bookworm-slim", + "nextHumanCommand": null, "commands": { "d601OnlinePreload": [ "docker pull node:20-bookworm-slim", @@ -143,35 +146,11 @@ ] } }, - "blockedReport": { - "exactBlocker": "HWLAB_DEV_BASE_IMAGE is not set and no approved local DEV builder base image was found in the Docker image cache; expected node:20-bookworm-slim or 127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim.", - "expectedImageTag": "node:20-bookworm-slim", - "recommendedEnv": { - "name": "HWLAB_DEV_BASE_IMAGE", - "value": "node:20-bookworm-slim", - "assignment": "HWLAB_DEV_BASE_IMAGE=node:20-bookworm-slim" - }, - "recommendedHwlabImageTag": "127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim", - "nextHumanCommand": "docker pull node:20-bookworm-slim", - "preloadCommands": [ - "docker pull node:20-bookworm-slim", - "HWLAB_DEV_BASE_IMAGE=node:20-bookworm-slim node scripts/preflight-dev-base-image.mjs" - ], - "offlinePreloadCommands": { - "sourceExport": [ - "docker pull node:20-bookworm-slim", - "docker save node:20-bookworm-slim -o hwlab-node20-bookworm-slim.tar" - ], - "d601Import": [ - "docker load -i hwlab-node20-bookworm-slim.tar", - "HWLAB_DEV_BASE_IMAGE=node:20-bookworm-slim node scripts/preflight-dev-base-image.mjs" - ] - } - }, + "blockedReport": null, "containerEngine": { "command": "docker", "available": true, - "version": "Docker version 26.1.5+dfsg1, build a72d7cd", + "version": "Docker version 29.4.2, build 055a478", "errorCode": null, "stderr": "" } @@ -346,9 +325,9 @@ }, "publishPlan": { "version": "v2", - "mode": "preflight", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", - "imageTag": "35ecb5e", + "mode": "publish", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", + "imageTag": "73b379f", "registryTarget": "127.0.0.1:5000/hwlab", "digestPlaceholder": "not_published", "services": [ @@ -357,212 +336,212 @@ "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-cloud-api", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", + "imageTag": "73b379f", + "digest": "sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-cloud-api@sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-cloud-web", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-cloud-web", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f", + "imageTag": "73b379f", + "digest": "sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-cloud-web@sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-agent-mgr", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-agent-mgr", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f", + "imageTag": "73b379f", + "digest": "sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-mgr@sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-agent-worker", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-agent-worker", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f", + "imageTag": "73b379f", + "digest": "sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-worker@sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-gateway", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-gateway", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f", + "imageTag": "73b379f", + "digest": "sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-gateway@sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-gateway-simu", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-gateway-simu", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", + "imageTag": "73b379f", + "digest": "sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-box-simu", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-box-simu", - "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", + "imageTag": "73b379f", + "digest": "sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-patch-panel", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-patch-panel", - "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f", + "imageTag": "73b379f", + "digest": "sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-patch-panel@sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-router", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-router", - "image": "127.0.0.1:5000/hwlab/hwlab-router:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f", + "imageTag": "73b379f", + "digest": "sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-router@sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-tunnel-client", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-tunnel-client", - "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", + "imageTag": "73b379f", + "digest": "sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-tunnel-client@sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-edge-proxy", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-edge-proxy", - "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", + "imageTag": "73b379f", + "digest": "sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-edge-proxy@sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-cli", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-cli", - "image": "127.0.0.1:5000/hwlab/hwlab-cli:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f", + "imageTag": "73b379f", + "digest": "sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-cli@sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null }, { "serviceId": "hwlab-agent-skills", "enabled": true, "required": true, "artifactScope": "required", - "sourceCommitId": "35ecb5e038b0b06962151f3f1751b72e1d9f6c73", + "sourceCommitId": "73b379f4441d47a99dfd978a80fd43727410af51", "registryTarget": "127.0.0.1:5000/hwlab/hwlab-agent-skills", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, - "digestStatus": "placeholder", - "status": "preflight_only", - "notPublishedReason": "blocked_by_preflight" + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f", + "imageTag": "73b379f", + "digest": "sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-skills@sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573", + "digestStatus": "real", + "status": "published", + "notPublishedReason": null } ] }, "serviceCount": 13, "requiredServiceCount": 13, "disabledServiceCount": 0, - "builtCount": 0, - "publishedCount": 0, - "generatedAt": "2026-05-21T18:29:58.488Z", + "builtCount": 13, + "publishedCount": 13, + "generatedAt": "2026-05-22T03:29:10.781Z", "services": [ { "serviceId": "hwlab-cloud-api", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", + "imageTag": "73b379f", + "digest": "sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-cloud-api@sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -570,15 +549,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:9b995a705759af984ee5e37e50059f5fb26ac1c42289176b0e7653537092ff00" }, { "serviceId": "hwlab-cloud-web", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f", + "imageTag": "73b379f", + "digest": "sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-cloud-web@sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2", "runtimeKind": "cloud-web", "implementationState": "static-web-wrapper", "sourceState": "source-present", @@ -586,15 +566,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:97738e33c14c788aadb311d898379b2138788b7d04ea65e999673d4918752c49" }, { "serviceId": "hwlab-agent-mgr", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f", + "imageTag": "73b379f", + "digest": "sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-mgr@sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -602,15 +583,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:1d3a0aef7051ed6e9e4fc7f809957c848d83049c8d0618055b15e98e62b71407" }, { "serviceId": "hwlab-agent-worker", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f", + "imageTag": "73b379f", + "digest": "sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-worker@sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -618,15 +600,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:9f0a252a6b72c748f010938acf48462980e5389086da86c36926bc3917f4919b" }, { "serviceId": "hwlab-gateway", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f", + "imageTag": "73b379f", + "digest": "sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-gateway@sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -634,15 +617,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:c17b397ea2346be597653204b7ac4196d8fecf66123c9b1bcee663937194557a" }, { "serviceId": "hwlab-gateway-simu", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", + "imageTag": "73b379f", + "digest": "sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -650,15 +634,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:8d019a3644ba73c7f9e7824e198eea86cf5700a29c788ea18960fb06e2154865" }, { "serviceId": "hwlab-box-simu", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", + "imageTag": "73b379f", + "digest": "sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -666,15 +651,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:c81ceffe0d5b3582aee12a447af084d4654e59c5a7c5b11dd9415c57149a8559" }, { "serviceId": "hwlab-patch-panel", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f", + "imageTag": "73b379f", + "digest": "sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-patch-panel@sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -682,15 +668,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:29b8eec61939952daf9224c57091e7c23c9b3dc3966d2ce8a513d47413f22f2b" }, { "serviceId": "hwlab-router", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-router:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f", + "imageTag": "73b379f", + "digest": "sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-router@sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -698,15 +685,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:dfede09c3df5c2c5cf8e6d8b4a2bba1045cbb3ac90794838380d7691bfcf1e4e" }, { "serviceId": "hwlab-tunnel-client", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", + "imageTag": "73b379f", + "digest": "sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-tunnel-client@sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -714,15 +702,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:04e810e763387bfbc6765053d1e393358bf76378aadbc12357605b3cc9d3f1bb" }, { "serviceId": "hwlab-edge-proxy", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", + "imageTag": "73b379f", + "digest": "sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-edge-proxy@sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -730,15 +719,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:25df0e76e5a9b2b9e1e3bc2c84866dc0b97de8239449eadac2014f3b4501269e" }, { "serviceId": "hwlab-cli", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-cli:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f", + "imageTag": "73b379f", + "digest": "sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-cli@sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5", "runtimeKind": "cli", "implementationState": "repo-entrypoint", "sourceState": "source-present", @@ -746,15 +736,16 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:3a5e3e3e72fd9d922a4cb61f3780a0aee02bef64f6959c5c713656bd86b70a05" }, { "serviceId": "hwlab-agent-skills", - "status": "preflight_only", - "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:35ecb5e", - "imageTag": "35ecb5e", - "digest": "not_published", - "repositoryDigest": null, + "status": "published", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f", + "imageTag": "73b379f", + "digest": "sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573", + "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-skills@sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573", "runtimeKind": "skills-bundle", "implementationState": "repo-bundle", "sourceState": "source-present", @@ -762,18 +753,11 @@ "publishEnabled": true, "artifactRequired": true, "artifactScope": "required", - "notPublishedReason": "blocked_by_preflight" + "notPublishedReason": null, + "localImageId": "sha256:060596f374ddf14c756fffa3565f65a2178a29e805441fa8c00f92c1868e6be3" } ], - "blockers": [ - { - "type": "environment_blocker", - "scope": "base-image", - "status": "open", - "summary": "HWLAB_DEV_BASE_IMAGE is not set and no approved local DEV builder base image was found in the Docker image cache; expected node:20-bookworm-slim or 127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim.", - "next": "Preload node:20-bookworm-slim into the D601 Docker cache, or tag it as 127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim. Set HWLAB_DEV_BASE_IMAGE=node:20-bookworm-slim or HWLAB_DEV_BASE_IMAGE=127.0.0.1:5000/hwlab/hwlab-dev-base:node20-bookworm-slim when invoking artifact publish. Rerun this preflight and require status=ready before #35 artifact publish. Do not use UniDesk runtime, Code Queue runner, backend-core, provider-gateway, or microservice-proxy images as substitutes." - } - ] + "blockers": [] }, "notes": "DEV-only artifact report. Do not treat runtime placeholder images as real service implementations." } diff --git a/reports/dev-gate/dev-deploy-report.json b/reports/dev-gate/dev-deploy-report.json index d6d32bb8..84d93469 100644 --- a/reports/dev-gate/dev-deploy-report.json +++ b/reports/dev-gate/dev-deploy-report.json @@ -12,14 +12,14 @@ "pikasTech/HWLAB#30" ], "taskId": "dev-deploy-apply", - "commitId": "9b47ebe49f70", + "commitId": "73b379f4441d", "acceptanceLevel": "dev_deploy_apply", "devOnly": true, "prodDisabled": true, - "status": "blocked", - "generatedAt": "2026-05-21T17:57:43.720Z", + "status": "pass", + "generatedAt": "2026-05-22T03:38:26.155Z", "namespace": "hwlab-dev", - "endpoint": "http://74.48.78.17:6667", + "endpoint": "http://74.48.78.17:16667", "sourceContract": { "status": "pass", "documents": [ @@ -49,43 +49,43 @@ "summary": "Local smoke remains available but is not a substitute for DEV artifact publish evidence." }, "dryRun": { - "status": "blocked", + "status": "pass", "commands": [ "node tools/hwlab-cli/bin/hwlab-cli.mjs test e2e --env dev --mvp --dry-run", "node scripts/dev-deploy-apply.mjs --dry-run --expect-blocked" ], "evidence": [ "artifact services checked: 13", - "expected artifact commit: 24eb3bf", + "expected artifact commit: 73b379f", "namespace: hwlab-dev", "workloads planned: 13", - "kubectl executor: missing", - "live health: not_run" + "kubectl executor: /usr/local/bin/kubectl", + "live health: pass" ], - "summary": "DEV apply is blocked before mutation." + "summary": "DEV dry-run preflight passed." }, "devPreconditions": { - "status": "blocked", + "status": "pass", "requirements": [ "DEV artifact catalog must contain CI publish evidence and registry digests", "kubectl must be available for D601 hwlab-dev and must not target PROD", "hwlab-cloud-api /health/live must report serviceId, dev environment, and DB env readiness without exposing secret values", "pods, services, configmaps, and image commit tags must be observable in hwlab-dev" ], - "summary": "One or more required DEV deploy preconditions are blocked." + "summary": "DEV deploy preconditions are satisfied." }, "devDeployApply": { - "mode": "dry-run", + "mode": "apply", "conclusion": { - "status": "blocked", - "reason": "4 blocker(s) must be cleared before any live DEV apply.", - "blockerCount": 4 + "status": "ready", + "reason": "All DEV-only preconditions passed; human approval is still required before apply.", + "blockerCount": 0 }, "applyBoundary": { - "currentMode": "dry-run", - "defaultNoWrite": true, - "mutationAttempted": false, - "mutationAllowed": false, + "currentMode": "apply-requested", + "defaultNoWrite": false, + "mutationAttempted": true, + "mutationAllowed": true, "applyRequiresFlags": [ "--apply", "--confirm-dev", @@ -104,40 +104,28 @@ "force-push" ] }, - "mutationAttempted": false, + "mutationAttempted": true, "target": { "environment": "dev", "namespace": "hwlab-dev", - "endpoint": "http://74.48.78.17:6667", + "endpoint": "http://74.48.78.17:16667", "prodDisabled": true }, "artifactPlan": { - "expectedArtifactCommit": "24eb3bf", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "sourceCommitId": "9b47ebe49f70", + "expectedArtifactCommit": "73b379f", + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "sourceCommitId": "73b379f4441d", "serviceCommitIds": [ - "24eb3bf" + "73b379f" ], - "matchesSourceCommit": false, - "published": false, - "registryVerified": false, + "matchesSourceCommit": true, + "published": true, + "registryVerified": true, "imageCount": 13, - "unpublishedServices": [ - "hwlab-cloud-api", - "hwlab-cloud-web", - "hwlab-agent-mgr", - "hwlab-agent-worker", - "hwlab-gateway", - "hwlab-gateway-simu", - "hwlab-box-simu", - "hwlab-patch-panel", - "hwlab-router", - "hwlab-tunnel-client", - "hwlab-edge-proxy", - "hwlab-cli", - "hwlab-agent-skills" - ] + "requiredServiceCount": 13, + "disabledServiceCount": 0, + "unpublishedServices": [] }, "workloadPlan": [ { @@ -152,7 +140,7 @@ { "name": "hwlab-cloud-api", "serviceId": "hwlab-cloud-api", - "image": "ghcr.io/pikastech/hwlab-cloud-api:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f" } ] }, @@ -168,7 +156,7 @@ { "name": "hwlab-cloud-web", "serviceId": "hwlab-cloud-web", - "image": "ghcr.io/pikastech/hwlab-cloud-web:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f" } ] }, @@ -184,7 +172,7 @@ { "name": "hwlab-agent-mgr", "serviceId": "hwlab-agent-mgr", - "image": "ghcr.io/pikastech/hwlab-agent-mgr:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f" } ] }, @@ -200,7 +188,7 @@ { "name": "hwlab-agent-worker", "serviceId": "hwlab-agent-worker", - "image": "ghcr.io/pikastech/hwlab-agent-worker:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f" } ] }, @@ -216,7 +204,7 @@ { "name": "hwlab-gateway", "serviceId": "hwlab-gateway", - "image": "ghcr.io/pikastech/hwlab-gateway:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f" } ] }, @@ -232,7 +220,7 @@ { "name": "hwlab-gateway-simu", "serviceId": "hwlab-gateway-simu", - "image": "ghcr.io/pikastech/hwlab-gateway-simu:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f" } ] }, @@ -248,7 +236,7 @@ { "name": "hwlab-box-simu", "serviceId": "hwlab-box-simu", - "image": "ghcr.io/pikastech/hwlab-box-simu:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f" } ] }, @@ -264,7 +252,7 @@ { "name": "hwlab-patch-panel", "serviceId": "hwlab-patch-panel", - "image": "ghcr.io/pikastech/hwlab-patch-panel:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f" } ] }, @@ -280,7 +268,7 @@ { "name": "hwlab-router", "serviceId": "hwlab-router", - "image": "ghcr.io/pikastech/hwlab-router:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f" } ] }, @@ -296,7 +284,7 @@ { "name": "hwlab-tunnel-client", "serviceId": "hwlab-tunnel-client", - "image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f" } ] }, @@ -312,7 +300,7 @@ { "name": "hwlab-edge-proxy", "serviceId": "hwlab-edge-proxy", - "image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f" } ] }, @@ -328,7 +316,7 @@ { "name": "hwlab-cli", "serviceId": "hwlab-cli", - "image": "ghcr.io/pikastech/hwlab-cli:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f" } ] }, @@ -344,7 +332,7 @@ { "name": "hwlab-agent-skills", "serviceId": "hwlab-agent-skills", - "image": "ghcr.io/pikastech/hwlab-agent-skills:24eb3bf" + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f" } ] } @@ -415,7 +403,7 @@ "ports": [ { "name": "http", - "port": 7502, + "port": 7430, "targetPort": "http" } ] @@ -520,17 +508,21 @@ } ], "applyStep": { - "status": "not_run", - "summary": "Skipped because preflight blockers are open" + "status": "pass", + "command": "kubectl apply -k deploy/k8s/dev", + "stdout": "namespace/hwlab-dev unchanged\nconfigmap/hwlab-dev-health-contract unchanged\nservice/hwlab-agent-mgr unchanged\nservice/hwlab-agent-skills unchanged\nservice/hwlab-box-simu unchanged\nservice/hwlab-cli unchanged\nservice/hwlab-cloud-api unchanged\nservice/hwlab-cloud-web unchanged\nservice/hwlab-edge-proxy unchanged\nservice/hwlab-gateway unchanged\nservice/hwlab-gateway-simu unchanged\nservice/hwlab-patch-panel unchanged\nservice/hwlab-router unchanged\nservice/hwlab-tunnel-client unchanged\ndeployment.apps/hwlab-agent-mgr unchanged\ndeployment.apps/hwlab-agent-skills unchanged\ndeployment.apps/hwlab-box-simu unchanged\ndeployment.apps/hwlab-cloud-api unchanged\ndeployment.apps/hwlab-cloud-web unchanged\ndeployment.apps/hwlab-edge-proxy unchanged\ndeployment.apps/hwlab-gateway unchanged\ndeployment.apps/hwlab-gateway-simu unchanged\ndeployment.apps/hwlab-patch-panel unchanged\ndeployment.apps/hwlab-router unchanged\ndeployment.apps/hwlab-tunnel-client unchanged\njob.batch/hwlab-agent-worker-template unchanged\njob.batch/hwlab-cli-template unchanged", + "stderr": "# Warning: 'commonLabels' is deprecated. Please use 'labels' instead. Run 'kustomize edit fix' to update your Kustomization automatically.\n# Warning: 'commonLabels' is deprecated. Please use 'labels' instead. Run 'kustomize edit fix' to update your Kustomization automatically." }, "manualCommands": { - "status": "blocked", + "status": "ready", "beforeHumanApproval": [ - "node scripts/dev-deploy-apply.mjs --dry-run --expect-blocked --write-report", + "node scripts/dev-deploy-apply.mjs --dry-run --write-report", "node scripts/validate-dev-gate-report.mjs" ], - "afterHumanApproval": [], - "summary": "No apply command is offered while blockers remain open." + "afterHumanApproval": [ + "node scripts/dev-deploy-apply.mjs --apply --confirm-dev --confirmed-non-production --write-report" + ], + "summary": "Run the dry-run plan and validator immediately before requesting human approval; live apply still requires the explicit DEV confirmation flags." }, "rollbackHint": { "namespace": "hwlab-dev", @@ -558,143 +550,114 @@ ], "postRollbackChecks": [ "kubectl -n hwlab-dev rollout status deployment/hwlab-cloud-api --timeout=120s", - "curl -fsS http://74.48.78.17:6667/health/live" + "curl -fsS http://74.48.78.17:16667/health/live" ] }, - "remainingBlockers": [ - { - "type": "observability_blocker", - "scope": "artifact-source-commit", - "status": "open", - "summary": "deploy/catalog artifact commit 24eb3bf/24eb3bf does not match source 9b47ebe49f70", - "unblockHint": "Regenerate deploy/deploy.json and deploy/artifact-catalog.dev.json for the source commit that will be promoted." - }, - { - "type": "observability_blocker", - "scope": "artifact-publish", - "status": "open", - "summary": "DEV artifact catalog has no CI publish, registry verification, or registry digests", - "unblockHint": "Publish DEV images from the intended commit and update the catalog with registry digests and verification evidence." - }, - { - "type": "runtime_blocker", - "scope": "cloud-api-db", - "status": "open", - "summary": "cloud-api health reports DB config blocked; missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE", - "unblockHint": "Configure and verify the DEV cloud-api DB env readiness through health output, without reading secret values." - }, - { - "type": "environment_blocker", - "scope": "kubectl", - "status": "open", - "summary": "kubectl is not installed in the runner", - "unblockHint": "Provide a kubectl client configured for the D601 DEV k3s context without exposing token or secret values." - } - ], + "remainingBlockers": [], "artifactEvidence": [ { "serviceId": "hwlab-cloud-api", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-cloud-api:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", + "digest": "sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf", + "publishState": "published" }, { "serviceId": "hwlab-cloud-web", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-cloud-web:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f", + "digest": "sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2", + "publishState": "published" }, { "serviceId": "hwlab-agent-mgr", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-agent-mgr:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f", + "digest": "sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef", + "publishState": "published" }, { "serviceId": "hwlab-agent-worker", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-agent-worker:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f", + "digest": "sha256:4d5f8d8d404fc2826256fb690fdea5570285a34d1bdffbaf1e0c7ca39603ffd8", + "publishState": "published" }, { "serviceId": "hwlab-gateway", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-gateway:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f", + "digest": "sha256:ff9f3f3dc6332c3d8e4e9825657c296c9664d84a8d40c3ffeab3c1e91a484008", + "publishState": "published" }, { "serviceId": "hwlab-gateway-simu", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-gateway-simu:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", + "digest": "sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082", + "publishState": "published" }, { "serviceId": "hwlab-box-simu", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-box-simu:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", + "digest": "sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf", + "publishState": "published" }, { "serviceId": "hwlab-patch-panel", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-patch-panel:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f", + "digest": "sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286", + "publishState": "published" }, { "serviceId": "hwlab-router", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-router:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f", + "digest": "sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8", + "publishState": "published" }, { "serviceId": "hwlab-tunnel-client", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", + "digest": "sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49", + "publishState": "published" }, { "serviceId": "hwlab-edge-proxy", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", + "digest": "sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38", + "publishState": "published" }, { "serviceId": "hwlab-cli", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-cli:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f", + "digest": "sha256:125154cf59727ec230618c65b07a6235c18c1411f9ad51525ae411040169c9b5", + "publishState": "published" }, { "serviceId": "hwlab-agent-skills", - "deployCommitId": "24eb3bf", - "catalogCommitId": "24eb3bf", - "image": "ghcr.io/pikastech/hwlab-agent-skills:24eb3bf", - "digest": "not_published", - "publishState": "skeleton-only" + "deployCommitId": "73b379f", + "catalogCommitId": "73b379f", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f", + "digest": "sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573", + "publishState": "published" } ], "cloudApiDb": { @@ -726,33 +689,30 @@ "missingK8s": [], "missingSecretRefs": [], "runtimeHealth": { - "status": "blocked", + "status": "degraded", "ready": false, - "configReady": false, + "configReady": true, "connected": false, "connectionChecked": false, "requiredEnv": [ { "name": "HWLAB_CLOUD_DB_URL", - "present": false, + "present": true, "redacted": true }, { "name": "HWLAB_CLOUD_DB_SSL_MODE", - "present": false, + "present": true, "redacted": false } ], - "missingEnv": [ - "HWLAB_CLOUD_DB_URL", - "HWLAB_CLOUD_DB_SSL_MODE" - ], + "missingEnv": [], "secretRefs": [ { "env": "HWLAB_CLOUD_DB_URL", "secretName": "hwlab-cloud-api-dev-db", "secretKey": "database-url", - "present": false, + "present": true, "redacted": true } ], @@ -774,119 +734,301 @@ "images": [ { "serviceId": "hwlab-cloud-api", - "image": "ghcr.io/pikastech/hwlab-cloud-api:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", "kind": "Deployment", "name": "hwlab-cloud-api" }, { "serviceId": "hwlab-cloud-web", - "image": "ghcr.io/pikastech/hwlab-cloud-web:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f", "kind": "Deployment", "name": "hwlab-cloud-web" }, { "serviceId": "hwlab-agent-mgr", - "image": "ghcr.io/pikastech/hwlab-agent-mgr:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f", "kind": "Deployment", "name": "hwlab-agent-mgr" }, { "serviceId": "hwlab-agent-worker", - "image": "ghcr.io/pikastech/hwlab-agent-worker:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:73b379f", "kind": "Job", "name": "hwlab-agent-worker-template" }, { "serviceId": "hwlab-gateway", - "image": "ghcr.io/pikastech/hwlab-gateway:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway:73b379f", "kind": "Deployment", "name": "hwlab-gateway" }, { "serviceId": "hwlab-gateway-simu", - "image": "ghcr.io/pikastech/hwlab-gateway-simu:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", "kind": "Deployment", "name": "hwlab-gateway-simu" }, { "serviceId": "hwlab-box-simu", - "image": "ghcr.io/pikastech/hwlab-box-simu:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", "kind": "Deployment", "name": "hwlab-box-simu" }, { "serviceId": "hwlab-patch-panel", - "image": "ghcr.io/pikastech/hwlab-patch-panel:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f", "kind": "Deployment", "name": "hwlab-patch-panel" }, { "serviceId": "hwlab-router", - "image": "ghcr.io/pikastech/hwlab-router:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f", "kind": "Deployment", "name": "hwlab-router" }, { "serviceId": "hwlab-tunnel-client", - "image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", "kind": "Deployment", "name": "hwlab-tunnel-client" }, { "serviceId": "hwlab-edge-proxy", - "image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", "kind": "Deployment", "name": "hwlab-edge-proxy" }, { "serviceId": "hwlab-cli", - "image": "ghcr.io/pikastech/hwlab-cli:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-cli:73b379f", "kind": "Job", "name": "hwlab-cli-template" }, { "serviceId": "hwlab-agent-skills", - "image": "ghcr.io/pikastech/hwlab-agent-skills:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f", "kind": "Deployment", "name": "hwlab-agent-skills" } ] }, "clusterObservation": { - "status": "blocked", - "executor": "missing", - "resources": [] + "status": "pass", + "executor": "/usr/local/bin/kubectl", + "version": "clientVersion:\n buildDate: \"2025-09-09T19:44:50Z\"\n compiler: gc\n gitCommit: 93248f9ae092f571eb870b7664c534bfc7d00f03\n gitTreeState: clean\n gitVersion: v1.34.1\n goVersion: go1.24.6\n major: \"1\"\n minor: \"34\"\n platform: linux/amd64\nkustomizeVersion: v5.7.1", + "resources": [ + { + "kind": "Pod", + "name": "hwlab-agent-mgr-6b4976cb77-rjc2f", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-agent-skills-76b5d4f4bb-8x55z", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-box-simu-5d574d4675-jb6vb", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-box-simu-5d574d4675-qwp84", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-cloud-api-769848bfd8-k2hdb", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-cloud-web-bc56bc464-l7mdl", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-edge-proxy-544886546-656nq", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-frpc-59f57d479c-wm5l2", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-gateway-simu-744ffffbbd-66q2c", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-gateway-simu-744ffffbbd-rmlzq", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-patch-panel-7d9487bb6c-82qqk", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-router-77465567b6-9qs6t", + "phase": "Running" + }, + { + "kind": "Pod", + "name": "hwlab-tunnel-client-6449fcb5fb-27sk2", + "phase": "Running" + }, + { + "kind": "Service", + "name": "hwlab-agent-mgr" + }, + { + "kind": "Service", + "name": "hwlab-agent-skills" + }, + { + "kind": "Service", + "name": "hwlab-box-simu" + }, + { + "kind": "Service", + "name": "hwlab-cli" + }, + { + "kind": "Service", + "name": "hwlab-cloud-api" + }, + { + "kind": "Service", + "name": "hwlab-cloud-web" + }, + { + "kind": "Service", + "name": "hwlab-edge-proxy" + }, + { + "kind": "Service", + "name": "hwlab-gateway" + }, + { + "kind": "Service", + "name": "hwlab-gateway-simu" + }, + { + "kind": "Service", + "name": "hwlab-patch-panel" + }, + { + "kind": "Service", + "name": "hwlab-router" + }, + { + "kind": "Service", + "name": "hwlab-tunnel-client" + }, + { + "kind": "ConfigMap", + "name": "hwlab-dev-health-contract" + }, + { + "kind": "ConfigMap", + "name": "hwlab-frpc-config" + }, + { + "kind": "ConfigMap", + "name": "kube-root-ca.crt" + }, + { + "kind": "Deployment", + "name": "hwlab-agent-mgr", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Deployment", + "name": "hwlab-agent-skills", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Deployment", + "name": "hwlab-box-simu", + "readyReplicas": 2, + "replicas": 2 + }, + { + "kind": "Deployment", + "name": "hwlab-cloud-api", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Deployment", + "name": "hwlab-cloud-web", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Deployment", + "name": "hwlab-edge-proxy", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Deployment", + "name": "hwlab-frpc", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Deployment", + "name": "hwlab-gateway" + }, + { + "kind": "Deployment", + "name": "hwlab-gateway-simu", + "readyReplicas": 2, + "replicas": 2 + }, + { + "kind": "Deployment", + "name": "hwlab-patch-panel", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Deployment", + "name": "hwlab-router", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Deployment", + "name": "hwlab-tunnel-client", + "readyReplicas": 1, + "replicas": 1 + }, + { + "kind": "Job", + "name": "hwlab-agent-worker-template" + }, + { + "kind": "Job", + "name": "hwlab-cli-template" + } + ] }, "liveProbe": { - "status": "not_run", - "reason": "--skip-live-probe" + "status": "pass", + "url": "http://74.48.78.17:16667/health/live", + "httpStatus": 200, + "body": "{\"serviceId\":\"hwlab-cloud-api\",\"environment\":\"dev\",\"status\":\"degraded\",\"service\":{\"id\":\"hwlab-cloud-api\",\"role\":\"cloud-api\",\"healthPath\":\"/health\",\"livePath\":\"/health/live\"},\"commit\":{\"id\":\"73b379f\",\"source\":\"runtime-env\"},\"image\":{\"reference\":\"127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f\",\"tag\":\"73b379f\",\"digest\":\"unknown\"},\"endpoint\":\"http://74.48.78.17:16667\",\"observedAt\":\"2026-05-22T03:38:25.142Z\",\"db\":{\"contractVersion\":\"v1\",\"environment\":\"dev\",\"connected\":false,\"connectionChecked\":false,\"c" } }, - "blockers": [ - { - "type": "observability_blocker", - "scope": "artifact-source-commit", - "status": "open", - "summary": "deploy/catalog artifact commit 24eb3bf/24eb3bf does not match source 9b47ebe49f70" - }, - { - "type": "observability_blocker", - "scope": "artifact-publish", - "status": "open", - "summary": "DEV artifact catalog has no CI publish, registry verification, or registry digests" - }, - { - "type": "runtime_blocker", - "scope": "cloud-api-db", - "status": "open", - "summary": "cloud-api health reports DB config blocked; missing HWLAB_CLOUD_DB_URL, HWLAB_CLOUD_DB_SSL_MODE" - }, - { - "type": "environment_blocker", - "scope": "kubectl", - "status": "open", - "summary": "kubectl is not installed in the runner" - } - ], + "blockers": [], "notes": "DEV-only result. No PROD resources, secret values, force push, heavy e2e, browser e2e, or UniDesk runtime substitute were used." } diff --git a/reports/dev-gate/dev-edge-health.json b/reports/dev-gate/dev-edge-health.json index ad13cfa0..1ce3addc 100644 --- a/reports/dev-gate/dev-edge-health.json +++ b/reports/dev-gate/dev-edge-health.json @@ -4,14 +4,14 @@ "reportVersion": "v1", "issue": "pikasTech/HWLAB#36", "taskId": "dev-edge-health", - "commitId": "9b47ebe49f70", + "commitId": "73b379f4441d", "acceptanceLevel": "dev_edge_health", "devOnly": true, "prodDisabled": true, - "status": "not_run", - "generatedAt": "2026-05-21T17:57:41.742Z", + "status": "pass", + "generatedAt": "2026-05-22T03:38:24.622Z", "namespace": "hwlab-dev", - "endpoint": "http://74.48.78.17:6667", + "endpoint": "http://74.48.78.17:16667", "sourceContract": { "status": "pass", "documents": [ @@ -51,36 +51,42 @@ "summary": "MVP dry-run remains the generic gate command; edge health uses a narrower route smoke." }, "devPreconditions": { - "status": "not_run", + "status": "pass", "requirements": [ - "http://74.48.78.17:6667/health returns HWLAB DEV JSON with service, commit, and image evidence", + "http://74.48.78.17:16667/health returns HWLAB DEV JSON with service, commit, and image evidence", "frps control on 74.48.78.17:7000 accepts the D601 frp client", "hwlab-dev hwlab-edge-proxy, hwlab-tunnel-client, hwlab-router, and hwlab-cloud-api are observable", "No PROD endpoint, secret read, restart, or UniDesk runtime substitute is used" ], - "summary": "live network probes require --live" + "summary": "DEV edge health preconditions are satisfied." }, "blockers": [], "edgeHealth": { - "generatedAt": "2026-05-21T17:57:41.742Z", - "mode": "contract-only", - "endpoint": "http://74.48.78.17:6667", - "status": "not_run", - "classification": "not_run", - "blocker": "live network probes require --live", + "generatedAt": "2026-05-22T03:38:24.622Z", + "mode": "live-read-only", + "endpoint": "http://74.48.78.17:16667", + "safety": { + "environment": "dev", + "prodTouched": false, + "secretsRead": false, + "restarts": false, + "unideskRuntimeSubstitute": false + }, "contracts": { - "devEndpoint": "http://74.48.78.17:6667", + "devEndpoint": "http://74.48.78.17:16667", "frp": { "frpcTargetsEdgeProxy": true, - "frpsTcpRemotePort6667": true, - "frpsUsesVhost6667": false, + "frpcTargetsCloudWeb": true, + "frpsTcpRemotePort16667": true, + "frpsTcpRemotePort16666": true, + "frpsUsesVhostEdgePort": false, "configRisk": "none" }, "masterEdge": { - "endpoint": "http://74.48.78.17:6667", + "endpoint": "http://74.48.78.17:16667", "reverseLinkMode": "frp", "reverseLinkClient": "hwlab-tunnel-client", - "publicPort": 6667 + "publicPort": 16667 }, "deploy": { "environment": "dev", @@ -88,7 +94,7 @@ "serviceCount": 13, "edgeProxy": { "serviceId": "hwlab-edge-proxy", - "image": "ghcr.io/pikastech/hwlab-edge-proxy:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -100,7 +106,7 @@ }, "tunnelClient": { "serviceId": "hwlab-tunnel-client", - "image": "ghcr.io/pikastech/hwlab-tunnel-client:24eb3bf", + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", @@ -108,12 +114,13 @@ "env": { "HWLAB_TUNNEL_MODE": "frp-client", "HWLAB_FRP_SERVER_ADDR": "74.48.78.17", - "HWLAB_FRP_PUBLIC_PORT": "6667" + "HWLAB_FRP_PUBLIC_PORT": "16667", + "HWLAB_FRP_WEB_PUBLIC_PORT": "16666" } }, "cloudApiDb": { - "status": "ready", - "ready": true, + "status": "degraded", + "ready": false, "configReady": true, "connected": false, "connectionChecked": false, @@ -146,6 +153,506 @@ "note": "Manifest-only DB env placeholder; this is not live DB evidence." } } - } + }, + "publicTcp": [ + { + "host": "74.48.78.17", + "port": 16667, + "status": "connected", + "durationMs": 205 + }, + { + "host": "74.48.78.17", + "port": 7000, + "status": "connected", + "durationMs": 1231 + }, + { + "host": "74.48.78.17", + "port": 7402, + "status": "connected", + "durationMs": 199 + } + ], + "publicHttp": [ + { + "url": "http://74.48.78.17:16667/health", + "ok": true, + "status": 200, + "statusText": "OK", + "headers": { + "connection": "keep-alive", + "content-length": "661", + "content-type": "application/json; charset=utf-8", + "date": "Fri, 22 May 2026 03:38:23 GMT", + "keep-alive": "timeout=5" + }, + "json": { + "serviceId": "hwlab-edge-proxy", + "environment": "dev", + "status": "ok", + "service": { + "id": "hwlab-edge-proxy", + "role": "public-dev-ingress", + "healthPath": "/health", + "livePath": "/health/live" + }, + "commit": { + "id": "73b379f4441d47a99dfd978a80fd43727410af51", + "source": "runtime-env" + }, + "image": { + "reference": "ghcr.io/pikastech/hwlab-edge-proxy:73b379f", + "tag": "73b379f", + "digest": "unknown" + }, + "endpoint": "http://74.48.78.17:16667", + "observedAt": "2026-05-22T03:38:23.861Z", + "details": { + "upstream": "http://hwlab-cloud-api.hwlab-dev.svc.cluster.local:6667", + "mode": "dev-edge-proxy" + } + }, + "bodyPreview": "{\n \"serviceId\": \"hwlab-edge-proxy\",\n \"environment\": \"dev\",\n \"status\": \"ok\",\n \"service\": {\n \"id\": \"hwlab-edge-proxy\",\n \"role\": \"public-dev-ingress\",\n \"healthPath\": \"/health\",\n \"livePath\": \"/health/live\"\n },\n \"commit\": {\n \"id\": \"73b379f4441d47a99dfd978a80fd43727410af51\",\n \"source\": \"runtime-env\"\n },\n \"image\": {\n \"reference\": \"ghcr.io/pikastech/hwlab-edge-proxy:73b379f\",\n \"tag\": \"73b379f\",\n \"digest\": \"unknown\"\n },\n \"endpoint\": \"http://74.48.78.17:16667\",\n \"obse", + "durationMs": 656 + }, + { + "url": "http://74.48.78.17:16667/health/live", + "ok": true, + "status": 200, + "statusText": "OK", + "headers": { + "cache-control": "no-store", + "connection": "keep-alive", + "content-type": "application/json; charset=utf-8", + "date": "Fri, 22 May 2026 03:38:23 GMT", + "keep-alive": "timeout=5", + "transfer-encoding": "chunked" + }, + "json": { + "serviceId": "hwlab-cloud-api", + "environment": "dev", + "status": "degraded", + "service": { + "id": "hwlab-cloud-api", + "role": "cloud-api", + "healthPath": "/health", + "livePath": "/health/live" + }, + "commit": { + "id": "73b379f", + "source": "runtime-env" + }, + "image": { + "reference": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", + "tag": "73b379f", + "digest": "unknown" + }, + "endpoint": "http://74.48.78.17:16667", + "observedAt": "2026-05-22T03:38:23.864Z", + "db": { + "contractVersion": "v1", + "environment": "dev", + "connected": false, + "connectionChecked": false, + "configReady": true, + "ready": false, + "status": "degraded", + "mode": "configured_without_live_connection", + "fields": [ + { + "name": "HWLAB_CLOUD_DB_URL", + "present": true, + "redacted": true, + "source": "k8s-secret-ref", + "required": true + }, + { + "name": "HWLAB_CLOUD_DB_SSL_MODE", + "present": true, + "redacted": false, + "source": "runtime-env", + "required": true + } + ], + "missingEnv": [], + "secretRefs": [ + { + "env": "HWLAB_CLOUD_DB_URL", + "secretName": "hwlab-cloud-api-dev-db", + "secretKey": "database-url", + "present": true, + "redacted": true + } + ], + "safety": { + "devOnly": true, + "prodAllowed": false, + "secretsRead": false, + "valuesRedacted": true, + "liveDbEvidence": false + }, + "evidence": "env_presence_only_no_live_db" + }, + "runtime": { + "adapter": "memory", + "durable": false, + "status": "degraded", + "reason": "live DB persistence is not connected; L1 runtime writes are process-local only", + "counts": { + "gatewaySessions": 0, + "boxResources": 0, + "boxCapabilities": 0, + "hardwareOperations": 0, + "auditEvents": 0, + "evidenceRecords": 0 + } + } + }, + "bodyPreview": "{\"serviceId\":\"hwlab-cloud-api\",\"environment\":\"dev\",\"status\":\"degraded\",\"service\":{\"id\":\"hwlab-cloud-api\",\"role\":\"cloud-api\",\"healthPath\":\"/health\",\"livePath\":\"/health/live\"},\"commit\":{\"id\":\"73b379f\",\"source\":\"runtime-env\"},\"image\":{\"reference\":\"127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f\",\"tag\":\"73b379f\",\"digest\":\"unknown\"},\"endpoint\":\"http://74.48.78.17:16667\",\"observedAt\":\"2026-05-22T03:38:23.864Z\",\"db\":{\"contractVersion\":\"v1\",\"environment\":\"dev\",\"connected\":false,\"connectionChecked\":false,\"c", + "durationMs": 651 + } + ], + "kubernetes": { + "observable": true, + "namespace": "hwlab-dev", + "context": { + "exitCode": 0, + "value": "default", + "stderr": "" + }, + "services": [ + { + "name": "hwlab-cloud-api", + "type": "ClusterIP", + "clusterIP": "10.43.88.144", + "ports": [ + { + "name": "http", + "port": 6667, + "targetPort": "http" + } + ], + "selector": { + "app.kubernetes.io/name": "hwlab-cloud-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "dev", + "hwlab.pikastech.local/profile": "dev" + } + }, + { + "name": "hwlab-edge-proxy", + "type": "ClusterIP", + "clusterIP": "10.43.104.107", + "ports": [ + { + "name": "http", + "port": 6667, + "targetPort": "http" + } + ], + "selector": { + "app.kubernetes.io/name": "hwlab-edge-proxy", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "dev", + "hwlab.pikastech.local/profile": "dev" + } + }, + { + "name": "hwlab-tunnel-client", + "type": "ClusterIP", + "clusterIP": "10.43.129.225", + "ports": [ + { + "name": "http", + "port": 7402, + "targetPort": "http" + } + ], + "selector": { + "app.kubernetes.io/name": "hwlab-tunnel-client", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "dev", + "hwlab.pikastech.local/profile": "dev" + } + }, + { + "name": "hwlab-router", + "type": "ClusterIP", + "clusterIP": "10.43.6.240", + "ports": [ + { + "name": "http", + "port": 7401, + "targetPort": "http" + } + ], + "selector": { + "app.kubernetes.io/name": "hwlab-router", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "dev", + "hwlab.pikastech.local/profile": "dev" + } + } + ], + "endpoints": [ + { + "name": "hwlab-cloud-api", + "readyAddresses": [ + "10.42.0.188" + ], + "notReadyAddresses": [], + "ports": [ + { + "name": "http", + "port": 6667 + } + ] + }, + { + "name": "hwlab-edge-proxy", + "readyAddresses": [ + "10.42.0.191" + ], + "notReadyAddresses": [], + "ports": [ + { + "name": "http", + "port": 6667 + } + ] + }, + { + "name": "hwlab-tunnel-client", + "readyAddresses": [ + "10.42.0.194" + ], + "notReadyAddresses": [], + "ports": [ + { + "name": "http", + "port": 7402 + } + ] + }, + { + "name": "hwlab-router", + "readyAddresses": [ + "10.42.0.193" + ], + "notReadyAddresses": [], + "ports": [ + { + "name": "http", + "port": 7401 + } + ] + } + ], + "pods": [ + { + "name": "hwlab-agent-mgr-6b4976cb77-rjc2f", + "phase": "Running", + "serviceId": "hwlab-agent-mgr", + "containers": [ + { + "name": "hwlab-agent-mgr", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-agent-mgr@sha256:ae6ca76cd09a7d21e46e0076e12dea1843417a0d59d57b3115915c831e88ebef" + } + ] + }, + { + "name": "hwlab-agent-skills-76b5d4f4bb-8x55z", + "phase": "Running", + "serviceId": "hwlab-agent-skills", + "containers": [ + { + "name": "hwlab-agent-skills", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-agent-skills@sha256:5bdf9a4d17f8f4c7f3ecead99dcbd4de0ac346a2c28fef020b8853cf494df573" + } + ] + }, + { + "name": "hwlab-box-simu-5d574d4675-jb6vb", + "phase": "Running", + "serviceId": "hwlab-box-simu", + "containers": [ + { + "name": "hwlab-box-simu", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf" + } + ] + }, + { + "name": "hwlab-box-simu-5d574d4675-qwp84", + "phase": "Running", + "serviceId": "hwlab-box-simu", + "containers": [ + { + "name": "hwlab-box-simu", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:2a12c1c462b2c01a9fa15efa75a6e1f17ecc8432dfa88bca53f0d8d4b6355daf" + } + ] + }, + { + "name": "hwlab-cloud-api-769848bfd8-k2hdb", + "phase": "Running", + "serviceId": "hwlab-cloud-api", + "containers": [ + { + "name": "hwlab-cloud-api", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-api@sha256:561e50494bf13bf61f83d28b371bc39b860b21333ef9991711853a095bd535bf" + } + ] + }, + { + "name": "hwlab-cloud-web-bc56bc464-l7mdl", + "phase": "Running", + "serviceId": "hwlab-cloud-web", + "containers": [ + { + "name": "hwlab-cloud-web", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-cloud-web@sha256:c7939658af9f1109e5384619163dd0d11e1a1de14e7d15d4cbde7c4400b495c2" + } + ] + }, + { + "name": "hwlab-edge-proxy-544886546-656nq", + "phase": "Running", + "serviceId": "hwlab-edge-proxy", + "containers": [ + { + "name": "hwlab-edge-proxy", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-edge-proxy@sha256:480dea831051d45b6d63a489db9c0fa314f88bae35dbf72be4186bf1de356f38" + } + ] + }, + { + "name": "hwlab-gateway-simu-744ffffbbd-66q2c", + "phase": "Running", + "serviceId": "hwlab-gateway-simu", + "containers": [ + { + "name": "hwlab-gateway-simu", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082" + } + ] + }, + { + "name": "hwlab-gateway-simu-744ffffbbd-rmlzq", + "phase": "Running", + "serviceId": "hwlab-gateway-simu", + "containers": [ + { + "name": "hwlab-gateway-simu", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:f5ccff29da331e424a482f92394d071e1be90c0244e7137e07ac33d9a7cc4082" + } + ] + }, + { + "name": "hwlab-patch-panel-7d9487bb6c-82qqk", + "phase": "Running", + "serviceId": "hwlab-patch-panel", + "containers": [ + { + "name": "hwlab-patch-panel", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-patch-panel@sha256:5bc9a1c7ce65026cd7bf6d20a311226b35c796a4d52a914266244bf3c1a17286" + } + ] + }, + { + "name": "hwlab-router-77465567b6-9qs6t", + "phase": "Running", + "serviceId": "hwlab-router", + "containers": [ + { + "name": "hwlab-router", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-router:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-router@sha256:356f37a7d78cc2f86230c2037f43215ad66979fbe4a949cb9241b5957692d9d8" + } + ] + }, + { + "name": "hwlab-tunnel-client-6449fcb5fb-27sk2", + "phase": "Running", + "serviceId": "hwlab-tunnel-client", + "containers": [ + { + "name": "hwlab-tunnel-client", + "ready": true, + "restartCount": 0, + "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:73b379f", + "imageID": "127.0.0.1:5000/hwlab/hwlab-tunnel-client@sha256:8ca553408a633d7f287ca9440f822fb1458dd9a028eb4db178b466b0b5505c49" + } + ] + } + ], + "notes": [] + }, + "clusterDns": [ + { + "serviceId": "hwlab-cloud-api", + "host": "hwlab-cloud-api.hwlab-dev.svc.cluster.local", + "port": 6667, + "resolved": false, + "output": "" + }, + { + "serviceId": "hwlab-router", + "host": "hwlab-router.hwlab-dev.svc.cluster.local", + "port": 7401, + "resolved": false, + "output": "" + }, + { + "serviceId": "hwlab-tunnel-client", + "host": "hwlab-tunnel-client.hwlab-dev.svc.cluster.local", + "port": 7402, + "resolved": false, + "output": "" + }, + { + "serviceId": "hwlab-edge-proxy", + "host": "hwlab-edge-proxy.hwlab-dev.svc.cluster.local", + "port": 6667, + "resolved": false, + "output": "" + } + ], + "status": "pass", + "classification": "none", + "blocker": null } }