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) <[email protected]>
This commit is contained in:
jakman85andClaude Opus 5 committed 2026-09-29 21:53:56 -05:00
1 parent d29a73cad8
commit 8697702d51
1 file changed
+40
+40
View File
@@ -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