Refuse intake policy promotion without paired wins over every baseline
Deliver the balanced intake objective, mandatory baseline promotion gate and durable evidence receipt. This PR includes repaired PR #95 commit 2ecb61f and current main 0025c8b; it can be reviewed against main without waiting for either PR to merge during this run. No measured win is claimed: the fresh public experiment again has zero promotions.
Before: closed-status recognition is dominated by the majority constant. After: creation-title Issue routing uses stochastic balanced accuracy, so constants score exactly 0.5, and every vector candidate must clear paired stratified item-bootstrap lower effects strictly above 0.01 against the incumbent, both constants and a fixed non-learning keyword router. 8,192 replicates, four-comparison Bonferroni adjustment, at least ten held-out items per class. Original exact/sampled/gap/contamination/checkpoint/approval/resource gates remain required. Later edits, identities, authors and timestamps are not model features.
Conflicts resolved: epic/baseline/lintruntime tracker items and append-only history unions, controller imports and objective dispatch, packaging, corpus regressions and source snapshot ordering. Main's newer evaluation/card/CAS/decoder behavior survives; intake sealing now uses the same deterministic ordering. CHANGELOG.md was regenerated inside the merge. The continuation instead restores main-based chains and re-records branch intent, keeping main records byte-identical.
| Acceptance | Evidence | Result |
|---|---|---|
| Stratified paired gate and equality | 96 seeded arbitrary/noisy crossing-vector cases with unequal class sizes; equality with each of four baselines always refuses | focused objective checks 5/5 pass |
| Objective and process replay | Existing metric/heuristic, real SDK/external process and Git-free PATH regressions | remaining objective checks 3/3 pass |
| Preserve newer main corpus behavior | Publication conflicts/inside-source protection and English/Danish snapshot regression | 3/3 pass |
| Behavioral revert | Replace lower-bound predicates with point means, or disable only heuristic refusal: randomized property fails 0/1 each, exit 1; restored focused command passes 5/5 | recorded in pm |
| Pinned tracker-linked execution | pm test --run --only-last --progress, snapshot workspace, PM context none | 5/5 pass |
| Bounded cycle recovery | Includes #95 refusal-lifecycle fix and its recorded 8/8 refusal plus 5/5 successful vector boundary evidence | included in the completed current-head full release gates |
| Static checks | npm run typecheck, npm run lint, npm run build, regenerated changelog check | pass |
| Complete npm/Bun release gates | Current full-gate CI | all three variants pass 1,023/1,023, zero fail/skip/cancel/todo; 100/100/100/100 across 54 sources |
Fresh real-data run: public MIT unbraind/pm-ops at eba7d5262fd75e67afce0caad29dae7dc7dfbaeb; 300 unchanged source files; 104 training (68 Issue / 36 other), 42 held-out (22 Issue / 20 other).
| Policy | Balanced reward |
|---|---|
| Either constant | 0.5000000000 |
| Frozen keyword router | 0.6545454545 |
| Candidate 1 | 0.6080315976 |
| Candidate 2 | 0.5915538072 |
| Candidate 3 | 0.5667374267 |
All three refuse. Three jobs charge 256 steps each once, collect 3,072 actions, preserve every checkpoint on resume and launch no new jobs. Execution uses a plain tracker and a PATH without Git. See the fresh and historical receipt and objective/cycle report. These are conditional validation results, not an independent final-test, forecasting or transfer win.
The documented installed cycle is:
pm rl corpus build --from-tracker source/.agents/pm --file node_modules/pm-rl/examples/loop-intake-objective.json --output sealed.json
pm rl loop run intake-cycle --file sealed.json --approval corpus-approval --json
pm rl loop resume intake-cycle --approval corpus-approval --json
pm rl loop status intake-cycle --json
A separately declared Decision bounds promotions and resources. Run executes collect → train → evaluate → gate → promote-or-refuse → record on Generation/process/policy-card items and the terminal seed comment. Only the retained promoted incumbent collects the next generation; refused proposals never do. Resume uses the original programme and allowances.
Tracker health is unblocked. This branch merges repaired PR #95. The epic history extends main exactly. Because the baseline item is absent on main, its healthy PR #95 item/history were retained as the branch base, then twelve objective-specific comments, three files, two docs, both complete test links and the acceptance criterion were re-recorded with pinned pm commands. Both prefix checks pass. Only this merge's stale clone-local receipt was quarantined, as recommended by the CLI; normal reconciliation had written no audit history. Normal pinned strict health reports ok:true, with the unchanged main provenance advisory. No main history, force, history-repair or re-anchor operation was used. Runtime source, tests, thresholds and dependency pins are unchanged. All complete current-head variants now pass. Each completed log was independently downloaded and checked: 1,023 tests per runtime, all 54 authored sources at unchanged four-metric 100% thresholds, 408 documented declarations, plus successful health, lint, duplication, identity, audit, attestation, packaging and changelog checks. CodeQL passes. The gate/objective/receipt, paired randomized properties, foreign-record/owner interleavings and crash/recovery suites meet this infrastructure acceptance. Zero real-data promotions remain the honest measured result. Earlier health-failing runs remain historical failures.
PM: pm-rl-baseline, parent pm-rl-apvf; existing health follow-up pm-rl-9uz4. Claim released, items unclosed. Commits: 8105fcb (merge/source/evidence), ad27b2d (stronger lower-bound properties and CI receipt). Health merge commit: f35df8f. Ready for review after full CI and acceptance verification. No PR merge or release.