Files
siloqy/prod/docs/RECENT_VIOLET_34D_fb34431.md

103 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 BLUEs 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.