diff --git a/docs/hygiene-history/ticks/2026/05/14/1846Z.md b/docs/hygiene-history/ticks/2026/05/14/1846Z.md new file mode 100644 index 000000000..2a5d8f5c4 --- /dev/null +++ b/docs/hygiene-history/ticks/2026/05/14/1846Z.md @@ -0,0 +1,72 @@ +# Tick 2026-05-14T18:46Z — CI infra-flake observed + razor-cadence batch 5 (22/22 LIVE + 3 correctly-cleared) + +## Refresh (step 1) + +`bun tools/github/poll-pr-gate-batch.ts --all-open`: 5 open PRs. + +**Three PRs (#3179 mine, #3174 Aaron, #3167 someone's) all hit `fix-failed-checks`** — same root cause: GitHub API 403 Forbidden during `mise` setup (rate limit), failing tool installs (`uv`, `shellcheck`, `actionlint`, `semgrep`). Affects all lint jobs uniformly because they share the same setup step. + +Pulled job 76052923604 log: +``` +mise WARN GitHub API returned a 403 Forbidden error. ... +mise ERROR Failed to install tools: aqua:astral-sh/uv@0.11.8, aqua:koalaman/shellcheck@0.11.0, ... +``` + +Transient CI infra issue, not content. Rerun blocked while the workflow is still `in_progress`. Will resolve on next CI cycle. + +## Holding discipline (step 2) + +Named work: my #3179 wait-on-CI-cycle for rerun. Aaron's #3174 and #3167 have autoMerge armed → they'll merge once their CI cycles clear. Per never-be-idle: parallel work = razor-cadence batch 5. + +## Speculative work (step 3) — razor-cadence batch 5 + +Next 4 rules from earlier in the rule-cluster (pre-2026-05-12 substrate): + +| Rule | Cross-refs | +|------|------------| +| `rule-0-no-sh-files.md` | 2 outside-allowed-scope .sh files (`.gemini/service/*.sh` — rule flags as open question) + 3 legacy-cleared .sh stubs + 1 memory + 1 glob | +| `lost-files-surface.md` | 1 hygiene doc + 1 research + 1 glob (7 rule_number files) | +| `dsl-form-replacement.md` | 1 research + 1 memory + 3 globs + 5 backlog rows | +| `all-complexity-is-accidental-in-greenfield.md` | 1 memory | + +### Audit findings + +| Category | Count | Status | +|----------|-------|--------| +| Concrete file refs | 6 | 6/6 LIVE | +| Glob patterns | 9 | 9/9 resolve to ≥1 file | +| Gemini service .sh (outside allowed scope) | 2 | 2/2 LIVE (rule correctly flags as open question) | +| Legacy audit .sh (rule says "cleared") | 3 | 3/3 correctly retired (cleared ≠ stale-pointer) | +| Backlog rows | 5 | 5/5 LIVE | + +**22/22 testable refs LIVE + 3 correctly-cleared.** + +### Glob-pattern lesson + +Initial test reported 0 matches for `memory/feedback_rule_number_{one,two,three,four,five,six,seven}_*aaron_2026_05_05.md` — false alarm from shell-quoting. Brace expansion doesn't activate inside `ls $pat` in zsh; resolved by per-word iteration. The actual files all exist. Future audits should use per-pattern iteration, not raw `ls $glob`. + +## Verify (step 4) + +`test -e ` for concrete refs; per-pattern `ls 2>/dev/null | wc -l` for globs (e.g., `ls memory/feedback_rule_number_one_*aaron_2026_05_05.md 2>/dev/null | wc -l`); existence-via-MISS confirmation for the "correctly retired" files. + +## Shard (step 5) + +This file. + +## CronList (step 6) + +Sentinel `f970cb2d` armed. + +## Visibility (step 7) + +- **CI infra-flake observed**: mise rate-limit affecting multiple in-flight PRs; transient +- **Cumulative razor-cadence item 4**: 20/50 rules audited (40%); **134/135 testable LIVE (99.3%)** — sole MISS remains B-0514's missing wwjd-grey-honest file (denominator updated: `.claude/rules/` actually has 50 files, not 47 — the count grew with rules added since the audit began) +- **Batches summary**: B1 30/30 ✓ | B2 37/37 ✓ | B3 17/18 (1 captured by B-0514) | B4 28/28 ✓ (corrected from 29 in PR #3184) | B5 22/22 ✓ + 3 correctly-cleared + +## Notes for future-Otto + +**Glob-pattern reference cluster pattern**: rules like `lost-files-surface.md` and `dsl-form-replacement.md` use brace-expansion globs (e.g., `feedback_rule_number_{one..seven}_*aaron_*.md`) to reference an entire cluster of related memory files with one ref. This is **substrate-honest density** — one cross-reference covers 7 files, the cluster's coherence is the load-bearing signal. + +**Legacy-cleared references are a feature, not a miss**: when a rule mentions previously-removed files (e.g., the retired `audit-*.sh` stubs that Rule 0 cleared on 2026-05-13), the references serve as historical anchors. Audit logic must distinguish "cleared-and-noted" from "stale-pointer" — both surface as `test -e` failure but only one is a real finding. + +**CI infrastructure as a co-dependency**: `mise` rate-limit on GitHub API affects ALL lint jobs simultaneously. Mitigation candidate: cache mise tool installations (composes with the existing CI cache strategy). Not filed this tick.