29686823c5
Co-authored-by: Code Queue Review <code-queue-review@localhost>
1540 lines
70 KiB
JSON
1540 lines
70 KiB
JSON
{
|
|
"$schema": "https://hwlab.pikastech.local/schemas/dev-m5-gate-aggregator-v2.schema.json",
|
|
"$id": "https://hwlab.pikastech.local/reports/dev-gate/dev-m5-gate-aggregator-v2.json",
|
|
"reportVersion": "v2",
|
|
"reportKind": "dev-m5-gate-aggregator",
|
|
"issue": "pikasTech/HWLAB#58",
|
|
"supports": [
|
|
"pikasTech/HWLAB#7",
|
|
"pikasTech/HWLAB#9",
|
|
"pikasTech/HWLAB#23",
|
|
"pikasTech/HWLAB#26",
|
|
"pikasTech/HWLAB#31",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#34",
|
|
"pikasTech/HWLAB#35",
|
|
"pikasTech/HWLAB#36",
|
|
"pikasTech/HWLAB#37",
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#46",
|
|
"pikasTech/HWLAB#64"
|
|
],
|
|
"generatedAt": "2026-05-23T06:17:15.938Z",
|
|
"generatedFromCommit": "66586ccf109e",
|
|
"environment": "dev",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"frontendEndpoint": "http://74.48.78.17:16666",
|
|
"activeEndpoints": {
|
|
"frontend": "http://74.48.78.17:16666/",
|
|
"apiLive": "http://74.48.78.17:16667/health/live"
|
|
},
|
|
"deprecatedEndpoints": [
|
|
{
|
|
"endpoint": "http://74.48.78.17:6666",
|
|
"status": "historical/deprecated",
|
|
"activeGreenEligible": false
|
|
},
|
|
{
|
|
"endpoint": "http://74.48.78.17:6667",
|
|
"status": "historical/deprecated",
|
|
"activeGreenEligible": false
|
|
}
|
|
],
|
|
"devOnly": true,
|
|
"prodDisabled": true,
|
|
"reportLifecycle": {
|
|
"version": "v1",
|
|
"state": "active",
|
|
"activeEndpoint": "http://74.48.78.17:16667",
|
|
"activeBrowserEndpoint": "http://74.48.78.17:16666",
|
|
"deprecatedEndpoint": null,
|
|
"summary": "Current M5 evidence aggregator report; source, local, and dry-run evidence are not DEV-LIVE acceptance."
|
|
},
|
|
"safety": {
|
|
"reportOnly": true,
|
|
"noDeploy": true,
|
|
"noProd": true,
|
|
"noSecretRead": true,
|
|
"noRuntimeRestart": true,
|
|
"noLiveProbe": true,
|
|
"noHeavyE2E": true,
|
|
"noUniDeskRuntimeSubstitute": true
|
|
},
|
|
"sourceReports": {
|
|
"devPreflight": {
|
|
"path": "reports/dev-gate/dev-preflight-report.json",
|
|
"issue": "pikasTech/HWLAB#34",
|
|
"taskId": "dev-gate-preflight",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"commitId": "f64182b54fe6"
|
|
},
|
|
"devDeploy": {
|
|
"path": "reports/dev-gate/dev-deploy-report.json",
|
|
"issue": "pikasTech/HWLAB#33",
|
|
"taskId": "dev-deploy-apply",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"commitId": "7e29522"
|
|
},
|
|
"devArtifacts": {
|
|
"path": "reports/dev-gate/dev-artifacts.json",
|
|
"issue": "pikasTech/HWLAB#35",
|
|
"taskId": "dev-artifact-publish",
|
|
"lifecycleState": "active",
|
|
"status": "published",
|
|
"commitId": "7de6edd"
|
|
},
|
|
"devEdgeHealth": {
|
|
"path": "reports/dev-gate/dev-edge-health.json",
|
|
"issue": "pikasTech/HWLAB#36",
|
|
"taskId": "dev-edge-health",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"commitId": "c7de4745f491"
|
|
},
|
|
"devM2Smoke": {
|
|
"path": "reports/dev-gate/dev-m2-deploy-smoke-active.json",
|
|
"issue": "pikasTech/HWLAB#23",
|
|
"taskId": "m2-dev-deploy-smoke",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"commitId": "8e89409dda5d"
|
|
},
|
|
"devM3Hardware": {
|
|
"path": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"issue": "pikasTech/HWLAB#38",
|
|
"taskId": "dev-m3-hardware-loop",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"commitId": "c7de4745f491"
|
|
},
|
|
"devM4Agent": {
|
|
"path": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"issue": "pikasTech/HWLAB#37",
|
|
"taskId": "dev-m4-agent-loop",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"commitId": "d881a50"
|
|
},
|
|
"devM5Gate": {
|
|
"path": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"issue": "pikasTech/HWLAB#39",
|
|
"taskId": "dev-mvp-gate-report",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"commitId": "86d769525caf"
|
|
},
|
|
"d601Observability": {
|
|
"path": "reports/d601-k3s-readonly-observability.json",
|
|
"issue": "pikasTech/HWLAB#46",
|
|
"taskId": "d601-k3s-readonly-observability",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"commitId": "unknown"
|
|
}
|
|
},
|
|
"overall": {
|
|
"status": "blocked",
|
|
"green": false,
|
|
"reason": "Frontend revision 1e8805664970839b72be40c34636b08f6d18b131 is usable in degraded/read-only mode and EDGE/ROUTE DEV-LIVE evidence exists on :16666/:16667, but M5 remains blocked by artifact source drift, runtime durable adapter or skills injection readiness, missing M3 trusted loop operation evidence, and blocked M4 agent-loop preflight."
|
|
},
|
|
"latestFrontendDevFact": {
|
|
"revision": "1e8805664970839b72be40c34636b08f6d18b131",
|
|
"sources": [
|
|
"docs/dev-deploy-apply.md",
|
|
"docs/cloud-web-workbench.md",
|
|
"web/hwlab-cloud-web/index.html",
|
|
"web/hwlab-cloud-web/styles.css"
|
|
],
|
|
"evidence": [
|
|
"Cloud Web /health/live observed revision 1e8805664970839b72be40c34636b08f6d18b131",
|
|
"Cloud Workbench public browser endpoint is usable in degraded/read-only mode only",
|
|
"Frontend load/revision evidence cannot satisfy DB, M3 hardware-loop, M4 agent-loop, or M5 MVP e2e acceptance"
|
|
],
|
|
"commands": [
|
|
"node web/hwlab-cloud-web/scripts/check.mjs",
|
|
"node scripts/dev-cloud-workbench-smoke.mjs --source"
|
|
],
|
|
"summary": "#99/#108 Cloud Workbench revision 1e8805664970839b72be40c34636b08f6d18b131 is the latest DEV frontend visibility fact; API/runtime durability remains degraded, so it is degraded/read-only UI evidence only.",
|
|
"issue": "pikasTech/HWLAB#99",
|
|
"supports": [
|
|
"pikasTech/HWLAB#99",
|
|
"pikasTech/HWLAB#108",
|
|
"pikasTech/HWLAB#78"
|
|
],
|
|
"endpoint": "http://74.48.78.17:16666/",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"promotesM3M4M5": false
|
|
},
|
|
"dod": {
|
|
"status": "blocked",
|
|
"green": false,
|
|
"checks": [
|
|
{
|
|
"id": "m0-source-contract",
|
|
"status": "pass",
|
|
"evidenceLevel": "SOURCE",
|
|
"summary": "M0 contract checks are source-level evidence only."
|
|
},
|
|
{
|
|
"id": "m1-local-smoke",
|
|
"status": "pass",
|
|
"evidenceLevel": "LOCAL",
|
|
"summary": "M1 local smoke is not a live DEV substitute."
|
|
},
|
|
{
|
|
"id": "artifact-publish-digests",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "artifactState=contract-skeleton, ciPublished=false, registryVerified=false, sha256=0, not_published=13, targetCovered=false"
|
|
},
|
|
{
|
|
"id": "d601-k3s-observability",
|
|
"status": "blocked",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"summary": "D601 public DEV endpoints are reachable, but the runner cannot read /etc/rancher/k3s/k3s.yaml; classify as #46 runner permission/mount or read-only observability gap, not D601 global offline. Alternate read-only cluster probes are readable. runnerKubeconfigReadable=false, runnerKubeconfigProbeExitCode=0, runnerKubeconfigProbeStderr=empty, d601PublicEndpointsReachable=true, d601K3sUnavailable=false."
|
|
},
|
|
{
|
|
"id": "dev-edge-frp-16667",
|
|
"status": "pass",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"summary": "Committed edge report proves read-only public HTTP on :16667 /health and /health/live; this is route evidence, not DB/M3/M4/M5 acceptance."
|
|
},
|
|
{
|
|
"id": "cloud-api-db-ready",
|
|
"status": "pass",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"summary": "cloud-api DB status=ok; ready=true; connected=true; endpointSource=secret-url-host; liveDbEvidence=true."
|
|
},
|
|
{
|
|
"id": "m3-hardware-trusted-loop",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "M3 trusted loop is blocked until res_boxsimu_1:DO1 -> patch-panel -> res_boxsimu_2:DI1 is proven with operation/trace/audit/evidence."
|
|
},
|
|
{
|
|
"id": "m4-agent-loop-live",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "M4 agent loop live path is blocked before accepted agent scheduling/evidence closure."
|
|
},
|
|
{
|
|
"id": "m5-mvp-dev-live",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "M5 dry-run passed; bounded DEV-LIVE MVP e2e has not passed."
|
|
}
|
|
]
|
|
},
|
|
"currentDevLayering": {
|
|
"frontendRevision": {
|
|
"label": "Frontend DEV revision",
|
|
"status": "pass",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"summary": "http://74.48.78.17:16666/ serves the Cloud Workbench frontend revision 1e8805664970839b72be40c34636b08f6d18b131; deployed UI is usable in degraded/read-only mode only and this is browser/frontend evidence only.",
|
|
"evidence": [
|
|
"Cloud Web /health/live observed revision 1e8805664970839b72be40c34636b08f6d18b131",
|
|
"Cloud Workbench public browser endpoint is usable in degraded/read-only mode only",
|
|
"Frontend load/revision evidence cannot satisfy DB, M3 hardware-loop, M4 agent-loop, or M5 MVP e2e acceptance"
|
|
],
|
|
"nextRequired": "Keep frontend revision proof separate from DB live readiness, M3 hardware-loop evidence, M4 agent-loop evidence, and M5 acceptance."
|
|
},
|
|
"edgeRoute": {
|
|
"label": "EDGE/ROUTE live",
|
|
"status": "pass",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"summary": "http://74.48.78.17:16666/, http://74.48.78.17:16667/health, and http://74.48.78.17:16667/health/live returned observed HWLAB DEV route responses in the active M2 read-only smoke.",
|
|
"evidence": [
|
|
"http://74.48.78.17:16667/health -> HTTP 200 identity=hwlab-edge-proxy status=ok",
|
|
"http://74.48.78.17:16667/health/live -> HTTP 200 identity=hwlab-cloud-api status=degraded",
|
|
"http://74.48.78.17:16666/ -> HTTP 200 identity=HWLAB DEV MVP Gate status=ok"
|
|
],
|
|
"nextRequired": "Keep this separated from DB readiness, M3/M4 loop evidence, and M5 acceptance."
|
|
},
|
|
"dbLive": {
|
|
"label": "DB live/degraded",
|
|
"status": "pass",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"summary": "cloud-api DB status=ok; configReady=true; ready=true; connected=true; endpointSource=secret-url-host; liveDbEvidence=true.",
|
|
"evidence": [
|
|
"http://74.48.78.17:16667/health/live -> HTTP 200 serviceId=hwlab-cloud-api status=degraded db.ready=true db.connected=true db.liveDbEvidence=true runtime.blocker=runtime_durable_adapter_query_blocked runtime.migration=0001_cloud_core_skeleton",
|
|
"dev-edge-health active report remains older DB-live evidence and is superseded for M4/M5 blocker naming by current d881a50 M4 preflight evidence"
|
|
],
|
|
"nextRequired": "Provide live DB connection evidence through redacted health output; route reachability alone is insufficient."
|
|
},
|
|
"runtimeDurableAdapter": {
|
|
"label": "Runtime durable adapter",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "runtime adapter=postgres; durableRequested=true; durable=false; ready=false; blocker=runtime_durable_adapter_query_blocked; migration=0001_cloud_core_skeleton checked=false ready=false; queryResult=query_blocked.",
|
|
"evidence": [
|
|
"requiredEvidence=runtime_adapter_schema_migration_read_query",
|
|
"blockedLayer=durability_query",
|
|
"migration=0001_cloud_core_skeleton",
|
|
"queryAttempted=true"
|
|
],
|
|
"nextRequired": "Repair the postgres durable runtime adapter query/migration readiness and rerun health/M4 preflight without treating DB live as durability proof."
|
|
},
|
|
"agentSkillsInjection": {
|
|
"label": "Agent skills injection",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "DEV skills injection is incomplete: missing hwlab-agent-skills.HWLAB_SKILLS_VERSION, worker-dry-run.HWLAB_SKILL_VERSION_FROM_DEV.",
|
|
"evidence": [
|
|
"skills.commit=d881a50",
|
|
"skills.version=missing",
|
|
"worker.commit=d881a50",
|
|
"worker.version=",
|
|
"missing=hwlab-agent-skills.HWLAB_SKILLS_VERSION,worker-dry-run.HWLAB_SKILL_VERSION_FROM_DEV,manager.skillCommitId,manager.skillVersion"
|
|
],
|
|
"nextRequired": "Inject explicit skill commit and version into hwlab-agent-mgr, hwlab-agent-skills, and scheduled worker jobs before claiming M4/M5 agent evidence."
|
|
},
|
|
"codeAgentProvider": {
|
|
"label": "Code Agent provider",
|
|
"status": "pass",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"summary": "code-agent provider=openai-responses; status=available; ready=true.",
|
|
"evidence": [
|
|
"provider=openai-responses",
|
|
"status=available"
|
|
],
|
|
"nextRequired": "Keep provider-backed Code Agent readiness separate from DB live and runtime durable adapter readiness."
|
|
},
|
|
"d601RunnerObservability": {
|
|
"label": "D601 runner observability",
|
|
"status": "blocked",
|
|
"evidenceLevel": "DEV-LIVE",
|
|
"summary": "D601 public DEV endpoints are reachable, but the runner cannot read /etc/rancher/k3s/k3s.yaml; classify as #46 runner permission/mount or read-only observability gap, not D601 global offline. Alternate read-only cluster probes are readable. runnerKubeconfigReadable=false, runnerKubeconfigProbeExitCode=0, runnerKubeconfigProbeStderr=empty, d601PublicEndpointsReachable=true, d601K3sUnavailable=false.",
|
|
"evidence": [
|
|
"runnerKubeconfigReadable=false",
|
|
"runnerKubeconfigProbeExitCode=0",
|
|
"runnerKubeconfigProbeStderr=empty",
|
|
"d601PublicEndpointsReachable=true",
|
|
"d601K3sUnavailable=false"
|
|
],
|
|
"nextRequired": "Treat #46 runner kubeconfig/readonly gaps separately from D601 service health; rerun read-only observability after the mount or permission path is repaired."
|
|
},
|
|
"m3HardwareTrustedLoop": {
|
|
"label": "M3 hardware trusted loop",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "No live DEV operation was attempted because read-only direct target checks did not prove the required patch-panel-owned M3 route. Blocker: DEV exposes two box-simu endpoints, but live identities are not the required distinct resources res_boxsimu_1 and res_boxsimu_2; observed resources=res_boxsimu_1.",
|
|
"evidence": [
|
|
"operationId=not_observed",
|
|
"traceId=not_observed",
|
|
"auditId=not_observed",
|
|
"evidenceId=not_observed"
|
|
],
|
|
"nextRequired": "Only a real DEV res_boxsimu_1:DO1 -> hwlab-patch-panel -> res_boxsimu_2:DI1 observation with operation/trace/audit/evidence can clear M3."
|
|
},
|
|
"m4AgentLoop": {
|
|
"label": "M4 agent loop",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "Blocked at runtime durable adapter readiness before scheduling a DEV agent task.",
|
|
"evidence": [
|
|
"k3s:namespace=hwlab-dev:read=true",
|
|
"k3s:deploy/hwlab-agent-mgr:ready=1/1:available=True",
|
|
"k3s:deploy/hwlab-agent-skills:ready=1/1:available=True",
|
|
"k3s:svc/hwlab-agent-mgr:endpoints=1",
|
|
"k3s:svc/hwlab-agent-skills:endpoints=1",
|
|
"agent-mgr:/health/live:degraded:missing=manager.skillCommitId,manager.skillVersion",
|
|
"agent-skills:/health/live:ok:d881a50",
|
|
"worker-template:suspend=true:image=127.0.0.1:5000/hwlab/hwlab-agent-worker:d881a50",
|
|
"worker-job:server-dry-run=true:persisted=false",
|
|
"skills-injection:commit=d881a50:version=missing",
|
|
"secret-rbac:get=yes:secretResourcesRead=false",
|
|
"Public DEV API http://74.48.78.17:16667 health=200 live=200 with DB live ready and runtime durable adapter blocked; frontend http://74.48.78.17:16666/=200.",
|
|
"health:hwlab-edge-proxy:dev:ok",
|
|
"live:hwlab-cloud-api:degraded:runtime-durable-adapter-blocked:runtime_durable_adapter_query_blocked",
|
|
"db-live:ready=true:connected=true:liveDbEvidence=true",
|
|
"runtime-durable-adapter:adapter=postgres:blocker=runtime_durable_adapter_query_blocked:migration=0001_cloud_core_skeleton:migrationChecked=false:migrationReady=false:queryResult=query_blocked"
|
|
],
|
|
"nextRequired": "Do not schedule or claim the agent loop as live until DB live, runtime durable adapter, skills injection, and required evidence preconditions pass."
|
|
},
|
|
"artifactDesiredStateSource": {
|
|
"label": "artifact/desired-state source",
|
|
"status": "blocked",
|
|
"evidenceLevel": "BLOCKED",
|
|
"summary": "artifact targetCovered=false; artifactSource=7e29522b65c8; target=f64182b54fe6; desiredApplyMode=dry-run; mutationAttempted=false.",
|
|
"evidence": [
|
|
"artifactState=contract-skeleton",
|
|
"sourceStates=13 source-present, 0 intentionally-disabled",
|
|
"desiredState=ready dry-run-only"
|
|
],
|
|
"nextRequired": "Refresh artifact/source coverage for current origin/main and keep desired-state apply separate from read-only route proof."
|
|
}
|
|
},
|
|
"milestoneLevelClassification": [
|
|
{
|
|
"milestone": "M0",
|
|
"currentLevel": "SOURCE",
|
|
"status": "pass",
|
|
"strongestEvidenceLevel": "SOURCE",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"summary": "Source contract is green at source level only."
|
|
},
|
|
{
|
|
"milestone": "M1",
|
|
"currentLevel": "LOCAL",
|
|
"status": "pass",
|
|
"strongestEvidenceLevel": "LOCAL",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"summary": "Local smoke is green; it is not DEV-LIVE."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"currentLevel": "DEV-LIVE",
|
|
"status": "blocked",
|
|
"strongestEvidenceLevel": "DEV-LIVE",
|
|
"liveEvidence": "pass",
|
|
"summary": "Current public frontend/API route evidence is DEV-LIVE for route/front-end reachability only."
|
|
},
|
|
{
|
|
"milestone": "M3",
|
|
"currentLevel": "BLOCKED",
|
|
"status": "blocked",
|
|
"strongestEvidenceLevel": "LOCAL",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"summary": "DEV-LIVE hardware trusted loop is blocked; local/source shape is not acceptance."
|
|
},
|
|
{
|
|
"milestone": "M4",
|
|
"currentLevel": "BLOCKED",
|
|
"status": "blocked",
|
|
"strongestEvidenceLevel": "DRY-RUN",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"summary": "DEV-LIVE agent loop is blocked at runtime durable adapter or skills injection readiness; local smoke is not acceptance."
|
|
},
|
|
{
|
|
"milestone": "M5",
|
|
"currentLevel": "BLOCKED",
|
|
"status": "blocked",
|
|
"strongestEvidenceLevel": "DRY-RUN",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"summary": "Dry-run is green, but bounded DEV-LIVE MVP e2e is blocked."
|
|
}
|
|
],
|
|
"milestoneBlockerClassification": [
|
|
{
|
|
"milestone": "M3",
|
|
"status": "blocked",
|
|
"currentLevel": "BLOCKED",
|
|
"blockerClass": "direct-target-identity-gap",
|
|
"dependency": "Two distinct live box-simu resources and two distinct gateway-simu identities are required before M3 can run.",
|
|
"evidence": [
|
|
"operationId=not_observed",
|
|
"traceId=not_observed",
|
|
"auditId=not_observed",
|
|
"evidenceId=not_observed",
|
|
"runnerKubeconfigReadable=false",
|
|
"d601PublicEndpointsReachable=true",
|
|
"d601K3sUnavailable=false",
|
|
"directTargetSource=kubernetes-endpointslices",
|
|
"directTargetCounts={\"boxSimu\":2,\"gatewaySimu\":2,\"patchPanel\":1,\"distinctBoxResources\":1,\"distinctGatewayIdentities\":1}",
|
|
"patchPanelM3Wiring=false"
|
|
],
|
|
"nextRequired": "Fix DEV simulator instance identity so two box-simu pods report res_boxsimu_1/res_boxsimu_2 and two gateway-simu pods report distinct gateway identities.",
|
|
"nonPromotionReason": "Public frontend, route, and artifact evidence do not prove the required hardware loop."
|
|
},
|
|
{
|
|
"milestone": "M4",
|
|
"status": "blocked",
|
|
"currentLevel": "BLOCKED",
|
|
"blockerClass": "runtime_durable_adapter_query_blocked",
|
|
"dependency": "Cloud API /health/live must prove the postgres durable runtime adapter schema, 0001_cloud_core_skeleton migration ledger, and read-query readiness before live agent scheduling/evidence closure.",
|
|
"evidence": [
|
|
"db.status=ok",
|
|
"db.ready=true",
|
|
"db.connected=true",
|
|
"db.endpointSource=secret-url-host",
|
|
"db.liveDbEvidence=true",
|
|
"runtime.adapter=postgres",
|
|
"runtime.blocker=runtime_durable_adapter_query_blocked",
|
|
"runtime.migration=0001_cloud_core_skeleton",
|
|
"runtime.migration.ready=false",
|
|
"runtime.queryResult=query_blocked",
|
|
"skills.missing=hwlab-agent-skills.HWLAB_SKILLS_VERSION,worker-dry-run.HWLAB_SKILL_VERSION_FROM_DEV,manager.skillCommitId,manager.skillVersion"
|
|
],
|
|
"nextRequired": "Repair the runtime durable adapter query/migration readiness and rerun the M4 live preflight without scheduling a DEV agent task before preconditions pass.",
|
|
"nonPromotionReason": "Frontend revision and read-only route reachability do not prove DB-backed durable agent runtime readiness or skill version injection."
|
|
},
|
|
{
|
|
"milestone": "M5",
|
|
"status": "blocked",
|
|
"currentLevel": "BLOCKED",
|
|
"blockerClass": "composite-runtime-durable-m3-m4-live",
|
|
"dependency": "M5 needs DB live readiness, runtime durable adapter readiness, skills commit/version injection, M3 trusted-loop DEV evidence, M4 live preflight/evidence closure, and current source/artifact coverage.",
|
|
"evidence": [
|
|
"M5 dry-run is green",
|
|
"db.ready=true",
|
|
"runtime.blocker=runtime_durable_adapter_query_blocked",
|
|
"skills.status=blocked",
|
|
"m3.live=false",
|
|
"m4.live=false"
|
|
],
|
|
"nextRequired": "After DB/runtime durable adapter/skills/M3/M4 blockers are cleared, run only the bounded DEV MVP live gate command with explicit DEV/non-PROD confirmations.",
|
|
"nonPromotionReason": "No frontend, route-only, local, or dry-run evidence is allowed to stand in for bounded DEV-LIVE MVP e2e acceptance."
|
|
}
|
|
],
|
|
"milestones": [
|
|
{
|
|
"id": "M0",
|
|
"status": "pass",
|
|
"highestVisibleLevel": "SOURCE",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"evidenceCount": 1,
|
|
"blockerCount": 0,
|
|
"summary": "contract source is available; highest visible level is SOURCE; status is pass."
|
|
},
|
|
{
|
|
"id": "M1",
|
|
"status": "pass",
|
|
"highestVisibleLevel": "LOCAL",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"evidenceCount": 1,
|
|
"blockerCount": 0,
|
|
"summary": "local smoke is available; highest visible level is LOCAL; status is pass."
|
|
},
|
|
{
|
|
"id": "M2",
|
|
"status": "blocked",
|
|
"highestVisibleLevel": "DEV-LIVE",
|
|
"liveEvidence": "pass",
|
|
"evidenceCount": 7,
|
|
"blockerCount": 4,
|
|
"summary": "deploy/runtime readiness is blocked before live DEV; highest visible level is DEV-LIVE; status is blocked."
|
|
},
|
|
{
|
|
"id": "M3",
|
|
"status": "blocked",
|
|
"highestVisibleLevel": "LOCAL",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"evidenceCount": 3,
|
|
"blockerCount": 5,
|
|
"summary": "hardware loop has source/local shape but no live operation; highest visible level is LOCAL; status is blocked."
|
|
},
|
|
{
|
|
"id": "M4",
|
|
"status": "blocked",
|
|
"highestVisibleLevel": "DRY-RUN",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"evidenceCount": 3,
|
|
"blockerCount": 3,
|
|
"summary": "agent loop has local smoke but live preflight is blocked; highest visible level is DRY-RUN; status is blocked."
|
|
},
|
|
{
|
|
"id": "M5",
|
|
"status": "blocked",
|
|
"highestVisibleLevel": "DRY-RUN",
|
|
"liveEvidence": "missing_or_blocked",
|
|
"evidenceCount": 2,
|
|
"blockerCount": 11,
|
|
"summary": "dry-run is green but live MVP gate is blocked; highest visible level is DRY-RUN; status is blocked."
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"milestone": "M0",
|
|
"issue": "pikasTech/HWLAB#31",
|
|
"level": "SOURCE",
|
|
"status": "pass",
|
|
"category": "contract",
|
|
"lifecycleState": "active",
|
|
"sources": [
|
|
"docs/m0-contract-audit.md",
|
|
"protocol/README.md",
|
|
"protocol/evidence-chain.md",
|
|
"protocol/schemas/evidence-record.schema.json",
|
|
"protocol/examples/m0-contract/service-ids.json"
|
|
],
|
|
"commands": [
|
|
"node scripts/validate-contract.mjs",
|
|
"node scripts/validate-m0-contract.mjs",
|
|
"node scripts/validate-evidence-chain.mjs"
|
|
],
|
|
"summary": "Frozen service IDs, JSON-RPC, audit, topology, evidence, and DEV-only deploy contracts are source-ready."
|
|
},
|
|
{
|
|
"milestone": "M1",
|
|
"issue": "pikasTech/HWLAB#7",
|
|
"level": "LOCAL",
|
|
"status": "pass",
|
|
"category": "local-smoke",
|
|
"lifecycleState": "active",
|
|
"sources": [
|
|
"docs/m1-local-smoke.md",
|
|
"fixtures/mvp/runtime.json",
|
|
"scripts/m1-contract-smoke.mjs"
|
|
],
|
|
"commands": [
|
|
"node scripts/m1-contract-smoke.mjs"
|
|
],
|
|
"summary": "Local skeleton smoke covers cloud API, simulators, patch-panel routing, CLI dry-run boundary, and no DEV/PROD mutation."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#99",
|
|
"taskId": "cloud-web-workbench-frontend",
|
|
"lifecycleState": "active",
|
|
"level": "DEV-LIVE",
|
|
"status": "pass",
|
|
"category": "frontend-dev-revision",
|
|
"sources": [
|
|
"docs/dev-deploy-apply.md",
|
|
"docs/cloud-web-workbench.md",
|
|
"web/hwlab-cloud-web/index.html",
|
|
"web/hwlab-cloud-web/styles.css"
|
|
],
|
|
"commands": [
|
|
"node web/hwlab-cloud-web/scripts/check.mjs",
|
|
"node scripts/dev-cloud-workbench-smoke.mjs --source"
|
|
],
|
|
"evidence": [
|
|
"Cloud Web /health/live observed revision 1e8805664970839b72be40c34636b08f6d18b131",
|
|
"Cloud Workbench public browser endpoint is usable in degraded/read-only mode only",
|
|
"Frontend load/revision evidence cannot satisfy DB, M3 hardware-loop, M4 agent-loop, or M5 MVP e2e acceptance"
|
|
],
|
|
"summary": "#99/#108 Cloud Workbench revision 1e8805664970839b72be40c34636b08f6d18b131 is the latest DEV frontend visibility fact; API/runtime durability remains degraded, so it is degraded/read-only UI evidence only."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#34",
|
|
"taskId": "dev-gate-preflight",
|
|
"reportPath": "reports/dev-gate/dev-preflight-report.json",
|
|
"commitId": "f64182b54fe6",
|
|
"lifecycleState": "active",
|
|
"level": "SOURCE",
|
|
"status": "pass",
|
|
"category": "deploy-manifest",
|
|
"commands": [
|
|
"node --check scripts/dev-gate-preflight.mjs",
|
|
"node --check scripts/src/dev-gate-preflight.mjs",
|
|
"node --check scripts/src/registry-capabilities.mjs",
|
|
"node --check scripts/refresh-artifact-catalog.mjs",
|
|
"node scripts/dev-gate-preflight.mjs",
|
|
"node --check scripts/validate-dev-gate-report.mjs",
|
|
"node scripts/validate-dev-gate-report.mjs"
|
|
],
|
|
"evidence": [
|
|
"source-contract-static=pass",
|
|
"artifact catalog state=contract-skeleton",
|
|
"catalog commit=c7de474"
|
|
],
|
|
"summary": "Deploy manifests, FRP/master-edge contracts, and safety boundary are source-readable and scoped to hwlab-dev."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#33",
|
|
"taskId": "dev-deploy-apply",
|
|
"reportPath": "reports/dev-gate/dev-deploy-report.json",
|
|
"commitId": "7e29522",
|
|
"lifecycleState": "active",
|
|
"level": "DRY-RUN",
|
|
"status": "pass",
|
|
"category": "deploy-apply",
|
|
"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: 7e29522",
|
|
"namespace: hwlab-dev",
|
|
"workloads planned: 13",
|
|
"kubectl executor: /usr/local/bin/kubectl",
|
|
"live health: pass",
|
|
"template job replacements: 2"
|
|
],
|
|
"summary": "DEV dry-run preflight passed."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#35",
|
|
"taskId": "dev-artifact-publish",
|
|
"reportPath": "reports/dev-gate/dev-artifacts.json",
|
|
"commitId": "7de6edd",
|
|
"lifecycleState": "active",
|
|
"level": "DRY-RUN",
|
|
"status": "published",
|
|
"category": "artifact-publish",
|
|
"commands": [
|
|
"node --check scripts/dev-artifact-publish.mjs",
|
|
"node --check scripts/src/dev-artifact-services.mjs",
|
|
"node --check scripts/src/registry-capabilities.mjs",
|
|
"node --check scripts/preflight-dev-base-image.mjs",
|
|
"node --check scripts/src/dev-base-image-preflight.mjs",
|
|
"node scripts/preflight-dev-base-image.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"
|
|
],
|
|
"evidence": [
|
|
"services=13",
|
|
"baseImagePreflight=ready",
|
|
"published=13/13"
|
|
],
|
|
"summary": "Artifact publish preflight exists but is blocked before any real image publish."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#23",
|
|
"taskId": "m2-dev-deploy-smoke",
|
|
"reportPath": "reports/dev-gate/dev-m2-deploy-smoke-active.json",
|
|
"commitId": "8e89409dda5d",
|
|
"lifecycleState": "active",
|
|
"level": "DEV-LIVE",
|
|
"status": "pass",
|
|
"category": "public-entrypoints-read-only",
|
|
"commands": [
|
|
"curl -fsS --max-time 10 http://74.48.78.17:16667/health",
|
|
"curl -fsS --max-time 10 http://74.48.78.17:16667/health/live",
|
|
"curl -fsS --max-time 10 http://74.48.78.17:16666/"
|
|
],
|
|
"evidence": [
|
|
"http://74.48.78.17:16667/health -> HTTP 200 identity=hwlab-edge-proxy status=ok",
|
|
"http://74.48.78.17:16667/health/live -> HTTP 200 identity=hwlab-cloud-api status=degraded",
|
|
"http://74.48.78.17:16666/ -> HTTP 200 identity=HWLAB DEV MVP Gate status=ok"
|
|
],
|
|
"summary": "Read-only probes prove the frozen public DEV entrypoints on :16666/:16667 are reachable; this is EDGE/ROUTE evidence only."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#36",
|
|
"taskId": "dev-edge-health",
|
|
"reportPath": "reports/dev-gate/dev-edge-health.json",
|
|
"commitId": "c7de4745f491",
|
|
"lifecycleState": "active",
|
|
"level": "DEV-LIVE",
|
|
"status": "blocker",
|
|
"category": "edge-frp-contract",
|
|
"commands": [
|
|
"node --check scripts/validate-dev-gate-report.mjs",
|
|
"node scripts/validate-dev-gate-report.mjs",
|
|
"node --check scripts/dev-edge-health-smoke.mjs",
|
|
"node --check scripts/src/dev-edge-health-smoke-lib.mjs",
|
|
"node --test scripts/src/dev-edge-health-smoke-lib.test.mjs",
|
|
"node scripts/dev-edge-health-smoke.mjs --live --write-report"
|
|
],
|
|
"evidence": [
|
|
"mode=live-read-only",
|
|
"classification=app_health_blocker",
|
|
"cloudApiDb=degraded"
|
|
],
|
|
"summary": "Committed edge report proves read-only public HTTP on :16667 /health and /health/live; remaining edge report blocker is DB readiness, not route/frp reachability."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#46",
|
|
"taskId": "d601-k3s-readonly-observability",
|
|
"reportPath": "reports/d601-k3s-readonly-observability.json",
|
|
"commitId": "unknown",
|
|
"lifecycleState": "active",
|
|
"level": "DEV-LIVE",
|
|
"status": "blocked",
|
|
"category": "d601-observability",
|
|
"commands": [
|
|
"node --check scripts/d601-k3s-readonly-observability.mjs",
|
|
"node --check scripts/src/d601-k3s-readonly-observability.mjs",
|
|
"node scripts/d601-k3s-readonly-observability.mjs"
|
|
],
|
|
"evidence": [
|
|
"runnerKubeconfigReadable=false",
|
|
"runnerKubeconfigProbeExitCode=0",
|
|
"runnerKubeconfigProbeStderr=empty",
|
|
"d601PublicEndpointsReachable=true",
|
|
"d601K3sUnavailable=false"
|
|
],
|
|
"summary": "D601 public DEV endpoints are reachable, but the runner cannot read /etc/rancher/k3s/k3s.yaml; classify as #46 runner permission/mount or read-only observability gap, not D601 global offline. Alternate read-only cluster probes are readable. runnerKubeconfigReadable=false, runnerKubeconfigProbeExitCode=0, runnerKubeconfigProbeStderr=empty, d601PublicEndpointsReachable=true, d601K3sUnavailable=false."
|
|
},
|
|
{
|
|
"milestone": "M3",
|
|
"issue": "pikasTech/HWLAB#38",
|
|
"taskId": "dev-m3-hardware-loop",
|
|
"reportPath": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"commitId": "c7de4745f491",
|
|
"lifecycleState": "active",
|
|
"level": "SOURCE",
|
|
"status": "manifest-ready",
|
|
"category": "hardware-loop-cardinality",
|
|
"commands": [
|
|
"node scripts/validate-dev-m3-cardinality.mjs"
|
|
],
|
|
"evidence": [
|
|
"deploy-skeleton-m3-cardinality=manifest-ready"
|
|
],
|
|
"summary": "Static DEV manifest cardinality declares two box simulators, two gateway simulators, and one patch panel."
|
|
},
|
|
{
|
|
"milestone": "M3",
|
|
"issue": "pikasTech/HWLAB#39",
|
|
"taskId": "dev-mvp-gate-report",
|
|
"reportPath": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"commitId": "86d769525caf",
|
|
"lifecycleState": "active",
|
|
"level": "LOCAL",
|
|
"status": "blocked",
|
|
"category": "hardware-loop-local",
|
|
"commands": [
|
|
"node scripts/m3-hardware-loop-smoke.mjs",
|
|
"node scripts/dev-m3-hardware-loop-smoke.mjs --live --confirm-dev --confirmed-non-production"
|
|
],
|
|
"evidence": [
|
|
"Local M3 hardware loop smoke passed",
|
|
"Live DEV M3 smoke reached 16667 ingress and direct simulator/patch-panel Pod URLs",
|
|
"Live DEV M3 blocked: patch-panel active DO1 -> DI1 connection missing"
|
|
],
|
|
"summary": "Local M3 remains green, but active DEV-LIVE M3 is blocked by hardware loop topology."
|
|
},
|
|
{
|
|
"milestone": "M3",
|
|
"issue": "pikasTech/HWLAB#38",
|
|
"taskId": "dev-m3-hardware-loop",
|
|
"reportPath": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"commitId": "c7de4745f491",
|
|
"lifecycleState": "active",
|
|
"level": "BLOCKED",
|
|
"status": "not_run",
|
|
"category": "hardware-loop-live",
|
|
"commands": [
|
|
"node scripts/dev-m3-hardware-loop-smoke.mjs --dry-run",
|
|
"node scripts/dev-m3-hardware-loop-smoke.mjs --live --confirm-dev --expect-non-prod"
|
|
],
|
|
"evidence": [
|
|
"operationId=not_observed",
|
|
"traceId=not_observed",
|
|
"auditId=not_observed",
|
|
"evidenceId=not_observed"
|
|
],
|
|
"summary": "No live DEV operation was attempted because read-only direct target checks did not prove the required patch-panel-owned M3 route. Blocker: DEV exposes two box-simu endpoints, but live identities are not the required distinct resources res_boxsimu_1 and res_boxsimu_2; observed resources=res_boxsimu_1."
|
|
},
|
|
{
|
|
"milestone": "M4",
|
|
"issue": "pikasTech/HWLAB#37",
|
|
"taskId": "dev-m4-agent-loop",
|
|
"reportPath": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"commitId": "d881a50",
|
|
"lifecycleState": "active",
|
|
"level": "LOCAL",
|
|
"status": "pass",
|
|
"category": "agent-loop-local",
|
|
"commands": [
|
|
"node scripts/m4-agent-loop-smoke.mjs"
|
|
],
|
|
"evidence": [
|
|
"Local runtime skeleton smoke confirms create/start/trace/finish/cleanup coverage.",
|
|
"Workspace isolation and explicit skills commit wiring are covered by fixture assertions."
|
|
],
|
|
"summary": "Local contract smoke passes on the repo fixture."
|
|
},
|
|
{
|
|
"milestone": "M4",
|
|
"issue": "pikasTech/HWLAB#37",
|
|
"taskId": "dev-m4-agent-loop",
|
|
"reportPath": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"commitId": "d881a50",
|
|
"lifecycleState": "active",
|
|
"level": "DRY-RUN",
|
|
"status": "pass",
|
|
"category": "agent-loop-dry-run",
|
|
"commands": [
|
|
"node scripts/dev-m4-agent-loop-smoke.mjs --dry-run"
|
|
],
|
|
"evidence": [
|
|
"hwlab-agent-mgr:session=agt_m4_agent_loop_01:created=queued:final=cleanup",
|
|
"hwlab-agent-worker:session=wkr_agt_m4_agent_loop_01:status=cleanup",
|
|
"workspace:vol_agt_m4_agent_loop_01:cleaned=true:existsAfterCleanup=false",
|
|
"hwlab-agent-skills:commit=6509a35:version=v1",
|
|
"trace:trc_agt_m4_agent_loop_01:events=5",
|
|
"evidence:evi_agt_m4_agent_loop_01:kind=report",
|
|
"cleanup:cln_agt_m4_agent_loop_01:removed=true"
|
|
],
|
|
"summary": "Local dry-run covered agent manager, worker, workspace isolation, skills commit, trace, evidence, and cleanup without live DEV mutation."
|
|
},
|
|
{
|
|
"milestone": "M4",
|
|
"issue": "pikasTech/HWLAB#37",
|
|
"taskId": "dev-m4-agent-loop",
|
|
"reportPath": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"commitId": "d881a50",
|
|
"lifecycleState": "active",
|
|
"level": "BLOCKED",
|
|
"status": "blocked",
|
|
"category": "agent-loop-live-preflight",
|
|
"commands": [
|
|
"node scripts/dev-m4-agent-loop-smoke.mjs --live --confirm-dev --confirmed-non-production"
|
|
],
|
|
"evidence": [
|
|
"k3s:namespace=hwlab-dev:read=true",
|
|
"k3s:deploy/hwlab-agent-mgr:ready=1/1:available=True",
|
|
"k3s:deploy/hwlab-agent-skills:ready=1/1:available=True",
|
|
"k3s:svc/hwlab-agent-mgr:endpoints=1",
|
|
"k3s:svc/hwlab-agent-skills:endpoints=1",
|
|
"agent-mgr:/health/live:degraded:missing=manager.skillCommitId,manager.skillVersion",
|
|
"agent-skills:/health/live:ok:d881a50",
|
|
"worker-template:suspend=true:image=127.0.0.1:5000/hwlab/hwlab-agent-worker:d881a50",
|
|
"worker-job:server-dry-run=true:persisted=false",
|
|
"skills-injection:commit=d881a50:version=missing",
|
|
"secret-rbac:get=yes:secretResourcesRead=false",
|
|
"Public DEV API http://74.48.78.17:16667 health=200 live=200 with DB live ready and runtime durable adapter blocked; frontend http://74.48.78.17:16666/=200.",
|
|
"health:hwlab-edge-proxy:dev:ok",
|
|
"live:hwlab-cloud-api:degraded:runtime-durable-adapter-blocked:runtime_durable_adapter_query_blocked",
|
|
"db-live:ready=true:connected=true:liveDbEvidence=true",
|
|
"runtime-durable-adapter:adapter=postgres:blocker=runtime_durable_adapter_query_blocked:migration=0001_cloud_core_skeleton:migrationChecked=false:migrationReady=false:queryResult=query_blocked"
|
|
],
|
|
"summary": "Blocked at runtime durable adapter readiness before scheduling a DEV agent task."
|
|
},
|
|
{
|
|
"milestone": "M5",
|
|
"issue": "pikasTech/HWLAB#39",
|
|
"taskId": "dev-mvp-gate-report",
|
|
"reportPath": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"commitId": "86d769525caf",
|
|
"lifecycleState": "active",
|
|
"level": "DRY-RUN",
|
|
"status": "pass",
|
|
"category": "mvp-e2e-dry-run",
|
|
"commands": [
|
|
"node tools/hwlab-cli/bin/hwlab-cli.mjs health",
|
|
"node tools/hwlab-cli/bin/hwlab-cli.mjs test e2e --env dev --mvp --dry-run",
|
|
"node scripts/m5-mvp-e2e-dry-run.mjs"
|
|
],
|
|
"evidence": [
|
|
"hwlab-cli health -> status: ok, environment: dev, endpoint: http://74.48.78.17:16667, projects: 2",
|
|
"hwlab-cli dry-run -> 9 steps, 13 artifacts, 14 health contracts, 2 hardware operations, 2 evidence records, 0 network calls",
|
|
"M5 MVP E2E dry-run passed: 9 steps, 13 artifacts, 14 health contracts, 2 hardware operations, 2 evidence records, 0 network calls"
|
|
],
|
|
"summary": "The M5 orchestration dry-run is green, but it remains fixture-only and does not establish a live DEV gate."
|
|
},
|
|
{
|
|
"milestone": "M5",
|
|
"issue": "pikasTech/HWLAB#39",
|
|
"taskId": "dev-mvp-gate-report",
|
|
"reportPath": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"commitId": "86d769525caf",
|
|
"lifecycleState": "active",
|
|
"level": "BLOCKED",
|
|
"status": "blocked",
|
|
"category": "mvp-e2e-live",
|
|
"commands": [
|
|
"curl -fsS --max-time 8 http://74.48.78.17:16666/",
|
|
"curl -fsS --max-time 8 http://74.48.78.17:16667/health/live",
|
|
"curl -fsS --max-time 8 http://74.48.78.17:16667/health",
|
|
"HWLAB_DEV_BOX_SIMU_1_URL=http://10.42.0.200:7201 HWLAB_DEV_BOX_SIMU_2_URL=http://10.42.0.208:7201 HWLAB_DEV_GATEWAY_SIMU_1_URL=http://10.42.0.209:7101 HWLAB_DEV_GATEWAY_SIMU_2_URL=http://10.42.0.204:7101 HWLAB_DEV_PATCH_PANEL_URL=http://10.42.0.205:7301 node scripts/dev-m3-hardware-loop-smoke.mjs --live --confirm-dev --confirmed-non-production",
|
|
"node scripts/dev-m4-agent-loop-smoke.mjs --live --confirm-dev --confirmed-non-production"
|
|
],
|
|
"evidence": [
|
|
"http://74.48.78.17:16666/ -> HTTP 200 text/html, title=HWLAB DEV MVP Gate",
|
|
"http://74.48.78.17:16667/health -> HTTP 200 serviceId=hwlab-edge-proxy status=ok commit=d881a50",
|
|
"http://74.48.78.17:16667/health/live -> HTTP 200 serviceId=hwlab-cloud-api status=degraded db.ready=true db.connected=true db.liveDbEvidence=true runtime.blocker=runtime_durable_adapter_query_blocked runtime.migration=0001_cloud_core_skeleton",
|
|
"dev-edge-health active report remains older DB-live evidence and is superseded for M4/M5 blocker naming by current d881a50 M4 preflight evidence",
|
|
"dev-m3-hardware-loop active report -> blocked, classification=hardware loop, summary=patch-panel active DO1 -> DI1 connection missing",
|
|
"dev-m4-agent-loop active report -> blocked, classification=runtime_durable_adapter_query_blocked, summary=runtime durable adapter query/migration readiness is blocked; skills commit/version injection is incomplete"
|
|
],
|
|
"summary": "Public DEV route/frp is reachable on 16666/16667, but live MVP remains blocked by runtime_durable_adapter_query_blocked, skills commit/version injection, and the M3 hardware loop topology; no DB-live-only blocker is counted as current M4/M5 evidence."
|
|
}
|
|
],
|
|
"levels": {
|
|
"SOURCE": [
|
|
{
|
|
"milestone": "M0",
|
|
"issue": "pikasTech/HWLAB#31",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "contract",
|
|
"summary": "Frozen service IDs, JSON-RPC, audit, topology, evidence, and DEV-only deploy contracts are source-ready."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#34",
|
|
"taskId": "dev-gate-preflight",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "deploy-manifest",
|
|
"reportPath": "reports/dev-gate/dev-preflight-report.json",
|
|
"summary": "Deploy manifests, FRP/master-edge contracts, and safety boundary are source-readable and scoped to hwlab-dev."
|
|
},
|
|
{
|
|
"milestone": "M3",
|
|
"issue": "pikasTech/HWLAB#38",
|
|
"taskId": "dev-m3-hardware-loop",
|
|
"lifecycleState": "active",
|
|
"status": "manifest-ready",
|
|
"category": "hardware-loop-cardinality",
|
|
"reportPath": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"summary": "Static DEV manifest cardinality declares two box simulators, two gateway simulators, and one patch panel."
|
|
}
|
|
],
|
|
"LOCAL": [
|
|
{
|
|
"milestone": "M1",
|
|
"issue": "pikasTech/HWLAB#7",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "local-smoke",
|
|
"summary": "Local skeleton smoke covers cloud API, simulators, patch-panel routing, CLI dry-run boundary, and no DEV/PROD mutation."
|
|
},
|
|
{
|
|
"milestone": "M3",
|
|
"issue": "pikasTech/HWLAB#39",
|
|
"taskId": "dev-mvp-gate-report",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"category": "hardware-loop-local",
|
|
"reportPath": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"summary": "Local M3 remains green, but active DEV-LIVE M3 is blocked by hardware loop topology."
|
|
},
|
|
{
|
|
"milestone": "M4",
|
|
"issue": "pikasTech/HWLAB#37",
|
|
"taskId": "dev-m4-agent-loop",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "agent-loop-local",
|
|
"reportPath": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"summary": "Local contract smoke passes on the repo fixture."
|
|
}
|
|
],
|
|
"DRY-RUN": [
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#33",
|
|
"taskId": "dev-deploy-apply",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "deploy-apply",
|
|
"reportPath": "reports/dev-gate/dev-deploy-report.json",
|
|
"summary": "DEV dry-run preflight passed."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#35",
|
|
"taskId": "dev-artifact-publish",
|
|
"lifecycleState": "active",
|
|
"status": "published",
|
|
"category": "artifact-publish",
|
|
"reportPath": "reports/dev-gate/dev-artifacts.json",
|
|
"summary": "Artifact publish preflight exists but is blocked before any real image publish."
|
|
},
|
|
{
|
|
"milestone": "M4",
|
|
"issue": "pikasTech/HWLAB#37",
|
|
"taskId": "dev-m4-agent-loop",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "agent-loop-dry-run",
|
|
"reportPath": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"summary": "Local dry-run covered agent manager, worker, workspace isolation, skills commit, trace, evidence, and cleanup without live DEV mutation."
|
|
},
|
|
{
|
|
"milestone": "M5",
|
|
"issue": "pikasTech/HWLAB#39",
|
|
"taskId": "dev-mvp-gate-report",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "mvp-e2e-dry-run",
|
|
"reportPath": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"summary": "The M5 orchestration dry-run is green, but it remains fixture-only and does not establish a live DEV gate."
|
|
}
|
|
],
|
|
"DEV-LIVE": [
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#99",
|
|
"taskId": "cloud-web-workbench-frontend",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "frontend-dev-revision",
|
|
"summary": "#99/#108 Cloud Workbench revision 1e8805664970839b72be40c34636b08f6d18b131 is the latest DEV frontend visibility fact; API/runtime durability remains degraded, so it is degraded/read-only UI evidence only."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#23",
|
|
"taskId": "m2-dev-deploy-smoke",
|
|
"lifecycleState": "active",
|
|
"status": "pass",
|
|
"category": "public-entrypoints-read-only",
|
|
"reportPath": "reports/dev-gate/dev-m2-deploy-smoke-active.json",
|
|
"summary": "Read-only probes prove the frozen public DEV entrypoints on :16666/:16667 are reachable; this is EDGE/ROUTE evidence only."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#36",
|
|
"taskId": "dev-edge-health",
|
|
"lifecycleState": "active",
|
|
"status": "blocker",
|
|
"category": "edge-frp-contract",
|
|
"reportPath": "reports/dev-gate/dev-edge-health.json",
|
|
"summary": "Committed edge report proves read-only public HTTP on :16667 /health and /health/live; remaining edge report blocker is DB readiness, not route/frp reachability."
|
|
},
|
|
{
|
|
"milestone": "M2",
|
|
"issue": "pikasTech/HWLAB#46",
|
|
"taskId": "d601-k3s-readonly-observability",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"category": "d601-observability",
|
|
"reportPath": "reports/d601-k3s-readonly-observability.json",
|
|
"summary": "D601 public DEV endpoints are reachable, but the runner cannot read /etc/rancher/k3s/k3s.yaml; classify as #46 runner permission/mount or read-only observability gap, not D601 global offline. Alternate read-only cluster probes are readable. runnerKubeconfigReadable=false, runnerKubeconfigProbeExitCode=0, runnerKubeconfigProbeStderr=empty, d601PublicEndpointsReachable=true, d601K3sUnavailable=false."
|
|
}
|
|
],
|
|
"BLOCKED": [
|
|
{
|
|
"milestone": "M3",
|
|
"issue": "pikasTech/HWLAB#38",
|
|
"taskId": "dev-m3-hardware-loop",
|
|
"lifecycleState": "active",
|
|
"status": "not_run",
|
|
"category": "hardware-loop-live",
|
|
"reportPath": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"summary": "No live DEV operation was attempted because read-only direct target checks did not prove the required patch-panel-owned M3 route. Blocker: DEV exposes two box-simu endpoints, but live identities are not the required distinct resources res_boxsimu_1 and res_boxsimu_2; observed resources=res_boxsimu_1."
|
|
},
|
|
{
|
|
"milestone": "M4",
|
|
"issue": "pikasTech/HWLAB#37",
|
|
"taskId": "dev-m4-agent-loop",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"category": "agent-loop-live-preflight",
|
|
"reportPath": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"summary": "Blocked at runtime durable adapter readiness before scheduling a DEV agent task."
|
|
},
|
|
{
|
|
"milestone": "M5",
|
|
"issue": "pikasTech/HWLAB#39",
|
|
"taskId": "dev-mvp-gate-report",
|
|
"lifecycleState": "active",
|
|
"status": "blocked",
|
|
"category": "mvp-e2e-live",
|
|
"reportPath": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"summary": "Public DEV route/frp is reachable on 16666/16667, but live MVP remains blocked by runtime_durable_adapter_query_blocked, skills commit/version injection, and the M3 hardware loop topology; no DB-live-only blocker is counted as current M4/M5 evidence."
|
|
},
|
|
{
|
|
"priority": "P1",
|
|
"order": 3,
|
|
"type": "runtime_blocker",
|
|
"scope": "artifact-catalog",
|
|
"sourceIssue": "pikasTech/HWLAB#34",
|
|
"source": "reports/dev-gate/dev-preflight-report.json",
|
|
"summary": "deploy/artifact-catalog.dev.json does not prove published artifacts for origin/main f64182b; ciPublished=false, registryVerified=false, not_published=13.",
|
|
"nextTask": "Run the DEV artifact publish workflow, then record only real sha256 digests with `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json`; if publish is still blocked, keep not_published via `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked`."
|
|
},
|
|
{
|
|
"priority": "P1",
|
|
"order": 3,
|
|
"type": "contract_blocker",
|
|
"scope": "artifact-source-commit",
|
|
"sourceIssue": "pikasTech/HWLAB#34",
|
|
"source": "reports/dev-gate/dev-preflight-report.json",
|
|
"summary": "source commit origin/main f64182b is not covered by artifact source 7e29522; target changes since the artifact source touch artifact build inputs.",
|
|
"nextTask": "Refresh without fake digests using `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked`, or after a successful publish run `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json`."
|
|
},
|
|
{
|
|
"priority": "P1",
|
|
"order": 3,
|
|
"type": "runtime_blocker",
|
|
"scope": "dev-artifact-publish",
|
|
"sourceIssue": "pikasTech/HWLAB#34",
|
|
"source": "reports/dev-gate/dev-preflight-report.json",
|
|
"summary": "reports/dev-gate/dev-artifacts.json does not prove all required HWLAB service artifacts for origin/main f64182b; current status is published with 13/13 required services published and source states resolved: 13 source-present, 0 intentionally-disabled.",
|
|
"nextTask": "Complete DEV artifact publishing for every enabled required HWLAB service at the artifact source commit, or prove the target commit has no artifact build input changes; keep disabled services marked not_published with reasons."
|
|
},
|
|
{
|
|
"priority": "P1",
|
|
"order": 4,
|
|
"type": "observability_blocker",
|
|
"scope": "runner-kubeconfig-readonly-gap",
|
|
"sourceIssue": "pikasTech/HWLAB#46",
|
|
"source": "reports/d601-k3s-readonly-observability.json",
|
|
"summary": "The runner cannot read /etc/rancher/k3s/k3s.yaml; classify this as a runner permission/mount gap, not a D601 global outage. Alternate read-only cluster probes and public DEV endpoint probes are reported separately.",
|
|
"nextTask": "Provide the approved read-only runner kubeconfig mount or document the intended alternate KUBECONFIG path, then rerun the read-only report."
|
|
},
|
|
{
|
|
"priority": "P1",
|
|
"order": 5,
|
|
"type": "agent_blocker",
|
|
"scope": "agent-mgr-health",
|
|
"sourceIssue": "pikasTech/HWLAB#37",
|
|
"source": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"summary": "hwlab-agent-mgr /health/live is degraded."
|
|
},
|
|
{
|
|
"priority": "P1",
|
|
"order": 5,
|
|
"type": "runtime_blocker",
|
|
"scope": "runtime-durable-adapter",
|
|
"sourceIssue": "pikasTech/HWLAB#164",
|
|
"source": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"summary": "cloud-api durable runtime adapter is blocked: runtime_durable_adapter_query_blocked; adapter=postgres; durable=false; ready=false; migration=0001_cloud_core_skeleton checked=false ready=false missing=true; queryResult=query_blocked."
|
|
},
|
|
{
|
|
"priority": "P1",
|
|
"order": 5,
|
|
"type": "agent_blocker",
|
|
"scope": "skills-commit-version-injection",
|
|
"sourceIssue": "pikasTech/HWLAB#37",
|
|
"source": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"summary": "DEV skills injection is incomplete: missing hwlab-agent-skills.HWLAB_SKILLS_VERSION, worker-dry-run.HWLAB_SKILL_VERSION_FROM_DEV."
|
|
},
|
|
{
|
|
"priority": "P0",
|
|
"order": 6,
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-box-simu-identity",
|
|
"sourceIssue": "pikasTech/HWLAB#64",
|
|
"source": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"summary": "DEV exposes two box-simu endpoints, but live identities are not the required distinct resources res_boxsimu_1 and res_boxsimu_2; observed resources=res_boxsimu_1."
|
|
},
|
|
{
|
|
"priority": "P0",
|
|
"order": 6,
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-gateway-simu-identity",
|
|
"sourceIssue": "pikasTech/HWLAB#64",
|
|
"source": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"summary": "DEV exposes two gateway-simu endpoints, but live gateway identities are not distinct; observed identities=gateway-a:gws_gateway-a."
|
|
},
|
|
{
|
|
"priority": "P0",
|
|
"order": 6,
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-patch-panel-wiring",
|
|
"sourceIssue": "pikasTech/HWLAB#64",
|
|
"source": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"summary": "DEV patch-panel is callable, but live wiring does not contain res_boxsimu_1:DO1 -> res_boxsimu_2:DI1; active=res_boxsim_alpha:uart0->res_boxsim_beta:uart0, res_boxsim_alpha:gpio0->res_boxsim_beta:gpio0; configured=res_boxsim_alpha:uart0->res_boxsim_beta:uart0, res_boxsim_alpha:gpio0->res_boxsim_beta:gpio0."
|
|
},
|
|
{
|
|
"priority": "P0",
|
|
"order": 6,
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-hardware-loop-runtime",
|
|
"sourceIssue": "pikasTech/HWLAB#39",
|
|
"source": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"summary": "Live M3 smoke reached DEV simulators, but patch-panel active DO1 -> DI1 connection is missing."
|
|
},
|
|
{
|
|
"priority": "P3",
|
|
"order": 99,
|
|
"type": "safety_blocker",
|
|
"scope": "m3-live-write-authorization",
|
|
"sourceIssue": "pikasTech/HWLAB#38",
|
|
"source": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"summary": "Plan-only mode is intentionally non-mutating; run the bounded live smoke only after explicit DEV/non-PROD approval and after read-only preconditions identify the exact HWLAB targets."
|
|
}
|
|
]
|
|
},
|
|
"blockers": [
|
|
{
|
|
"id": "dev-gate-preflight:artifact-catalog",
|
|
"priority": "P1",
|
|
"type": "runtime_blocker",
|
|
"scope": "artifact-catalog",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-preflight-report.json",
|
|
"sourceIssue": "pikasTech/HWLAB#34",
|
|
"summary": "deploy/artifact-catalog.dev.json does not prove published artifacts for origin/main f64182b; ciPublished=false, registryVerified=false, not_published=13.",
|
|
"nextTask": "Run the DEV artifact publish workflow, then record only real sha256 digests with `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json`; if publish is still blocked, keep not_published via `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked`.",
|
|
"unblockOrder": 3,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#35",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#39"
|
|
],
|
|
"rationale": "The gate cannot promote deploy or runtime observations without immutable image provenance and digests."
|
|
},
|
|
{
|
|
"id": "dev-gate-preflight:artifact-source-commit",
|
|
"priority": "P1",
|
|
"type": "contract_blocker",
|
|
"scope": "artifact-source-commit",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-preflight-report.json",
|
|
"sourceIssue": "pikasTech/HWLAB#34",
|
|
"summary": "source commit origin/main f64182b is not covered by artifact source 7e29522; target changes since the artifact source touch artifact build inputs.",
|
|
"nextTask": "Refresh without fake digests using `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked`, or after a successful publish run `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json`.",
|
|
"unblockOrder": 3,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#35",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#39"
|
|
],
|
|
"rationale": "The gate cannot promote deploy or runtime observations without immutable image provenance and digests."
|
|
},
|
|
{
|
|
"id": "dev-gate-preflight:dev-artifact-publish",
|
|
"priority": "P1",
|
|
"type": "runtime_blocker",
|
|
"scope": "dev-artifact-publish",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-preflight-report.json",
|
|
"sourceIssue": "pikasTech/HWLAB#34",
|
|
"summary": "reports/dev-gate/dev-artifacts.json does not prove all required HWLAB service artifacts for origin/main f64182b; current status is published with 13/13 required services published and source states resolved: 13 source-present, 0 intentionally-disabled.",
|
|
"nextTask": "Complete DEV artifact publishing for every enabled required HWLAB service at the artifact source commit, or prove the target commit has no artifact build input changes; keep disabled services marked not_published with reasons.",
|
|
"unblockOrder": 3,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#35",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#39"
|
|
],
|
|
"rationale": "The gate cannot promote deploy or runtime observations without immutable image provenance and digests."
|
|
},
|
|
{
|
|
"id": "d601-k3s-readonly-observability:runner-kubeconfig-readonly-gap",
|
|
"priority": "P1",
|
|
"type": "observability_blocker",
|
|
"scope": "runner-kubeconfig-readonly-gap",
|
|
"status": "open",
|
|
"source": "reports/d601-k3s-readonly-observability.json",
|
|
"sourceIssue": "pikasTech/HWLAB#46",
|
|
"summary": "The runner cannot read /etc/rancher/k3s/k3s.yaml; classify this as a runner permission/mount gap, not a D601 global outage. Alternate read-only cluster probes and public DEV endpoint probes are reported separately.",
|
|
"nextTask": "Provide the approved read-only runner kubeconfig mount or document the intended alternate KUBECONFIG path, then rerun the read-only report.",
|
|
"unblockOrder": 4,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#34",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#36",
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#46",
|
|
"pikasTech/HWLAB#64"
|
|
],
|
|
"rationale": "Runner read-only observability must be repaired without treating the runner gap as proof that D601 k3s or public DEV endpoints are unavailable."
|
|
},
|
|
{
|
|
"id": "dev-m4-agent-loop:agent-mgr-health",
|
|
"priority": "P1",
|
|
"type": "agent_blocker",
|
|
"scope": "agent-mgr-health",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"sourceIssue": "pikasTech/HWLAB#37",
|
|
"summary": "hwlab-agent-mgr /health/live is degraded.",
|
|
"unblockOrder": 5,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#37",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#164"
|
|
],
|
|
"rationale": "M4/M5 agent evidence needs deployed manager, skills, and worker paths to expose explicit skills commit and version; session-mode-only worker templates are not enough."
|
|
},
|
|
{
|
|
"id": "dev-m4-agent-loop:runtime-durable-adapter",
|
|
"priority": "P1",
|
|
"type": "runtime_blocker",
|
|
"scope": "runtime-durable-adapter",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"sourceIssue": "pikasTech/HWLAB#164",
|
|
"summary": "cloud-api durable runtime adapter is blocked: runtime_durable_adapter_query_blocked; adapter=postgres; durable=false; ready=false; migration=0001_cloud_core_skeleton checked=false ready=false missing=true; queryResult=query_blocked.",
|
|
"unblockOrder": 5,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#37",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#164"
|
|
],
|
|
"rationale": "M4 and M5 cannot claim live agent or MVP evidence until the cloud-api postgres runtime adapter proves schema, migration, and read-query durability; DB live evidence alone is not durability evidence."
|
|
},
|
|
{
|
|
"id": "dev-m4-agent-loop:skills-commit-version-injection",
|
|
"priority": "P1",
|
|
"type": "agent_blocker",
|
|
"scope": "skills-commit-version-injection",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-m4-agent-loop.json",
|
|
"sourceIssue": "pikasTech/HWLAB#37",
|
|
"summary": "DEV skills injection is incomplete: missing hwlab-agent-skills.HWLAB_SKILLS_VERSION, worker-dry-run.HWLAB_SKILL_VERSION_FROM_DEV.",
|
|
"unblockOrder": 5,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#37",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#164"
|
|
],
|
|
"rationale": "M4/M5 agent evidence needs deployed manager, skills, and worker paths to expose explicit skills commit and version; session-mode-only worker templates are not enough."
|
|
},
|
|
{
|
|
"id": "dev-m3-hardware-loop:m3-box-simu-identity",
|
|
"priority": "P0",
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-box-simu-identity",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"sourceIssue": "pikasTech/HWLAB#64",
|
|
"summary": "DEV exposes two box-simu endpoints, but live identities are not the required distinct resources res_boxsimu_1 and res_boxsimu_2; observed resources=res_boxsimu_1.",
|
|
"unblockOrder": 6,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#64"
|
|
],
|
|
"rationale": "M3 remains blocked until the real DEV hardware trusted loop proves DO1 -> patch-panel -> DI1 with operation, trace, audit, and evidence identifiers."
|
|
},
|
|
{
|
|
"id": "dev-m3-hardware-loop:m3-gateway-simu-identity",
|
|
"priority": "P0",
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-gateway-simu-identity",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"sourceIssue": "pikasTech/HWLAB#64",
|
|
"summary": "DEV exposes two gateway-simu endpoints, but live gateway identities are not distinct; observed identities=gateway-a:gws_gateway-a.",
|
|
"unblockOrder": 6,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#64"
|
|
],
|
|
"rationale": "M3 remains blocked until the real DEV hardware trusted loop proves DO1 -> patch-panel -> DI1 with operation, trace, audit, and evidence identifiers."
|
|
},
|
|
{
|
|
"id": "dev-m3-hardware-loop:m3-patch-panel-wiring",
|
|
"priority": "P0",
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-patch-panel-wiring",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"sourceIssue": "pikasTech/HWLAB#64",
|
|
"summary": "DEV patch-panel is callable, but live wiring does not contain res_boxsimu_1:DO1 -> res_boxsimu_2:DI1; active=res_boxsim_alpha:uart0->res_boxsim_beta:uart0, res_boxsim_alpha:gpio0->res_boxsim_beta:gpio0; configured=res_boxsim_alpha:uart0->res_boxsim_beta:uart0, res_boxsim_alpha:gpio0->res_boxsim_beta:gpio0.",
|
|
"unblockOrder": 6,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#64"
|
|
],
|
|
"rationale": "M3 remains blocked until the real DEV hardware trusted loop proves DO1 -> patch-panel -> DI1 with operation, trace, audit, and evidence identifiers."
|
|
},
|
|
{
|
|
"id": "dev-mvp-gate-report:m3-hardware-loop-runtime",
|
|
"priority": "P0",
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-hardware-loop-runtime",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"sourceIssue": "pikasTech/HWLAB#39",
|
|
"summary": "Live M3 smoke reached DEV simulators, but patch-panel active DO1 -> DI1 connection is missing.",
|
|
"unblockOrder": 6,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#64"
|
|
],
|
|
"rationale": "M3 remains blocked until the real DEV hardware trusted loop proves DO1 -> patch-panel -> DI1 with operation, trace, audit, and evidence identifiers."
|
|
},
|
|
{
|
|
"id": "dev-m3-hardware-loop:m3-live-write-authorization",
|
|
"priority": "P3",
|
|
"type": "safety_blocker",
|
|
"scope": "m3-live-write-authorization",
|
|
"status": "open",
|
|
"source": "reports/dev-gate/dev-m3-hardware-loop.json",
|
|
"sourceIssue": "pikasTech/HWLAB#38",
|
|
"summary": "Plan-only mode is intentionally non-mutating; run the bounded live smoke only after explicit DEV/non-PROD approval and after read-only preconditions identify the exact HWLAB targets.",
|
|
"unblockOrder": 99,
|
|
"unblocks": [
|
|
"pikasTech/HWLAB#39"
|
|
],
|
|
"rationale": "Residual blocker that must be classified before claiming a green DEV gate."
|
|
}
|
|
],
|
|
"nextSteps": [
|
|
{
|
|
"order": 1,
|
|
"blockerOrder": 3,
|
|
"priority": "P1",
|
|
"scopes": [
|
|
"artifact-catalog",
|
|
"artifact-source-commit",
|
|
"dev-artifact-publish"
|
|
],
|
|
"sourceIssues": [
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#34",
|
|
"pikasTech/HWLAB#35",
|
|
"pikasTech/HWLAB#39"
|
|
],
|
|
"rationale": "The gate cannot promote deploy or runtime observations without immutable image provenance and digests.",
|
|
"action": "Run the DEV artifact publish workflow, then record only real sha256 digests with `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --publish-report reports/dev-gate/dev-artifacts.json`; if publish is still blocked, keep not_published via `node scripts/refresh-artifact-catalog.mjs --target-ref origin/main --blocked`.",
|
|
"evidenceRequired": "Artifact publish report with ciPublished=true, registryVerified=true, and sha256 digest for each frozen service ID."
|
|
},
|
|
{
|
|
"order": 2,
|
|
"blockerOrder": 4,
|
|
"priority": "P1",
|
|
"scopes": [
|
|
"runner-kubeconfig-readonly-gap"
|
|
],
|
|
"sourceIssues": [
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#34",
|
|
"pikasTech/HWLAB#36",
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#46",
|
|
"pikasTech/HWLAB#64"
|
|
],
|
|
"rationale": "Runner read-only observability must be repaired without treating the runner gap as proof that D601 k3s or public DEV endpoints are unavailable.",
|
|
"action": "Provide the approved read-only runner kubeconfig mount or document the intended alternate KUBECONFIG path, then rerun the read-only report.",
|
|
"evidenceRequired": "Read-only report with runnerKubeconfigReadable, runnerKubeconfigProbeExitCode/stderr, d601PublicEndpointsReachable, and d601K3sUnavailable recorded separately, plus direct M3 service target discovery before any DO write."
|
|
},
|
|
{
|
|
"order": 3,
|
|
"blockerOrder": 5,
|
|
"priority": "P1",
|
|
"scopes": [
|
|
"agent-mgr-health",
|
|
"runtime-durable-adapter",
|
|
"skills-commit-version-injection"
|
|
],
|
|
"sourceIssues": [
|
|
"pikasTech/HWLAB#164",
|
|
"pikasTech/HWLAB#37",
|
|
"pikasTech/HWLAB#39"
|
|
],
|
|
"rationale": "M4/M5 agent evidence needs deployed manager, skills, and worker paths to expose explicit skills commit and version; session-mode-only worker templates are not enough.",
|
|
"action": "Inject explicit skills commit and version into agent manager, skills service, and worker jobs, then rerun the M4 read-only/live preflight.",
|
|
"evidenceRequired": "Read-only hwlab-agent-mgr/hwlab-agent-skills health plus worker dry-run manifest showing skillCommitId/skillVersion and HWLAB_SKILL_COMMIT_ID/HWLAB_SKILL_VERSION injected."
|
|
},
|
|
{
|
|
"order": 4,
|
|
"blockerOrder": 6,
|
|
"priority": "P0",
|
|
"scopes": [
|
|
"m3-box-simu-identity",
|
|
"m3-gateway-simu-identity",
|
|
"m3-patch-panel-wiring",
|
|
"m3-hardware-loop-runtime"
|
|
],
|
|
"sourceIssues": [
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#39",
|
|
"pikasTech/HWLAB#64"
|
|
],
|
|
"rationale": "M3 remains blocked until the real DEV hardware trusted loop proves DO1 -> patch-panel -> DI1 with operation, trace, audit, and evidence identifiers.",
|
|
"action": "Fix DEV box-simu instance identity so direct endpoints expose distinct res_boxsimu_1 and res_boxsimu_2 resources.",
|
|
"evidenceRequired": "Read-only direct box-simu /health/live and /status output showing distinct res_boxsimu_1 and res_boxsimu_2 resources."
|
|
},
|
|
{
|
|
"order": 5,
|
|
"blockerOrder": 99,
|
|
"priority": "P3",
|
|
"scopes": [
|
|
"m3-live-write-authorization"
|
|
],
|
|
"sourceIssues": [
|
|
"pikasTech/HWLAB#38",
|
|
"pikasTech/HWLAB#39"
|
|
],
|
|
"rationale": "Residual blocker that must be classified before claiming a green DEV gate.",
|
|
"action": "Resolve the blocker and attach source/local/dry-run/DEV-live evidence at the correct level.",
|
|
"evidenceRequired": "A committed report with the exact evidence level and command used."
|
|
}
|
|
],
|
|
"validationCommands": [
|
|
"node --check scripts/dev-evidence-blocker-aggregator.mjs",
|
|
"node --check scripts/src/dev-evidence-blocker-aggregator.mjs",
|
|
"node scripts/dev-evidence-blocker-aggregator.mjs --check",
|
|
"node scripts/dev-evidence-blocker-aggregator.mjs --markdown",
|
|
"node --check scripts/validate-dev-gate-report.mjs",
|
|
"node scripts/validate-dev-gate-report.mjs"
|
|
]
|
|
}
|