7a0648088c
Merge PR #159 after Code Queue rebase and validation. Runner verified M3 cardinality, hardware-loop smoke, patch-panel runtime smoke, m3 readonly contract, and git diff check. This is source/config blocker removal only; it does not claim DEV-LIVE M3 pass.
884 lines
28 KiB
JavaScript
884 lines
28 KiB
JavaScript
// Generated from reports/dev-gate/dev-mvp-gate-report.json and fixtures/mvp/m5-e2e/dry-run-plan.json.
|
|
// Run node scripts/export-web-gate-summary.mjs after changing those fixtures.
|
|
export const gateSummary = {
|
|
"generatedFrom": {
|
|
"gateReport": "reports/dev-gate/dev-mvp-gate-report.json",
|
|
"m5Plan": "fixtures/mvp/m5-e2e/dry-run-plan.json"
|
|
},
|
|
"issue": "pikasTech/HWLAB#56",
|
|
"supports": [
|
|
"pikasTech/HWLAB#7",
|
|
"pikasTech/HWLAB#9"
|
|
],
|
|
"gateStatus": "blocked",
|
|
"blocked": true,
|
|
"acceptanceLevel": "dev_mvp_gate",
|
|
"reportCommitId": "86d769525caf1db513b93cb67c2c8ee8863dd4b1",
|
|
"dryRunOnly": true,
|
|
"devOnly": true,
|
|
"prodDisabled": true,
|
|
"environment": "dev",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"namespace": "hwlab-dev",
|
|
"sourceSummary": "The DEV gate is anchored to the frozen matrix, gate contract, and M0-M5 milestone docs on origin/main.",
|
|
"localSmoke": {
|
|
"status": "pass",
|
|
"commands": [
|
|
"node scripts/validate-contract.mjs",
|
|
"node scripts/validate-m0-contract.mjs",
|
|
"node scripts/validate-artifact-catalog.mjs",
|
|
"node scripts/validate-runtime-boundary.mjs",
|
|
"node scripts/validate-schema-drift-map.mjs",
|
|
"node scripts/validate-evidence-chain.mjs",
|
|
"node scripts/m1-contract-smoke.mjs",
|
|
"node scripts/m2-dev-deploy-smoke.mjs --dry-run",
|
|
"node scripts/m3-hardware-loop-smoke.mjs",
|
|
"node scripts/m4-agent-loop-smoke.mjs"
|
|
],
|
|
"evidence": [
|
|
"validated 15 JSON files and 13 service ids",
|
|
"validated M0 contract examples: 7 JSON files, 13 service ids",
|
|
"validated 13 DEV artifact catalog services at 24eb3bf",
|
|
"validated HWLAB runtime boundary guard for 13 services; forbidden substitutes: unidesk-backend, provider-gateway, microservice-proxy",
|
|
"validated schema drift map with 59 aligned fields and 12 gaps",
|
|
"validated 2 evidence chain fixtures and 2 evidence records",
|
|
"[m1-smoke] passed",
|
|
"[m2-smoke] validated 11 service contracts",
|
|
"[m2-smoke] mode=dry-run endpoint=http://74.48.78.17:16667",
|
|
"[m2-smoke] no real DEV/PROD request was made",
|
|
"M3 hardware loop smoke passed",
|
|
"[m4-smoke] ok m4-agent-automation-loop-local-contract-smoke"
|
|
],
|
|
"summary": "M0-M4 contract and smoke checks pass locally without contacting the live DEV ingress."
|
|
},
|
|
"dryRun": {
|
|
"status": "pass",
|
|
"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."
|
|
},
|
|
"devPreconditions": {
|
|
"status": "blocked",
|
|
"classification": "DB live; hardware loop",
|
|
"requirements": [
|
|
"http://74.48.78.17:16666/ returns the DEV browser entry",
|
|
"http://74.48.78.17:16667/health returns HWLAB DEV edge JSON",
|
|
"http://74.48.78.17:16667/health/live returns HWLAB cloud-api JSON with DB live readiness",
|
|
"M3 hardware loop proves box-simu-1 DO1 -> box-simu-2 DI1 via patch-panel",
|
|
"M4 agent runtime/evidence path is only attempted after DB live and M3 readiness are not blocked",
|
|
"Keep the run DEV-only and avoid PROD, heavy e2e, secrets, restarts, or UniDesk substitution"
|
|
],
|
|
"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=cb35ada6860653b27269b0a57991184118cbf4b1",
|
|
"http://74.48.78.17:16667/health/live -> HTTP 200 serviceId=hwlab-cloud-api status=degraded db.ready=false db.connected=false db.connectionChecked=false",
|
|
"dev-edge-health active report -> blocked by DB live readiness, while public 16667 TCP/HTTP and frp control/tunnel health are reachable",
|
|
"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=DB live, summary=cloud-api /health/live reports DB degraded; connected=false; ready=false"
|
|
],
|
|
"summary": "Public DEV route/frp is reachable on 16666/16667, but live MVP remains blocked by DB live readiness and the M3 hardware loop topology; no historical 6667 failure is counted as active evidence."
|
|
},
|
|
"blockers": [
|
|
{
|
|
"type": "runtime_blocker",
|
|
"scope": "db-live",
|
|
"status": "open",
|
|
"summary": "cloud-api /health/live reports DB degraded; db.ready=false, db.connected=false, and live DB evidence is not established."
|
|
},
|
|
{
|
|
"type": "runtime_blocker",
|
|
"scope": "m3-hardware-loop-runtime",
|
|
"status": "open",
|
|
"summary": "Live M3 smoke reached DEV simulators, but patch-panel active DO1 -> DI1 connection is missing."
|
|
}
|
|
],
|
|
"milestones": [
|
|
{
|
|
"id": "M0",
|
|
"status": "pass",
|
|
"commandCount": 6,
|
|
"evidenceCount": 6,
|
|
"summary": "Frozen contract, artifact, boundary, drift, and evidence fixtures are parseable and aligned to the DEV boundary."
|
|
},
|
|
{
|
|
"id": "M1",
|
|
"status": "pass",
|
|
"commandCount": 1,
|
|
"evidenceCount": 4,
|
|
"summary": "The local M1 contract smoke passes."
|
|
},
|
|
{
|
|
"id": "M2",
|
|
"status": "pass",
|
|
"commandCount": 1,
|
|
"evidenceCount": 3,
|
|
"summary": "The deploy smoke remains fixture-only and validates the frozen route phases and artifact metadata."
|
|
},
|
|
{
|
|
"id": "M3",
|
|
"status": "blocked",
|
|
"commandCount": 2,
|
|
"evidenceCount": 3,
|
|
"summary": "Local M3 remains green, but active DEV-LIVE M3 is blocked by hardware loop topology."
|
|
},
|
|
{
|
|
"id": "M4",
|
|
"status": "blocked",
|
|
"commandCount": 2,
|
|
"evidenceCount": 2,
|
|
"summary": "Local M4 remains green, but active DEV-LIVE M4 is blocked at DB live readiness before agent runtime scheduling."
|
|
},
|
|
{
|
|
"id": "M5",
|
|
"status": "blocked",
|
|
"commandCount": 3,
|
|
"evidenceCount": 4,
|
|
"summary": "The M5 orchestration is green in dry-run mode, but active DEV-LIVE acceptance is blocked by DB live and hardware loop evidence."
|
|
}
|
|
],
|
|
"artifactCount": 13,
|
|
"healthCount": 14,
|
|
"gatewaySessionCount": 2,
|
|
"boxResourceCount": 2,
|
|
"patchPanelCount": 1,
|
|
"operationCount": 2,
|
|
"evidenceCount": 2,
|
|
"traceCount": 8,
|
|
"auditCount": 7,
|
|
"cleanupCount": 2,
|
|
"artifacts": [
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-edge-proxy",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-tunnel-client",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-router",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-cloud-api",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-cloud-web-static-assets",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "not_applicable",
|
|
"digestNotApplicableReason": "static asset digest is produced by the future DEV build pipeline, not this local dry-run fixture",
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-gateway",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-gateway-simu",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-box-simu",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-patch-panel",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-agent-mgr",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-agent-worker",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"digestNotApplicableReason": null,
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-agent-runtime-skills",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "not_applicable",
|
|
"digestNotApplicableReason": "skill bundle digest is produced by the future DEV build pipeline, not this local dry-run fixture",
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"commitId": "caa9ed0",
|
|
"image": "hwlab-cli-npm-package",
|
|
"tag": "dry-run-caa9ed0",
|
|
"digest": "not_applicable",
|
|
"digestNotApplicableReason": "local CLI package is not containerized in this dry-run fixture",
|
|
"buildSource": "pikasTech/HWLAB@origin/main#dry-run-fixture",
|
|
"deployEnv": "dev",
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
}
|
|
],
|
|
"health": [
|
|
{
|
|
"healthId": "hlt_m5-dev-ingress",
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"component": "DEV ingress",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": "http://74.48.78.17:16667/health",
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-edge-route",
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"component": "master edge proxy",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-frp",
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"component": "frp",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-router",
|
|
"serviceId": "hwlab-router",
|
|
"component": "D601 router",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-cloud-api",
|
|
"serviceId": "hwlab-cloud-api",
|
|
"component": "Cloud API",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-cloud-web",
|
|
"serviceId": "hwlab-cloud-web",
|
|
"component": "Cloud Web",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-gateway",
|
|
"serviceId": "hwlab-gateway",
|
|
"component": "Gateway",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-gateway-simu",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"component": "Gateway simulator",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-box-simu",
|
|
"serviceId": "hwlab-box-simu",
|
|
"component": "Box simulator",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-patch-panel",
|
|
"serviceId": "hwlab-patch-panel",
|
|
"component": "Patch panel",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-agent-mgr",
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"component": "Agent manager",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-agent-worker",
|
|
"serviceId": "hwlab-agent-worker",
|
|
"component": "Agent worker",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-agent-skills",
|
|
"serviceId": "hwlab-agent-skills",
|
|
"component": "Agent skills",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": null,
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
},
|
|
{
|
|
"healthId": "hlt_m5-cli",
|
|
"serviceId": "hwlab-cli",
|
|
"component": "CLI",
|
|
"status": "healthy",
|
|
"deployEnv": "dev",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"observedBy": "fixture",
|
|
"dryRun": true,
|
|
"healthTimestamp": "2026-05-21T00:00:00.000Z"
|
|
}
|
|
],
|
|
"topology": {
|
|
"projectId": "prj_m3_hardware_loop",
|
|
"projectStatus": "blocked",
|
|
"gateways": [
|
|
{
|
|
"gatewaySessionId": "gws_gwsimu_1",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"gatewayId": "gwsimu_1",
|
|
"status": "connected",
|
|
"environment": "dev",
|
|
"endpoint": null
|
|
},
|
|
{
|
|
"gatewaySessionId": "gws_gwsimu_2",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"gatewayId": "gwsimu_2",
|
|
"status": "connected",
|
|
"environment": "dev",
|
|
"endpoint": null
|
|
}
|
|
],
|
|
"boxResources": [
|
|
{
|
|
"resourceId": "res_boxsimu_1",
|
|
"gatewaySessionId": "gws_gwsimu_1",
|
|
"boxId": "boxsimu_1",
|
|
"resourceType": "simulator_endpoint",
|
|
"name": "BOX-SIMU 1 source DO1",
|
|
"state": "available",
|
|
"environment": "dev"
|
|
},
|
|
{
|
|
"resourceId": "res_boxsimu_2",
|
|
"gatewaySessionId": "gws_gwsimu_2",
|
|
"boxId": "boxsimu_2",
|
|
"resourceType": "simulator_endpoint",
|
|
"name": "BOX-SIMU 2 target DI1",
|
|
"state": "available",
|
|
"environment": "dev"
|
|
}
|
|
],
|
|
"patchPanel": {
|
|
"patchPanelStatusId": "pps_m3_hardware_loop",
|
|
"serviceId": "hwlab-patch-panel",
|
|
"state": "blocked",
|
|
"environment": "dev",
|
|
"activeConnectionCount": 1,
|
|
"activeConnections": [
|
|
{
|
|
"fromResourceId": "res_boxsimu_1",
|
|
"fromPort": "DO1",
|
|
"toResourceId": "res_boxsimu_2",
|
|
"toPort": "DI1"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"m5DryRunTopology": {
|
|
"projectId": "proj_m5-mvp-e2e",
|
|
"projectStatus": "active",
|
|
"gateways": [
|
|
{
|
|
"gatewaySessionId": "gws_m5-0001",
|
|
"serviceId": "hwlab-gateway",
|
|
"gatewayId": "gtw_m5-dev-boundary",
|
|
"status": "connected",
|
|
"environment": "dev",
|
|
"endpoint": "http://74.48.78.17:16667/gateway"
|
|
},
|
|
{
|
|
"gatewaySessionId": "gws_m5-simu-0001",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"gatewayId": "gtw_m5-simu",
|
|
"status": "connected",
|
|
"environment": "dev",
|
|
"endpoint": null
|
|
}
|
|
],
|
|
"boxResources": [
|
|
{
|
|
"resourceId": "res_m5-control-relay",
|
|
"gatewaySessionId": "gws_m5-0001",
|
|
"boxId": "box_m5-control",
|
|
"resourceType": "relay",
|
|
"name": "M5 control relay",
|
|
"state": "available",
|
|
"environment": "dev"
|
|
},
|
|
{
|
|
"resourceId": "res_m5-target-board",
|
|
"gatewaySessionId": "gws_m5-0001",
|
|
"boxId": "box_m5-target",
|
|
"resourceType": "board",
|
|
"name": "M5 target board",
|
|
"state": "available",
|
|
"environment": "dev"
|
|
}
|
|
],
|
|
"patchPanel": {
|
|
"patchPanelStatusId": "pps_m5-0001",
|
|
"serviceId": "hwlab-patch-panel",
|
|
"state": "active",
|
|
"environment": "dev",
|
|
"activeConnectionCount": 1,
|
|
"activeConnections": [
|
|
{
|
|
"fromResourceId": "res_m5-control-relay",
|
|
"fromPort": "out1",
|
|
"toResourceId": "res_m5-target-board",
|
|
"toPort": "reset"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"agent": {
|
|
"agentSessionId": "agt_m5-0001",
|
|
"agentServiceId": "hwlab-agent-mgr",
|
|
"agentStatus": "completed",
|
|
"workerSessionId": "wkr_m5-0001",
|
|
"workerServiceId": "hwlab-agent-worker",
|
|
"workerStatus": "completed",
|
|
"projectId": "proj_m5-mvp-e2e",
|
|
"environment": "dev",
|
|
"cleanupId": "cln_m5-worker"
|
|
},
|
|
"operations": [
|
|
{
|
|
"operationId": "op_m5-direct-0001",
|
|
"requestedBy": "user_m5-dry-run",
|
|
"status": "succeeded",
|
|
"resourceId": "res_m5-control-relay",
|
|
"capabilityId": "cap_m5-relay-set",
|
|
"agentSessionId": null,
|
|
"workerSessionId": null,
|
|
"environment": "dev"
|
|
},
|
|
{
|
|
"operationId": "op_m5-agent-0001",
|
|
"requestedBy": "agent_m5-dry-run",
|
|
"status": "succeeded",
|
|
"resourceId": "res_m5-control-relay",
|
|
"capabilityId": "cap_m5-relay-set",
|
|
"agentSessionId": "agt_m5-0001",
|
|
"workerSessionId": "wkr_m5-0001",
|
|
"environment": "dev"
|
|
}
|
|
],
|
|
"evidenceRecords": [
|
|
{
|
|
"evidenceId": "evi_m5-direct-0001",
|
|
"operationId": "op_m5-direct-0001",
|
|
"agentSessionId": null,
|
|
"workerSessionId": null,
|
|
"kind": "trace",
|
|
"uri": "fixtures/mvp/m5-e2e/evidence/direct-operation.txt",
|
|
"sha256": "4cd5cc2c942501b55f7a32f4184e9a1c920b31f13110f44ec68ddc0ad7dc1e34",
|
|
"serviceId": "hwlab-cloud-api",
|
|
"environment": "dev",
|
|
"dryRun": true
|
|
},
|
|
{
|
|
"evidenceId": "evi_m5-agent-0001",
|
|
"operationId": "op_m5-agent-0001",
|
|
"agentSessionId": "agt_m5-0001",
|
|
"workerSessionId": "wkr_m5-0001",
|
|
"kind": "trace",
|
|
"uri": "fixtures/mvp/m5-e2e/evidence/agent-operation.txt",
|
|
"sha256": "96e7ffa99efd78b3d5d1b1dfd08be2f077f618dacf786b47f764794714c15c1c",
|
|
"serviceId": "hwlab-agent-worker",
|
|
"environment": "dev",
|
|
"dryRun": true
|
|
}
|
|
],
|
|
"steps": [
|
|
{
|
|
"id": "step-dev-health",
|
|
"order": 1,
|
|
"title": "DEV health",
|
|
"kind": "health",
|
|
"requires": [],
|
|
"inputs": [
|
|
"endpoint",
|
|
"health:hlt_m5-dev-ingress",
|
|
"health:hlt_m5-edge-route",
|
|
"health:hlt_m5-frp",
|
|
"health:hlt_m5-router",
|
|
"health:hlt_m5-cloud-api",
|
|
"health:hlt_m5-cloud-web"
|
|
],
|
|
"outputs": [
|
|
"route_m5-dev",
|
|
"tun_m5-d601",
|
|
"hwlab-dev",
|
|
"hwlab-cloud-api",
|
|
"hwlab-cloud-web"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"static-contract-parse",
|
|
"endpoint-freeze",
|
|
"dev-ingress-health",
|
|
"edge-route",
|
|
"frp-tunnel",
|
|
"d601-router",
|
|
"cloud-surface"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-gateway-box-status",
|
|
"order": 2,
|
|
"title": "gateway/box status",
|
|
"kind": "status",
|
|
"requires": [
|
|
"step-dev-health"
|
|
],
|
|
"inputs": [
|
|
"gatewaySession:gws_m5-0001",
|
|
"gatewaySession:gws_m5-simu-0001",
|
|
"boxResource:res_m5-control-relay",
|
|
"boxResource:res_m5-target-board",
|
|
"capability:cap_m5-relay-set",
|
|
"capability:cap_m5-board-reset"
|
|
],
|
|
"outputs": [
|
|
"gws_m5-0001",
|
|
"res_m5-control-relay",
|
|
"res_m5-target-board",
|
|
"cap_m5-relay-set",
|
|
"cap_m5-board-reset"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"gateway-sim-patch-panel"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-wiring",
|
|
"order": 3,
|
|
"title": "wiring",
|
|
"kind": "wiring",
|
|
"requires": [
|
|
"step-gateway-box-status"
|
|
],
|
|
"inputs": [
|
|
"wiringConfig:wir_m5-0001",
|
|
"patchPanelStatus:pps_m5-0001"
|
|
],
|
|
"outputs": [
|
|
"wir_m5-0001",
|
|
"pps_m5-0001"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"gateway-sim-patch-panel"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-direct-hardware-call",
|
|
"order": 4,
|
|
"title": "direct hardware call",
|
|
"kind": "hardware_operation",
|
|
"requires": [
|
|
"step-wiring"
|
|
],
|
|
"inputs": [
|
|
"rpc:direct-hardware-request",
|
|
"operation:op_m5-direct-0001",
|
|
"resource:res_m5-control-relay",
|
|
"capability:cap_m5-relay-set",
|
|
"patchPanelStatus:pps_m5-0001"
|
|
],
|
|
"outputs": [
|
|
"op_m5-direct-0001",
|
|
"trc_m5-direct-0001"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"gateway-sim-patch-panel"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-audit",
|
|
"order": 5,
|
|
"title": "audit",
|
|
"kind": "audit",
|
|
"requires": [
|
|
"step-direct-hardware-call"
|
|
],
|
|
"inputs": [
|
|
"audit:aud_m5-project-selected",
|
|
"audit:aud_m5-gateway-started",
|
|
"audit:aud_m5-wiring-applied",
|
|
"audit:aud_m5-direct-operation"
|
|
],
|
|
"outputs": [
|
|
"aud_m5-direct-operation"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"artifact-observability"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-agent-session",
|
|
"order": 6,
|
|
"title": "agent session",
|
|
"kind": "agent",
|
|
"requires": [
|
|
"step-audit"
|
|
],
|
|
"inputs": [
|
|
"agentSession:agt_m5-0001",
|
|
"workerSession:wkr_m5-0001",
|
|
"health:hlt_m5-agent-mgr",
|
|
"health:hlt_m5-agent-worker",
|
|
"health:hlt_m5-agent-skills"
|
|
],
|
|
"outputs": [
|
|
"agt_m5-0001",
|
|
"wkr_m5-0001"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"agent-runtime"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-agent-hardware-call",
|
|
"order": 7,
|
|
"title": "agent hardware call",
|
|
"kind": "hardware_operation",
|
|
"requires": [
|
|
"step-agent-session",
|
|
"step-wiring"
|
|
],
|
|
"inputs": [
|
|
"rpc:agent-hardware-request",
|
|
"operation:op_m5-agent-0001",
|
|
"agentSession:agt_m5-0001",
|
|
"workerSession:wkr_m5-0001",
|
|
"resource:res_m5-control-relay",
|
|
"capability:cap_m5-relay-set",
|
|
"patchPanelStatus:pps_m5-0001"
|
|
],
|
|
"outputs": [
|
|
"op_m5-agent-0001",
|
|
"trc_m5-agent-0001"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"agent-runtime"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-evidence",
|
|
"order": 8,
|
|
"title": "evidence",
|
|
"kind": "evidence",
|
|
"requires": [
|
|
"step-direct-hardware-call",
|
|
"step-agent-hardware-call"
|
|
],
|
|
"inputs": [
|
|
"trace:trc_m5-direct-0001",
|
|
"trace:trc_m5-agent-0001",
|
|
"evidence:evi_m5-direct-0001",
|
|
"evidence:evi_m5-agent-0001"
|
|
],
|
|
"outputs": [
|
|
"evi_m5-direct-0001",
|
|
"evi_m5-agent-0001"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"agent-runtime",
|
|
"artifact-observability"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-cleanup",
|
|
"order": 9,
|
|
"title": "cleanup",
|
|
"kind": "cleanup",
|
|
"requires": [
|
|
"step-evidence"
|
|
],
|
|
"inputs": [
|
|
"cleanup:cln_m5-worker",
|
|
"cleanup:cln_m5-gateway-state",
|
|
"audit:aud_m5-cleanup"
|
|
],
|
|
"outputs": [
|
|
"cln_m5-worker",
|
|
"cln_m5-gateway-state"
|
|
],
|
|
"acceptanceStepIds": [
|
|
"agent-runtime"
|
|
]
|
|
}
|
|
],
|
|
"realDevGate": {
|
|
"sourcePlanCommand": "hwlab-cli test e2e --env dev --mvp",
|
|
"command": "hwlab-cli test e2e --env dev --mvp --live --confirm-dev --confirmed-non-production",
|
|
"requiresAllBlockersClear": true,
|
|
"requiresDryRunPass": true,
|
|
"requiresArtifactObservability": true,
|
|
"requiresD601RouteObservation": true,
|
|
"requiresHumanApprovalForRealDev": true
|
|
},
|
|
"safety": {
|
|
"mode": "dry-run",
|
|
"allowNetwork": false,
|
|
"allowDeploy": false,
|
|
"allowBrowserE2E": false,
|
|
"allowSecrets": false,
|
|
"prohibitedActions": [
|
|
"real-dev-deploy",
|
|
"prod-deploy",
|
|
"prod-smoke",
|
|
"browser-e2e",
|
|
"heavyweight-e2e",
|
|
"secret-or-token-read",
|
|
"force-push",
|
|
"unidesk-runtime-substitution"
|
|
]
|
|
}
|
|
};
|