Aller au contenu

BC-065E — EventPlatform / Projection / Realtime Final Certification

Status: HISTORICAL For the current architecture, see: ./dependances.md, ../runtime/overview.md.

Status

BC-065E completed.

BC-065 is now closable.

No plugin file changed. No runtime mirror file changed. No Composer change. No runtime sync.

Final architecture

EventBridge

EventBridge remains the only serialization-sensitive boundary in the BC-065 slice:

  • PersistableEventSerializer
  • PersistableEventStore
  • EventPlatform\EventBus

Certified invariants:

  • same persisted event::class
  • same persisted get_object_vars($event) payload
  • same persist-then-dispatch order
  • same exception propagation

EventPlatform / M12

Retained:

  • EventPlatform\Bus\EventBus
  • EventPlatform\Kernel\PlatformKernel

Compatibility wrappers retained:

  • M12\EventBus\EventBus
  • M12\Wiring\PlatformKernel

Certified invariants:

  • M12 wrappers are loadable
  • instanceof behavior is preserved
  • no duplicated business logic exists in wrappers

Projection / Realtime

Retained orchestration shells:

  • Projection\EventSubscriberRegistry
  • Projection\ProjectionCatalogWiring
  • Projection\ProjectionEngine
  • Realtime\Async\AsyncEventQueue
  • Realtime\Async\AsyncWorker
  • Realtime\RealtimeCatalogRebuilder

Certified invariants:

  • registry accepts canonical Platform\Domain\Shared\DomainEvent
  • wiring accepts canonical CatalogProjectionWriter
  • worker forwards canonical DomainEvent instances to realtime process()
  • rebuilder boot is idempotent
  • rebuilder product-id extraction supports productId() and aggregateId()

Proven graph

EventBridge
  -> PersistableEventSerializer
  -> PersistableEventStore
  -> EventPlatform EventBus

M12 EventBus
  -> EventPlatform EventBus

M12 PlatformKernel
  -> EventPlatform PlatformKernel

ProjectionCatalogWiring
  -> ProjectionEngine
  -> CatalogProjectionWriter

AsyncWorker
  -> AsyncEventQueue
  -> RealtimeCatalogRebuilder::process()

RealtimeCatalogRebuilder
  -> EventSubscriberRegistry
  -> CatalogRankingEngine
  -> CatalogIntelligenceEngine

No production runtime entrypoint proving a live EventBridge -> Projection -> Realtime chain was found.

Boundaries

Certified final boundaries:

  • plugin WordPress -> Application\EventPlatform|M12|M17|Projection|Realtime = 0
  • runtime mirror -> same families = 0
  • no SQL in the BC-065 legacy slice
  • no HTTP / CLI / WordPress hook / HTML in the BC-065 legacy slice
  • no additional serialization-sensitive surface beyond EventBridge

Reflection / autoload

Certified:

  • no new production class_alias() was introduced
  • no new Composer autoload entry was introduced
  • EventBus and PlatformKernel remain intentionally non-final for wrapper compatibility
  • EventBridge constructor depends on PersistableEventStore
  • BC-065 legacy classes remain outside Composer PSR-4 autoload and are certified as residual internal debt only

Residual P2 debt

Accepted P2 only:

  • EventPlatform\EventDispatcher without proven production consumer
  • EventPlatform\Contracts\Event without proven production consumer
  • EventPlatform\Contracts\EventHandler without proven production consumer
  • ProjectionEngine still placeholder
  • AsyncEventQueue still in-memory
  • no proven production runtime entrypoint for the legacy Projection / Realtime chain
  • CatalogIntelligenceEngine legacy dependency tracked outside BC-065

No P0/P1 debt remains in the BC-065 scope.

Closure decision

  • BC-065E: closable
  • BC-065: closable

Suggested next BC

If future work is needed, it should be a new dedicated BC outside BC-065, focused on one of:

  • retiring EventDispatcher / marker contracts if a full non-usage proof is desired
  • replacing AsyncEventQueue with a canonical queue port
  • retiring placeholder ProjectionEngine
  • addressing CatalogIntelligenceEngine legacy dependency separately