The build-images CI job failed because GitHub releases dropped
connections ("Remote end closed connection without response") for
actionlint, vale, and hadolint simultaneously. The previous code only
fell through to the next fallback URL — there was no retry on the same
URL for transient connection resets.
Now uses tenacity.Retrying with exponential backoff (2-10s, 3 attempts)
on URLError/OSError/ConnectionError, matching the pattern already used
in devx.utils.network. The _sleep kwarg allows tests to skip real
sleeping.
3 new tests cover: retry-then-success, exhaustion-after-max-retries,
and no-retry-on-non-transient-errors.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Phase 1e-f of REFACTORING-PLAN.md:
- Register `devx ci wait-for-checks` in cli.py with test coverage
- Add ADR-0002 documenting the ansible_checks consolidation and
wait_for_checks extraction decisions
- Update AGENTS.md package structure to reflect ansible_checks/
subpackage and deprecated ci/discover_runners wrapper
- Update docs/user/cli-commands.md with wait-for-checks documentation
and discover-runners deprecation notice
- Update docs/tech/architecture.md with new modules and canonical
discover_runners location
- Update docs/mapping.json with ADR entries
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Phase 1a-c of REFACTORING-PLAN.md:
- Extract devx.ci.wait_for_checks module (replaces inline polling in
grm ci.yml) with 100% test coverage (26 tests)
- Consolidate 5 Ansible check tools into composable
devx.tools.ansible_checks/ subpackage with shared utilities
(AnsibleFileFinder, AnsibleYAMLParser, ViolationReporter); old
modules remain as thin backward-compat wrappers
- Merge ci/discover_runners into molecule/discover_runners (canonical
implementation with improved error logging); ci/discover_runners
becomes a deprecated wrapper re-exporting from molecule
All 2393 existing tests pass; new modules at 100% coverage.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>