feat(orchestrator): retire the filter pipeline - #3264
Merged
hallerite merged 1 commit intoAug 13, 2026
Conversation
hallerite
force-pushed
the
feat/retire-filter-pipeline
branch
from
August 13, 2026 13:32
e9d7f92 to
fd76931
Compare
The filter subsystem served three detectors; each now has a proper home and
the pipeline itself (pre/post batch slots, double apply pass, RolloutFilter)
is gone:
- Zero-advantage splits into its three roles. Evidence: every finalized group
already feeds the task sampler. Admission: [orchestrator.sampler]
drop_degenerate_groups drops zero-signal groups at group finalization so
the batch backfills (the old pre-batch enforce + oversampling recipe).
Ship rule: Algorithm.trains_on_zero_advantage — a class declaration, not a
run-level knob. MaxRL's all-zero sentinel stops depending on a filter being
configured; echo's exception (observation CE trains through collapsed
advantages) becomes automatic and per-env instead of a global enforce=false.
- Gibberish/repetition demote to arrival-time detections ([[orchestrator.detections]]):
each reads only the rollout's own branches, so one pass at tokenization
replaces both slots. One drop semantic replaces pre-vs-post: an enforced
detection ships no samples and never occupies a batch slot (backfill), while
the reward still counts toward the group baseline.
Rollout.filter_results/is_filtered become detections/is_excluded;
pre_filters/* metrics become detections/*; degenerate-group drops surface as
sampler/{env}/dropped_degenerate_groups. Default behavior is preserved: the
old post-batch enforcing zero_advantage maps 1:1 onto the ship rule, and
gibberish/repetition still default to monitoring. Tracked configs migrated in
place, no shim. One deliberate metrics change: zero-advantage rollouts now
stay in the effective subset — an all-correct group is a real outcome, and
excluding it clipped reward stats.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hallerite
force-pushed
the
feat/retire-filter-pipeline
branch
from
August 13, 2026 15:38
fd76931 to
c1053d5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR 3 of the TaskSampler stack (#3261 ← #3262 ← this; retarget to main as the stack merges).
The filter subsystem served exactly three detectors; each gets a proper home and the pipeline itself — both config slots, the double
apply_filterspass, theRolloutFilterprotocol — is deleted.Zero-advantage splits into its three roles
[orchestrator.sampler] drop_degenerate_groups = truedrops zero-signal groups at finalization so the batch backfills — the old pre-batchenforce=true+oversampling_factorrecipe.Algorithm.trains_on_zero_advantage(defaultFalse, echoTrue). MaxRL's all-zero discard sentinel stops depending on a filter being configured; echo's exception becomes automatic and per-env instead of a run-wideenforce=false.advantages=None(opd/opsd/sft) always ships.Gibberish/repetition become rollout-level detections (
[[orchestrator.detections]]): rollout-granularity predicates over the rollout's own branches, evaluated once at group finalization — the pipeline's single decision point — replacing both slots. An enforced detection ships no samples and never occupies a batch slot (backfill); its reward still counts toward the group baseline.Renames/migrations, no shim:
Rollout.filter_results/is_filtered→detections/is_excluded;pre_filters/*metrics →detections/*; gate drops surface assampler/{env}/dropped_degenerate_groups; five tracked configs migrated; docs Filters section rewritten as Detections. Defaults map 1:1. One deliberate metrics change: zero-advantage rollouts stay in theeffectivesubset — an all-correct group is a real outcome, and excluding it clipped reward stats.Design doc:
design/task-sampler.md§3.5.Verified: 143 unit tests pass (orchestrator + configs), including the rewritten
test_detections.py.🤖 Generated with Claude Code