infospace-bench/tests
tegwick b0d67ae79e IB-WP-0020-T05: shadow-mode CLI flags; close IB-WP-0020
Add --shadow-baseline <id> and --shadow-rate <float> opt-in flags to
generate run, generate resume, and generate from-source. When
--shadow-baseline names a candidate id from the routing config,
build_routing_policy_from_config wraps every other candidate in an
llm-connect ShadowingAdapter using that baseline plus a
PairedGrader(ExactMatchJudge()) and the workspace-resolved
QualityLedger. The baseline candidate itself is never wrapped — that
would shadow it against itself. --shadow-rate defaults to 0.1 when
--shadow-baseline is set; passing --shadow-rate without
--shadow-baseline fails fast with shadow_rate_without_baseline.
Setting --shadow-baseline without a ledger_path in the config fails
with missing_routing_ledger_for_shadow so observations have a place to
land before any call goes out.

run_generation grew shadow_baseline + shadow_rate kwargs and
_adapter_for("routing", ...) plumbs them into
build_routing_policy_from_config. The wrapped ShadowingAdapter slots
into the policy's prefer/fallback per task type via a
(candidate_id, task_type) reverse lookup, and adapters_by_id on the
adaptive policy gets the string-keyed entries.

Five new tests cover: shadow_rate without baseline fails fast, shadow
mode without a ledger fails fast, unknown shadow baseline id fails
fast, structural assertion that ShadowingAdapter wraps non-baseline
candidates and leaves the baseline raw, and a behavioural check that
shadow_rate=1.0 calls the baseline on every call while shadow_rate=0.0
skips entirely. Test forces async_shadow=False so the call counter is
deterministic.

Closes IB-WP-0020: T01-T05 all done. Workplan status flips from active
to finished. 179 tests pass, 2 skipped (both live OpenRouter smokes).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 23:30:36 +02:00
..
fixtures/lefevre IB-WP-0016-T05: deterministic Lefevre acceptance fixture 2026-05-17 22:31:17 +02:00
test_agentic_memory_profile.py Agentic memory profile 2026-05-15 16:01:35 +02:00
test_archive.py archive: include contracts/, schemas/; report skipped top-level dirs 2026-05-17 12:21:19 +02:00
test_budget_registry.py IB-WP-0020-T03: routing CLI flags 2026-05-18 22:08:51 +02:00
test_cli.py IB-WP-0014: archive-list, restore, retention annotation, docs (T03-T05) 2026-05-17 11:46:23 +02:00
test_engine_boundary.py engine and lifecycle 2026-05-14 16:26:42 +02:00
test_epub3_intake.py IB-WP-0016-T02: chapter-aware chunking and stable IDs 2026-05-17 15:52:47 +02:00
test_evaluation.py Initial implementation 2026-05-14 11:32:25 +02:00
test_evaluation_history.py eval history and metrics 2026-05-14 15:35:04 +02:00
test_generic_generator.py generic source-to-infospace generator 2026-05-14 19:33:22 +02:00
test_inspection.py Initial implementation 2026-05-14 11:32:25 +02:00
test_lefevre_fixture.py IB-WP-0016-T07: review report and output policy; close IB-WP-0016 2026-05-18 01:22:41 +02:00
test_legacy_pilot.py Kontextual Engine Integration Boundary 2026-05-14 16:43:29 +02:00
test_lifecycle.py Initial implementation 2026-05-14 11:32:25 +02:00
test_markdown_adapter.py markitect-tool integration 2026-05-14 14:53:16 +02:00
test_openrouter_live.py IB-WP-0020-T04: example routing config + live routing smoke 2026-05-18 22:19:54 +02:00
test_plan_scale.py IB-WP-0016-T03: scale-aware planning 2026-05-17 18:18:09 +02:00
test_reference_pilot.py Initial implementation 2026-05-14 11:32:25 +02:00
test_replacement_readiness.py command parity and migration guide 2026-05-14 17:16:39 +02:00
test_routing_adapter.py IB-WP-0018-T03+T04: shadow sampling + report/CLI surfacing; close IB-WP-0018 2026-05-18 11:52:05 +02:00
test_routing_cli.py IB-WP-0020-T03: routing CLI flags 2026-05-18 22:08:51 +02:00
test_routing_config.py IB-WP-0020-T05: shadow-mode CLI flags; close IB-WP-0020 2026-05-18 23:30:36 +02:00
test_semantics.py entity relationship model 2026-05-14 15:06:17 +02:00
test_trading_literature_profile.py IB-WP-0016-T04: trading-literature profile 2026-05-17 18:59:45 +02:00
test_wealth_vsm_generation.py infospace pipeline for wealth of nations example 2026-05-14 18:04:38 +02:00
test_workflow.py acceptance matrix and workflow generation 2026-05-14 16:01:32 +02:00