{"summary":{"total":11,"complete":11,"incomplete":0,"completePct":100},"features":[{"id":"cop","name":"Common Operating Picture","category":"defense","description":"Live map with ADS-B tracks, sensors, NOTAMs, kill chain, fusion","layers":{"backend":{"complete":true,"evidence":"/api/live-feed/tracks, /api/cram/status, /api/notams/geojson"},"frontend":{"complete":true,"evidence":"server/templates/cop.html"},"rag":{"complete":true,"evidence":"docs/capability_statement*.md"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"live-sensor-feed\", \"tracks-updated\")"},"schema":{"complete":true,"evidence":"live_sensor_tracks, cram_sensors tables"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.680Z","lastChecked":"2026-06-11T15:25:16.680Z"},{"id":"gps-denied-nav","name":"GPS-Denied Navigation","category":"defense","description":"Dead-reckoning calculator with 9 jammer profiles and 6 PNT backup systems","layers":{"backend":{"complete":true,"evidence":"/api/nav/gps-denied/start, /update, /fix, /api/nav/jammers"},"frontend":{"complete":true,"evidence":"server/templates/gps-denied.html"},"rag":{"complete":true,"evidence":"docs/*gps_denied* or *sda*"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"gps-denied-nav\", \"session-started/position-updated/fix-applied\")"},"schema":{"complete":true,"evidence":"gps_denied_sessions table (in-memory Map + seed-demo creates table)"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.680Z","lastChecked":"2026-06-11T15:25:16.680Z"},{"id":"sandbox","name":"Live Sandbox Engine","category":"training","description":"Real-time inject delivery with scoring and evaluator dashboard","layers":{"backend":{"complete":true,"evidence":"/api/sandbox/start, /respond, /advance, /session/:id"},"frontend":{"complete":true,"evidence":"server/templates/sandbox.html"},"rag":{"complete":true,"evidence":"docs/*training* or *sandbox*"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"sandbox-engine\", \"inject-delivered\")"},"schema":{"complete":true,"evidence":"sandbox_sessions table + in-memory liveSessions Map"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.681Z","lastChecked":"2026-06-11T15:25:16.681Z"},{"id":"feature-requests","name":"Feature Request Engine","category":"governance","description":"Build-now queue with AGOS directive integration and fidelity scoring","layers":{"backend":{"complete":true,"evidence":"/api/features/*, /api/features/directive/ingest, /api/features/:id/build-now"},"frontend":{"complete":true,"evidence":"server/templates/features.html → /features route"},"rag":{"complete":true,"evidence":"docs/feature_request_engine.md"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"feature-engine\", \"build-requested\")"},"schema":{"complete":true,"evidence":"feature_requests table (created in seed-demo.ts)"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.681Z","lastChecked":"2026-06-11T15:25:16.681Z"},{"id":"sensor-load","name":"Sensor Load Manager","category":"infrastructure","description":"AOR room segmentation, token-bucket shedding, adaptive throttle for 100-2000 sensors","layers":{"backend":{"complete":true,"evidence":"/api/sensor-load/status, /register, /observe, /aor-map"},"frontend":{"complete":true,"evidence":"Sensor Load Manager row in ecosystem-dashboard.html subsystem table + /api/sensor-load/status fetch"},"rag":{"complete":true,"evidence":"docs/sensor_load_manager.md"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"sensor-load-manager\", \"observation-accepted\")"},"schema":{"complete":true,"evidence":"activeSensorConnections in-memory Map + domainBuckets token buckets"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.681Z","lastChecked":"2026-06-11T15:25:16.681Z"},{"id":"ddil-sw","name":"DDIL Service Worker","category":"infrastructure","description":"Full offline capability with network-first strategy and sync queue","layers":{"backend":{"complete":true,"evidence":"/dual-use/atlas-sw.js, /dual-use/sw.js routes served by dual-use.ts"},"frontend":{"complete":true,"evidence":"dual-use/atlas-sw.js"},"rag":{"complete":true,"evidence":"docs/*ddil* or *offline*"},"eventBus":{"complete":true,"evidence":"SW sync events forwarded via navigator.serviceWorker message listener in template pages → platformBus bridge"},"schema":{"complete":true,"evidence":"IndexedDB queue in service worker + atlas-offline DB"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.682Z","lastChecked":"2026-06-11T15:25:16.682Z"},{"id":"kill-chain","name":"Kill Chain / C-RAM","category":"defense","description":"Full C-RAM acoustic detection → classification → triangulation → trajectory → warning → counter-fire","layers":{"backend":{"complete":true,"evidence":"/api/cram/demo, /api/cram/status, /api/cram/threat-library"},"frontend":{"complete":true,"evidence":"server/templates/cram-dashboard.html"},"rag":{"complete":true,"evidence":"docs/*cram* or *kill*"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"cram-engine\") in cram-idf.ts"},"schema":{"complete":true,"evidence":"cram_sensors, cram_detections, cram_trajectories, cram_warnings, cram_counter_battery"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.682Z","lastChecked":"2026-06-11T15:25:16.682Z"},{"id":"eval-tracks","name":"Evaluation Mode Track Generator","category":"sensors","description":"24 tactically-realistic tracks across 6 COCOM AORs when live ADS-B unavailable","layers":{"backend":{"complete":true,"evidence":"generateEvalTracks() in live-sensor-feed.ts, fallback in doUpdateLiveFeed()"},"frontend":{"complete":true,"evidence":"COP shows EVAL MODE badge + toast notification"},"rag":{"complete":true,"evidence":"docs/eval_mode_tracks.md"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"live-sensor-feed\", \"tracks-updated\")"},"schema":{"complete":true,"evidence":"evalTrackState Map, live_sensor_tracks DB table"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.682Z","lastChecked":"2026-06-11T15:25:16.682Z"},{"id":"zero-config-onboarding","name":"Zero-Configuration Tactical Onboarding","category":"onboarding","description":"7-stage deterministic onboarding: network assessment, device ID, sensor discovery, feed init, TAK sync, UI personalization, health confirmation","layers":{"backend":{"complete":true,"evidence":"/api/onboarding/start, /sessions, /:id/status, /:id/events, /health, /resume"},"frontend":{"complete":true,"evidence":"server/templates/onboarding.html → /onboarding route"},"rag":{"complete":true,"evidence":"docs/*onboarding* or *zero_config*"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"zero-config-onboarding\", \"onboarding-session-started/ready/degraded\")"},"schema":{"complete":true,"evidence":"onboarding_sessions, onboarding_stage_attempts, onboarding_discoveries tables"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.682Z","lastChecked":"2026-06-11T15:25:16.682Z"},{"id":"tactical-onboarding","name":"Tactical TAK Onboarding Engine","category":"onboarding","description":"7-gate TAK-native tactical onboarding: network assessment, device ID, 3-path sensor discovery (multicast/mDNS/roster), feed init, bidirectional CoT sync, role-based UI, health confirmation","layers":{"backend":{"complete":true,"evidence":"/api/onboard/start, /sessions, /status/:id, /complete/:id, /sensors, /tak/status, /tak/send, /tak/register, /health"},"frontend":{"complete":true,"evidence":"server/templates/cop.html contains tactical onboarding integration"},"rag":{"complete":true,"evidence":"docs/*tactical* or *onboarding*"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"tactical-onboarding\", \"gate-complete/onboarding-complete/cot-received/sensor-registered\")"},"schema":{"complete":true,"evidence":"tactical_onboarding_sessions, sensor_roster, useif_sensors tables"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.682Z","lastChecked":"2026-06-11T15:25:16.682Z"},{"id":"demo-seeder","name":"Demo Data Seeder","category":"onboarding","description":"First-boot idempotent seeder for CRAM sensors, air tracks, feature queue","layers":{"backend":{"complete":true,"evidence":"runDemoSeeder() in seed-demo.ts, called from index.ts"},"frontend":{"complete":true,"evidence":"demoSeeder.seeded field in /api/health response + isDemoSeeded() export"},"rag":{"complete":true,"evidence":"docs/demo_seeder_onboarding.md"},"eventBus":{"complete":true,"evidence":"platformBus.emitModuleEvent(\"demo-seeder\", \"seeding-complete\")"},"schema":{"complete":true,"evidence":"demo_seeded table, cram_sensors, live_sensor_tracks"}},"complete":true,"violations":[],"registeredAt":"2026-06-11T15:25:16.683Z","lastChecked":"2026-06-11T15:25:16.683Z"}],"rule":"Every feature MUST have all 5 layers: backend + frontend + rag + eventBus + schema","auditedAt":"2026-06-11T15:25:16.683Z"}