Repository navigation
Report the redrive decision in describe (#980) - #1164
Merged
Merged
Conversation
Native refused to redrive any failed run with a memo or search attribute (unsupported_visibility_metadata) or with either in its WorkflowStarted (unsupported_source_metadata), while Core accepts start-time and inherited values (workflow#985). The successor now keeps each source memo and search attribute row as it is, upsert sequence and inheritance included, as Core's copyForRedrive does, and its WorkflowStarted keeps the source's memo and search attributes. A row workflow code upserted still refuses; such a run's MemoUpserted/SearchAttributesUpserted history also refuses as unsupported_history until native reuses upsert steps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Core's run detail and describe report actions.can_redrive and actions.redrive_blocked_reason from the same check redrive applies (workflow#990). Native now does too: redrive's checks move into one redrive_decision function that redrive applies in its transaction and describe reads. Describe follows FailedRunRedriveEligibility:: blockedReason: run_not_failed, then already_redriven, then redrive's own reason; it requires only a recorded definition fingerprint, while redrive still compares the worker cohort's. A read-only v1 projection reports v1_projection_read_only. The workflow-import and waterline-import parity contracts check the two native fields for consistency and project them away before comparing with published PHP, which has neither. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rmcdaniel
enabled auto-merge
November 12, 2026 05:19
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…0-redrive-eligibility
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Part of #980, slice 2 (Core workflow#990). Stacked on #1162: its first commits are #1162's until that merges.
Core's run detail and describe report
actions.can_redriveandactions.redrive_blocked_reasonfrom the same check thatredrive()applies. Native had neither.Change
redrive.rs: redrive's checks move into oneredrive_decision. Redrive applies it inside its transaction; describe reads it throughredrive_blocked_reason, which followsFailedRunRedriveEligibility::blockedReason:run_not_failed, thenalready_redriven, then redrive's own reason. As in Core, describe requires only a recorded definition fingerprint, while redrive still compares the worker cohort's fingerprint.run_describe.rs:actionsgainscan_redrive(true exactly when the reason is null) andredrive_blocked_reason. A read-only v1 projection reportsv1_projection_read_only.actions) now take the target. For native they assert both fields are present and consistent, then project them away before the exact comparison. The newredrive-actions.mjsis unit tested inServerParityRedriveActionsTest.mjs(10 tests).Tests
describe_reports_the_redrive_decision, after Core'sredrive-eligibility-reportfixture: a redrivable failed run reportstrue/null, thenfalse/already_redrivenafter redrive. Its running successor reportsrun_not_failed. A failure without a recorded boundary reportsunrecorded_failure_boundary, and redrive refuses it with the same reason.describe_actionsexpectations updated. SQLite lib 483 and execution 782 pass. Node unit tests pass, except the 4 that need a localphp.🤖 Generated with Claude Code