Skip to content

docs: the CI platform-coupling incident, and required status checks on main - #5

Merged
danielfmonzon merged 1 commit into
mainfrom
docs/ci-incident
Aug 15, 2026
Merged

docs: the CI platform-coupling incident, and required status checks on main#5
danielfmonzon merged 1 commit into
mainfrom
docs/ci-incident

Conversation

@danielfmonzon

Copy link
Copy Markdown
Owner

Two decision-log entries, no code.

(a) CI found a firewall hole the development platform could not. _normalise built a Path from the raw string, so on POSIX a backslash was part of a filename rather than a separator: config\risk.yaml never matched the frozen config/risk.yaml entry and the firewall allowed it. The same assertion passed on Windows. Live on main from a80ca1d until PR #4 merged, roughly fifteen minutes. Records the general lesson — a security boundary whose verdict depends on the OS evaluating it is not a boundary, and that class of defect is structurally invisible to the machine it was written on.

Also records the test-reads-gitignored-artifacts anti-pattern (.exists() on reports/*), which passed locally for the wrong reason and failed on a clean checkout. Assert the decision, not the data.

(b) Required status checks on main, as a direct consequence. PR #2 merged red. "Requires a PR" and "requires a PR that passes" are different guarantees; the incident is the proof. Consistent with human-merge-only — this makes merging harder, never automatic.

…n main

(a) CI found a firewall hole the development platform could not. _normalise
built a Path from the raw string, so on POSIX a backslash was part of a
filename rather than a separator and config\risk.yaml never matched the frozen
config/risk.yaml entry — the firewall ALLOWED it. Passed on Windows, where Path
splits on backslash. Live on main from a80ca1d until PR #4, ~15 minutes. Also
records the test-reads-gitignored-artifacts anti-pattern, corrected in the same PR.

(b) Required status checks added to the main ruleset as a direct consequence:
PR #2 merged red. "Requires a PR" and "requires a PR that passes" are different
guarantees, and the incident is the proof.
@danielfmonzon
danielfmonzon merged commit 54b312e into main Aug 15, 2026
1 check passed
@danielfmonzon
danielfmonzon deleted the docs/ci-incident branch August 15, 2026 21:27
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