Skip to content

fix(queue): contain mixed-version retry promotion conflicts - #297

Merged
Joncallim merged 3 commits into
codex/pr198-producer-5a2-r3a-retry-upgradefrom
codex/pr198-producer-5a2-r3a-r4-v2-cutover
Jul 28, 2026
Merged

fix(queue): contain mixed-version retry promotion conflicts#297
Joncallim merged 3 commits into
codex/pr198-producer-5a2-r3a-retry-upgradefrom
codex/pr198-producer-5a2-r3a-r4-v2-cutover

Conversation

@Joncallim

@Joncallim Joncallim commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Source Issue

Issue: #179

Summary

  • distinguish genuine retry-promotion ownership contention from fatal receipt-integrity failures with a fixed typed error
  • contain only that typed conflict at the task, approval, and answers promotion boundaries while preserving fatal handling for Redis, parse, integrity, and capacity errors
  • prove historical v2-first and upgraded-first ordering, legacy-row quiescence, strict receipt authority, and non-disclosing loop continuation

Validation

  • npx vitest run __tests__/core-diagnostic-output-closure.test.ts --config vitest.config.ts — 21/21
  • disposable Redis 8 proof at a dedicated nonzero empty database — 3/3 with existing multiplicity, recovery, and shutdown markers
  • npm test -- --maxWorkers=1 — 1,688 passed; environment-gated integration files remained skipped by the ordinary unit command
  • exact three timeout cases from the first concurrent full-suite run — 213/213 in isolated serial retry
  • assigned-file ESLint — pass
  • npx tsc --noEmit --pretty false — pass
  • npm run build — pass
  • git diff --check — pass
  • mutation checks rejected fatal typed conflicts, swallowed generic errors, fabricated stale success, and restored unbounded ready-list scanning

Documentation gate\n\nCompleted in docs/operator-guide.md at 14499270ba03c2b382bb9ad38aada001e54db871.\n\n- Operators must assume legacy retry entries exist, stop and drain every v2 worker, verify no v2 process or replica remains, and only then start current workers.\n- Raw Redis queue members must not be dumped or logged. An accidental v2 canonical winner produces only the fixed nonfatal mixed_version_retry_promotion category; it is not current-worker success and fabricates no receipt.\n- The compatibility window ends when every v2 worker stops. Opaque disposition receipts keep their normal 15-minute expiry and bounded pruning; there is no compatibility key or manual receipt cleanup.\n- Rollback stops and drains current workers first and does not restart v2 while legacy retry entries may remain.\n\nDocumentation validation: git diff --check passed. This repository has no configured Markdown formatter or documentation linter.

Scope\n\nThe implementation remains limited to the two queue/runtime files and their two focused test files. This follow-up adds only docs/operator-guide.md. No workflow, schema, migration, or Redis namespace behavior is modified.

@Joncallim
Joncallim marked this pull request as ready for review July 28, 2026 16:56
@Joncallim
Joncallim merged commit 279801f into codex/pr198-producer-5a2-r3a-retry-upgrade Jul 28, 2026
4 checks passed
@Joncallim
Joncallim deleted the codex/pr198-producer-5a2-r3a-r4-v2-cutover branch August 2, 2026 18:22
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.

1 participant