Docker images / prepare-release (push) Successful in 12s
Docker images / backend-test (push) Successful in 4m27s
Docker images / frontend-image (push) Successful in 2m19s
Docker images / updater-image (push) Successful in 39s
Docker images / netflow-agent-image (push) Successful in 1m6s
Docker images / backend-image (push) Successful in 1m40s
Docker images / publish-release (push) Successful in 10s
Docker images / notify-webhook (push) Successful in 2s
403 lines
12 KiB
JSON
403 lines
12 KiB
JSON
{
|
|
"date": "2026-10-16",
|
|
"stand": "161.104.46.222",
|
|
"branch": "codex/netflow-host-agent",
|
|
"baseCommit": "db81cf0f",
|
|
"testedSourceCommit": "0abdac82de3fd53fa0eeaae672a3681918191a9a",
|
|
"passed": true,
|
|
"scope": "Temporary backend/agent containers, separate PostgreSQL databases and host wg-flow; both authorized test MikroTik configured and restored.",
|
|
"build": {
|
|
"strategy": "Current compiled backend/contracts over existing backend runtime with matching application dependencies; test-only jose and transpiled tests added. Agent built from its Dockerfile.",
|
|
"uploadedFilesVerified": 1976,
|
|
"baseProductionCompiledFilesVerified": 1396,
|
|
"patchedCompiledRouteSha256": "99a5b78f0586cbc53c35ed4bcefadd4fdd6ecea6da075f936b7768c634b03dd1",
|
|
"patchedCompiledRouteMatchesLocal": true
|
|
},
|
|
"agentKernelTests": {
|
|
"passed": 15,
|
|
"failed": 0,
|
|
"skipped": 0,
|
|
"network": "Isolated container namespace",
|
|
"coverage": [
|
|
"Real kernel WireGuard apply",
|
|
"Foreign persistent/runtime peers",
|
|
"Unchanged interface identity",
|
|
"Validation/conflicts",
|
|
"Configuration and runtime rollback"
|
|
]
|
|
},
|
|
"sql": {
|
|
"primary": {
|
|
"database": "mm_accept_166_1792139159368",
|
|
"passed": true,
|
|
"cases": [
|
|
{
|
|
"path": "services/traffic-flow-host-file-builders.test.js",
|
|
"durationMs": 196,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-key-execution.test.js",
|
|
"durationMs": 54,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "routes/traffic-flow-settings.test.js",
|
|
"durationMs": 586,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "plugins/auth.netflow-settings.test.js",
|
|
"durationMs": 665,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-agent-install.test.js",
|
|
"durationMs": 174,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-agent-client.test.js",
|
|
"durationMs": 260,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-operation-queue.test.js",
|
|
"durationMs": 54,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "routes/traffic-flow-host.test.js",
|
|
"durationMs": 830,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "routes/traffic-flow-query.test.js",
|
|
"durationMs": 1816,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-month.test.js",
|
|
"durationMs": 1146,
|
|
"skips": [
|
|
"Monthly SQL: skip (requires an owned isolated database)"
|
|
]
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-parse.test.js",
|
|
"durationMs": 1174,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-ipv6-pipeline.test.js",
|
|
"durationMs": 1203,
|
|
"skips": [
|
|
"IPv6 UDP/worker/SQL: skip (requires an owned isolated database)"
|
|
]
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-map-exporter.test.js",
|
|
"durationMs": 55,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-ifaces.test.js",
|
|
"durationMs": 64,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-ifindex.test.js",
|
|
"durationMs": 59,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-dedup.test.js",
|
|
"durationMs": 55,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-planes.test.js",
|
|
"durationMs": 51,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-ip.test.js",
|
|
"durationMs": 75,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-dest.test.js",
|
|
"durationMs": 1836,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-classify.test.js",
|
|
"durationMs": 903,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-ripe.test.js",
|
|
"durationMs": 1440,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-brands.test.js",
|
|
"durationMs": 93,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-ingest.test.js",
|
|
"durationMs": 5340,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-analytics.test.js",
|
|
"durationMs": 2172,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-map-hops.test.js",
|
|
"durationMs": 1661,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-purge.test.js",
|
|
"durationMs": 2451,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/geoip-download.test.js",
|
|
"durationMs": 667,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-geoip.test.js",
|
|
"durationMs": 1930,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-facts.test.js",
|
|
"durationMs": 964,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-facts-filter.test.js",
|
|
"durationMs": 1362,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/traffic-flow-facts-rebuild.test.js",
|
|
"durationMs": 1833,
|
|
"skips": []
|
|
},
|
|
{
|
|
"path": "services/statistics-aggregate.test.js",
|
|
"durationMs": 1915,
|
|
"skips": []
|
|
}
|
|
]
|
|
},
|
|
"dedicatedIpv6": {
|
|
"database": "mm_accept_144_1792139159368",
|
|
"passed": true,
|
|
"cases": [
|
|
{
|
|
"path": "services/traffic-flow-ipv6-pipeline.test.js",
|
|
"durationMs": 7879,
|
|
"skips": []
|
|
}
|
|
]
|
|
},
|
|
"dedicatedMonthly": {
|
|
"database": "mm_accept_149_1792139159368",
|
|
"passed": true,
|
|
"cases": [
|
|
{
|
|
"path": "services/traffic-flow-month.test.js",
|
|
"durationMs": 3800,
|
|
"skips": []
|
|
}
|
|
]
|
|
},
|
|
"note": "The two explicitly guarded SQL cases skipped in primary were then executed without skips in separate owned databases. This profile predates only the runtime-counter route fix."
|
|
},
|
|
"live": {
|
|
"sourceCommit": "db81cf0f",
|
|
"passed": true,
|
|
"checks": [
|
|
{
|
|
"name": "native-baselines-and-own-database-prepared",
|
|
"routers": 2
|
|
},
|
|
{
|
|
"name": "real-mikrotik-connected-1",
|
|
"address": "198.18.254.2"
|
|
},
|
|
{
|
|
"name": "real-mikrotik-connected-2",
|
|
"address": "198.18.254.3"
|
|
},
|
|
{
|
|
"name": "first-router-preserved-after-second",
|
|
"peerCount": 3
|
|
},
|
|
{
|
|
"name": "repeat-connect-without-duplicate"
|
|
},
|
|
{
|
|
"name": "synthetic-ipfix-through-real-wireguard-to-postgresql",
|
|
"packetsReceived": 4,
|
|
"lastExporterIp": "198.18.254.200"
|
|
},
|
|
{
|
|
"name": "agent-restart-preserves-tunnels-and-ipfix"
|
|
},
|
|
{
|
|
"name": "backend-real-restart-reconciled",
|
|
"peerCount": 4
|
|
},
|
|
{
|
|
"name": "ipfix-after-backend-restart"
|
|
},
|
|
{
|
|
"name": "persisted-exporter-summary",
|
|
"exporters": [
|
|
{
|
|
"server_id": 1,
|
|
"buckets": 44,
|
|
"bytes": "18451"
|
|
},
|
|
{
|
|
"server_id": 2,
|
|
"buckets": 27,
|
|
"bytes": "10281"
|
|
},
|
|
{
|
|
"server_id": 3,
|
|
"buckets": 1,
|
|
"bytes": "432075"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "router-baseline-restored-2"
|
|
},
|
|
{
|
|
"name": "router-baseline-restored-1"
|
|
}
|
|
],
|
|
"nativeCleanup": true
|
|
},
|
|
"cleanup": {
|
|
"nativeAndHostCleanup": true,
|
|
"ownedDatabaseRemoved": true,
|
|
"exitCode": 0
|
|
},
|
|
"finalVerification": {
|
|
"passed": true,
|
|
"services": [
|
|
{
|
|
"name": "mmapp-test-backend",
|
|
"image": "mmapp-test/backend:ux-certificates258",
|
|
"imageId": "sha256:984684709e619972bae8657208e3150d12f1c4f2b5642fecf5286a5d87e9fe71",
|
|
"running": true,
|
|
"health": "healthy",
|
|
"imageUnchanged": true
|
|
},
|
|
{
|
|
"name": "mmapp-test-frontend",
|
|
"image": "mmapp-test/frontend:ux-accessibility261",
|
|
"imageId": "sha256:eec4410f1109a46e864d695cfb4311fdb9a224247549c8a9e78e44c6c0e455cb",
|
|
"running": true,
|
|
"health": null,
|
|
"imageUnchanged": true
|
|
},
|
|
{
|
|
"name": "mmapp-test-portal",
|
|
"image": "git.shx.one/denozord/auth-portal@sha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489",
|
|
"imageId": "sha256:2bdf42400a1b35caa43303b9d01078b054b2a9041eba7019c1fffde71b7e4489",
|
|
"running": true,
|
|
"health": "healthy",
|
|
"imageUnchanged": true
|
|
},
|
|
{
|
|
"name": "mmapp-test-postgres",
|
|
"image": "postgres:18-alpine",
|
|
"imageId": "sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873",
|
|
"running": true,
|
|
"health": "healthy",
|
|
"imageUnchanged": true
|
|
}
|
|
],
|
|
"temporaryContainersRemaining": 0,
|
|
"hostOwnedWireguardRemaining": false,
|
|
"privateFixturesRemoved": true,
|
|
"mainFlowSettings": {
|
|
"enabled": false,
|
|
"collector_ip": "10.255.254.1",
|
|
"prefix": "10.255.254.0/24",
|
|
"flow_listen_port": 4739,
|
|
"wg_listen_port": 51821,
|
|
"peerCount": 0
|
|
},
|
|
"ownedDatabasesAndRolesRemaining": 0,
|
|
"routers": [
|
|
{
|
|
"id": "1",
|
|
"host": "194.226.121.150",
|
|
"reachable": true,
|
|
"ownedWireguardInterfaces": 0,
|
|
"ownedFlowTargets": 0,
|
|
"ownedCollectorRoutes": 0,
|
|
"trafficFlowEnabled": "false"
|
|
},
|
|
{
|
|
"id": "2",
|
|
"host": "104.165.244.7",
|
|
"reachable": true,
|
|
"ownedWireguardInterfaces": 0,
|
|
"ownedFlowTargets": 0,
|
|
"ownedCollectorRoutes": 0,
|
|
"trafficFlowEnabled": "false"
|
|
}
|
|
]
|
|
},
|
|
"correction": {
|
|
"commit": "0abdac82",
|
|
"problem": "Settings API returned stale persisted counters despite successful worker ingestion.",
|
|
"change": "Read packet count, last exporter, error and packet time from collector runtime counters.",
|
|
"regressionProof": "Initial live run persisted flows but timed out waiting for the settings packet counter after agent restart. Final run observed packetsReceived=4 and exporter 198.18.254.200, then passed both actual container restarts and continued reception.",
|
|
"localValidation": [
|
|
"Backend/contracts build",
|
|
"8 netflow-settings test scripts",
|
|
"ESLint for modified route"
|
|
]
|
|
},
|
|
"earlierAttempts": [
|
|
{
|
|
"stage": "SQL runner",
|
|
"result": "Harness FLOW_OPTIONAL truthiness corrected; primary profile rerun passed."
|
|
},
|
|
{
|
|
"stage": "Live runner bootstrap",
|
|
"result": "Production image lacks development pino-pretty; harness disabled pretty logging; resources cleaned."
|
|
},
|
|
{
|
|
"stage": "Live counter verification",
|
|
"result": "Product stale-counter defect detected and fixed; both routers and host restored before final full live rerun.",
|
|
"failure": {
|
|
"phase": "exercise",
|
|
"name": "Error",
|
|
"message": "Timed out: IPFIX continues during agent restart"
|
|
}
|
|
}
|
|
],
|
|
"nativeExportEvidence": "Own DB recorded server_id 1 and 2 through their distinct WG source addresses: 44 buckets/18451 bytes and 27 buckets/10281 bytes. Server 3 is the separate synthetic Linux IPFIX exporter (1 bucket/432075 bytes). These are exported flow-byte totals, not captured UDP wire bytes.",
|
|
"limits": [
|
|
"One-time installer was not applied to the primary stand deployment; its compose file is named compose.yaml. Installer integration with wg-quick/systemd and cold host reboot remain unverified on this stand.",
|
|
"No production deployment, registry publication, or primary frontend/backend replacement was performed.",
|
|
"Docker images and source/log artifacts are retained under /opt/mmapp-test/artifacts/netflow-agent-db81cf0f-20261016; temporary containers, owned DBs/roles and private fixture files were removed.",
|
|
"This is a functional acceptance run, not a load or long-duration stability test."
|
|
]
|
|
}
|