Skip to content

feat(stovepipe): extend fixer DLQ recovery to every issue and backend - #1035

Closed
mnoah1 wants to merge 4 commits into
mnoah1/stovepipe-batch-repairsfrom
mnoah1/stovepipe-repair-dlq
Closed

mnoah1 wants to merge 4 commits into
mnoah1/stovepipe-batch-repairsfrom
mnoah1/stovepipe-repair-dlq

Conversation

@mnoah1

@mnoah1 mnoah1 commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Why?

With multiple issues and fixer backends, a dead-lettered fix request can contain several accepted or skipped submissions alongside work whose acceptance is unknown. The existing DLQ handler reads one build-level repair association and cannot restore all of those histories.

What?

Extend the fix DLQ handler to walk the build's observations and registered executors, read their IssueRepair records, and restore history for every durable acceptance or skip. Pending records, and eligible issues without a record, retain fix_submission_abandoned with reason acceptance_unknown. Recovery never calls Submit or changes issue recovery state.

Pass the executor registry through the DLQ wiring, update recovery tests, and remove the superseded single-fix selection and history helpers. This completes DLQ support for the fixer behavior introduced by #1033.

Test Plan

TestFixDLQRetainsAllDispositionsWithoutSubmitting, TestFixDLQRetainsUnknownAcceptance, and TestFixDLQDiscardsInvalidMessages cover retained outcomes, unknown acceptance, invalid deliveries, and the absence of executor submissions. The 28-target Stovepipe suite also verifies reference-server wiring. Lint, tidy, and Gazelle checks verify the repository metadata.

Revert Plan

Revert this PR, then revert #1033 and #1034 before deploying the earlier build-level repair flow.

Issue Links

No issue was provided. Final part of the repair-executor stack; based on #1033.

Stack

  1. feat(stovepipe): store fixer submissions per issue and backend #1032
  2. feat(stovepipe): extend fixer API for batching and multiple backends #1034
  3. feat(stovepipe): extend fixers to batch issues across multiple backends #1033
  4. @ feat(stovepipe): extend fixer DLQ recovery to every issue and backend #1035

Summary:
Let queues register multiple repair backends and let each backend group its own issue openings. Submission receipts identify accepted work or a terminal skip for each input item; metadata stays in versioned storage.

This contract change builds on repair-state persistence. Controller and reference-server callers migrate in the next PR in the stack.

Test Plan:
`./tool/bazel build //stovepipe/extension/fixer/...` builds the contract, generated mock, and no-op implementation. `make mocks` regenerated the mock, and lint, tidy, and Gazelle checks verify the generated sources and build metadata. Caller compilation requires the next PR.

Revert Plan:
Revert the dependent dispatch change before reverting this contract change.
Summary:
Offer each registered executor all outstanding issue openings in one batch. Persist pending rows before dispatch and retain per-item acceptance or skips while preserving executor metadata through versioned updates. Restore durable history on replay and preserve independent error causes and valid partial receipts.

This builds on the batch executor contract. The existing DLQ behavior remains in place until the next PR migrates recovery to per-executor repair records.

Test Plan:
`./tool/bazel test //stovepipe/... //service/stovepipe/server:go_default_test --test_output=errors` exercises 28 targets covering batching across pages, multiple executors, partial acceptance, failed writes, version conflicts, history replay, and preservation of retry classification. Lint, tidy, and Gazelle checks verify the repository metadata.

Revert Plan:
Revert the dependent DLQ change first, then revert this PR together with its executor-contract prerequisite.
Summary:
Recover every executor's durable submission or skip without submitting backend work. Pending or missing eligible repair records retain an acceptance-unknown event. Wire the executor registry into recovery and remove the superseded build-level selection and history helpers.

This is the final layer of the repair-executor stack, building on normal batch dispatch.

Test Plan:
`TestFixDLQRetainsAllDispositionsWithoutSubmitting`, `TestFixDLQRetainsUnknownAcceptance`, and `TestFixDLQDiscardsInvalidMessages` cover retained outcomes, unknown acceptance, invalid deliveries, and the absence of executor submissions. The 28-target Stovepipe suite also verifies reference-server wiring. Lint, tidy, and Gazelle checks verify the repository metadata.

Revert Plan:
Revert this PR together with the dependent dispatch and executor-contract changes before deploying the earlier build-level repair flow.
@mnoah1
mnoah1 added this pull request to stack #1038 November 6, 2026 22:26
@mnoah1 mnoah1 changed the title feat(stovepipe): recover per-executor repair history in the DLQ feat(stovepipe): extend fixer DLQ recovery to every issue and backend Nov 6, 2026
@mnoah1
mnoah1 marked this pull request as ready for review November 6, 2026 22:32
@mnoah1
mnoah1 requested review from a team, behinddwalls and sbalabanov as code owners November 6, 2026 22:32
@mnoah1
mnoah1 removed this pull request from stack #1038 November 10, 2026 17:14
@mnoah1
mnoah1 force-pushed the mnoah1/stovepipe-batch-repairs branch from 1148984 to da4488f Compare November 10, 2026 17:15
@mnoah1 mnoah1 closed this Nov 10, 2026
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