From f7c9b66f7e357ccfc3389814a908c2d68affe2fd Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Mon, 3 Aug 2026 13:53:26 +0100 Subject: [PATCH] =?UTF-8?q?fix(ci):=20repair=20parse-dead=20workflow=20?= =?UTF-8?q?=E2=80=94=20K9-SVC=20step=20at=20job-level=20indent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A sweep appended a `K9-SVC Validation` step at two-space indentation — the level of a job key under `jobs:` — instead of the six spaces that would place it inside a job's `steps:` list. YAML then hits a sequence item where it expects a block mapping, and the whole file fails to parse. Actions rejects a workflow that does not parse *before* allocating a runner, so this workflow has produced no check run and no log since the step was added. It has not been running at all. The signature is worth recognising: the run is listed by FILE PATH rather than workflow name, `gh run view --log-failed` returns "log not found", and `gh pr checks` shows nothing, because a parse-rejected workflow creates no check run. Only `gh run list --json conclusion` reveals it. Fix: re-indent the step and its body by four spaces so it sits inside the job's `steps:` list. Nothing else is changed — no action pins, no permissions, no logic. Estate-wide measurement (2026-07-27): this fault affects 49 workflow files across 45 repositories, and every single one of them fails to parse — 100%, not a sample. Compare the 12 files where the same step is correctly indented, which is how the intended shape was determined. Affected workflows are mostly instant-sync.yml (forge propagation), plus boj-build.yml, casket-pages.yml, release.yml, cflite_pr.yml and one codeql.yml. Built with git plumbing directly against origin/HEAD, so no local working tree was involved and no unrelated local changes are included. Co-Authored-By: Claude Opus 5 --- .github/workflows/instant-sync.yml | 54 +++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/.github/workflows/instant-sync.yml b/.github/workflows/instant-sync.yml index 18158734..364416ce 100644 --- a/.github/workflows/instant-sync.yml +++ b/.github/workflows/instant-sync.yml @@ -48,31 +48,31 @@ jobs: if: steps.check.outputs.has_token == 'true' run: echo "::notice::Propagation triggered for ${{ github.event.repository.name }}" - - name: K9-SVC Validation - run: | - echo "Running K9-SVC contractile validation..." - if [ -f .machine_readable/contractiles/must/Mustfile.a2ml ]; then - echo "✅ Mustfile found - running validation" - # Placeholder for actual K9 validation - echo "K9 validation would run here" - else - echo "❌ Mustfile not found" - exit 1 - fi + - name: K9-SVC Validation + run: | + echo "Running K9-SVC contractile validation..." + if [ -f .machine_readable/contractiles/must/Mustfile.a2ml ]; then + echo "✅ Mustfile found - running validation" + # Placeholder for actual K9 validation + echo "K9 validation would run here" + else + echo "❌ Mustfile not found" + exit 1 + fi - - name: Contractile Check - run: | - echo "Checking contractile completeness..." - contractiles=("must" "trust" "dust" "lust" "adjust" "intend") - missing=0 - for c in "${contractiles[@]}"; do - if [ ! -f ".machine_readable/contractiles/$c/${c^}file.a2ml" ]; then - echo "❌ Missing: $c" - missing=$((missing + 1)) - fi - done - if [ $missing -gt 0 ]; then - echo "❌ $missing contractiles missing" - exit 1 - fi - echo "✅ All contractiles present" + - name: Contractile Check + run: | + echo "Checking contractile completeness..." + contractiles=("must" "trust" "dust" "lust" "adjust" "intend") + missing=0 + for c in "${contractiles[@]}"; do + if [ ! -f ".machine_readable/contractiles/$c/${c^}file.a2ml" ]; then + echo "❌ Missing: $c" + missing=$((missing + 1)) + fi + done + if [ $missing -gt 0 ]; then + echo "❌ $missing contractiles missing" + exit 1 + fi + echo "✅ All contractiles present" \ No newline at end of file