chore: publish dev artifacts for 73b379f

This commit is contained in:
lyon
2026-05-22 11:39:20 +08:00
parent 73b379f444
commit cb35ada686
7 changed files with 1261 additions and 623 deletions
+85 -85
View File
@@ -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": {
+24 -23
View File
@@ -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"
}
}
],
+1 -1
View File
@@ -123,7 +123,7 @@
"ports": [
{
"name": "http",
"port": 7502,
"port": 7430,
"targetPort": "http"
}
]
+25 -21
View File
@@ -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": {
+240 -256
View File
@@ -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."
}
+355 -213
View File
@@ -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."
}
+531 -24
View File
@@ -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
}
}