Files
Shanghua Gao b4d9354b8d Merge main into codex/sufianta-batch-review, reconciling two independent weekly-healthcheck reliability designs
Both branches solved the same problem (a lost CI runner discarding the
whole weekly tool sweep) independently: main shipped sharded matrix jobs
with per-shard log parsing (scripts/summarize_health_sweep.py, already in
production), while this branch restores an unsharded checkpoint/resume
system (--json-output/--resume, atomic JSON checkpointing).

Resolution:
- .github/workflows/weekly-tool-healthcheck.yml and the run_all_patterns()
  call site: took main's sharded design, since it's already shipped and
  replacing it would reintroduce the exact failure mode it was built to
  fix. The checkpoint/resume machinery itself stays -- it's still useful
  standalone for a developer resuming an interrupted local sweep.
- Fixed a real interaction bug this merge would otherwise have introduced:
  checkpoint_complete compared `results` against the full `expected_patterns`
  universe, which is never true for a single shard's `selected` subset, so
  every successful sharded CI run would have incorrectly exited 1. Now
  compared against `selected` -- identical to `expected_patterns` when
  --shard isn't used, correctly scoped when it is. Verified with a manual
  shard simulation.
- Removed test_weekly_workflow_consumes_the_checkpoint_contract: it
  asserted the workflow YAML wires up --json-output and executes an inline
  job-summary heredoc, both part of the design main's sharding replaced.
  Its premise no longer holds under the shipped design.
2026-08-25 07:51:17 -04:00
..
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 16:44:22 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2025-09-25 22:40:29 -04:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00
2026-01-12 14:02:10 -05:00