Skip to content

[ci-gap][resilience] Messenger DLQ poison-message integration test #373

Description

@claude

Current score → target

Unit/integration/e2e tests: 5/5 coverage but a proven resilience blind spot → closed.

Defect class prevented

Message-retry misconfiguration: poison messages retrying forever, messages never reaching the failure transport (DLQ), silent message loss.

Evidence

Proposed fix

One deterministic PHPUnit Integration test:

public function testPoisonMessageReachesFailureTransportWithinRetryBudget(): void
{
    $this->bus->dispatch(new AlwaysFailingTestMessage());
    $this->processTransport('async', maxIterations: 10);
    self::assertSame(0, $this->transportMessageCount('async'), 'message must not loop forever');
    self::assertSame(1, $this->transportMessageCount('failed'), 'message must land in DLQ');
    self::assertLessThanOrEqual(3, $this->handlerSpy->attempts, 'retry budget respected');
}

Runs in the existing Integration suite (already blocking on every PR) — no new workflow.

Effort

M

Acceptance criteria

  • Test exists in the Integration suite and blocks PRs
  • Proven: locally reverting 12f6d60 (restoring the infinite-retry strategy) makes the test fail

Cross-references: #274, #284, #316.


Filed by an automated CI/CD verification-coverage audit (OpenSSF Scorecard baseline: aggregate 6.0/10, local mode — SAST 0, Fuzzing 0, Token-Permissions 0, Pinned-Dependencies 5, Vulnerabilities 4). Audit method: inventory → gap analysis → git-history evidence mining → 3-iteration adversarial critique loop.


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    ciContinuous integration pipelinequalityQuality engineering / verification coverageresilienceResilience and chaos testing

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions