feat(cognition): autonomic consolidation tick — the being consolidates what she's taught, while she sleeps (#116) - #2028
Open
joelteply wants to merge 1 commit into
Open
Conversation
…s what she's taught, WHILE SHE SLEEPS (#116) The gold: the being-loop's received axis goes AUTONOMIC. A persona now consolidates the lessons other agents taught her (memory/share #2025) into her genome on her own cadence — no operator command, no cu invocation. She learns from everything she's told, while idle. Built as a new PASS in the existing dream/consolidation BrainRegion (concurrency STOP-doc: NOT a parallel manager — the same governor-ticked region, the same quiet-day seam try_review_only already occupies). On a quiet day (nothing fresh to distill), consolidate() now prefers try_consolidate_received, else belief-hygiene review, else sleep — at most ONE background pass per tick via the SHARED in_flight guard (never a dream AND a consolidation for one persona at once). Discipline, all mirrored from try_review_only + the concurrency guide: - Cooldown rest-gate (CONSOLIDATE_RECEIVED_COOLDOWN_MS = 30min): training is expensive — trickle, never storm the serving lane. Pure consolidate_cooldown_elapsed, unit-tested. - Lane courtesy: never fire training into a wedged/absent lane (same current_serving() gate the dream pass already applies). base_model = the live served model. - Idempotence: the per-persona watermark feeds memory/consolidate's since_timestamp and advances from the receipt's latest_consolidated_ts — a lesson is never re-trained. - Dispatches memory/consolidate AS the persona through the SAME wired executor training_producer uses (LateBound, installed once at boot beside it). Best-effort spawn; a failed/deferred consolidation never blocks the region's tick. So the full received axis is now end to end AND self-driving: BigMama learns → memory/share → [corpus] → dream tick (quiet day) → memory/consolidate → training-trigger → gym-gated evalSet → job-create → train → lift-gate #59 → page-in. The idle-loop dysfunction (personas re-announcing done work, unable to learn from their own experience) is exactly what a self-consolidating being grows past. Compiles clean; consolidate_cooldown_gates_the_autonomic_trickle green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
joelteply
added a commit
that referenced
this pull request
Jul 26, 2026
…m the turns it stalled on (#2033) Completes the third efferent organ of the being-loop. The received axis (expansion_examples) teaches deliberately-authored true knowledge directly; the LIVED axis was deferred with a named reason — a salient lived turn is a FAILURE with no known-correct answer, so echoing her stalled answer would train the failure, and with no `test` it can't be remediated either. This builds the path expansion_examples pointed at: a teacher RE-ANSWERS the stimulus she stalled on, and that strong answer becomes the SFT pair. Safe on untestable material for the same reason the received axis is — validated per-CONSOLIDATION by whole-being benchmark lift (#59), never per-trajectory. Structured exactly like remediation (the outlier discipline — one seam, two organs): - teach.rs::synthesize_lived_expansion — the inference core, mirroring synthesize_remediation's lane discipline (readiness gate → dedicated bare-base lane → degrade-loud to the live lane) but with NO grader loop: one teacher generation per stimulus. Two honesty guards: empty answers dropped (never ship a blank lesson), and the teacher's system turn shapes generation but is NOT trained in — the pair is the bare {question → answer}, so the being learns the class of question, not a scaffold. - curriculum.rs::LivedExpansionSynthesizer — the selection wrapper, sibling of RemediationSynthesizer: a deterministic detector-driven select() (unit-testable with no inference — only SALIENT lived failures' stimuli; a clean turn is never re-taught) + an async synthesize() that resolves the teacher and calls the teach.rs core. Returns bare SFT {messages} (like expansion_examples), NOT a RemediationCorpus — the differing type is the honest signal these are two distinct organs, not one behind a fake corpus. Organ + tests only; wiring the lived branch into the auto-firing consolidation driver (alongside the received branch) is a separate reviewable step, like #2028. Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.
The gold
The being-loop's received axis goes autonomic. A persona now consolidates the lessons other agents taught her (
memory/share#2025) into her genome on her own cadence — no operator command. She learns from everything she's told, while idle.How (concurrency STOP-doc respected)
A new pass in the existing dream/consolidation
BrainRegion— not a parallel manager. The same governor-ticked region, the same quiet-day seamtry_review_onlyalready occupies. On a quiet dayconsolidate()preferstry_consolidate_received, else belief-hygiene review, else sleep — at most one background pass per tick via the sharedin_flightguard (never a dream and a consolidation for one persona at once).Every discipline mirrored from
try_review_only+ the concurrency guide:CONSOLIDATE_RECEIVED_COOLDOWN_MS= 30min) — training is expensive; trickle, never storm. Pureconsolidate_cooldown_elapsed, unit-tested.current_serving()gate the dream pass applies);base_model= the live served model.memory/consolidate'ssince_timestamp, advanced from the receipt — a lesson is never re-trained.memory/consolidateas the persona through the same wired executortraining_produceruses (LateBound, installed once at boot beside it). Best-effort spawn; never blocks the tick.The full received axis, now self-driving
The idle-loop dysfunction (personas re-announcing done work, unable to learn from their own experience) is exactly what a self-consolidating being grows past.
Tests
consolidate_cooldown_gates_the_autonomic_trickle— first pass always allowed; refused until cooldown elapses. Compiles clean against canary.🤖 Generated with Claude Code