let d = import "defaults/state.ncl" in { dimensions = [ d.make_dimension { id = "production-readiness", name = "Production Readiness", description = "Overall production readiness of the vapora platform across all 23 crates.", current_state = "production-ready", desired_state = "stable-ecosystem", horizon = 'Months, states = [], transitions = [ { from = "production-ready", to = "stable-ecosystem", condition = "At least 2 external consumer projects onboarded, ecosystem NATS topology active, kogral knowledge graph integrated.", catalyst = "Agent hot-reload + stable identity complete (learning loss on restart eliminated); capability packages provide zero-config onboarding; A2A protocol ready for external consumers.", blocker = "No external consumers yet. A2A integration tests still require SurrealDB + NATS in CI (#[ignore]). BudgetManager/LLMRouter not hot-reloadable (process restart required for config changes to those subsystems).", horizon = 'Months, }, ], }, d.make_dimension { id = "test-coverage", name = "Test Coverage", description = "Workspace test coverage and quality across 17 crates.", current_state = "full-pass", desired_state = "integration-verified", horizon = 'Months, states = [], transitions = [ { from = "full-pass", to = "integration-verified", condition = "Integration tests for vapora-a2a passing against live SurrealDB + NATS (currently marked #[ignore]).", catalyst = "CI environment with SurrealDB and NATS services configured.", blocker = "External service dependencies not available in current CI.", horizon = 'Months, }, ], }, d.make_dimension { id = "frontend-maturity", name = "Frontend Maturity", description = "Maturity of the Leptos WASM frontend (Kanban board, agent management UI).", current_state = "functional", desired_state = "polished", horizon = 'Months, states = [], transitions = [ { from = "functional", to = "polished", condition = "Real-time WebSocket updates fully integrated in UI, agent status live-updating, cost dashboard rendered.", catalyst = "Backend WebSocket endpoint stable; UnoCSS build pipeline finalized.", blocker = "Leptos CSR-only restriction limits SSR-based optimizations.", horizon = 'Months, }, ], }, d.make_dimension { id = "ontoref-integration", name = "Ontoref Integration Depth", description = "How deeply vapora is integrated with the ontoref protocol.", current_state = "onboarded", desired_state = "drift-monitored", horizon = 'Months, states = [], transitions = [ { from = "onboarded", to = "drift-monitored", condition = "Ontoref daemon running, ontology sync active, drift detection passing on CI.", catalyst = "vapora-ontology and vapora-reflection crates added — ontology is now machine-consumable from Rust (VaporaOntology::load, reload). api-catalog.json exists and is referenced by ontoref. Nickel contracts in nickel/ cover agents, budgets, channels, llm-router, vapora core, workflows.", blocker = "ONTOREF_DAEMON_URL not configured in vapora CI. ontoref sync diff --docs check not wired to pre-commit or CI. vapora-ontology and vapora-reflection have no tests yet.", horizon = 'Months, }, ], }, ], }