74 lines
4.0 KiB
Markdown
74 lines
4.0 KiB
Markdown
# PR-13 Embedded Bootstrap, Container-Owned Event Bus, and Packer Composition Root
|
|
|
|
Domain Owner: `docs/packer`
|
|
Cross-Domain Impact: `docs/studio`
|
|
|
|
## Briefing
|
|
|
|
After the cleanup baseline, the next step is to make embedded Studio bootstrap explicit and introduce one composition root for the packer.
|
|
|
|
This is where the Studio `Container` becomes a contract plus global holder, while the concrete embedded boot and `prometeu-packer-v1` wiring move into the application layer.
|
|
|
|
## Objective
|
|
|
|
Deliver the embedded bootstrap contract, explicit `PackerEventSink` wiring, and an explicit `prometeu-packer-api` to `prometeu-packer-v1` composition root for Studio embedding.
|
|
|
|
## Dependencies
|
|
|
|
- [`./PR-12-cleanup-and-unused-surface-removal-before-runtime-service-wave.md`](./PR-12-cleanup-and-unused-surface-removal-before-runtime-service-wave.md)
|
|
- [`../specs/5. Diagnostics, Operations, and Studio Integration Specification.md`](../specs/5.%20Diagnostics,%20Operations,%20and%20Studio%20Integration%20Specification.md)
|
|
- cross-domain reference: [`../../studio/specs/2. Studio UI Foundations Specification.md`](../../studio/specs/2.%20Studio%20UI%20Foundations%20Specification.md)
|
|
|
|
## Scope
|
|
|
|
- define the embedded packer bootstrap contract
|
|
- define the packer composition root for the active service wave inside the application layer
|
|
- keep `prometeu-studio` bound only to `prometeu-packer-api`
|
|
- wire the Studio `Container` contract/holder as the owner of the shared typed event bus reference used by the host-side `PackerEventSink` bridge
|
|
- ensure application boot installs a `Container` implementation before packer-backed use begins
|
|
- make the active embedded runtime entrypoint explicit enough that future capabilities do not depend on hidden constructors or side boot paths
|
|
|
|
## Non-Goals
|
|
|
|
- no runtime snapshot yet
|
|
- no read migration yet
|
|
- no write lane yet
|
|
- no alternate bootstrap retained for inactive `doctor`, `build/pack`, or reconcile paths
|
|
|
|
## Execution Method
|
|
|
|
1. Define the explicit packer bootstrap/composition entrypoint.
|
|
2. Make the host-provided `PackerEventSink` an explicit dependency for Studio embedding.
|
|
3. Refactor Studio `Container` into a contract plus installed global holder.
|
|
4. Move concrete packer wiring to the application layer that chooses `prometeu-packer-v1`.
|
|
5. Remove remaining ambiguity around packer-local versus container-owned event visibility by bridging `PackerEventSink` into the host bus at the application layer.
|
|
5. Remove remaining embedded bootstrap variants that only exist to keep inactive service surfaces alive.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- the active packer wave has one explicit composition root
|
|
- `prometeu-studio` depends only on `prometeu-packer-api`
|
|
- the application layer installs the `Container` implementation and chooses `prometeu-packer-v1`
|
|
- Studio `Container` owns the shared typed event bus reference through its installed implementation
|
|
- the packer composition root receives an explicit `PackerEventSink` rather than reaching directly into host event bus types
|
|
- packer-backed work starts only after `Container.install(...)`
|
|
- packer publication uses `PackerEventSink`, and the application layer bridges that sink into the container-owned path when embedded in Studio
|
|
- no public `PackerEventSink.noop()`-style default is treated as acceptable production bootstrap behavior
|
|
- hidden bootstrap paths that only support inactive service surfaces are removed
|
|
|
|
## Validation
|
|
|
|
- bootstrap tests for the packer composition root
|
|
- Studio boot tests for `Container.install(...)`
|
|
- integration tests for packer event visibility through the host bridge into the container-owned path
|
|
|
|
## Affected Artifacts
|
|
|
|
- `prometeu-packer/prometeu-packer-api/src/main/java/p/packer/**`
|
|
- `prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/**`
|
|
- `prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/events/**`
|
|
- `prometeu-studio/src/main/java/p/studio/Container.java`
|
|
- `prometeu-studio/src/main/java/p/studio/events/**`
|
|
- `prometeu-app/src/main/java/p/studio/App.java`
|
|
- `prometeu-app/src/main/java/p/studio/AppContainer.java`
|