Skip to content

feat(ci): Make the revdep driver log's timing record durable and visible - #2891

Merged
krlmlr merged 1 commit into
mainfrom
claude/salvage-driver-timings
Sep 4, 2026
Merged

feat(ci): Make the revdep driver log's timing record durable and visible#2891
krlmlr merged 1 commit into
mainfrom
claude/salvage-driver-timings

Conversation

@krlmlr

@krlmlr krlmlr commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Prepared with Claude Code (LLM-assisted).

Why _R_CHECK_TIMINGS_ is off, and stays off. The setting is inherited from revdep2 with a rationale that still holds: the two halves of a package run at different times next to different queue neighbours, so per-stage [user/elapsed] stamps differ by construction and would be pure noise in the very log the halves are compared through. The design compensated with check-half.sh's stamp() filter — every container line prefixed with elapsed seconds in driver.log — and the comment promised "nothing is lost".

That promise went quietly false in the container era: the driver log only ever lived in the runner's ephemeral work directory. The timeout analysis of run 33777134786 hit the wall this creates — for both-halves timeouts (ctmm, E2E, PortfolioTesteR) nothing was salvaged, and "where did the 1800 seconds go" had no answer in any artifact or log.

Three changes make the record real again, at a cost confined to the handful of failures per run:

  • copy_check_output() now carries driver.log and status alongside every kept check directory, so anything salvaged brings its per-stage timeline with it.
  • The failed side is salvaged too (salvage_side() in compare.R, wired into compare-one.R's failure branches — both sides when both fail). A killed check leaves a partial .Rcheck whose 00check.log lists every stage it completed; even a container that never ran leaves its driver log. Verified locally with simulated timeout work directories in both shapes.
  • check-half.sh prints a failed half's stage timeline (the stamped * checking … lines, last 60) into the job log under a collapsible group, where GitHub's wall-clock timestamps stack on the elapsed stamps. Successful halves stay quiet.

After this, the next timeout's post-mortem is one grep — over the job log or the salvaged driver.log in the revdepx-report artifact — instead of an archaeology expedition.

  • By submitting this pull request, I assign the copyright of my contribution to The igraph development team.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UB7YutLzVWU7xCTYUvF3kF


Generated by Claude Code

_R_CHECK_TIMINGS_ stays off, by revdep2's still-valid reasoning:
the two halves run at different times next to different neighbours,
so per-stage [user/elapsed] stamps differ by construction
and would be pure noise in the log the halves are compared through.
The compensating claim -- "what a stage cost is still recorded
by the elapsed stamping on the driver log" --
went quietly false in the container era:
the driver log lived only in the runner's work directory
and never reached an artifact.
Run 33777134786's both-halves timeouts salvaged nothing at all,
and "where did the 1800 seconds go" had no answer anywhere.

Three changes make the record real again:
copy_check_output() carries driver.log and status
alongside every kept check directory;
compare-one.R salvages the *failed* side too
(both sides when both fail --
a killed check leaves a partial .Rcheck
whose log lists every completed stage,
and even a container that never ran leaves its driver log);
and check-half.sh prints a failed half's stage timeline
into the job log,
where GitHub's own timestamps stack on the elapsed stamps.
Successful halves stay quiet, so the artifact and log cost
is confined to the handful of failures per run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UB7YutLzVWU7xCTYUvF3kF
@krlmlr
krlmlr merged commit a108426 into main Sep 4, 2026
2 of 3 checks passed
@krlmlr
krlmlr deleted the claude/salvage-driver-timings branch September 4, 2026 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants