Prompt router A/B has no control arm by default; MCP <channel> messages are routed as tasks
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
Research direction
Start with hooks/ripwire-claude-route.sh and resolve_arm to trace the default arm, then inspect bench/routing_ab_report.py and INSTALL.md for the control-arm behavior. Check the prompt filtering for the <channel wrapper alongside the existing skipped prefixes. Run the routing tests and verify that channel events are skipped and the registered A/B can produce a control arm; the optional readout-date suggestion is separate work.
Written by the indexing model from the issue text.
Description
Summary
Field data from one machine running hooks/ripwire-claude-route.sh (installed from 0.5.0, built from bacfa3b7b) between 2026-09-10 and 2026-10-07 shows two problems for the prompt-router A/B pre-registered in docs/EVALS.md ("Claude Code prompt router — PRE-REGISTERED 2026-09-02").
-
The control arm never existed.
-
No
~/.ripwire/meter.confwas present, soresolve_armfell through to thetreatmentdefault for every session. -
bench/routing_ab_report.pyon the real log:arm prompts recommended adopted rate sessions treatment 18968 1959 0 0.0% 427 control 0 0 0 n/a 0 UNDERPOWERED -- ... control has 0 (needs 40 more) -
The registration defines the verdict as a treatment − control difference with at least 40 recommended prompts per arm. With the shipped default it can never be computed.
-
On current
main,INSTALL.mdonly ever deletesmeter.conf; nothing writesarm=auto.
-
-
Non-user prompts drive almost all recommendations. Claude Code delivers MCP channel events (a
<channel source="…">wrapper; here from a crew-messaging MCP plugin) through the same UserPromptSubmit path.- Current
mainskips prompts that start with<task-notification>or<system-reminder>, but not<channel. - On this machine, over 14 days, 1926 distinct injected recommendations (2540 transcript records, because resumed sessions copy history) broke down by trigger:
- 926 (48.1%) started with
<channel. - 845 (43.9%) started with
<task-notification(already skipped onmain).
- 926 (48.1%) started with
- Typical recommendations for channel messages: a
--grep=whose pattern is the channel's source tag, or a--pack-task=whose argument is the channel tag itself.
- Current
Adoption
- Registered window (the next two ripwire calls in the same turn, since the hook deletes its pending file on the next prompt): 3 of 1926 were followed by any ripwire call, and 0 adopted the recommended verb. This agrees with the meter above.
- Open-ended window (the next two ripwire calls at any later point): 317 followed, 29 adopted (1.5%).
- Instrument check: a positive control in an isolated
RIPWIRE_HOME(arecommendfor--grep, thenripwire . --grep=…throughripwire-nudge.sh) logged"outcome":"adopted", so the--observepath can record an adoption. - Unexplained: the meter holds 6
RouteObservationrows, while transcripts show 3 same-turn follow-ups. - Relevance: we hand-checked 5 recommendations against their prompts; all 5 were unrelated to the task. That is a small sample.
Suggestions
- Treat a leading
<channellike<task-notification>and<system-reminder>: skip the classifier and logskip-system. Channel events are not user input. - Either default the router to
arm=autowhile its registration is open, or have the hook or report state loudly that no control arm exists. - Optionally, have
routing_ab_report.pyprint the registered readout date and flag when it has passed.
We have removed the route hook from our settings. The PreToolUse and SessionStart hooks stay installed.
- Dominant language
- C++
- Stars
- 2.5k
- Forks
- 158
- Avg merge
- 2d 9h
- Merged PRs (30d)
- 55
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from redhat-et/ripwire
-
Difficulty 2/5 Under an hour Newbie friendliness 78/100
redhat-et/ripwire#334 · 7 comments ·
Maintainers usually reply within 1 day
-
help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
redhat-et/ripwire#68 · 2 comments ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 35/100
redhat-et/ripwire#428 · 7 comments ·
Maintainers usually reply within 1 day
-
help wanted
Difficulty 5/5 Over a week Newbie friendliness 25/100
Maintainers usually reply within 1 day
All issues in redhat-et/ripwire
Similar issues
-
crash lld:COFF
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
llvm/llvm-project#235970 · 1 comment ·
Maintainers usually reply within 1 day
-
[Bug]: iOS textarea wraps text mid-word because LynxUIBaseInput hardcodes NSLineBreakByCharWrappingOpen
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
lynx-family/lynx#10455 ·
Maintainers usually reply within 1 day
-
A-tools P-low S-blocked task
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
cv::checkRange fails with "Unsupported matrix depth" for fp8 depthsPossibly taken @sshivensolanki claimed this today. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Rifle-variant weapon offsets are saved under the pistol's name [FRIK-093]Possibly taken @rollingrock claimed this today. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
rollingrock/Fallout-4-VR-Body#182 ·