Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
f91d467
Run gated recursive training on sealed non-git tracker corpora
unbraind Oct 21, 2026
8ba0372
Declare source-mode startup capacity for the non-git acceptance fixture
unbraind Oct 21, 2026
a36191a
Refuse incompatible corpus trainers and exercise a real broken pipe
unbraind Oct 21, 2026
abaca91
Record verified recursive-run gates and release tracker claims
unbraind Oct 21, 2026
f2b0ce4
Require item-paired baseline wins for recursive tracker proposals
unbraind Oct 21, 2026
a1bf373
Cache held-out action probabilities and bound synthetic acceptance work
unbraind Oct 21, 2026
6f401c6
Exercise acceptance dispatch through its real script entry
unbraind Oct 21, 2026
361a325
Verify original refusal stops and bounded Git-free replay
unbraind Oct 21, 2026
57612f0
Sort bootstrap replicates natively without changing intervals
unbraind Oct 21, 2026
56e2854
Refuse unsafe corpus output before source reads
unbraind Oct 21, 2026
f885a4e
Include item evaluation in the isolated Compose trainer fixture
unbraind Oct 21, 2026
4f64e31
Merge branch 'feat/recursive-training-generations' of https://github.…
unbraind Oct 21, 2026
3c9b357
Record the refused baseline frontier and verified validation receipts
unbraind Oct 21, 2026
07e12fd
Merge main corpus fixes into the draft baseline feature
unbraind Oct 22, 2026
04f8d7f
Record complete release gates for the baseline main update
unbraind Oct 22, 2026
7c0b00d
Merge main and finish resumed paired-baseline refusal receipts
unbraind Oct 25, 2026
c6df8af
Record baseline gate proofs and the current CI health blocker
unbraind Oct 25, 2026
e06f8ab
Test paired lower bounds with noisy crossing score vectors
unbraind Oct 25, 2026
2ecb61f
Restore main tracker lineage and re-record baseline gate evidence
unbraind Oct 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 24 additions & 5 deletions .agents/pm/epics/pm-rl-apvf.toon
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ status: open
priority: 1
tags[3]: execution,recursive-training,roadmap
created_at: "2026-09-07T21:21:56.236Z"
updated_at: "2026-10-24T21:47:38.159Z"
updated_at: "2026-10-25T02:10:05.514Z"
author: codex-pm-ecosystem
acceptance_criteria: Two real training generations produce changed checkpoints and collect with the promoted successor; a bounded LLM adapter demonstrates parameter updates; two controllers launch a job once; crash and cancellation drills preserve artifacts and budget integrity; contamination and invalid checkpoints stop promotion; every authored source passes exact four-metric coverage and documented-surface gates
comments[40]{created_at,author,text}:
comments[41]{created_at,author,text}:
"2026-09-07T23:06:06.595Z",codex-pm-native,"Execution foundation is implemented under child pm-rl-s44k: a real bounded TypeScript contextual-bandit policy-gradient adapter supplies promoted checkpoints to successor collection. RECURSIVE_TRAINING.md distinguishes this numerical adapter from the remaining SDK-persisted job controller, atomic approved-budget reservations, owner leases, crash/cancellation recovery, Compose isolation and LLM parameter-update acceptance. The epic remains open. Repeated evaluation is adaptive validation, so a separate final benchmark is still required."
"2026-09-10T22:02:44.990Z",pi-agent,"Promotion gate design (closing the recursive self-improvement loop):\n\nPROPERTY: A candidate policy is promoted ONLY when its held-out expected reward exceeds the incumbent's by at least the effect threshold, with confidence >= 1-alpha, using at least minSamples evaluation episodes, AND the held-out evaluation set is not reachable from the candidate's training data. The default answer is NO: absent, unreadable, self-referential, incomparable, or statistically insufficient evidence promotes NOTHING.\n\nDOMAIN: Pairs of bounded-reward evaluation evidence records (candidate + incumbent) carrying a finite empirical mean, a finite sample count, and declared reward bounds [lo, hi]; a confidence level in (0,1), a minimum sample count >= 1, an effect threshold >= 0; and a contamination verdict (null = isolated).\n\nSTATISTICAL CRITERION: Hoeffding inequality for bounded random variables. Distribution-free, valid for any bounded objective a caller pins a range to, conservative for small samples (the property a fail-closed gate wants). epsilon = (hi - lo) * sqrt(ln(2/alpha)/(2n)). Promote iff candidate lower confidence bound exceeds incumbent upper confidence bound by the effect threshold (maximize; inverted for minimize). Chosen over a distribution-assuming bound because RL reward distributions are unknown and a single lucky sample must not promote; Hoeffding needs no distribution assumption and is loosest exactly when samples are few.\n\nWHAT IT BUYS: with probability >= 1-alpha, a promoted candidate's TRUE expected reward exceeds the incumbent's by at least the effect threshold. A single lucky sample, a regression, a contaminated held-out set, and a sub-threshold improvement are all refused.\n\nWHAT IT DOES NOT BUY: protection against a held-out set semantically duplicated under a different name (the contamination gate's job, consumed not rebuilt); non-stationary environments; unbiased estimates after repeated selection (adaptive validation, not a final benchmark); reward hacking on the held-out set itself.\n\nHELD-OUT ISOLATION IS STRUCTURAL: the bandit adapter validates training and evaluation example identities disjoint before any gradient, so the held-out set is unreachable from the training loop by construction; the gate's contamination verdict is null. The persisted promoteGeneration flow already enforces the same via findContaminationPath over provenance edges.\n\nLINEAGE: every promotion and every refusal is recorded. In the recursive loop (bandit adapter) each generation receipt carries promoted + refusalReason + the sampled held-out means; the generations array is the auditable chain from generation 0 to N. Transitive invalidation uses the existing buildLineageAncestry forward propagation and invalidate.ts (not rebuilt).\n\nREMAINING ON THIS EPIC: the durable execution controller (Docker Compose trainer, atomic budget reservations, owner leases, crash/cancellation recovery, LLM parameter-update acceptance) and wiring the statistical gate into the persisted rl generation promote command's scores contract remain separate slices. This delivery closes the recursive self-improvement loop's promotion decision; it does not deliver the full durable controller."
"2026-09-12T23:19:05.412Z",pi-agent,"Audit 2026-09-13: EXISTS — the bounded TypeScript contextual-bandit adapter is implemented and merged (bandit.ts, PR #33, pm-rl-s44k now closed); the fail-closed statistically bounded promotion gate is implemented and merged (promotion.ts, PR #35, pm-rl-gr7j closed); contamination and invalid checkpoints stop promotion (promotion.test.ts); 323 tests pass with 100/100/100/100 coverage across 20 source files. REMAINS — the durable execution controller is not implemented: no Docker Compose trainer adapter, no atomic budget reservations, no owner leases, no crash/cancellation recovery drills; a bounded LLM adapter demonstrating parameter updates is not implemented (the bandit is a numerical adapter, not an LLM trainer); two controllers launching a job once is not demonstrated. These are the remaining slices named in the item description and the 2026-09-10 pi-agent comment."
Expand Down Expand Up @@ -50,7 +50,8 @@ comments[40]{created_at,author,text}:
"2026-10-22T10:31:49.788Z",codex-agent,"Complete CI verified at 31b9f7b996c9192c9230: https://github.com/unbraind/pm-rl/actions/runs/39761523871 . Independently downloaded all three completed job logs: npm on Node 22, npm on Node 26, and Bun on Node 26 each pass 690/690, zero fail/skip/cancel/todo, 100/100/100/100 coverage over 48 sources. Strict tracker health, unscoped lint, zero duplication, 340 documented declarations, attestation, production audit, packing, changelog, and Bun graph installation pass; CodeQL passes. The local duplicate full gates were interrupted under host load, not counted as passes. This receipt update changes tracker evidence only; executable source and tests remain identical. Claim is released; leave the epic in progress. No new pm CLI/SDK defect found."
"2026-10-22T10:32:17.818Z",codex-agent,"Receipt correction: the complete verified CI head is 31b9f7b5520eef7b1a55cb7f1863d9692ad81b38. The extra characters after the valid 31b9f7b prefix in the preceding comment were a transcription error. CI run 39761523871 and all recorded counts are verified against this exact head."
"2026-10-24T21:47:38.159Z",codex-agent,"Returned to open in the 2026-10-24 sweep: Open PR https://github.com/unbraind/pm-rl/pull/95 carries remaining recursive-promotion work; multiple narrower merged implementations do not establish all execution, contamination, crash and resource criteria in one verified delivery. No active agent is established."
files[16]:
"2026-10-25T02:09:56.051Z",codex-agent,"PR 95 promotion-gate infrastructure remains tracked by child pm-rl-baseline. Owner-authorized main-based history restoration replaces this branch divergent epic projection with the exact main item/history, then re-records branch intent through the pinned CLI. The bounded title-vector candidate must beat the incumbent and both constants with item-paired bootstrap lower effects above 0.01 plus all original gates. Fresh public corpus: 105 training, 41 held-out, constant 0.8780487805, candidate rewards 0.8713980699 / 0.8645003749 / 0.8534392510, zero promotions. Resume preserves all checkpoints and charges. These are infrastructure and conditional validation results, not a claimed self-improvement win."
files[18]:
- path: bandit.ts
scope: project
- path: corpus.ts
Expand All @@ -59,6 +60,8 @@ files[16]:
scope: project
- path: index.ts
scope: project
- path: item-evaluation.ts
scope: project
- path: loop.ts
scope: project
- path: package.json
Expand All @@ -73,6 +76,8 @@ files[16]:
scope: project
- path: test/bandit.test.ts
scope: project
- path: test/baseline.test.ts
scope: project
- path: test/corpus.test.ts
scope: project
note: Snapshot regression and complete publication snapshots
Expand All @@ -86,7 +91,7 @@ files[16]:
scope: project
- path: test/promotion.test.ts
scope: project
tests[7]:
tests[8]:
- command: npm test
path: test/promotion.test.ts
scope: project
Expand Down Expand Up @@ -153,7 +158,21 @@ tests[7]:
created_at: "2026-10-22T09:35:47.428Z"
source_kind: local_mutation
source_ref: feat/recursive-training-generations
docs[4]:
- command: "node --test --test-name-pattern=\"paired gate property|vector capacity|constant\" test/baseline.test.ts"
scope: project
timeout_seconds: 600
pm_context_mode: none
workspace_context_mode: snapshot
provenance:
author: codex-agent
created_at: "2026-10-25T02:10:02.481Z"
source_kind: local_mutation
source_ref: feat/rsi-beats-baseline
docs[6]:
- path: docs/baseline-frontier-evidence.json
scope: project
- path: docs/baseline-frontier.md
scope: project
- path: docs/process-trainer.md
scope: project
- path: docs/tracker-loop-evidence.json
Expand Down
Loading
Loading