Skip to content

Commit 63535a7

Browse files
hyperpolymathclaude
andcommitted
fix(ci): repair dogfood-gate.yml — the workflow has never run
This workflow is invalid YAML, so GitHub refuses it at parse time. It produces NO run, NO check-run, NO annotation and NO log — not a red X, an absence. Nothing on a dashboard distinguishes "this gate passed" from "this gate does not exist", which is why it went unnoticed. The tell is the Actions API reporting the workflow's name as its FILE PATH (`.github/workflows/dogfood-gate.yml`) instead of its `name:` — GitHub registers a file it cannot parse under its path. CAUSE: the embedded `python3 -c "` body starts at column 0. A `run: |` literal block scalar ends at the first non-empty line indented less than the block, so the Python terminates the block and YAML then tries to parse `import tomllib, sys` as a mapping key — "could not find expected ':'". FIX: indent the embedded body and its closing quote to the block indent. YAML strips that indent again when parsing, so the shell and the interpreter still receive the code at column 0. The content is unchanged; only the YAML framing differs. VERIFIED, not assumed: * the file parses and yields a `jobs:` mapping; * `bash -n` passes on the reconstructed run block; * the resulting `run:` value is BYTE-IDENTICAL to the same workflow in repos where it already parses (e.g. bofig) — this reproduces the known-good form rather than inventing one; * exactly one file is changed. Measured estate-wide 2026-07-27: 211 invalid workflow files across 116 repos, confirmed by the Actions API. `dogfood-gate.yml` is 71 of them. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent a31cc02 commit 63535a7

1 file changed

Lines changed: 20 additions & 20 deletions

File tree

.github/workflows/dogfood-gate.yml

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -263,26 +263,26 @@ jobs:
263263
264264
# Validate TOML structure using Python 3.11+ tomllib
265265
python3 -c "
266-
import tomllib, sys
267-
with open('eclexiaiser.toml', 'rb') as f:
268-
data = tomllib.load(f)
269-
project = data.get('project', {})
270-
if not project.get('name', '').strip():
271-
print('ERROR: project.name is required', file=sys.stderr)
272-
sys.exit(1)
273-
functions = data.get('functions', [])
274-
if not functions:
275-
print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)
276-
sys.exit(1)
277-
for fn in functions:
278-
if not fn.get('name', '').strip():
279-
print('ERROR: function name cannot be empty', file=sys.stderr)
280-
sys.exit(1)
281-
if not fn.get('source', '').strip():
282-
print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)
283-
sys.exit(1)
284-
print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
285-
" || {
266+
import tomllib, sys
267+
with open('eclexiaiser.toml', 'rb') as f:
268+
data = tomllib.load(f)
269+
project = data.get('project', {})
270+
if not project.get('name', '').strip():
271+
print('ERROR: project.name is required', file=sys.stderr)
272+
sys.exit(1)
273+
functions = data.get('functions', [])
274+
if not functions:
275+
print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)
276+
sys.exit(1)
277+
for fn in functions:
278+
if not fn.get('name', '').strip():
279+
print('ERROR: function name cannot be empty', file=sys.stderr)
280+
sys.exit(1)
281+
if not fn.get('source', '').strip():
282+
print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)
283+
sys.exit(1)
284+
print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
285+
" || {
286286
echo "::error file=eclexiaiser.toml::Invalid eclexiaiser.toml — see step output for details"
287287
exit 1
288288
}

0 commit comments

Comments
 (0)