Skip to content

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
canaryfrom
feat/autonomic-consolidation-tick
Open

feat(cognition): autonomic consolidation tick — the being consolidates what she's taught, while she sleeps (#116)#2028
joelteply wants to merge 1 commit into
canaryfrom
feat/autonomic-consolidation-tick

Conversation

@joelteply

Copy link
Copy Markdown
Contributor

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 seam try_review_only already occupies. On a quiet day consolidate() 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).

Every discipline mirrored from try_review_only + the concurrency guide:

  • Cooldown (CONSOLIDATE_RECEIVED_COOLDOWN_MS = 30min) — training is expensive; trickle, never storm. Pure consolidate_cooldown_elapsed, unit-tested.
  • Lane courtesy — never fire training into a wedged/absent lane (same current_serving() gate the dream pass applies); base_model = the live served model.
  • Idempotence — the per-persona watermark feeds memory/consolidate's since_timestamp, advanced from the receipt — 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; never blocks the tick.

The full received axis, now 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.

Tests

consolidate_cooldown_gates_the_autonomic_trickle — first pass always allowed; refused until cooldown elapses. Compiles clean against canary.

🤖 Generated with Claude Code

…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant