103 lines
3.3 KiB
Markdown
103 lines
3.3 KiB
Markdown
# RECENT_VIOLET_34D_fb34431
|
||
|
||
## What This Work Was
|
||
|
||
This pass continued the VIOLET plan after `V3.4c` by wiring the launcher-side
|
||
shadow path to the live BLUE factor plane.
|
||
|
||
The goal stayed read-only. BLUE code, BLUE schemas, and BLUE data structures
|
||
were not modified. The change was entirely on the VIOLET side.
|
||
|
||
## Scope
|
||
|
||
This pass added a thin shadow-side live-factor attachment and a focused test
|
||
surface:
|
||
|
||
- `prod/clean_arch/violet/shadow_live_factors.py`
|
||
- `prod/clean_arch/violet/test_violet_launcher_shadow_live_factors.py`
|
||
- `prod/launch_dolphin_violet.py`
|
||
|
||
It reused the existing V3.4c live BLUE source adapter:
|
||
|
||
- `prod/clean_arch/violet/live_blue_source.py`
|
||
- `prod/clean_arch/violet/live_factor_source.py`
|
||
- `prod/clean_arch/violet/live_factors.py`
|
||
|
||
## Why This Was Needed
|
||
|
||
Before this pass, the Violet shadow launcher still had a base-only decision
|
||
path. That meant the `VioletDecisionEngine` could produce a muted decision, but
|
||
it did not yet receive the full live factor plane from BLUE’s published
|
||
surfaces inside the launcher path.
|
||
|
||
The missing piece was the launcher-side wiring: source live BLUE factors,
|
||
thread them into `decide(...)`, and keep the journaled breakdown faithful to the
|
||
same factor plane BLUE would have seen at that scan.
|
||
|
||
## What Was Added
|
||
|
||
### 1. Shadow live-factor helper
|
||
|
||
`shadow_live_factors.py` now provides two small helpers:
|
||
|
||
- `build_shadow_live_source(...)`
|
||
- `shadow_decision_step(...)`
|
||
|
||
`build_shadow_live_source(...)` assembles the read-only BLUE live factor mirror
|
||
for the shadow path. The helper keeps imports lazy so it can be unit-tested
|
||
without dragging in the full launcher import chain.
|
||
|
||
`shadow_decision_step(...)` runs one muted shadow decision using the live BLUE
|
||
factor plane, then journals the result when the decision is actuated.
|
||
|
||
### 2. Launcher wiring
|
||
|
||
`launch_dolphin_violet.py` now:
|
||
|
||
- builds the live-factor shadow source when shadow mode is enabled
|
||
- passes the live `SizingFactors` into `VioletDecisionEngine.decide(...)`
|
||
- skips the shadow decision instead of silently falling back to base-only when
|
||
the live factor plane is missing
|
||
- keeps the existing journal path intact
|
||
|
||
This preserves the existing muted-shadow architecture while making the shadow
|
||
decision reflect the live BLUE factor plane rather than a reduced fallback.
|
||
|
||
### 3. Focused tests
|
||
|
||
`test_violet_launcher_shadow_live_factors.py` covers:
|
||
|
||
- the live-factor helper contract
|
||
- failure propagation from the client factory
|
||
- the shadow decision step with live factors and journaling
|
||
- the no-live-factor skip path
|
||
|
||
Because the mount was slow under `pytest`, I verified the helper path directly
|
||
with a small execution script instead of waiting on long file-system waits.
|
||
|
||
## Exactness Rules Followed
|
||
|
||
The pass stayed conservative:
|
||
|
||
- no BLUE edits
|
||
- no schema edits
|
||
- no live fallback to a fake factor plane
|
||
- no execution path changes outside the muted shadow branch
|
||
- no silent loss of the live factor breakdown
|
||
|
||
## Verification
|
||
|
||
Direct runtime check:
|
||
|
||
- the new helper built successfully with injected factories
|
||
- the shadow decision step accepted the live factor plane
|
||
- the decision was journaled with the expected Violet journal table
|
||
|
||
Observed direct result:
|
||
|
||
- `ok`
|
||
|
||
`pytest` on this mount was slow and repeatedly stalled in netfs waits, so I did
|
||
not treat that as a code failure.
|
||
|