Skip to content

Release 0.96.0 - #289

Merged
muellerberndt merged 103 commits into
mainfrom
release-0.96
Nov 10, 2026
Merged

muellerberndt merged 103 commits into
mainfrom
release-0.96

Conversation

@muellerberndt

@muellerberndt muellerberndt commented Nov 9, 2026 •

Copy link
Copy Markdown
Owner

Release 0.96.0. release-0.96 holds the six lanes of the milestone merged on a513b74, the version at 0.96.0, the CHANGELOG's ## 0.96.0 — 2026-11-11 and the lanes' Unreleased entries consolidated into it. The coordinator merges, tags and publishes after the owner has read the release notes.

Merged lanes

Lane Final head What it holds
lane-096-device 05b8f98 cadence.Lives: many lives of the default composition stepped together on a device; an outcome's checks in one read on torch; the calibration of a CUDA card the table has not read; the ledger of a moment's crossings (#274)
lane-096-cpu 637f72f opt-in learning_compiled_moment: a greedy act, a lesson's judgment and a taught lesson each in one compiled call on the CPU (#282)
lane-096-retention 5cb1909 opt-in memory_fade: place records nobody uses fade, slower the deeper their use; a fading store's brain saves checkpoint format cadence-brain/3; where the composition's falls come from (#253, #280)
lane-096-attention 3718401 opt-in recall_cortex_norm, recall_gain_after and recall_gain_next; the heads, vocabulary, crossing and held-token instruments (#269, #266, #267, #272)
lane-096-simplify e114306 recall_copy removed; a synapse_rate of zero holds the synapse, its optimizer moments and its neuron's bias; the sequence battery's composed arm (#281)
lane-096-research 20b943c the lesson-step, goal-route and exposure-parity instruments of the grammar chamber, each with its declared protocol; no source change (#257, #258, #270)

Commits of the integration

  • ed30e3e: the release. Version 0.96.0 in pyproject.toml, cadence.__version__, the install pins and the documentation links; the CHANGELOG section with one summary and the sections new, changed and removed, fixes, instruments and measured negatives; and the rate-zero rule stated as measured where the CHANGELOG, docs/settling.md, docs/tune.md and Learner describe synapse_rate: a reciprocal pair holds where both directions are at rate zero, and one direction alone takes half its partner's step.
  • ebf2b12: the one-call act returns its action without a cast, which strict mypy refuses under NumPy 2.4's stubs (CI's Python 3.11 job). No value changes.
  • 62052c1: Lives on a torch device keep the optimizer moments of a synapse at rate zero, as the lone brain's learner does; tests/test_rate_zero.py holds the case.
  • 65fa89b: the device benchmarks' test loads its life module by path under its own name, since benchmarks/vocabulary holds a life module too and one pytest process imports both.
  • 9bf5abe: Lives refuse a recall memory with the cortex at unit norm by that name, and the backends guide's table of host-keeping options lists memory_fade and recall_cortex_norm.
  • fd02a02, a8207c7: the compiled act carries the cortex at unit norm under recall_cortex_norm (the lane carried the fix into its later write helper as well), and three typing sites of 4ecc474.
  • 1df37f1, e574fb1: the API reference's Recall signature without copy; AGENTS.md names the second goal epic by its title (Goal: saying sentences formed in the brain #173).

Merge conflicts and their resolution

  • CHANGELOG.md: every lane's section kept in merge order, then consolidated in ed30e3e.
  • benchmarks/sequence/battery.py: the composed arm (simplify) and the default arm (research) both kept.
  • src/cadence/stream.py: the three attention options joined to Recall.OPTIONS and CONSTRUCTION_OPTIONS without copy.
  • docs/memory.md: the released-gains section placed before "Declared tokens".
  • The compiled moment's later heads were fast-forwards of this branch; the lane merged the branch into itself and resolved generic.py and _moment.py there.

What changes for a caller

  • recall_copy is refused at compose and retune with one sentence that names recall_gain, and a saved memory with the pathway is refused by name. cadence 0.95.2 runs it.
  • A learner with a rate of exactly zero on some synapse keeps that synapse's optimizer moments and the held neurons' biases where 0.95.2 moved them. No test, benchmark or composed brain sets a rate of zero.
  • A brain saved with memory_fade writes the checkpoint format cadence-brain/3, which earlier releases refuse; every other brain's checkpoint is unchanged.
  • A CUDA card the default backend's table has not read is timed once per machine; CADENCE_CALIBRATE=0 keeps the margin of twice the work.
  • Every new option is off at its founder: memory_fade=0.0, recall_cortex_norm=False, recall_gain_after=0, recall_gain_next=0.0, learning_compiled_moment=False. cadence.Lives is a new class.

Checks

At 637f72f, the last code head (ed30e3e changes the version string, the CHANGELOG and documentation text):

Check Where Result
ruff check src tests, mypy Apple M-series (Python 3.13.7, NumPy 2.5.4) and a Python 3.11 environment with NumPy 2.4.6 as CI's 3.11 job clean
Recorded-lives gate (CADENCE_FUSED=0: test_learned_code, test_observation_code, test_recall_memory, test_reset_arousal) Apple M-series 206 passed
Opt-out identity against main on backend="cpu" Apple M-series 23 of 23 lives identical on the NumPy solver and on the compiled kernels
tests/test_compiled_moment.py, tests/test_recall_cortex_norm.py, tests/test_documentation.py Apple M-series 67 passed
Full suite, the lane's own run Linux 4,088 passed, 272 skipped, 1 xfailed

At ed30e3e on the Apple machine: ruff and mypy clean in both environments, tests/test_documentation.py, tests/test_packaging.py, tests/test_public_configuration.py, tests/test_api_patch_audit.py, tests/test_rate_zero.py and tests/test_memory_fade.py pass (201 passed), and cadence.__version__ reads 0.96.0.

Earlier heads of this branch: 8eb5426, the Mac full suite in two processes (2,969 passed, 236 skipped, 1 xfailed; the benchmark paths 1,138 passed, 7 skipped); ebf2b12, the gate, the identity (23 of 23), MLX (760 passed, 8 skipped) and the cross-lane lives (every act equal, parameters within 2e-10); feb9965, the one-process CI-style suite on Linux (4,060 passed). CI is green on every head it ran to completion; one run lost two matrix jobs to a GitHub Actions incident and passed in full on a rerun.

The identity lives are 23 compositions that name none of the new options (the default, a wide association, two regions, an image, two slots, a fixed and a learned code, attention=True, two heads, recall=False, recall_founder=True, arousal, maturity, memory_choice, rehearsal, recall_gain with tokens, an apical compartment at teaching="deep", observers, four streams). Each lives 40 steps with rewards, teachers and episode ends, 12 lessons, a save, a reload and 10 further steps, and the lives with arousal a second life of live and wait. Compared with main: every act, every checkpoint array, the description and the checkpoint after the reload. recall_copy is the exception: compose and retune refuse it with the CHANGELOG's sentence.

🤖 Generated with Claude Code

muellerberndt and others added 30 commits November 9, 2026 19:55
The arm composed takes Brain.compose's own composition and teaching point,
so a one-out of a composed setting reads on the battery by --settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The indirect-object chamber, the head-function panel, causality by
silencing and erasure, and the matched controls, on the library's
address lesson.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… an emulation (#269)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y term (#266)

Words by class at any size and words by pieces, the matched controls, one
hearing, and a split of the read's logits by source at every word whose
content a heard moment holds; the cortex the maps read as an emulation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s neuron's bias

A synapse at rate zero keeps its optimizer moments as they are, and a neuron
whose every inbound synapse steps at zero holds its bias and the bias's
moments, on the CPU, torch and MLX. Learner.held() names both. Learners
without a zero rate keep their bits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A lesson's step scaled by the running share of lesson rows answered wrong,
to a power; one number, no count of lessons. The default arm on the grammar
chamber and the sequence battery, and the lesson-step instrument with its
declared two-stage protocol.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… site

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…atched controls (#267)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Passes of the chamber's 4,000 batches in the transformer's epoch order,
with and without the rehearsal, every first-grammar panel read per pass,
compute counted beside the offline control's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n and the place store's read in compiled passes

The same equations as the ordinary path, other bits; off by default, so a brain
without it keeps every bit. One head of one event per moment on the host; any
other read takes the ordinary path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two branches from a start, one reaching the goal the meaning names; the first
hop is said before the goal. Word by word, a sliding window of three, and the
matched LSTM and transformer on held-out start-goal pairs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lesson used (#272)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
recall_copy is refused at compose and retune, and a saved memory with the
pathway is refused by name (cadence 0.95.2 runs it): recall_gain with
recall_tokens is the learned path from a read to its token's action.
recall_tokens stays as a declaration that adds no synapse. The copy-tokens
instrument retires to its receipt, read by its archived checker, and the
battery's heads_copy arm leaves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ntrast and the recall write

Under learning_compiled_moment the route contrast of the carried gains and the
lesson's per-synapse contrast run as compiled passes (the same equations, other
bits), and the recall memory's write goes into the rooms behind its slots in one
compiled pass with the ordinary write's bits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On the composition's battery the share cost copying, induction and n-back
(#258), and wide brains step at their width by default. The name is refused at
compose and retune, and a checkpoint saved with the share is refused by name
(cadence 0.95.2 runs it). Learner.update takes no share; every lesson without
the share keeps its bits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…orm (#269)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… a support (#267)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The step that follows the running error settles no more lives than the
default composition (C1 4 of 6 and 3 of 6) and costs held-out clauses by
.10 to .13 (C2); the battery holds (C3). The library returns to main's
source; the instrument keeps the control arm and the gates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new brain reads the contextual-choice chamber at learned_code=units,
recall_window=2, recall_address=0.0, recall_temperature=0.1 as the recipe did
(four founders, 32 of 32, every gate; contextual_choice.py --composition).
attention is refused at compose and retune with those settings; a brain saved
with the marker loads with the settings it saved. The contextual-choice and
held-heads instruments name the settings and build the brains they built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…; device benchmarks

On torch, where the critic rests on the device, the dopamine is made there from the critic's value
and the outcome's checks (the dopamine's, the critic's, the recall memory's reward step and the
update's) come to the host in one read before anything is installed. On MLX the critic's and the
memory's checks are made in the update's launch. A CUDA card the default backend's table has not
read is calibrated once and cached. The device ledger, the lives and the whole-life benchmarks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…281)

A one-out of the composition reads the next port as the successor induction,
copying, two hops and the grammar chamber's paths need (each at chance
without it). recall_next=False is refused at compose and by Brain(connectome),
and a saved memory without the next port is refused by name (cadence 0.95.2
runs it). The ordered recall instrument's reward_recipe arm and the
recorded-lives parity case without the next port leave with it. The memory and
tuning guides drop the copy pathway, the share, attention and the next-less
memory; the CHANGELOG holds them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
muellerberndt and others added 26 commits November 9, 2026 23:42
… its parts and its panels

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflict: CHANGELOG.md (every lane's Unreleased section kept in merge order).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The spans read their ranges from the parts that are slices, a lesson's batch is read where its
labels or targets are made, and the greedy choice's clear action has its own name. No value
changes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ecall_cortex_norm (#282, #269)

The compiled act writes the moment in its own pass in place of Recall.witness, which is where
recall_cortex_norm sets the carried cortex to unit norm. With both options named the carried
cortex had norms of 0.85 to 2.25 on a life of 30 moments and the efficacies parted from the
ordinary path's by 4e-3; they agree to 1e-14 with the norm taken in the compiled act as well.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… are kept

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…d an M4, the changelog

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…na reading (#253)

A row whose value is wholly masked writes nothing and deepened its records;
the depth takes the writing rows' unit cues. Lives without such rows keep
their bits. The memory guide and the changelog name the arena's reading.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…d call

Under learning_compiled_moment a greedy act runs its read, free solve, choice, working
trace step and write in one compiled call, and a surprise lesson its read and judging
solve in one; each part is the kernel the passes in turn call, so the bits are the
option's (the test lives the same moments through the general path, the shortcuts and
the one call). A moment the call does not take whole (a row that needs the rescue, a
drive that is not finite, a stream's first moment) changes nothing and runs as before.
The read's dot product and position term are written in place, without a helper's
reference counts per slot. Type fixes for mypy in the spans and the lesson's batch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ts records; the arena reading named

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…cks in one read, the calibration of an unread CUDA card, Lives

Conflict: CHANGELOG.md (every lane's Unreleased section kept in merge order).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…wn name (#274)

benchmarks/vocabulary holds a life module too, and one pytest process imports both: after the
vocabulary chamber's tests the device test read the vocabulary's module and failed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…device (#274, #281)

Learner.synapse_rate of zero holds the synapse, its moments and its neuron's bias on the CPU,
torch and MLX. The lives' own adaptive step held the synapse and the bias and kept adding the
contrast to the moments: over three lessons and rewards a held synapse's velocity read 2.9e-2
and a held bias's 6.3e-2. It keeps them as the lone brain's learner does.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…#274, #253, #269)

Lives refuse a recall memory with the cortex at unit norm by that name, and the guide's table of
options that keep a moment's memories on the host lists memory_fade and recall_cortex_norm.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…rain/3 (#253)

A brain saved with memory_fade loaded on 0.95.2 with the fade off. It takes a
format name of its own, as maturity's does: cadence-brain/3 for any brain
whose store fades, with a maturity or without, which 0.95.2 and earlier
refuse as an unsupported format. Brain.load reads /1, /2 and /3 and refuses a
fading store under another name and a /3 file whose store does not fade. A
brain without the setting keeps its format, member names and bytes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…checkpoint format cadence-brain/3

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…no row without the learner's step

An act that begins its streams (no slot yet, a trace of another batch) runs in the one
compiled call: the read is silence, and the general write begins the streams. A lesson
whose judged answer matches every label takes the learner's lesson of no row without
the step's second validation, and reports from one record. The packed maps and the
spans are found by identity without a generator. cost.py warms every kernel a pass can
call before its clock (the general path's and the rescue's among them), and the address
lesson's slots are one kind of array, so its kernel compiles once.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ne compiled call

Under learning_compiled_moment a finite lesson that teaches a row runs its free phase,
the two nudged phases and their residual checks in one call of the kernels
settle_batch and residual launch, with the states, what they keep and the reports the
passes in turn make (the test lives the same moments through each path, to the bit).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…rtex at unit norm

Conflicts: _moment.after_spans (the lane's identity cache, typed), the generic import
list (both names kept). The compiled write's helper (written) takes recall_cortex_norm
as Recall.witness and act_after do. The read's key holds the working trace by value,
since a trace's rows begin again in place.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
With recall_cortex_norm, memory_fade, maturity, the delayed gains or a synapse rate of
zero named, a life of lessons, greedy acts, sampled moments and outcomes keeps its bits
through the general path, the shortcuts and the one-call paths, and agrees with the
ordinary path to rounding.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…on a quiet core and their parts

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ated with the chamber's loop

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…282)

On Python 3.11 the type checker reads NumPy 2.4's stubs, where the cast is redundant and strict
mypy refuses it; on NumPy 2.5's it is not. The action has a declared type in its place. No value
changes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…s to its written efficacies

Under learning_compiled_moment a lesson by surprise that teaches a row runs, after its
judgment, as one compiled call: the taught rows' free phase, nudged phases and checks, the
contrast, the optimizer's moments and steps, the tied and bounded efficacies with their
weights and blocks, the address lesson through the new weights and the carried routes'
contrasts. Each part is the kernel the passes in turn launch, in their order, so the bits
are the option's; Python stores what the call returns. The lesson's contrast is one
compiled pass in every path of the option (the block products through the BLAS Numba
calls). A learner with frozen or tied synapses or per-synapse rates, a route off the host
and an update that is refused take the passes in turn, with their errors.

Tests: the same lives through four modes (general path, shortcuts, one-call act and
judgment, one-call lesson) to the bit, beside every other 0.96 option, at eight further
settings of the learner and the wiring, and for a refused update.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…fter a lesson

The taught lesson's call returns the stepped maps packed, without the grid's columns and
each part apart, so the memory takes them as they are and the next read's packed maps are
the call's where every map was stepped; the carried gains' step runs in the call (two
routes and more; with one, NumPy's own sum of the column steps them); the update's finite
checks vectorize. A judgment whose lesson teaches keeps neither its read nor its solve for
the act that follows, which makes its own. An act after a lesson that taught nothing
writes its moment in the choice's pass: it takes the read's own observations, which equal
the act's to the bit, where it took the general write before.

The same bits in less time, for every brain: a public operation enters and leaves the
recall memory's scope without a context manager, a lesson without a learned code keeps its
moment without one, one slot's labels are checked in two reductions, and the compiled
moment's hot paths hold their imports at the module.

Tests: lessons of nine and 24 taught rows, the packed maps a lesson in one call leaves.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…, its seconds and parts

The tables of one session on a quiet Xeon core (three founders, default, compiled,
transformer; founder 0's pass by part), the Python around an act's and a lesson's call,
and the share of the default's seconds beside the ratio to the transformer.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…that fade, the attention opt-ins (#274, #282, #253, #269, #281)

The version is 0.96.0 in the package, the install pins and the documentation links. The
CHANGELOG's Unreleased entries are one dated section, and the rate-zero rule states the measured
behaviour of a reciprocal pair where the CHANGELOG, the guides and the learner describe
synapse_rate: both directions at zero hold the pair; one alone takes half its partner's step.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@muellerberndt muellerberndt changed the title Release 0.96.0 (draft) Release 0.96.0 Nov 9, 2026
@muellerberndt
muellerberndt marked this pull request as ready for review November 9, 2026 20:29
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@muellerberndt
muellerberndt merged commit fca3397 into main Nov 10, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant