From 3286d207622c3f4edb115216964c4ff313463506 Mon Sep 17 00:00:00 2001 From: Paul Keen <125715+pftg@users.noreply.github.com> Date: Sat, 22 Aug 2026 10:54:35 +0200 Subject: [PATCH] Read CI at the job level, not the run level Reflection on #566: I read a run-level conclusion of success while the job had concluded failure, and told Paul a re-run had passed when it had not. The same session also had a monitor fire a false 'settled' because an empty check list contains no 'pending' to wait on. Both are the same mistake - trusting a summary signal over the specific one, and reading 'no data yet' as 'done'. Costly here because the screenshot job is routinely expected-red and every merge decision depends on reading it precisely. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_011SP5gaqXEgUie8pdFrmbeJ --- CLAUDE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CLAUDE.md b/CLAUDE.md index 473f6a0af..c38aba845 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -88,6 +88,7 @@ Operational knowledge lives in `.okf/` (`build/`, `content/`, `design/`, `workfl - **Never leave the shell in a subdirectory (2026-08-19)**: Bash cwd persists between calls; a bare `cd` breaks every later repo-relative path and reads as "file missing". Use absolute paths, `cd && cmd`, or `git -C`. If a known file reports missing, run `pwd` before believing it. - **New-doc locations — `docs/workflows/` is NOT a catch-all** (Paul 2026-08-01). Order: (1) engineering reference → its Johnny Decimal area (`docs/10-19-…` through `90-99-…`, naming `NN.NN-name-{reference|tutorial|how-to}.md`; check the area's README/existing numbers first); (2) company/OS → vault-owned, `docs/business/` stubs only; (3) opportunity validation → `docs/projects//`; (4) ADRs → `docs/adr/`, incidents → `docs/incidents/`, design system → `docs/design-system/`; (5) `docs/workflows/` ONLY for cross-cutting pipeline how-tos. Everything else edits an existing file. - **Stale-view check (2026-08-17)**: feedback quotes page text → grep current source FIRST; absent means stale tab/server — reply "already fixed, hard-refresh" with the link. Never fix a defect that no longer exists. +- **Read CI at the JOB level (2026-08-22)**: `gh run view --json conclusion` can report `success` for a run whose job concluded `failure` — trusting it produced a false "the re-run passed" handback on #566. Confirm with `--json jobs --jq '.jobs[].conclusion'` or `gh pr checks`. Likewise **"no checks reported" means not-yet-registered, not green**: a monitor waiting for `pending` to disappear fires instantly against an empty check list. Corollary that held when intuition didn't: identical difference_level across two runs = stale baseline, never flake. - **Handbacks end with local review links (Paul 2026-08-17/19)**: any change to something that renders locally ends with its `http://localhost://` link(s) — "renders locally" is the test (includes `linkedin-posts/` drafts), not "lives in content/". - **Session-random dev-server port (Paul 2026-08-17)**: `PORT=$((20000 + RANDOM % 20000)) bin/dev`, once per session; never assume 1313; never kill a server you didn't start. - **Reflection trigger**: Paul reports "code is bad" / "over-engineered" → HALT, 5-Why, fix config, then proceed.