Config surface — per-project config introspection, coherence verification, and
audited mutation without destroying NCL structure (ADR-008):
- crates/ontoref-daemon/src/config.rs — typed DaemonNclConfig (parse-at-boundary
pattern); all section structs derive ConfigFields + config_section(id, ncl_file)
emitting inventory::submit!(ConfigFieldsEntry{...}) at link time
- crates/ontoref-derive/src/lib.rs — #[derive(ConfigFields)] proc-macro; serde
rename support; serde_rename_of() helper extracted to fix excessive_nesting
- crates/ontoref-daemon/src/main.rs — 3-tuple bootstrap block (nickel_import_path,
loaded_ncl_config: Option<DaemonNclConfig>, stdin_raw); apply_ui_config takes
&UiConfig; NATS call site typed; resolve_asset_dir cfg(feature = "ui")
- crates/ontoref-daemon/src/api.rs — config GET/PUT endpoints, quickref, coherence,
cross-project comparison; index_section_fields() extracted (excessive_nesting)
- crates/ontoref-daemon/src/config_coherence.rs — multi-consumer coherence;
merge_meta_into_section() extracted; and() replaces unnecessary and_then
NCL contracts for ontoref's own config:
- .ontoref/contracts.ncl — LogConfig (LogLevel, LogRotation, PositiveInt) and
DaemonConfig (Port, optional overrides); std.contract.from_validator throughout
- .ontoref/config.ncl — log | C.LogConfig applied
- .ontology/manifest.ncl — contracts_path, log/daemon contract refs, daemon section
with DaemonRuntimeConfig consumer and 7 declared fields
Protocol:
- adrs/adr-008-ncl-first-config-validation-and-override-layer.ncl — NCL contracts
as single validation gate; Rust structs are contract-trusted; override-layer
mutation writes {section}.overrides.ncl + _overrides_meta, never touches source
on+re update:
- .ontology/core.ncl — config-surface node (28 practices); adr-lifecycle extended
to adr-007 + adr-008; 6 new edges (ManifestsIn daemon, DependsOn ontology-crate,
Complements api-catalog-surface/dag-formalized/self-describing/adopt-ontoref)
- .ontology/state.ncl — protocol-maturity blocker and self-description-coverage
catalyst updated for session 2026-03-26
- README.md / CHANGELOG.md updated
134 lines
7.3 KiB
Plaintext
134 lines
7.3 KiB
Plaintext
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 = "First external adoption.",
|
||
blocker = "ontoref.dev not yet published; no external consumers yet. Auth model complete. Install pipeline complete. Personal/career schema layer present; content modes operational. Nu 0.111 compat fixed (ADR-006). Protocol v2 complete: manifest.ncl + connections.ncl templates, update_ontoref mode, API catalog via #[onto_api], describe diff, describe api, per-file versioning. Config surface complete (ADR-008): typed DaemonNclConfig, #[derive(ConfigFields)] inventory coherence registry, NCL contracts (LogConfig/DaemonConfig in .ontoref/contracts.ncl), override-layer mutation API, multi-consumer manifest schema. Syntaxis syntaxis-ontology crate has pending ES→EN migration errors.",
|
||
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-001–ADR-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).",
|
||
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,
|
||
},
|
||
],
|
||
},
|
||
|
||
],
|
||
}
|