{ "$schema": "https://hwlab.pikastech.local/schemas/dev-artifact-publish.schema.json", "$id": "https://hwlab.pikastech.local/reports/dev-gate/dev-artifacts.json", "reportVersion": "v1", "issue": "pikasTech/HWLAB#31", "taskId": "dev-artifact-publish", "commitId": "1e8d009", "acceptanceLevel": "dev_artifact_publish", "devOnly": true, "prodDisabled": true, "sourceContract": { "status": "pass", "documents": [ "docs/dev-acceptance-matrix.md", "docs/m0-contract-audit.md", "docs/artifact-catalog.md", "docs/dev-artifact-publish.md" ], "summary": "DEV artifact publish evidence for pikasTech/HWLAB#35, stored in the DEV gate report envelope." }, "validationCommands": [ "node --check scripts/dev-artifact-publish.mjs", "node scripts/dev-artifact-publish.mjs --preflight --no-report", "node --check scripts/validate-dev-gate-report.mjs", "node scripts/validate-dev-gate-report.mjs" ], "localSmoke": { "status": "not_run", "commands": [ "node scripts/m1-contract-smoke.mjs" ], "evidence": [ "This report records artifact build/publish state only; local smoke remains a separate gate." ], "summary": "Local smoke is not implied by artifact publication." }, "dryRun": { "status": "not_run", "commands": [ "node tools/hwlab-cli/bin/hwlab-cli.mjs test e2e --env dev --mvp --dry-run" ], "evidence": [ "This report records DEV artifact build/publish state only; deployment dry-run remains separate." ], "summary": "DEV deploy dry-run is not implied by artifact publication." }, "devPreconditions": { "status": "pass", "requirements": [ "Registry prefix is localhost or private/internal only.", "Environment remains dev and namespace remains hwlab-dev.", "PROD profile remains disabled.", "No secret or token material is required by this workflow." ], "summary": "Fatal DEV-only artifact preconditions passed." }, "blockers": [ { "type": "runtime_blocker", "scope": "hwlab-router", "status": "open", "summary": "hwlab-router has no cmd/hwlab-router/main.mjs runtime entrypoint; a health-only placeholder image was not built as a real implementation." }, { "type": "runtime_blocker", "scope": "hwlab-tunnel-client", "status": "open", "summary": "hwlab-tunnel-client has no cmd/hwlab-tunnel-client/main.mjs runtime entrypoint; a health-only placeholder image was not built as a real implementation." }, { "type": "runtime_blocker", "scope": "hwlab-edge-proxy", "status": "open", "summary": "hwlab-edge-proxy has no cmd/hwlab-edge-proxy/main.mjs runtime entrypoint; a health-only placeholder image was not built as a real implementation." }, { "type": "runtime_blocker", "scope": "hwlab-cli", "status": "open", "summary": "tools/hwlab-cli declares bin/hwlab-cli.mjs but the bin file is absent; a health-only placeholder image was not built as a real CLI artifact." } ], "artifactPublish": { "issue": "pikasTech/HWLAB#35", "status": "blocked", "mode": "publish", "repo": "pikasTech/HWLAB", "sourceCommitId": "1e8d009e9531d71cef0762998663b4e3731032c6", "registryPrefix": "127.0.0.1:5000/hwlab", "baseImage": "node:22-bookworm-slim", "environment": "dev", "serviceCount": 13, "builtCount": 9, "publishedCount": 9, "generatedAt": "2026-05-21T16:39:23.804Z", "services": [ { "serviceId": "hwlab-cloud-api", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:1e8d009", "imageTag": "1e8d009", "digest": "sha256:daa3e09996209242ae409f21802757cfab20fe80adfdcc729dc7144a0758a067", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-cloud-api@sha256:daa3e09996209242ae409f21802757cfab20fe80adfdcc729dc7144a0758a067", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "entrypoint": "cmd/hwlab-cloud-api/main.mjs", "localImageId": "sha256:cfa8de38b9113365764a2a7dffb8732e7049d77ba83329eb5f7f29167dfa13e9" }, { "serviceId": "hwlab-cloud-web", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:1e8d009", "imageTag": "1e8d009", "digest": "sha256:267de8af9ef4ff2bc60e197ca37f266ab49e75d49cce91909dda64715d47c0c8", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-cloud-web@sha256:267de8af9ef4ff2bc60e197ca37f266ab49e75d49cce91909dda64715d47c0c8", "runtimeKind": "cloud-web", "implementationState": "static-web-wrapper", "entrypoint": "web/hwlab-cloud-web/index.html", "localImageId": "sha256:d4bd2ef29fda976ad162092cd95197e130a7ade811aa11784b8396c0ef979884" }, { "serviceId": "hwlab-agent-mgr", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:1e8d009", "imageTag": "1e8d009", "digest": "sha256:12510042c5ab96419b4eafa52314ad58e17e1d1c5a0fbebe4cb6cd50e8935a5a", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-mgr@sha256:12510042c5ab96419b4eafa52314ad58e17e1d1c5a0fbebe4cb6cd50e8935a5a", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "entrypoint": "cmd/hwlab-agent-mgr/main.mjs", "localImageId": "sha256:58ac216ee9faee27e1bcb569d5ce36166d8344aab24c7e4ab69781ef4356e70d" }, { "serviceId": "hwlab-agent-worker", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:1e8d009", "imageTag": "1e8d009", "digest": "sha256:1cbfd4840ca567539f5eab5df2e301b4c1e263555b1a1f160900996bc6895c07", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-worker@sha256:1cbfd4840ca567539f5eab5df2e301b4c1e263555b1a1f160900996bc6895c07", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "entrypoint": "cmd/hwlab-agent-worker/main.mjs", "localImageId": "sha256:44fad5f75ce63c82e052827c4536be1c70b08a48d8962da78094a29a6822070e" }, { "serviceId": "hwlab-gateway", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-gateway:1e8d009", "imageTag": "1e8d009", "digest": "sha256:b6e6213e03773539ab21691bdee973338e270cf639b1deccb8c6d904278a43d8", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-gateway@sha256:b6e6213e03773539ab21691bdee973338e270cf639b1deccb8c6d904278a43d8", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "entrypoint": "cmd/hwlab-gateway/main.mjs", "localImageId": "sha256:ea0301dd293a71de84642b1d21682e8575219e08c221ccfb637bef7a1ce39c52" }, { "serviceId": "hwlab-gateway-simu", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:1e8d009", "imageTag": "1e8d009", "digest": "sha256:8d54ea760cdad2a418660e7d6293ae493d86b2173db0ec0be00ad49d63bb7aaf", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-gateway-simu@sha256:8d54ea760cdad2a418660e7d6293ae493d86b2173db0ec0be00ad49d63bb7aaf", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "entrypoint": "cmd/hwlab-gateway-simu/main.mjs", "localImageId": "sha256:38736ba8ca348d8c7527a94378b509be879ce338f36596be91f756c88a78ff96" }, { "serviceId": "hwlab-box-simu", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:1e8d009", "imageTag": "1e8d009", "digest": "sha256:e18223e56d7b443dd0d5b3bccbd1ebc7964ef188c39d85750c1d82659634d861", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-box-simu@sha256:e18223e56d7b443dd0d5b3bccbd1ebc7964ef188c39d85750c1d82659634d861", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "entrypoint": "cmd/hwlab-box-simu/main.mjs", "localImageId": "sha256:7e9db37e7ad184c8fea659675385dc5dc1078c29e4108cf9e605495699570c8c" }, { "serviceId": "hwlab-patch-panel", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:1e8d009", "imageTag": "1e8d009", "digest": "sha256:2cbf98f534cd31f86df9d656f40fb883bf40582dae4a4b3615c8c0db187d85fc", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-patch-panel@sha256:2cbf98f534cd31f86df9d656f40fb883bf40582dae4a4b3615c8c0db187d85fc", "runtimeKind": "node-command", "implementationState": "repo-entrypoint", "entrypoint": "cmd/hwlab-patch-panel/main.mjs", "localImageId": "sha256:b7d11cf5683a3fc1a54029ecfd13bbf05353a33b2038ffa8a968f596c54bc864" }, { "serviceId": "hwlab-router", "status": "blocked_missing_runtime", "image": "127.0.0.1:5000/hwlab/hwlab-router:1e8d009", "imageTag": "1e8d009", "digest": "not_published", "repositoryDigest": null, "runtimeKind": "health-placeholder", "implementationState": "missing-runtime-entrypoint", "entrypoint": null }, { "serviceId": "hwlab-tunnel-client", "status": "blocked_missing_runtime", "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:1e8d009", "imageTag": "1e8d009", "digest": "not_published", "repositoryDigest": null, "runtimeKind": "health-placeholder", "implementationState": "missing-runtime-entrypoint", "entrypoint": null }, { "serviceId": "hwlab-edge-proxy", "status": "blocked_missing_runtime", "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:1e8d009", "imageTag": "1e8d009", "digest": "not_published", "repositoryDigest": null, "runtimeKind": "health-placeholder", "implementationState": "missing-runtime-entrypoint", "entrypoint": null }, { "serviceId": "hwlab-cli", "status": "blocked_missing_runtime", "image": "127.0.0.1:5000/hwlab/hwlab-cli:1e8d009", "imageTag": "1e8d009", "digest": "not_published", "repositoryDigest": null, "runtimeKind": "cli", "implementationState": "library-only", "entrypoint": "tools/hwlab-cli/lib/cli.mjs" }, { "serviceId": "hwlab-agent-skills", "status": "published", "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:1e8d009", "imageTag": "1e8d009", "digest": "sha256:46c3c8e24c3f696931599e40c21c66de98f1caf431a992f0a02e19dde67529b2", "repositoryDigest": "127.0.0.1:5000/hwlab/hwlab-agent-skills@sha256:46c3c8e24c3f696931599e40c21c66de98f1caf431a992f0a02e19dde67529b2", "runtimeKind": "skills-bundle", "implementationState": "repo-bundle", "entrypoint": "skills/hwlab-agent-runtime/SKILL.md", "localImageId": "sha256:33d64850cc7dd4b86ca136ba7b8d6ff79cdffab1d30f2c90cd16693976739050" } ], "blockers": [ { "type": "runtime_blocker", "scope": "hwlab-router", "status": "open", "summary": "hwlab-router has no cmd/hwlab-router/main.mjs runtime entrypoint; a health-only placeholder image was not built as a real implementation.", "next": "Add cmd/hwlab-router/main.mjs or a dedicated Dockerfile for hwlab-router." }, { "type": "runtime_blocker", "scope": "hwlab-tunnel-client", "status": "open", "summary": "hwlab-tunnel-client has no cmd/hwlab-tunnel-client/main.mjs runtime entrypoint; a health-only placeholder image was not built as a real implementation.", "next": "Add cmd/hwlab-tunnel-client/main.mjs or a dedicated Dockerfile for hwlab-tunnel-client." }, { "type": "runtime_blocker", "scope": "hwlab-edge-proxy", "status": "open", "summary": "hwlab-edge-proxy has no cmd/hwlab-edge-proxy/main.mjs runtime entrypoint; a health-only placeholder image was not built as a real implementation.", "next": "Add cmd/hwlab-edge-proxy/main.mjs or a dedicated Dockerfile for hwlab-edge-proxy." }, { "type": "runtime_blocker", "scope": "hwlab-cli", "status": "open", "summary": "tools/hwlab-cli declares bin/hwlab-cli.mjs but the bin file is absent; a health-only placeholder image was not built as a real CLI artifact.", "next": "Add tools/hwlab-cli/bin/hwlab-cli.mjs that calls tools/hwlab-cli/lib/cli.mjs." } ] }, "notes": "DEV-only artifact report. Do not treat runtime placeholder images as real service implementations." }