{ 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)}' ", }