3.3 KiB
RECENT_VIOLET_34D_pending
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.pyprod/clean_arch/violet/test_violet_launcher_shadow_live_factors.pyprod/launch_dolphin_violet.py
It reused the existing V3.4c live BLUE source adapter:
prod/clean_arch/violet/live_blue_source.pyprod/clean_arch/violet/live_factor_source.pyprod/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
SizingFactorsintoVioletDecisionEngine.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.