ci: fix conda_avail circular gate silently skipping conda-full self-tests - #391
Conversation
…ests conda_avail's check assumed the main "Bootstrap environment" step performs the first real Miniconda install, but that step runs against this repo's own empty root (the no_python_files graceful-exit path) and never touches conda. Every downstream selfapps step capable of doing the first real install was itself gated behind this same check, so conda-full could never bootstrap conda for the first time again -- a closed loop. Confirmed via the GitHub Actions API against two real runs (efd7a5c, fd7a046): ~27 real/conda-full-only self-tests silently skipped every run, job still reporting overall success. Reverted all 36 conda_avail-dependent if: conditions to their pre-item-7 unconditional form, keeping !cancelled() (the part of item 7 that is correct and validated). Full workflow swept for other instances of this bug class; none found -- the downstream verdict/aggregate/enforce chain is sound and was only blind to steps that never ran at all. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xbWLPbiaKVsobB9FZy8kS
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📜 Recent review details⏰ Context from checks skipped due to timeout. (10)
🧰 Additional context used📓 Path-based instructions (4)**/*📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{md,bat,cmd}📄 CodeRabbit inference engine (AGENTS.md)
Files:
.github/workflows/*.yml📄 CodeRabbit inference engine (AGENTS.md)
Files:
.github/workflows/**/*.{yml,yaml}📄 CodeRabbit inference engine (CLAUDE.md)
Files:
🪛 markdownlint-cli2 (0.23.0)CLAUDE.md[warning] 717-717: Ordered list item prefix (MD029, ol-prefix) 🔇 Additional comments (5)
📝 WalkthroughSummary by CodeRabbit
WalkthroughThe workflow makes Miniconda availability diagnostic-only and removes its output from conda-full self-test gating. The active backlog documents the correction and deferred rewiring. ChangesConda-full workflow gating
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
…arkdownlint check (#392) * docs: address CodeRabbit findings on PR #391 (item 7 correction, MD029) Item 7's own entry never noted that the conda_avail mechanism it introduced was later found broken and reverted -- a future reader could follow it as still-valid guidance. Added an in-place correction paragraph cross-referencing item 15. Also fixed the MD029 ordered-list warning: item 15 was a second "N." marker in the same implicit ordered list as item 7, with non-sequential numbers. Converted to a bullet with "Active Backlog item 15" spelled out in the bold lead sentence, matching how every other historical item number in this doc is referenced in prose. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xbWLPbiaKVsobB9FZy8kS * tools: add advisory MD029-only markdownlint check to sanity sweep CodeRabbit's MD029 finding on PR #391 (a stray literal "15." collided with CLAUDE.md's own Active Backlog stable-ID convention) was real but would have been just as easy to reintroduce next time -- add a narrow, advisory-only check to catch it locally before push instead of relying on a reviewer bot each time. Deliberately scoped to MD029 only, on CLAUDE.md only: a full default markdownlint pass produces ~2700 hits on CLAUDE.md alone (~99% MD013 line-length, a rule this repo has never followed), and README.md/docs/*.md use their own unreviewed numbering schemes. Never fails the sweep -- matches PYFLAKES's own established advisory-only precedent. Documents the underlying convention (bullets with the number in prose for new Active Backlog items, not literal "N." markers) in AGENTS.md so it's discoverable outside the lint config's own comments. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xbWLPbiaKVsobB9FZy8kS * docs: relabel efd7a5c/fd7a046 as commit SHAs, not run IDs CodeRabbit finding on PR #392: CLAUDE.md's Active Backlog item 15 called these two "real runs" when they're actually the commit SHAs whose CI runs were checked via the GitHub Actions API -- ambiguous wording, not a factual error in the underlying evidence. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xbWLPbiaKVsobB9FZy8kS --------- Co-authored-by: Claude <noreply@anthropic.com>
Summary
Follow-up to #390 (merged), found via a direct owner question ("are we sure we aren't shorting conda-full?") that prompted checking real step-level CI conclusions instead of trusting the job's overall green status.
conda_avail's check (introduced in ci: lane-aware if:always() rollout for remaining 36 gating-lane steps (item 7) #390) assumed the "Bootstrap environment (run_setup.bat)" step performs the first real Miniconda install for theconda-fulllane, so gating ~27 downstreamreal/conda-full-restricted self-test steps on "is conda already on disk" would only skip in the rare case that install genuinely failed..pyfiles there — it exercises the empty-repo/no_python_filesgraceful-exit path, not a real target app), so it never installs Miniconda at all. Every downstream selfapps step capable of performing the first real install was ALSO gated behind this same check — a circular self-skip with no way out.efd7a5c,fd7a046): all ~27real/conda-full-only steps showed"conclusion":"skipped"at the identical timestamp onconda-full, every run. The job still reported overall SUCCESS (a skipped step doesn't fail a job), so this merged without the coverage loss ever surfacing.conda_avail-dependentif:clauses to their pre-item-7 unconditional form (matrix.mode == 'conda-full', noconda_availdependency), keeping!cancelled()(the part of item 7 that is correct and validated). Theconda_availstep itself is left in place, unused, with a comment explaining why.if:condition in the whole 4444-line workflow (all 5 jobs) for the same bug class — none found elsewhere; traced the downstream verdict/enforce/aggregate chain to confirm it has no independent bug (it's just architecturally blind to a step that never ran). Compared the current yml against two real historical baselines (e20d7cd, 2026-07-08, well before this work —conda-fullran 78 min;fd11ff3, immediately before item 7 started —conda-fullran 94 min) via direct condition-by-condition diff: zero steps removed, 25 new steps added (all documented features shipped in that window), and all 73 changed conditions fall into exactly two known, reviewed categories (always()→!cancelled(), or gaining a!cancelled() &&prefix) — none referenceconda_availanymore. Full rationale recorded in CLAUDE.md's new Active Backlog item 15.Test plan
python -m compileall -q .python tools/check_delimiters.py run_setup.batpython -m yamllint .github/workflows/actionlint -oneline .github/workflows/*.ymlpython -m pytest tests/test_*.py -q(437 passed, 2 skipped)conda-fulllane's ~27 previously-skipped self-tests actually run and pass again, and that job duration returns to the ~80-95 min historical rangeClaude-Session: https://claude.ai/code/session_015xbWLPbiaKVsobB9FZy8kS
Generated by Claude Code