From 8697702d515cb0e35eff4cb4e10e5fe42f92257d Mon Sep 17 00:00:00 2001 From: Keith Jackson Date: Tue, 29 Sep 2026 21:53:56 -0500 Subject: [PATCH] docs(decisions-log): record the gate result -- rc 3, and why CI's green is not rc 0 The handoff entry asserted conclusions but did not carry its own gate numbers. Adds them, per CLAUDE.md section 7: lint / l0 / render-golden / l1 / spec-immutability : green gitea-settings : SKIPPED (SETTINGS_API_TOKEN unset) conformance L2/L3: SKIPPED (CLUSTER_AVAILABLE != true) => exit 3, UNDETERMINED. Not a PASS. Also records two things future sessions will otherwise re-learn the hard way: 1. spec-immutability skipped SPURIOUSLY from the worktree -- dev.sh looks for the spec repo at $REPO_ROOT/../home-network-k3s, which from a worktree is the wrong directory; it exists beside the MAIN checkout. Mounting it RO through the ENGINE shim turned the one tolerated skip into a real green, so R-TEST-06 is genuinely verified. The CLAUDE.md section 3 shim should mount two paths, not one. 2. CI's green tick does NOT mean rc 0. gate/conformance is `if: false` and reports success with "Has been skipped"; gate/gate runs `./ci/gate.sh || [ "$?" -eq 3 ]`, so CI tolerates exit 3 by declared design and would report the same green for the rc 3 above. Branch protection and the runner were measured against the API, not assumed: protected=true, user_can_push=false, required_approvals=1, context 'gate / gate (pull_request)', runner incluster-dind online. PR #23 left unmerged. Co-Authored-By: Claude Opus 5 (1M context) --- DECISIONS-LOG.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/DECISIONS-LOG.md b/DECISIONS-LOG.md index 314fb8a..f362955 100644 --- a/DECISIONS-LOG.md +++ b/DECISIONS-LOG.md @@ -5442,6 +5442,46 @@ conclusion rather than a cautious one. pings from the toolbox. - **`fix/crafty-oauth2-proxy-signin` is still unmerged**, so the pod still runs the pre-that-PR spec. +### Gate and CI — rc 3, and why CI's green does not contradict that + +Local, pinned toolbox, from the worktree (`ENGINE` shim + `DEV_KUBECONFIG=/dev/null`), diff base +`origin/main @ 20ea70d` → `HEAD @ d29a73c`: + +| Stage | Result | +|---|---| +| `lint` | green | +| `l0` | green — 19 cases, 0 failures, 0 skips | +| `render-golden` | green — all 10 onboarded goldens reproduce | +| `l1` | green — 3 cases, 0 failures, 0 skips | +| `spec-immutability` | **green** (see below) | +| `gitea-settings` | **SKIPPED** — `SETTINGS_API_TOKEN` unset | +| `conformance` (L2/L3) | **SKIPPED** — `CLUSTER_AVAILABLE != true` | + +**Exit code 3 — UNDETERMINED, not a PASS.** Nothing failed; nothing outside the green rows is +certified. Touched requirements `R-DNS-01 R-NET-01 R-PLAT-02 R-STATE-01` remain L2/L3 UNVERIFIED. + +`spec-immutability` — normally *the* tolerated skip — was closed rather than accepted. It had skipped +**spuriously**: `dev.sh` resolves the spec repo at `$REPO_ROOT/../home-network-k3s`, which from a +*worktree* is the wrong directory; the repo exists beside the **main** checkout. Mounting it read-only +through the `ENGINE` shim turned the skip into a real green, so R-TEST-06 is genuinely verified here. +Worth folding into the CLAUDE.md §3 worktree workarounds: the documented shim should mount **two** +paths, the main `.git` *and* the sibling spec repo. + +CI on `d29a73c`, statuses read by description and not by tick: + + context='gate / gate (pull_request)' status='success' description='Successful in 1m35s' + context='gate / conformance (pull_request)' status='success' description='Has been skipped' + +**Neither green means rc 0.** `gate / conformance` is `if: false` in `.gitea/workflows/gate.yml` — it +never runs and reports `success` with "Has been skipped", the exact trap CLAUDE.md §2 names. And +`gate / gate`, the single required context, runs `./ci/gate.sh || [ "$?" -eq 3 ]` (line 134): **CI +tolerates exit 3 by declared design**, so its green means "exited 0 *or* 3". It would report this +identical green for the rc 3 above. Enforcement itself was measured directly rather than assumed +(§2b): `branches/main` → `protected: true`, `user_can_push: false`, `required_approvals: 1`, +`enable_status_check: true`, `status_check_contexts: ['gate / gate (pull_request)']`; +`admin/actions/runners` → 1 runner, `incluster-dind`, `online`. **PR #23 is open, unmerged, and I did +not merge it.** + ### Operator actions required 1. **Nothing to do about the transport.** `transport=raknet` is correct, live, and answering. **Do not