ontoref/reflection/migrations/0003-manifest-self-interrogation.ncl

52 lines
2.2 KiB
Plaintext
Raw Normal View History

2026-03-29 00:19:56 +00:00
{
id = "0003",
slug = "manifest-self-interrogation",
description = "Populate capabilities[], requirements[], and critical_deps[] in manifest.ncl",
check = {
tag = "NuCmd",
cmd = "let f = $\"($env.ONTOREF_PROJECT_ROOT)/.ontology/manifest.ncl\"; if not ($f | path exists) { exit 1 }; let r = (do { ^nickel export --format json --import-path $env.NICKEL_IMPORT_PATH $f } | complete); if $r.exit_code != 0 { exit 1 }; let m = ($r.stdout | from json); if (($m.capabilities? | default [] | length) > 0) and (($m.requirements? | default [] | length) > 0) { exit 0 } else { exit 1 }",
expect_exit = 0,
},
instructions = "
Open .ontology/manifest.ncl and populate three arrays.
capabilities[] — what the project offers (2-6 entries, audience-facing):
m.make_capability {
id = \"kebab-id\",
name = \"Short Name\",
summary = \"One line: what this does.\",
rationale = \"Why it exists. What was rejected.\",
how = \"Key patterns, entry points, data flows.\",
artifacts = [\"crates/foo/\", \"GET /api/foo\"],
adrs = [], # ADR IDs that formalize decisions here
nodes = [], # node IDs from .ontology/core.ncl
}
requirements[] — prerequisites to run (one per tool/service/envvar):
m.make_requirement {
id = \"kebab-id\",
name = \"Human Name\",
env = 'Both, # 'Production | 'Development | 'Both
kind = 'Tool, # 'Tool | 'Service | 'EnvVar | 'Infrastructure
version = \"\",
required = true,
impact = \"What breaks if absent.\",
provision = \"How to install or set.\",
}
critical_deps[] — load-bearing external deps with documented blast radius:
m.make_critical_dep {
id = \"kebab-id\",
name = \"crate-or-service\",
ref = \"crates.io: foo\",
used_for = \"Which capabilities depend on this.\",
failure_impact = \"What breaks if this dep disappears.\",
mitigation = \"Feature flags, fallback builds, alternatives.\",
}
Verify:
nickel export --import-path \"$NICKEL_IMPORT_PATH\" .ontology/manifest.ncl \\
| jq '{capabilities: (.capabilities|length), requirements: (.requirements|length), critical_deps: (.critical_deps|length)}'
",
}