Skip to content

feat(orchestrate): --arl0-years, the false-alarm budget on the CLI - #18

Merged
mspinola merged 1 commit into
mainfrom
claude/arl0-years-flag
Aug 3, 2026
Merged

feat(orchestrate): --arl0-years, the false-alarm budget on the CLI#18
mspinola merged 1 commit into
mainfrom
claude/arl0-years-flag

Conversation

@mspinola

@mspinola mspinola commented Aug 3, 2026

Copy link
Copy Markdown
Owner

EdgeDecayTrigger has always taken a Thresholds, but __main__ built it with none, so the budget was unreachable from the only place the monitor actually runs.

It is the one knob worth reaching for, because it buys detection latency roughly one for one. Measured on the real 47-market trend book now frozen on the ledger (+0.5565R, 23.3 trades/yr):

--arl0-years h (sigma) ARL0 (yr) ARL1 (yr)
(default) 17.17 25.0 9.4
15 13.84 15.0 6.8
10 11.54 10.0 5.1
6 9.06 6.0 3.5

On a low-frequency book the default is slow enough to be decorative, so the number deserves choosing rather than inheriting.

Three choices worth recording

  • Omitting the flag passes None, not a materialized Thresholds(). Building one eagerly would pin today's numbers here, so a retune in crucible would quietly stop reaching this CLI. The default has to keep coming from the judge.
  • Two silent-no-op paths are reported rather than shrugged at, because a tuning flag that tunes nothing reads as applied: --arl0-years without --edge-decay, and --arl0-years against a baseline with no firing rate. The second is the subtle one — years are converted using the baseline's own rate, so an undated baseline falls back to monitor_arl0_trades and the flag does nothing, which is exactly the ambiguity the years unit exists to remove.
  • A non-positive budget raises. It is a span of calendar time, and argparse would otherwise hand a negative straight to the bisection solver.

405 tests pass, ruff clean.

🤖 Generated with Claude Code

EdgeDecayTrigger has always taken a Thresholds, but __main__ built it with none,
so the budget was unreachable from the only place the monitor actually runs.

It is the one knob worth reaching for, because it buys detection latency roughly
one for one. Measured on the real 47-market trend book now frozen on the ledger
(+0.5565R, 23.3 trades/yr):

    --arl0-years   h(sigma)   ARL0(yr)   ARL1(yr)
      (default)      17.17       25.0        9.4
             15      13.84       15.0        6.8
             10      11.54       10.0        5.1
              6       9.06        6.0        3.5

On a low-frequency book the default is slow enough to be decorative, so the number
deserves choosing rather than inheriting.

Three choices worth recording:

  * Omitting the flag passes None, not a materialized Thresholds(). Building one
    eagerly would pin today's numbers here, so a retune in crucible would quietly
    stop reaching this CLI. The default has to keep coming from the judge.
  * Two silent-no-op paths are reported rather than shrugged at, because a tuning
    flag that tunes nothing reads as applied: --arl0-years without --edge-decay,
    and --arl0-years against a baseline with no firing rate. The second is the
    subtle one: years are converted using the BASELINE's own rate, so an undated
    baseline falls back to monitor_arl0_trades and the flag does nothing, which is
    exactly the ambiguity the years unit exists to remove.
  * A non-positive budget raises. It is a span of calendar time, and argparse would
    otherwise hand a negative straight to the bisection solver.

405 tests pass, ruff clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mspinola
mspinola merged commit 0c8afc2 into main Aug 3, 2026
1 check passed
@mspinola
mspinola deleted the claude/arl0-years-flag branch August 3, 2026 02:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant