Skip to content

Document repeat-last retry delays in options and worker protocol - #549

Merged
rmcdaniel merged 2 commits into
mainfrom
agent/durable-workflow-github-io/options-backoff-219
Nov 14, 2026
Merged

rmcdaniel merged 2 commits into
mainfrom
agent/durable-workflow-github-io/options-backoff-219

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Nov 14, 2026 •

Copy link
Copy Markdown
Member

The options page explained list/scalar backoff overrides but omitted what happens after a short list ends. The worker-protocol reference named the policy fields without defining total attempts or the repeat rule.

Document the existing shipped semantics in both pages and all seven offered translations: repeat the final delay, use zero backoff for an empty list, and preserve recorded policies when defaults change. Five total attempts with [1, 2] allow four retry delays [1, 2, 2, 2]. Keep the options page’s existing total-attempt wording and all executable examples unchanged. The default through 120 seconds is the embedded activity class default, not a new SDK generated-policy cap.

This is the finite options/protocol documentation slice of durable-workflow/.github#219. It changes no protocol field, package, selector, runtime behavior or held Python 2.18 qualification. Shared219 retains its cross-binding requirements and existing holds.

The embedded producer semantics review passes against published Workflow 2.28.1. Its reviewed English files are byte-identical at final locale head 4aba847e. The bounded native Server review passes for the published 3.10 retry implementation at exact 4aba847e. All 14 source hashes, unchanged fences, localized schedule tokens and public-boundary checks pass. The independent source/locale review passes at exact 4aba847e, including all 14 bindings and 240 unchanged fenced blocks across the 16 guides. All 11 current-head checks, the final all-eight-locale build and rendered checks of all 16 affected pages pass. Normal integration is complete at 23446c73 with exact reviewed-tree equality. All 12 actual-main checks, protected Pages and fresh 16-page/eight-language public readback pass. See the delivery record. The merged remote branch is absent.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Bounded embedded-producer semantics PASS at exact English head 90ced51475af5707711fb7337683982382de7535.

I read both changed English files against published Workflow 2.28.1 source c090506cafa011335fcd5db07b7da79945fe83db. The class supports integer or list backoff and defaults through 120 seconds. Both retry-delay readers select min(attemptCount - 1, lastIndex) and return zero for an explicitly empty list. Five total attempts therefore permit four delays [1,2,2,2]; zero backoff remains subject to attempt/deadline admission and queue scheduling.

The scheduling snapshot and existing persisted-policy/empty-backoff tests support retaining recorded delays when defaults change. The two prose changes preserve total-attempt wording, executable fences and wire field names. No source or runtime behavior change is implied.

This review covers embedded producer semantics and the stated shared policy meaning. Server owns native transport/runtime parity; locale, build, normal review, Pages and live checks remain Docs work. I ran no additional runtime or build.

@sonarqubecloud

Copy link
Copy Markdown

@rmcdaniel rmcdaniel left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ordinary source/locale review: PASS for exact 4aba847e4b9e6f7c2a4f8ff2e38f667ccf679d23 against e3ff9f5cf342030237d12e8863d37ae2951c740e.

I read both English changes and all fourteen localized additions in de/es/fr/ja/pt-BR/uk/zh-Hans. Every locale preserves total attempts including the first, five total attempts with four retry delays [1,2,2,2], repeat-last after a short list, and zero backoff for an empty list subject to attempt/time limits. Recorded delays remain authoritative when later defaults or SDK code change. The existing options-page total-attempt paragraphs are untouched; none of this introduces a finite generated default cap or changes a wire field.

Mechanical review verified all 46 head/base Git blobs, all 14 updated English-source hash bindings, and byte-identical executable fences (240 blocks across the sixteen guides). Added inline contract tokens and links match across the eight languages. Both English files are byte-identical to the 90ced514 producer-reviewed source. Scope is exactly the 23 documentation/hash paths, without selector, package, protocol schema or implementation changes.

I also read published Workflow c090506c directly: Activity::backoff(): int|array supplies the documented 120-second final default, and both recorded-policy delay readers select the final list entry after exhaustion while retaining explicit empty-list zero backoff. This source inspection is consistent with the bounded embedded-producer review 6880466391. Server's separate wire-producer review is not replaced by this locale review, and no held Python 2.18 result is promoted.

No blocking finding. I ran no build, SDK, Worker or Server. Normal current-head checks, the remaining producer review and the owner's final rendered/build/Pages/live delivery remain separate gates; this does not close the other shared #219 requirements.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Bounded published-native semantics review: PASS for the English additions at 4aba847e4b9e6f7c2a4f8ff2e38f667ccf679d23.

I checked the exact published native 3.10 source b6e04ce7e679464e91f6ceae83310d3bb3204092. Its retry-policy parser records the normalized policy, requires positive bounded max_attempts, and accepts an empty backoff_seconds list. Its failure transition reads the stored execution policy, treats count >= max_attempts as terminal, selects get(count - 1).or_else(last), and uses zero when the list is empty. Thus five total attempts with [1, 2] have four retry delays [1, 2, 2, 2], and empty means zero backoff within the recorded attempt/deadline limits. Later defaults do not replace that stored policy.

This approves the added portable list/count/preservation explanation and worker-wire paragraph. Workflow owns the activity-class/default and author-option ergonomics. No new wire field, scalar wire form, default cap, runtime execution, installed acceptance, release or held-path scope is inferred. Locale/build/Pages checks remain separate.

@rmcdaniel
rmcdaniel marked this pull request as ready for review November 14, 2026 16:22
@rmcdaniel
rmcdaniel merged commit 23446c7 into main Nov 14, 2026
11 checks passed
@rmcdaniel
rmcdaniel deleted the agent/durable-workflow-github-io/options-backoff-219 branch November 14, 2026 16:23
@rmcdaniel

Copy link
Copy Markdown
Member Author

The options-page and worker-protocol retry-delay correction is delivered in all eight offered languages.

Reviewed source 4aba847e4b9e6f7c2a4f8ff2e38f667ccf679d23 merged as 23446c73b0173a392a5c53bbfce06da1a5d25072 with exact tree equality 9c88950418634d0b445ce23d04f190f82750ce8a. Embedded producer review, published native Server semantics and independent ordinary source/locale review pass. Both English files remain identical to the embedded producer-reviewed source. All 14 English-source hash bindings match, and all 240 existing fenced blocks across the 16 guides are unchanged.

The final all-eight-locale build and rendered checks of all 16 pages pass, alongside all 11 head checks. All 12 actual-main checks and all six main workflows pass, including protected Pages 43615302300. Fresh public readback passed on all 16 changed pages in eight languages, with complete article text equal to the reviewed build. Selected artifacts, installers, protocol catalog/OpenAPI and canonical model copies remain consistent.

The guides now state that short lists repeat their final delay, five total attempts with [1, 2] allow [1, 2, 2, 2] retry delays, an empty list means zero backoff within attempt/time limits, and recorded policies preserve recorded delays when defaults change. The options page’s existing total-attempt wording is unchanged. The 120-second class default remains embedded-specific.

Live: Options / Backoff and worker protocol, plus de/es/fr/ja/pt-BR/uk/zh-Hans. The merged remote branch is independently absent. This completes the finite Docs options/protocol slice of shared219. No new protocol fields, package/selector changes, runtime qualification or held Python 2.18 generated-default delivery is claimed; the remaining shared219 criteria retain their own gates.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant