{ id = "0014", slug = "workflow-layer-model", description = "Workflow layer model: .ontology/workflow.ncl declares independent CI/build/distribution layers. Cargo profiles ci-test (pre-commit, debug=0) and ci (CI pipeline, line-tables-only) must exist. Nextest profiles ci-test and ci must exist. Generator: ore workflow generate.", check = { tag = "NuCmd", cmd = "let root = ($env.ONTOREF_PROJECT_ROOT? | default ($env.ONTOREF_ROOT? | default (pwd | path expand))); let wf = $\"($root)/.ontology/workflow.ncl\"; if not ($wf | path exists) { exit 1 }; let cargo_cfg = $\"($root)/.cargo/config.toml\"; if not ($cargo_cfg | path exists) { exit 1 }; let cargo_txt = (open --raw $cargo_cfg); let has_ci_test = ($cargo_txt | str contains \"[profile.ci-test]\"); let has_ci = ($cargo_txt | str contains \"[profile.ci]\"); let nextest_cfg = $\"($root)/.config/nextest.toml\"; if not ($nextest_cfg | path exists) { exit 1 }; let nextest_txt = (open --raw $nextest_cfg); let nx_ci_test = ($nextest_txt | str contains \"[profile.ci-test]\"); let nx_ci = ($nextest_txt | str contains \"[profile.ci]\"); if $has_ci_test and $has_ci and $nx_ci_test and $nx_ci { exit 0 } else { exit 1 }", expect_exit = 0, }, instructions = " Adopt the workflow layer model: 1. Create .ontology/workflow.ncl declaring your CI layers. Use the template at reflection/templates/ontology/workflow.ncl or copy from an existing workspace. 2. Add cargo profiles to .cargo/config.toml: [profile.ci-test] # Pre-commit: no debug info, no incremental — shared .rlib between test + docs hooks inherits = \"test\" debug = 0 incremental = false [profile.ci] # CI pipeline: line-tables-only for actionable backtraces on remote failures inherits = \"test\" debug = \"line-tables-only\" incremental = false 3. Add nextest profiles to .config/nextest.toml: [profile.ci-test] fail-fast = true retries = 0 [profile.ci] fail-fast = false retries = 1 4. Generate CI artifacts from the declaration: ore workflow generate This writes: - .woodpecker/ci.yml (from layers with provider Woodpecker + trigger OnPR) - .woodpecker/ci-exhaustive.yml (from layers with trigger OnMainMerge) - justfiles/workflow.just (from layers with provider Justfile) Pre-commit hooks are printed for manual merge into .pre-commit-config.yaml. 5. Verify: ore workflow validate ore workflow list ", }