From f3ed85b24937556c7ccc7c7dccca5ec99a4547dd Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 21 Jul 2026 16:03:38 +0100 Subject: [PATCH] fix(dogfood-gate): repair the manifest defects the revived gate exposed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Dogfood Gate could not parse before #53, so it never ran. Now that it parses, it runs — and it immediately reported 2 A2ML errors and 4 K9 errors on main. All six are addressed here. Each fix was verified by running the actual validator locally, not by reading its source. A2ML (2 errors -> 0) * docs/governance/TSDM.a2ml was not defective. The workflow pinned a2ml-validate-action at 6bff6ec, which is PR #26 ("recognise s-expression identity/version fields"). The colon/brace-block identity form -- `id: "tsdm-standard"` -- was only recognised from PR #41 onward, and the validator's own comment names this exact file as the motivating case. The pin predated the fix for the file it was failing on. Bumped to current main (5468b7f). Running the newer validator locally drops the error count from 2 to 1, confirming the diagnosis before the bump was made. * docs/governance/MAINTENANCE-CHECKLIST.a2ml genuinely lacked an identity field. It is not named *AI-MANIFEST*, is not under .machine_readable/, and carries no @-directives, so none of the validator's four exemptions apply. Added `name` to its [metadata] block. K9 (4 errors -> 0) Both files were genuinely defective; the current validator reports the same 4 errors as the pinned one, so unlike the A2ML case this is not pin staleness. * container/deploy.k9.ncl and .machine_readable/self-validating/methodology-guard.k9.ncl were both missing the mandatory `K9!` magic number on line 1. * container/deploy.k9.ncl had `pedigree = component_pedigree,` where the canonical template (rsr-julia-library-template-repo) has `pedigree = component_pedigree & { name = "..." },`. Without the merge the pedigree carries no name. Matched to the template. * methodology-guard.k9.ncl had no pedigree block at all. Added one. Note on `K9!` and Nickel: the magic number is not valid Nickel syntax, so `nickel typecheck` fails on every .k9.ncl in the estate that carries it, including the canonical template and every currently-passing file. k9-svc evidently strips the line before parsing. This means the `nickel typecheck container/deploy.k9.ncl` usage line in these files' own headers cannot succeed as written. That is pre-existing and estate-wide, not introduced here, and is left alone. Both files were checked with the magic line stripped, and both typecheck clean -- which caught a real error in the first draft of this change, where the new pedigree block had been placed at top level in a file whose body is `let ... in ...`. Verified: K9 0 errors, A2ML 0 errors (121 files), actionlint 0, aspect 4/4, e2e 4/4, smoke 20/20. --- .github/workflows/dogfood-gate.yml | 6 +++++- .../self-validating/methodology-guard.k9.ncl | 13 +++++++++++++ container/deploy.k9.ncl | 3 ++- docs/governance/MAINTENANCE-CHECKLIST.a2ml | 1 + 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dogfood-gate.yml b/.github/workflows/dogfood-gate.yml index 071270e..59b3287 100644 --- a/.github/workflows/dogfood-gate.yml +++ b/.github/workflows/dogfood-gate.yml @@ -39,7 +39,11 @@ jobs: - name: Validate A2ML manifests if: steps.detect.outputs.count > 0 - uses: hyperpolymath/a2ml-validate-action@6bff6ec134fc977e86d25166a5c522ddea5c1e78 # main + # Pin was 6bff6ec (#26, s-expression identity). That predates #41, + # which taught the validator the colon/brace-block identity form + # (`id: "..."`), so docs/governance/TSDM.a2ml failed against the old + # pin despite being valid. Bumped to current main. + uses: hyperpolymath/a2ml-validate-action@5468b7ff0f5129a74d25af5f2468df11a706dc70 # main with: path: '.' strict: 'false' diff --git a/.machine_readable/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl index 3f627ff..bd7139b 100644 --- a/.machine_readable/self-validating/methodology-guard.k9.ncl +++ b/.machine_readable/self-validating/methodology-guard.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # @@ -12,6 +13,18 @@ let methodology_guard = { version = "1.0.0", description = "Validates that agent work respects declared methodology constraints", + # Component pedigree (K9 self-description). + pedigree = { + name = "methodology-guard", + version = "1.0.0", + schema_version = "1.0.0", + component_type = "config-validator", + author = "Jonathan D.A. Jewell ", + description = "Validates that agent work respects declared methodology constraints", + leash = "kennel", + k9_spec_version = "1.0.0", + }, + checks = { divergent_invariant_language = { description = "No files in languages violating the divergent language invariant", diff --git a/container/deploy.k9.ncl b/container/deploy.k9.ncl index 53973d8..c88004e 100644 --- a/container/deploy.k9.ncl +++ b/container/deploy.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # deploy.k9.ncl — KRL deployment component (Hunt level) # @@ -143,7 +144,7 @@ echo "K9: Rollback complete." # Export the component { - pedigree = component_pedigree, + pedigree = component_pedigree & { name = "krl-deploy" }, deployment = deployment, scripts = scripts, diff --git a/docs/governance/MAINTENANCE-CHECKLIST.a2ml b/docs/governance/MAINTENANCE-CHECKLIST.a2ml index eaee720..f46eece 100644 --- a/docs/governance/MAINTENANCE-CHECKLIST.a2ml +++ b/docs/governance/MAINTENANCE-CHECKLIST.a2ml @@ -2,6 +2,7 @@ # Cross-repo maintenance baseline (machine-readable canonical) [metadata] +name = "maintenance-checklist" version = "1.1.0" last-updated = "2026-02-24" scope = "cross-repo"