From 6004f7e35d6e9c1568a579202adb563ce648adb1 Mon Sep 17 00:00:00 2001 From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com> Date: Mon, 14 Sep 2026 22:42:41 +0100 Subject: [PATCH 1/3] fix(ci): repair unparseable permissions scalar in 1 workflow file(s) A scalar `permissions: read-all` followed by an indented ` actions: read` is a YAML parse error, so the workflow never starts. It emits no check run at all, which means a required context silently never reports and the repository looks greener than a repaired one. `read-all` already grants `actions: read`, so deleting the stray line is a semantic no-op. Verified with a real parser: each file fails `yq` before the change and parses after it. Files: e2e.yml Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_0178nN4Nm3neFRy5K9StZKnB --- .github/workflows/e2e.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index cb725f3..adf91c9 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -29,7 +29,6 @@ on: - 'tests/**' workflow_dispatch: permissions: read-all - actions: read concurrency: group: e2e-${{ github.ref }} cancel-in-progress: true From ef6276073b88cb3093a51b624540d7b37499a0bd Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 23:56:23 +0100 Subject: [PATCH 2/3] Add K9 pedigrees and required project metadata (#74) Fix CI compliance failures by converting session coordination and custom-check definitions to valid K9 syntax, adding K9 headers and pedigree metadata to validation and deployment components, and replacing missing or placeholder project metadata in the A2ML configuration and maintenance checklist. Validation was not run. [View coding task](https://app.coderabbit.ai/code/tasks/55b2658f-c7b6-478c-a1f5-7ea803231158?source=coding_agent_github_pr_description) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .machine_readable/ECOSYSTEM.a2ml | 4 +- .machine_readable/META.a2ml | 2 +- .../self-validating/methodology-guard.k9.ncl | 7 ++ container/deploy.k9.ncl | 8 +- coordination.k9 | 81 ++++++++++--------- docs/governance/MAINTENANCE-CHECKLIST.a2ml | 1 + session/custom-checks.k9 | 56 ++++++++++--- 7 files changed, 103 insertions(+), 56 deletions(-) diff --git a/.machine_readable/ECOSYSTEM.a2ml b/.machine_readable/ECOSYSTEM.a2ml index 0059aed..f51f5b8 100644 --- a/.machine_readable/ECOSYSTEM.a2ml +++ b/.machine_readable/ECOSYSTEM.a2ml @@ -2,7 +2,7 @@ ;; Ecosystem position and relationships (ecosystem (version "1.0.0") - (name "{{REPO}}") + (name "fraying-model-computational-testbed") (type "library") - (purpose "{{REPO_DESCRIPTION}}") + (purpose "Enumerate global knot-resolution states and compute fragment-count distributions") (related-projects)) diff --git a/.machine_readable/META.a2ml b/.machine_readable/META.a2ml index e64e280..09fd82e 100644 --- a/.machine_readable/META.a2ml +++ b/.machine_readable/META.a2ml @@ -2,7 +2,7 @@ ;; Architecture decisions and development practices (meta (version "1.0.0") - (project "{{REPO}}") + (project "fraying-model-computational-testbed") (architecture-decisions) (development-practices (code-review "required") diff --git a/.machine_readable/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl index 1cf4fcb..aba0be0 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) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> # @@ -8,6 +9,12 @@ # Usage: k9 validate methodology-guard let methodology_guard = { + pedigree = { + schema_version = "1.0.0", + name = "methodology-guard", + leash = 'Yard, + }, + name = "methodology-guard", version = "1.0.0", description = "Validates that agent work respects declared methodology constraints", diff --git a/container/deploy.k9.ncl b/container/deploy.k9.ncl index 0ad0d04..f5a77cb 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 — {{PROJECT_NAME}} deployment component (Hunt level) # @@ -143,7 +144,12 @@ echo "K9: Rollback complete." # Export the component { - pedigree = component_pedigree, + pedigree = component_pedigree & { + name = "{{SERVICE_NAME}}-deploy", + version = "{{VERSION}}", + leash = 'Hunt, + signature_required = true, + }, deployment = deployment, scripts = scripts, diff --git a/coordination.k9 b/coordination.k9 index ba31125..213da6c 100644 --- a/coordination.k9 +++ b/coordination.k9 @@ -1,43 +1,44 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Thin coordination bindings for central session-management standards -session_management: - source_of_truth: "standards/session-management-standards" - canonical_commands: - - "intake repo " - - "checkpoint change " - - "verify maintenance " - - "verify substantial " - - "verify release " - - "close planned " - - "close urgent " - - "recover repo " - - "handover full " - - "handover split " - - "handover model " - - "handover human " +{ + pedigree = { + schema_version = "1.0.0", + name = "session-coordination", + leash = 'Kennel, + }, -signals: - - name: "session.intake" - command: "intake repo " - - name: "session.checkpoint" - command: "checkpoint change " - - name: "session.verify.maintenance" - command: "verify maintenance " - - name: "session.verify.substantial" - command: "verify substantial " - - name: "session.verify.release" - command: "verify release " - - name: "session.close.planned" - command: "close planned " - - name: "session.close.urgent" - command: "close urgent " - - name: "session.recover" - command: "recover repo " - - name: "session.handover.full" - command: "handover full " - - name: "session.handover.split" - command: "handover split " - - name: "session.handover.model" - command: "handover model " - - name: "session.handover.human" - command: "handover human " + session_management = { + source_of_truth = "standards/session-management-standards", + canonical_commands = [ + "intake repo ", + "checkpoint change ", + "verify maintenance ", + "verify substantial ", + "verify release ", + "close planned ", + "close urgent ", + "recover repo ", + "handover full ", + "handover split ", + "handover model ", + "handover human ", + ], + }, + + signals = [ + { name = "session.intake", command = "intake repo " }, + { name = "session.checkpoint", command = "checkpoint change " }, + { name = "session.verify.maintenance", command = "verify maintenance " }, + { name = "session.verify.substantial", command = "verify substantial " }, + { name = "session.verify.release", command = "verify release " }, + { name = "session.close.planned", command = "close planned " }, + { name = "session.close.urgent", command = "close urgent " }, + { name = "session.recover", command = "recover repo " }, + { name = "session.handover.full", command = "handover full " }, + { name = "session.handover.split", command = "handover split " }, + { name = "session.handover.model", command = "handover model " }, + { name = "session.handover.human", command = "handover human " }, + ], +} diff --git a/docs/governance/MAINTENANCE-CHECKLIST.a2ml b/docs/governance/MAINTENANCE-CHECKLIST.a2ml index bbcb38a..0d74d53 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 = "cross-repository-maintenance-baseline" version = "1.1.0" last-updated = "2026-02-24" scope = "cross-repo" diff --git a/session/custom-checks.k9 b/session/custom-checks.k9 index bd932fa..e616477 100644 --- a/session/custom-checks.k9 +++ b/session/custom-checks.k9 @@ -1,15 +1,47 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Local repository session checks (thin policy layer) -version: "0.1" -checks: - - id: "session-state-has-next-action" - applies_to: ["close planned", "close urgent", "handover full", "handover split", "handover model", "handover human"] - requirement: "LAST-CANONICAL-COMMAND.md contains next intended action" +{ + pedigree = { + schema_version = "1.0.0", + name = "session-custom-checks", + leash = 'Kennel, + }, - - id: "session-state-has-residual-risks" - applies_to: ["verify maintenance", "verify substantial", "verify release", "recover repo"] - requirement: "Residual risks field is not left blank" - - - id: "session-state-has-recommended-next-protocol" - applies_to: ["intake repo", "checkpoint change", "recover repo", "handover full"] - requirement: "Recommended next protocol is set" + version = "0.1", + checks = [ + { + id = "session-state-has-next-action", + applies_to = [ + "close planned", + "close urgent", + "handover full", + "handover split", + "handover model", + "handover human", + ], + requirement = "LAST-CANONICAL-COMMAND.md contains next intended action", + }, + { + id = "session-state-has-residual-risks", + applies_to = [ + "verify maintenance", + "verify substantial", + "verify release", + "recover repo", + ], + requirement = "Residual risks field is not left blank", + }, + { + id = "session-state-has-recommended-next-protocol", + applies_to = [ + "intake repo", + "checkpoint change", + "recover repo", + "handover full", + ], + requirement = "Recommended next protocol is set", + }, + ], +} From 94fa65b8cb0326c3d156c81624e285cdc2eef9a9 Mon Sep 17 00:00:00 2001 From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 15 Sep 2026 03:33:54 +0100 Subject: [PATCH 3/3] revert: move 'Add K9 pedigrees and required project metadata (#74)' to its own PR against main This content arrived on this campaign branch because CodeRabbit opened #74 with base=fix/workflow-permissions-scalar-parse-error instead of main, and it was merged here. The campaign branch is supposed to carry exactly one mechanical change per repo. Nothing is lost: the same content is now proposed against main, cherry-picked and signed, and this revert simply restores this PR to its stated one-line scope. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_0178nN4Nm3neFRy5K9StZKnB --- .machine_readable/ECOSYSTEM.a2ml | 4 +- .machine_readable/META.a2ml | 2 +- .../self-validating/methodology-guard.k9.ncl | 7 -- container/deploy.k9.ncl | 8 +- coordination.k9 | 81 +++++++++---------- docs/governance/MAINTENANCE-CHECKLIST.a2ml | 1 - session/custom-checks.k9 | 56 +++---------- 7 files changed, 56 insertions(+), 103 deletions(-) diff --git a/.machine_readable/ECOSYSTEM.a2ml b/.machine_readable/ECOSYSTEM.a2ml index f51f5b8..0059aed 100644 --- a/.machine_readable/ECOSYSTEM.a2ml +++ b/.machine_readable/ECOSYSTEM.a2ml @@ -2,7 +2,7 @@ ;; Ecosystem position and relationships (ecosystem (version "1.0.0") - (name "fraying-model-computational-testbed") + (name "{{REPO}}") (type "library") - (purpose "Enumerate global knot-resolution states and compute fragment-count distributions") + (purpose "{{REPO_DESCRIPTION}}") (related-projects)) diff --git a/.machine_readable/META.a2ml b/.machine_readable/META.a2ml index 09fd82e..e64e280 100644 --- a/.machine_readable/META.a2ml +++ b/.machine_readable/META.a2ml @@ -2,7 +2,7 @@ ;; Architecture decisions and development practices (meta (version "1.0.0") - (project "fraying-model-computational-testbed") + (project "{{REPO}}") (architecture-decisions) (development-practices (code-review "required") diff --git a/.machine_readable/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl index aba0be0..1cf4fcb 100644 --- a/.machine_readable/self-validating/methodology-guard.k9.ncl +++ b/.machine_readable/self-validating/methodology-guard.k9.ncl @@ -1,4 +1,3 @@ -K9! # SPDX-License-Identifier: MPL-2.0 # Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}> # @@ -9,12 +8,6 @@ K9! # Usage: k9 validate methodology-guard let methodology_guard = { - pedigree = { - schema_version = "1.0.0", - name = "methodology-guard", - leash = 'Yard, - }, - name = "methodology-guard", version = "1.0.0", description = "Validates that agent work respects declared methodology constraints", diff --git a/container/deploy.k9.ncl b/container/deploy.k9.ncl index f5a77cb..0ad0d04 100644 --- a/container/deploy.k9.ncl +++ b/container/deploy.k9.ncl @@ -1,4 +1,3 @@ -K9! # SPDX-License-Identifier: MPL-2.0 # deploy.k9.ncl — {{PROJECT_NAME}} deployment component (Hunt level) # @@ -144,12 +143,7 @@ echo "K9: Rollback complete." # Export the component { - pedigree = component_pedigree & { - name = "{{SERVICE_NAME}}-deploy", - version = "{{VERSION}}", - leash = 'Hunt, - signature_required = true, - }, + pedigree = component_pedigree, deployment = deployment, scripts = scripts, diff --git a/coordination.k9 b/coordination.k9 index 213da6c..ba31125 100644 --- a/coordination.k9 +++ b/coordination.k9 @@ -1,44 +1,43 @@ -K9! -# SPDX-License-Identifier: MPL-2.0 # Thin coordination bindings for central session-management standards -{ - pedigree = { - schema_version = "1.0.0", - name = "session-coordination", - leash = 'Kennel, - }, +session_management: + source_of_truth: "standards/session-management-standards" + canonical_commands: + - "intake repo " + - "checkpoint change " + - "verify maintenance " + - "verify substantial " + - "verify release " + - "close planned " + - "close urgent " + - "recover repo " + - "handover full " + - "handover split " + - "handover model " + - "handover human " - session_management = { - source_of_truth = "standards/session-management-standards", - canonical_commands = [ - "intake repo ", - "checkpoint change ", - "verify maintenance ", - "verify substantial ", - "verify release ", - "close planned ", - "close urgent ", - "recover repo ", - "handover full ", - "handover split ", - "handover model ", - "handover human ", - ], - }, - - signals = [ - { name = "session.intake", command = "intake repo " }, - { name = "session.checkpoint", command = "checkpoint change " }, - { name = "session.verify.maintenance", command = "verify maintenance " }, - { name = "session.verify.substantial", command = "verify substantial " }, - { name = "session.verify.release", command = "verify release " }, - { name = "session.close.planned", command = "close planned " }, - { name = "session.close.urgent", command = "close urgent " }, - { name = "session.recover", command = "recover repo " }, - { name = "session.handover.full", command = "handover full " }, - { name = "session.handover.split", command = "handover split " }, - { name = "session.handover.model", command = "handover model " }, - { name = "session.handover.human", command = "handover human " }, - ], -} +signals: + - name: "session.intake" + command: "intake repo " + - name: "session.checkpoint" + command: "checkpoint change " + - name: "session.verify.maintenance" + command: "verify maintenance " + - name: "session.verify.substantial" + command: "verify substantial " + - name: "session.verify.release" + command: "verify release " + - name: "session.close.planned" + command: "close planned " + - name: "session.close.urgent" + command: "close urgent " + - name: "session.recover" + command: "recover repo " + - name: "session.handover.full" + command: "handover full " + - name: "session.handover.split" + command: "handover split " + - name: "session.handover.model" + command: "handover model " + - name: "session.handover.human" + command: "handover human " diff --git a/docs/governance/MAINTENANCE-CHECKLIST.a2ml b/docs/governance/MAINTENANCE-CHECKLIST.a2ml index 0d74d53..bbcb38a 100644 --- a/docs/governance/MAINTENANCE-CHECKLIST.a2ml +++ b/docs/governance/MAINTENANCE-CHECKLIST.a2ml @@ -2,7 +2,6 @@ # Cross-repo maintenance baseline (machine-readable canonical) [metadata] -name = "cross-repository-maintenance-baseline" version = "1.1.0" last-updated = "2026-02-24" scope = "cross-repo" diff --git a/session/custom-checks.k9 b/session/custom-checks.k9 index e616477..bd932fa 100644 --- a/session/custom-checks.k9 +++ b/session/custom-checks.k9 @@ -1,47 +1,15 @@ -K9! -# SPDX-License-Identifier: MPL-2.0 # Local repository session checks (thin policy layer) +version: "0.1" -{ - pedigree = { - schema_version = "1.0.0", - name = "session-custom-checks", - leash = 'Kennel, - }, +checks: + - id: "session-state-has-next-action" + applies_to: ["close planned", "close urgent", "handover full", "handover split", "handover model", "handover human"] + requirement: "LAST-CANONICAL-COMMAND.md contains next intended action" - version = "0.1", - checks = [ - { - id = "session-state-has-next-action", - applies_to = [ - "close planned", - "close urgent", - "handover full", - "handover split", - "handover model", - "handover human", - ], - requirement = "LAST-CANONICAL-COMMAND.md contains next intended action", - }, - { - id = "session-state-has-residual-risks", - applies_to = [ - "verify maintenance", - "verify substantial", - "verify release", - "recover repo", - ], - requirement = "Residual risks field is not left blank", - }, - { - id = "session-state-has-recommended-next-protocol", - applies_to = [ - "intake repo", - "checkpoint change", - "recover repo", - "handover full", - ], - requirement = "Recommended next protocol is set", - }, - ], -} + - id: "session-state-has-residual-risks" + applies_to: ["verify maintenance", "verify substantial", "verify release", "recover repo"] + requirement: "Residual risks field is not left blank" + + - id: "session-state-has-recommended-next-protocol" + applies_to: ["intake repo", "checkpoint change", "recover repo", "handover full"] + requirement: "Recommended next protocol is set"