diff --git a/bench/results/prometheus-sigma-sweep-dryrun-2026-05-10.md b/bench/results/prometheus-sigma-sweep-dryrun-2026-05-10.md index 1b7f68a..49ad499 100644 --- a/bench/results/prometheus-sigma-sweep-dryrun-2026-05-10.md +++ b/bench/results/prometheus-sigma-sweep-dryrun-2026-05-10.md @@ -1,6 +1,6 @@ # Prometheus-Σ Phase 3 sleep-sweep dry-run -Generated: 2026-05-10T22:33:37Z UTC +Generated: 2026-05-10T23:20:32Z UTC Script: `bench/scripts/prometheus_sigma_sweep_dryrun.py` Ticket: #000037 Phase 3 (read-only simulation) @@ -14,31 +14,30 @@ Ticket: #000037 Phase 3 (read-only simulation) - UNGROUNDED: 7d (604800s) - Target B sample/shard: 500 - Controller budget (Hermes concurrency): 4 -- Weight profile: safe (§15.1) +- Weight profile: sweep (§15.4) ## Target A — providence_cache sweep candidates -- Total candidates (rows older than τ_qa): **1913** -- Sweep chunks (size 4): 479 -- Controller runtime: 15.80 ms +- Total candidates (rows older than τ_qa): **1927** +- Sweep chunks (size 4): 482 +- Controller runtime: 12.91 ms ### Audit-mode distribution of candidates | audit_mode | count | |---|---| -| STRICT | 720 | -| HYBRID | 713 | -| UNGROUNDED | 471 | +| STRICT | 724 | +| HYBRID | 720 | +| UNGROUNDED | 474 | | CANONICAL_PROJECTION | 9 | ### Controller decision distribution (per chunk) | label | chunks | |---|---| -| DEFERRED | 271 | -| REJECT | 205 | -| MARGINAL | 2 | -| ACCEPT | 1 | +| DEFERRED | 369 | +| REJECT | 110 | +| MARGINAL | 3 | ### Veto kinds observed @@ -50,14 +49,14 @@ Ticket: #000037 Phase 3 (read-only simulation) - MemoryRoot proposals: 0 - SelfModel proposals: 0 -- FalsificationFixture proposals (§13 Step 11 — high-divergence → 5F-fixture funnel): **447** -- Advisory event entries (would write to `controller_events` under Phase 2): 895 +- FalsificationFixture proposals (§13 Step 11 — high-divergence → 5F-fixture funnel): **449** +- Advisory event entries (would write to `controller_events` under Phase 2): 708 ## Target B — document sweep sample - Total sampled candidates: **2000** - Sweep chunks (size 4): 500 -- Controller runtime: 21.82 ms +- Controller runtime: 18.33 ms ### Canonical-shape regex prefilter hits @@ -91,9 +90,9 @@ Ticket: #000037 Phase 3 (read-only simulation) ## Total simulation cost -- Total branches scored: 3913 -- Total controller runtime: 37.62 ms -- Mean per-branch latency: 9.61 µs +- Total branches scored: 3927 +- Total controller runtime: 31.24 ms +- Mean per-branch latency: 7.96 µs ## Findings & fixes (dry-run iteration log) diff --git a/bench/scripts/prometheus_sigma_sweep_dryrun.py b/bench/scripts/prometheus_sigma_sweep_dryrun.py index f882cf8..3b4eae6 100644 --- a/bench/scripts/prometheus_sigma_sweep_dryrun.py +++ b/bench/scripts/prometheus_sigma_sweep_dryrun.py @@ -66,7 +66,7 @@ from arborist.substrate.prometheus import ( ControllerDecision, ControllerInput, controller_decide, - safe_weights, + sweep_weights, ) @@ -337,7 +337,7 @@ def sweep_target_a( thinly that Kelly's `p_i > 0.5` floor is never met (a finding from dryrun iteration 1: chunk_size=64 → 100% DEFERRED). """ - weights = safe_weights() + weights = sweep_weights() label_counts: Counter[str] = Counter() audit_mode_seen: Counter[str] = Counter() @@ -448,7 +448,7 @@ def sweep_target_b(shards_dir: Path, sample_per_shard: int, chunk_size: int = 4) chunk_size matches Hermes concurrency budget §11 — see :func:`sweep_target_a` rationale. """ - weights = safe_weights() + weights = sweep_weights() label_counts: Counter[str] = Counter() shape_counts: Counter[str] = Counter() @@ -570,7 +570,7 @@ def render_markdown(a_results: dict, b_results: dict, opts: dict) -> str: lines.append(f"- Target B sample/shard: {opts['sample_b']}") lines.append(f"- Controller budget (Hermes concurrency): " f"{DEFAULT_BUDGET}") - lines.append(f"- Weight profile: safe (§15.1)") + lines.append(f"- Weight profile: sweep (§15.4)") lines.append("") lines.append("## Target A — providence_cache sweep candidates") lines.append("") diff --git a/docs/tickets/ticket-000037-prometheus-sigma-recursive-falsification-controller.md b/docs/tickets/ticket-000037-prometheus-sigma-recursive-falsification-controller.md index b0be645..b533644 100644 --- a/docs/tickets/ticket-000037-prometheus-sigma-recursive-falsification-controller.md +++ b/docs/tickets/ticket-000037-prometheus-sigma-recursive-falsification-controller.md @@ -918,6 +918,29 @@ Higher temperature widens the distribution; lower divergence penalty admits speculative branches; lower cost penalty allows more compute spend on exploration. +### 15.4 Sweep profile (sleep-sweep economics — landed Phase 1.c) + +```json +{ + "gamma_5f": 1.5, + "lambda_capital_cost": 0.25, + "nu_witness_divergence": 0.5 +} +``` + +Tuned for the §22 dry-run economics. Sweep work *deliberately* +accepts capital cost in exchange for falsification discovery, so +λ_capital_cost drops to 0.25 (vs safe 1.0) and γ_5f bumps to 1.5 +(vs safe 1.25) to reward falsification-rate improvement. Witness +divergence weight drops to 0.5 (vs safe 1.5) because high +divergence is *desirable* signal during sweep — it's what surfaces +fixture candidates (§13 step 11). Available as +``arborist.substrate.prometheus.sweep_weights()`` and registered +in ``WEIGHT_PROFILES["sweep"]``. The dry-run simulator +(``bench/scripts/prometheus_sigma_sweep_dryrun.py``) uses this +profile so the §22 numbers match what Phase 3 will see in +production. + --- ## 16. Phase 1 implementation prerequisites @@ -1276,11 +1299,9 @@ mode `CASE` in `iter_target_a_candidates`: kernel-only modes (CP) default to τ_qa=1d (cheap re-probe, high value when kernel-LLM divergence surfaces); LLM-witness modes (STRICT/HYBRID/UNGROUNDED) stay at τ_qa=7d. Tunable via `--tau-qa-cp-days` + `--tau-qa-days` -CLI flags + `PROMETHEUS_SWEEP_TAU_*` make-variables. Result with -defaults: 9 CP rows surface alongside the 1,904 LLM-witness -candidates → 1,913 total Target A candidates → 1 ACCEPT, 2 MARGINAL, -205 REJECT, 271 DEFERRED chunks (chunk_size=4). Phase 3 lifts the -per-mode τ table into governance parameters (cache-key hash inputs). +CLI flags + `PROMETHEUS_SWEEP_TAU_*` make-variables. Phase 3 lifts +the per-mode τ table into governance parameters (cache-key hash +inputs). **Finding 4 — Target B canonical-shape detection is the real headline.** 4.40% of sampled documents (n=2000) contain @@ -1301,21 +1322,40 @@ burst design. path exercises end-to-end against real corpus data — no fixture-only mocking. -Total dry-run cost (per-mode τ_qa, defaults CP=1d / LLM=7d, run -2026-05-10T22:33Z): **~37.6 ms** to score 3,913 branches across all -sweep targets and both shards' worth of providence_cache + a 2,000- -doc sample of documents — **9.6 µs per branch** at chunk_size=4 in -pure Python. (Prior run with uniform τ_qa=1d: ~55 ms / 4,379 branches -/ 12.5 µs per branch — fewer LLM-witness candidates surface under -the per-mode default, so the total branch count drops; the -per-branch latency delta is within measurement noise and not -attributable to a specific code change.) Phase 3 latency budget for -the controller itself remains non-binding; the witness fan-out -(Hermes calls) is the dominant cost. +**Dry-run runs over the §22 iterations (chunk_size=4, pure Python):** + +| run (UTC) | weights | τ_qa policy | branches | runtime | µs/branch | ACCEPT | MARGINAL | REJECT | DEFERRED | +|---|---|---|---|---|---|---|---|---|---| +| 2026-05-10 (initial) | safe (§15.1) | uniform 1d | 4,379 | ~55 ms | 12.5 | n/a | 4 | n/a | n/a | +| 2026-05-10T22:33Z | safe (§15.1) | per-mode CP=1d / LLM=7d | 3,913 | 37.6 ms | 9.6 | 1 | 2 | 205 | 271 | +| 2026-05-10T23:20Z | sweep (§15.4) | per-mode CP=1d / LLM=7d | 3,927 | 31.2 ms | 7.9 | 0 | 3 | 110 | 369 | + +Note on the sweep-vs-safe shift: dropping λ_capital_cost (1.0 → +0.25) and ν_witness_divergence (1.5 → 0.5) reduced cost-class +separation in the softmax, pulling chunks that previously hit +REJECT (negative selected_u) into DEFERRED (positive U but no +single branch with p_i > 0.5). The single ACCEPT chunk under safe +weights diffused into the DEFERRED pool. Net falsification-fixture +proposal count stayed flat (447 → 449) — the §13 step 11 emission +path is upstream of decision labeling, so the sweep's information- +gathering value preserves while the action-taking value +concentrates more aggressively on the high-confidence tail. + +**Phase 3 implementation note (sweep-profile finding).** The +flatter softmax under sweep weights surfaces a Phase-3-design +question: pair `sweep_weights()` with a sharper `eta_softmax_temperature` +(currently default 1.0) so high-Δ5F branches reach the Kelly +floor more often, OR keep the current temperature and accept that +sweep-mode Phase 3 will write more advisory rows than it acts on +(DEFERRED is still informative — it's the chunks worth re-checking +next window, not chunks rejected). Phase 3 ticket #000045 §2 leaves +the temperature un-pinned for this reason. Detailed numbers + iteration log per shard: `bench/results/prometheus-sigma-sweep-dryrun-YYYY-MM-DD.md` -(regenerated by `make prometheus-sweep-dryrun`). +(regenerated by `make prometheus-sweep-dryrun`). Phase 3 latency +budget for the controller itself remains non-binding; the witness +fan-out (Hermes calls) is the dominant cost. ---