Skip to content

docs(skill): ci-gates 598 — a gate and its guard must run the same shell - #3398

Merged
gHashTag merged 2 commits into
masterfrom
skill/598-gate-and-guard-same-shell
Sep 7, 2026
Merged

docs(skill): ci-gates 598 — a gate and its guard must run the same shell#3398
gHashTag merged 2 commits into
masterfrom
skill/598-gate-and-guard-same-shell

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Refs #3396

Turns the coq-kernel Admitted defect (fixed in #3397) into a rule other gates can be checked against, rather than leaving it as one incident.

What the section records

The step inherited the coqorg/coq container default sh -e — dash — and used four bash-only constructs, so it exited 2 before opening any file: the same exit on a clean tree and on one with an Admitted. planted. A constant is not a verdict.

Four reusable rules come out of it:

  1. A guard must invoke its subject the way the runner will. The meta-gate written to protect this step extracts the body from the YAML correctly and then runs it through subprocess.run(["bash","-c",body]) — a different shell from CI. It passes 13/13 on the body dash refuses. The extraction was the careful part; the invocation was the assumption.
  2. sh is a role, not a program. The obvious control — run the body under sh — is a false negative on macOS, where /bin/sh is bash 3.2 and accepts arrays. Ask /bin/sh -c "echo $BASH_VERSION" before treating sh as evidence of POSIX-compatibility; use /bin/dash against a Debian-family container.
  3. A comparison table needs one row where the instrument moves. Without the bash rows, exit 2 under dash reads as a broken probe rather than a finding. The first attempt at this measurement produced four cells of exit 0 because the extractor had silently returned an empty body — caught by making the extractor refuse (assert "VFILES" in body), not by reading the plausible table.
  4. Enumerate the class before repairing the instance. 4 of 50 workflow files use a container; only this step combined one with a bash-only construct. The <<< in rings-rust.yml is in a container-less job.

It also records that Coq kernel is not among the four required contexts, so #3397 auto-merged on the required four while the Coq run was still in progress — the merge gate can say nothing about a change to a non-required workflow.

Shape of the change

Append-only. Verified mechanically before committing: the first 916,851 characters of the file are byte-identical to origin/master, fenced-code-block lines are unchanged at 347, and section numbers go 559 → 560 with 598 unique.

Pre-existing, not touched

Section numbers 546, 547, 548 each appear twice, and the duplicate set is identical on origin/master before this change — the collision is not introduced here. Left alone rather than silently renumbered; filed separately so a renumber can be reviewed on its own.

…hell

Refs #3396

Records the coq-kernel Admitted defect as a rule rather than an incident.

The step inherited the coqorg/coq container's `sh -e` (dash) and used four
bash-only constructs, so it exited 2 before opening any file -- the same
exit on a clean tree and on one with an `Admitted.` planted. A constant is
not a verdict.

Four things the section makes reusable:

- A guard must invoke its subject the way the runner will. The meta-gate
  written to protect this step extracted the body correctly and then ran it
  through `bash -c`, and passed 13/13 on a body dash refuses.
- `sh` is a role, not a program. On macOS /bin/sh is bash 3.2 and accepts
  arrays, so it is a false-negative control; ask `/bin/sh -c 'echo
  $BASH_VERSION'` before treating sh as evidence of POSIX-compatibility.
- A comparison table needs at least one row where the instrument moves.
  The first attempt produced four cells of exit 0 because the extractor
  silently returned an empty body; it was caught by making the extractor
  refuse, not by reading the table.
- Enumerate the class: 4 of 50 workflows use a container, and only this
  step combined one with a bash-only construct.

Append-only: the file's first 17402 lines are byte-identical to master.
The duplicate section numbers 546/547/548 are pre-existing on master and
are left alone.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-07 16:26:32 UTC

Summary

Status Count
Total Open PRs 16
PRs with Failing Checks 12
PRs with All Checks Green 4
READY 2
FAILING 12
PENDING 0
NO CHECKS YET 0

These columns do not partition: 2 + 12 + 0 + 0 = 14, and there are 16 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=745cf51f9c7e != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

Refs #3396

The CI gate requires every PR to add a docs/now/ entry; the local
pre-commit hook only requires that a recent entry exists somewhere in the
tree, so it passed on a change that adds none. The gate's own message
names the divergence.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-07 16:30:38 UTC

Summary

Status Count
Total Open PRs 16
PRs with Failing Checks 13
PRs with All Checks Green 3
READY 2
FAILING 13
PENDING 0
NO CHECKS YET 0

These columns do not partition: 2 + 13 + 0 + 0 = 15, and there are 16 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=745cf51f9c7e != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit 7da64d8 into master Sep 7, 2026
26 of 28 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant