68 lines
2.5 KiB
Plaintext
68 lines
2.5 KiB
Plaintext
|
|
let d = import "../defaults.ncl" in
|
||
|
|
|
||
|
|
d.make_mode String {
|
||
|
|
id = "sync-ontology",
|
||
|
|
trigger = "Synchronize .ontology/ declarations with actual project artifacts — detect drift, propose patches, apply with confirmation",
|
||
|
|
|
||
|
|
preconditions = [
|
||
|
|
"ONTOREF_PROJECT_ROOT is set and points to a project with .ontology/core.ncl",
|
||
|
|
"nickel binary is available on PATH",
|
||
|
|
"Nushell >= 0.110.0 is available",
|
||
|
|
],
|
||
|
|
|
||
|
|
steps = [
|
||
|
|
{
|
||
|
|
id = "scan",
|
||
|
|
action = "Analyze project structure: crates, scenarios, agents, CI, forms, modes. If nightly toolchain is available, extract pub API surface via cargo doc JSON.",
|
||
|
|
cmd = "./ontoref sync scan",
|
||
|
|
actor = 'Both,
|
||
|
|
on_error = { strategy = 'Stop },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id = "diff",
|
||
|
|
action = "Compare scan results against .ontology/core.ncl nodes and edges. Categorize each item as OK, MISSING (artifact without node), STALE (node without artifact), DRIFT (node outdated), or BROKEN (edge referencing missing node).",
|
||
|
|
cmd = "./ontoref sync diff",
|
||
|
|
actor = 'Both,
|
||
|
|
depends_on = [{ step = "scan" }],
|
||
|
|
on_error = { strategy = 'Stop },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id = "propose",
|
||
|
|
action = "Generate Nickel code for new nodes (MISSING), mark stale nodes for removal, generate updated nodes for DRIFT, mark broken edges for deletion.",
|
||
|
|
cmd = "./ontoref sync propose",
|
||
|
|
actor = 'Both,
|
||
|
|
depends_on = [{ step = "diff" }],
|
||
|
|
on_error = { strategy = 'Stop },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id = "review",
|
||
|
|
action = "Human reviews the proposal. Agent can skip this step.",
|
||
|
|
actor = 'Human,
|
||
|
|
depends_on = [{ step = "propose" }],
|
||
|
|
on_error = { strategy = 'Stop },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id = "apply",
|
||
|
|
action = "Apply approved changes to .ontology/core.ncl. Each category (add/remove/update) confirmed separately.",
|
||
|
|
cmd = "./ontoref sync apply",
|
||
|
|
actor = 'Human,
|
||
|
|
depends_on = [{ step = "review" }],
|
||
|
|
on_error = { strategy = 'Stop },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id = "verify",
|
||
|
|
action = "Run nickel typecheck on modified files. Execute sync diff again to confirm zero drift.",
|
||
|
|
cmd = "nickel typecheck .ontology/core.ncl && ./ontoref sync diff",
|
||
|
|
actor = 'Both,
|
||
|
|
depends_on = [{ step = "apply" }],
|
||
|
|
on_error = { strategy = 'Stop },
|
||
|
|
},
|
||
|
|
],
|
||
|
|
|
||
|
|
postconditions = [
|
||
|
|
"nickel export .ontology/core.ncl succeeds without errors",
|
||
|
|
"sync diff reports zero MISSING, STALE, or BROKEN items",
|
||
|
|
"All existing ADR Hard constraints still pass",
|
||
|
|
],
|
||
|
|
}
|