Refuse intake policy promotion without paired wins over every baseline

Merged
UN
7d ago
+2881-45

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.

AcceptanceEvidenceResult
Stratified paired gate and equality96 seeded arbitrary/noisy crossing-vector cases with unequal class sizes; equality with each of four baselines always refusesfocused objective checks 5/5 pass
Objective and process replayExisting metric/heuristic, real SDK/external process and Git-free PATH regressionsremaining objective checks 3/3 pass
Preserve newer main corpus behaviorPublication conflicts/inside-source protection and English/Danish snapshot regression3/3 pass
Behavioral revertReplace lower-bound predicates with point means, or disable only heuristic refusal: randomized property fails 0/1 each, exit 1; restored focused command passes 5/5recorded in pm
Pinned tracker-linked executionpm test --run --only-last --progress, snapshot workspace, PM context none5/5 pass
Bounded cycle recoveryIncludes #95 refusal-lifecycle fix and its recorded 8/8 refusal plus 5/5 successful vector boundary evidenceincluded in the completed current-head full release gates
Static checksnpm run typecheck, npm run lint, npm run build, regenerated changelog checkpass
Complete npm/Bun release gatesCurrent full-gate CIall 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).

PolicyBalanced reward
Either constant0.5000000000
Frozen keyword router0.6545454545
Candidate 10.6080315976
Candidate 20.5915538072
Candidate 30.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.