Files
siloqy/prod/docs/RECENT_VIOLET_34D_pending.md

3.3 KiB
Raw Blame History

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