Skip to content

Conversation

@yaythomas
Copy link
Member

@yaythomas yaythomas commented Feb 3, 2026

Fix off-by-one error in wait_for_condition attempt numbering where the sequence was 1, 1, 2, 3... instead of the correct 1, 2, 3, 4...

The bug occurred because the code read step_details.attempt directly, which represents completed attempts, not the current attempt number. The current attempt should always be checkpointed_attempts + 1.

Additionally, previously, Logger added +1 internally, creating confusion about whether
code should pass 'current attempt' or 'checkpointed attempt'. This
standardization removes the hidden transformation.

Changes:

  • Update attempt calculation in wait_for_condition.py
  • Add explanatory comment about checkpoint semantics
  • Update test assertion to expect attempt=4 when checkpoint has 3
  • Add comprehensive test for monotonic attempt sequence
  • Remove +1 from Logger.from_log_info() (logger.py line 75)
  • Update StepContext to pass current attempt by adding +1 (step.py lines 205-208)
  • Update logger tests to expect current attempt values

closes #288

Issue #, if available:

Description of changes:

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Fix off-by-one error in wait_for_condition attempt numbering where
the sequence was 1, 1, 2, 3... instead of the correct 1, 2, 3, 4...

The bug occurred because the code read step_details.attempt directly,
which represents completed attempts, not the current attempt number.
The current attempt should always be checkpointed_attempts + 1.

Changes:
- Update attempt calculation in wait_for_condition.py
- Add explanatory comment about checkpoint semantics
- Update test assertion to expect attempt=4 when checkpoint has 3
- Add comprehensive test for monotonic attempt sequence

closes #288
Remove Logger's +1 transformation and have all code pass current attempt
(1, 2, 3...) consistently throughout the codebase.

Previously, Logger added +1 internally, creating confusion about whether
code should pass 'current attempt' or 'checkpointed attempt'. This
standardization removes the hidden transformation.

Changes:
- Remove +1 from Logger.from_log_info() (logger.py line 75)
- Update StepContext to pass current attempt by adding +1 (step.py lines 205-208)
- Update logger tests to expect current attempt values

This ensures all components use the same convention: current attempt =
checkpointed attempts + 1, with no hidden transformations.
@yaythomas yaythomas merged commit 1c95d6e into main Feb 3, 2026
14 of 15 checks passed
@yaythomas yaythomas deleted the wait-for-cond-retry-count branch February 3, 2026 20:57
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.

[Bug]: retry count increment

3 participants