ontoref/.ontology/state.ncl
Jesús Pérez 75892a8eea
Some checks failed
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
Nickel Type Check / Nickel Type Checking (push) Has been cancelled
feat: browser-style panel nav, repo file routing, migration 0007
graph, search, api_catalog pages: back/forward history stack (PanelNav/dpNav).
  File artifact paths open in external tabs via card.repo (Gitea source URL) or
  card.docs (cargo docs for .rs) — openFile/openFileInPanel removed from all pages.
  Tera | safe required for URL values inside <script> blocks (auto-escape of slashes).

  card.ncl: repo field added.
  insert_brand_ctx: injects card_repo/card_docs into Tera context.
  #[onto_api] proc-macro: source_file = file!() emitted; ApiRouteEntry.source_file
  populated in primary catalog handler.

  migration 0007-card-repo-field: check card.ncl for repo field; skip if absent.
2026-03-29 08:32:50 +01:00

134 lines
8.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

let d = import "../ontology/defaults/state.ncl" in
{
dimensions = [
d.make_dimension {
id = "protocol-maturity",
name = "Protocol Maturity",
description = "Completeness of the ontoref protocol specification — schemas, ADRs, modes, Rust crates, daemon, and adoption tooling.",
current_state = "adoption-tooling-complete",
desired_state = "protocol-stable",
horizon = 'Months,
states = [],
transitions = [
d.make_transition {
from = "tooling-migrated",
to = "adoption-tooling-complete",
condition = "adopt_ontoref mode, templates, daemon crate, landing page all present and validated.",
catalyst = "Daemon extracted from stratumiops; adoption templates created.",
blocker = "none",
horizon = 'Months,
},
d.make_transition {
from = "adoption-tooling-complete",
to = "protocol-stable",
condition = "ADR-001 accepted, ontoref.dev published, at least two external projects consuming the protocol.",
catalyst = "10 projects consuming the protocol: vapora, stratumiops, kogral, typedialog, secretumvault, rustelo, librecloud_renew, website-impl, jpl_ontology, provisioning. ADR-001 Accepted. Auth model, install pipeline, personal/career schemas, content modes, API catalog (#[onto_api], ADR-007), config surface (ADR-008), manifest self-interrogation (ADR-009), protocol migration system (ADR-010) all complete.",
blocker = "ontoref.dev not yet published.",
horizon = 'Months,
},
],
},
d.make_dimension {
id = "self-description-coverage",
name = "Self-Description Coverage",
description = "How completely ontoref describes itself using its own protocol.",
current_state = "fully-self-described",
desired_state = "fully-self-described",
horizon = 'Weeks,
states = [],
transitions = [
d.make_transition {
from = ".ontology-bootstrapped",
to = "modes-and-web-present",
condition = "adopt_ontoref mode, landing page, and all core.ncl nodes reflect current artifact set.",
catalyst = "Web presence and adoption tooling added in session 2026-03-12.",
blocker = "none",
horizon = 'Weeks,
},
d.make_transition {
from = "modes-and-web-present",
to = "fully-self-described",
condition = "At least 3 ADRs accepted, reflection/backlog.ncl present, describe project returns complete picture.",
catalyst = "ADR-001ADR-006 authored (6 ADRs present). Auth model, project onboarding, and session management nodes added in 2026-03-13. Personal/career/project-card schemas, 5 content modes, search bookmarks, and ADR-006 (Nu 0.111 compat) added in session 2026-03-15. Session 2026-03-23: api-catalog-surface node added (#[onto_api] proc-macro + inventory catalog), describe-query-layer updated (diff + api subcommands), adopt-ontoref-tooling updated (update_ontoref mode + manifest/connections templates + enrichment prompt), ontoref-daemon updated (11 pages, 29 MCP tools, per-file versioning, API catalog endpoint). Session 2026-03-26: config-surface node added — typed DaemonNclConfig (parse-at-boundary pattern), #[derive(ConfigFields)] coherence registry, override-layer mutation API (PUT /config/{section}), NCL contracts (.ontoref/contracts.ncl: LogConfig + DaemonConfig), manifest config_surface with multi-consumer sections. ADR-007 (inventory/onto_api) extended to ConfigFields; ADR-008 (NCL-first config validation + override-layer mutation). Session 2026-03-26 (2nd): manifest-self-description node added — capability_type (id/name/summary/rationale/how/artifacts/adrs/nodes), requirement_type (env_target: Production/Development/Both; kind: Tool/Service/EnvVar/Infrastructure; impact/provision), critical_dep_type (failure_impact required; mitigation). describe requirements new subcommand. describe guides extended with capabilities/requirements/critical_deps. Bug fix: collect-identity read manifest.kind? (never existed) instead of manifest.repo_kind?; description field added to manifest_type. Ontoref self-described with 3 capabilities, 5 requirements, 3 critical deps. ADR-009. Session 2026-03-29: graph/search/api_catalog UI pages gain browser-style panel navigation (PanelNav/dpNav back/forward history stack, cursor-into-array model). File artifact paths route to external tabs via card.repo (Gitea source URL format {repo}/src/branch/main/{path}) or card.docs (cargo docs URL for .rs files when configured) — inline file loading removed from all three pages. card.ncl gains repo field. insert_brand_ctx injects card_repo/card_docs into Tera context. Tera | safe filter applied to URL values in <script> blocks to prevent HTML entity escaping of slashes.",
blocker = "none",
horizon = 'Weeks,
},
],
},
d.make_dimension {
id = "ecosystem-integration",
name = "Ecosystem Integration",
description = "Degree to which other ecosystem projects (stratumiops, syntaxis, vapora, kogral) consume the ontoref protocol.",
current_state = "stratumiops-integrated",
desired_state = "multi-project",
horizon = 'Months,
coupled_with = ["protocol-maturity"],
states = [],
transitions = [
d.make_transition {
from = "source-only",
to = "stratumiops-integrated",
condition = "stratumiops has .ontoref/config.ncl and scripts/ontoref wrapper functional; ADR-007 marked Superseded pointing to ontoref:adr-002.",
catalyst = "Ontoref extraction and stratumiops migration session 2026-03-12.",
blocker = "none",
horizon = 'Months,
},
d.make_transition {
from = "stratumiops-integrated",
to = "multi-project",
condition = "At least one additional project (vapora, kogral, or syntaxis) has .ontoref/config.ncl and scripts/ontoref. Syntaxis parses ontoref Core type.",
catalyst = "Syntaxis integration spike or vapora/kogral onboarding.",
blocker = "Syntaxis syntaxis-ontology crate has ES→EN migration errors pending. vapora/kogral not yet initialized with .ontoref/.",
horizon = 'Months,
},
],
},
d.make_dimension {
id = "operational-mode",
name = "Operational Mode",
description = "Runtime connectivity mode: local (files only) or daemon (push-based DB projection). Auto-detected on each command; transitions trigger hook updates and sync. Daemon launched via ADR-004 NCL pipe bootstrap (ontoref-daemon-boot); NATS topology resolved from NATS_STREAMS_CONFIG env var (global ~/.config/ontoref/streams.json) or project-local nats/streams.json.",
current_state = "local",
desired_state = "daemon",
horizon = 'Continuous,
states = [
d.make_state {
id = "local",
name = "Local",
description = "No daemon. All operations read from files. Hooks are no-ops. Safe for offline or repo-only work.",
tension = 'Low,
},
d.make_state {
id = "daemon",
name = "Daemon",
description = "Daemon reachable. Ontology projected into DB on each sync. Hooks push on git merge/checkout. NATS events available.",
tension = 'Low,
},
],
transitions = [
d.make_transition {
from = "local",
to = "daemon",
condition = "Daemon reachable at ONTOREF_DAEMON_URL and DB available (if db feature enabled).",
catalyst = "Daemon started, network restored, or first onboarding after install.",
blocker = "Daemon not running or DB not configured.",
horizon = 'Continuous,
},
d.make_transition {
from = "daemon",
to = "local",
condition = "Daemon unreachable or DB unavailable.",
catalyst = "Network loss, daemon stopped, or offline work.",
blocker = "none",
horizon = 'Continuous,
},
],
},
],
}