Skip to content

3.0: correct default PSR-14 reporter composition #110

Open

Description

@coisa

Status and delivery

Ready for owner review. PR #3 is open and no longer Draft at the validated head c178301. This is not owner code approval, merge or publication.

The confirmed major regression is corrected in PR 3, which carries Closes #110. The public candidate is c178301, reconciled with merged 2.x PR #121; Native PHP, documentation, style, Changelog and feedback checks passed for this exact head. The inherited fragment was restored byte-for-byte; the policy passed without a waiver. Owner review and merge remain pending.

Confirmed problem and bounded correction

At e9fe523 with FF 1.10, the default provider could cache an empty aggregate despite a working application dispatcher. The event recipe exited 0 but printed Private log records: 0. Listener-only assertions passed even when none ran. The same failure preceded constructor-callable work, so it was not caused by #70.

The optional CallableThrowableHandler probe now skips only actual absence/not-found and FastForward's specific structural AutowiringException for an unconfigured callable. Explicit factory failures retain their cause; there is no blanket ContainerException catch, dummy callable, reporter-order change or API addition. Real post-invocation assertions require the identical original once through the raw listener, ErrorEvent and private log.

FastForward can still recover from another failed concrete aggregate construction through native autowiring and cache an empty aggregate. This documented boundary is not a new fail-closed guarantee.

Evidence and completion

Current reconciled-head validation

Public head c178301, tree 78454df6, is reconciled with master e8341f6. PHP CI passed all 10 jobs: quality on PHP 8.3–8.5, five selected production highest/lowest graphs and coverage/report. Documentation, style, Changelog and feedback passed at the same head.

The coverage report records 97.16% → 96.86% (-0.30 percentage points), the unchanged 80% floor, and tested merge commit b3c206a32ff2a4a3bf0f3cac918502fa7872a61c. Local validation passed 355 tests / 1843 assertions and 21 examples, with site/archive and selected production-consumer checks. Nine review threads are resolved; there is no submitted owner approval of this head. The remaining gate is the owner's code review and merge decision.

Focused correction 39a661a was retained in the combined candidate. e267 native PHP CI and the actual event recipe pass. Combined documentation/consumer/graph evidence is summarized in 26.

  • Assert real default-provider raw/wrapped/private-log deliveries after invocation, without overriding the whole reporter.
  • Distinguish missing service, structural optional-callable unavailability and executing explicit factory failures, including AutowiringException causes.
  • Preserve inert discovery/order and verify the real final container fallback; align recipe, guides/site/skill and major note.
  • Revalidate the reconciled public head c178301 with current native checks. Owner review remains pending.
  • Obtain owner review and merge of PR 3.
2.x boundary and historical evidence

The published 2.x Interop provider requires an application reporter rather than installing this default aggregate; its events recipe constructs adapters explicitly. The same supported 2.x failure was not reproduced, so this is not a missing 2.x backport.

The bounded fix was integrated at 98eba68 before later reconciliations. Historical successful checks/selected consumers remain evidence for their exact commits. The event recipe's expected output is raw throwable, wrapped event and Private log records: 1; exit 0 alone is insufficient.

Activity

  1. added this to the 3.0 milestone on Oct 17, 2026
  2. changed the title [-]Fix default PSR-14 reporter composition before the major release[/-] [+]3.0: correct default PSR-14 reporter composition[/+] on Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions