Repository navigation
Releases: muellerberndt/cadence
Release list
Cadence 0.84.3: checkpoint loading fix
Cadence 0.84.3 fixes the loading of a checkpoint saved between a lesson and the next act, and documents two behaviours. Every brain acts, learns and saves as in 0.84.2; the fix changes which checkpoints load.
- A brain saved between
lessonand its next act loads and continues as the saved brain would. The lesson keeps the stream's free state and clears the drive that state was settled for, so that the next act settles afresh under the taught parameters;loadrestores the free state without a drive, as the lesson left it. Before,loadrefused the checkpoint withmissing saved state: actor/_drive, and so it refused a brain saved after a calmliveanswer was taught before its outcome (also duringwait), or afterstep(..., teacher=...)taught and its act refused.savewrites what it wrote before, so such a checkpoint written by an earlier release loads too. A saved drive is still checked against the free state, and a sampled action awaiting its outcome still needs the drive it was chosen on. Brain.step, the continuous-interaction guide and the learning guide say where the reward of a demonstrated action belongs: the reward given tostepis credited to the actionstepissued, so where a teacher's or caregiver's action ran in its place, replace the issued action withact(observations, greedy=True), which learns nothing from it, and teach the shown action withlesson(observations, labels); the nextstepthen takes no reward. Reported tostep, the shown action's reward, or the zero of an omitted one, would credit an action that did not run. A moment in which a teacher acts can also be taught withlessonfollowed by a greedyact, in place ofstep.Brain.reset,retune(reset_arousal=True), the API reference and the composition and continuous-interaction guides say what these resets leave the arousal of an adult brain (its youth over), also afterreset(keep_memory=True): no income or error references and, at the founderneed=0, no want, so only a surprise at its own forecasts can rouse it. In a two-armed bandit whose paying arm moved, none did: adults reset this way chose the newly paying arm at none of the next 120 moments in 5 of 5 seeds, while the same adults living on without the reset, reset with their arousal state restored, or givenretune(arousal_need=0.5)beforereset(), learned it. Where the world may stop paying, restore the arousal state after the reset, give the brain a positiveneed, or let it keep living without the reset.
The API reference and the composition, continuous-interaction and learning guides describe the two behaviours where they arise (API, composition, continuous interaction, learning, changelog; #207). tests/test_save_after_lesson.py reproduces the defect and checks its fix.
- Compatibility.
- Every founder brain and its checkpoint are unchanged: every brain acts, learns and saves as in 0.84.2. A composed life at the library's defaults gives the same actions and checkpoint arrays on the 0.84.2 wheel and the 0.84.3 wheel, and each release loads and continues the other's checkpoint. At their defaults, the two wheels give identical readings in the Stone Age environment.
- The checkpoint format is unchanged. A checkpoint saved between a lesson and the next act, which 0.84.2 refused with
missing saved state: actor/_drive, now loads, also when an earlier release wrote it; a sampled action awaiting its outcome still needs its saved drive.
Install: python -m pip install cadence-net==0.84.3.
Validation:
- The complete local suite passes on the release source, with ruff clean. All nine exact-source CI jobs pass, with strict mypy in each test job.
- The wheel and the sdist reproduce the source exactly, and both pass the same focused checks when installed fresh,
tests/test_save_after_lesson.pyamong them. - The unchanged test inventories of two applications built on Cadence pass against the release source.
- At their defaults, the published 0.84.2 wheel and the 0.84.3 wheel give identical readings in the Stone Age environment: its V5 caregiver benchmark and a fully observed four-step chain.
Cadence 0.84.2: recall credit fix
Cadence 0.84.2 fixes one defect of the opt-in recall memory's reward-trained address (#205). With recall_address_reward above zero, a calm live moment that ends the episode forecasts the next value on fresh traces and restores the stream afterwards; the restore cleared the memory's read, so the first act of the new episode was sampled from that forecast without a read and kept an address eligibility of zero. The fix is opt-in behaviour; every founder brain and its checkpoint are as before.
- A calm
livemoment that ends the episode keeps its forecast's read of the recall memory through the end it commits. The first act of the new episode, sampled by a brain the outcome woke, keeps the read's address eligibility underrecall_address_rewardand its next outcome steps the address map; a greedy act keeps no eligibility; for both,brain.recall.attendeddescribes the read. Before, the read was cleared with the forecast's restore and the sampled act kept an eligibility of zero. A refused outcome leaves the read cleared. A brain without the recall memory, or whose address map does not learn by reward, acts, learns and saves as in 0.84.1.
The memory guide describes the held read beside the reward-trained address, and the API reference the two new methods (memory, API, changelog; #206). tests/test_recall_credit.py reproduces the defect and checks its fix.
The opt-in episodic memory (memory_choice=True) reads differently on 0.84.1 and 0.84.2 than on 0.84.0 on paths with rewards and punishments inside an attempt, since replay credits no decision taken before a known outcome and a greedy act the vote decided owns its outcome; both corrections redraw individual lives. Re-read on both releases at the declared protocols: the V5 and P1 gates of the 0.83 confirmation pass on both, with the corrective and natural arms identical seed for seed; the bandit and song controls reproduce the 0.83 readings exactly; the 48-founder Stone Age screen is identical in all four views for every founder and arm. The P1 grade arm, which rewards and punishes without a demonstration, reads 77.9 / 86.1 against 93.8 / 99.0 (immediate / after the teacher leaves) on the gate's five founders, one of them collapsing, and the same within its 95% interval on sixty founders. The odour nursery's returned share reads .85 against .95 on the confirmation seeds, where reverting either corrected rule alone restores .95, and both releases pass it on a second seed set. A brain with neither memory_choice nor a reward-trained recall address is unchanged by these releases.
- Compatibility.
- Every founder brain and its checkpoint are unchanged: a brain without the recall memory, or whose address map does not learn by reward, acts, learns and saves as in 0.84.1. A composed life at the library's defaults gives the same actions and checkpoint arrays on the 0.84.1 wheel and the 0.84.2 wheel, and each release loads and continues the other's checkpoint. At their defaults, the two wheels give identical readings in the Stone Age environment.
- Checkpoint formats are unchanged; every checkpoint keeps its format and loads as in 0.84.1.
Recall.reading()andRecall.hold(reading)are added: the latest read (the moment it addressed and the attention it gave the slots), and a way to hold a read taken on the state the streams are in.restore,endandresetaddress the next moment afresh, as before.
Install: python -m pip install cadence-net==0.84.2.
Validation:
- The complete local suite passes on the release source, with ruff clean. All nine exact-source CI jobs pass, with strict mypy in each test job.
- The wheel and the sdist reproduce the source exactly, and both pass the same focused checks when installed fresh,
tests/test_recall_credit.pyamong them. - The unchanged test inventories of two applications built on Cadence pass against the release source.
- At their defaults, the published 0.84.1 wheel and the 0.84.2 wheel give identical readings in the Stone Age environment: its V5 caregiver benchmark and a fully observed four-step chain.
Cadence 0.84.1: episodic memory fixes
Cadence 0.84.1 fixes four defects of the opt-in episodic memory (memory_choice). With memory_choice the episodic vote joins the readout after the settle, so the act can differ from the cortex's most active motor neuron; three paths judged by the cortex alone, and the replay path could lose a known outcome. Each fix is opt-in behaviour; every founder brain and its checkpoint are as before.
- A lesson under
learning_surprisejudges its rows by the act the brain would issue, the readout with the episodic vote, so a demonstration corrects a brain whose memory turns a right cortical answer into a wrong act, and an answer the memory makes right is no surprise and gets no lesson. livedecides whether an issued action was the brain's own best guess from the act it would issue greedily, read when the action is issued, so a greedy act the episodic vote decided is owned and its outcome can surprise the brain.- An imagined branch issues privately the act the brain would issue, with the episodic vote read under the branch's own temporal context, to its efference copy and the recall memory's predecessor key.
- A decision whose outcome was a reward or a punishment stays on the replay path when the next decision is taken in the same situation, so the next reward replays only the decisions taken since that outcome.
The guides describe the complete choice and the replay bound (episodic memory, learning, API, changelog; #204). tests/test_episodic_policy.py reproduces each defect and checks its fix.
- Compatibility.
- Every founder brain and its checkpoint are unchanged: a brain without
memory_choiceacts, learns and saves as in 0.84.0. A composed life at the library's defaults gives the same actions and checkpoint arrays on the 0.84.0 wheel and the 0.84.1 wheel, and each release loads and continues the other's checkpoint. - Checkpoint formats are unchanged; every checkpoint keeps its format and loads as in 0.84.0.
- One test fixture,
tests/fixtures/observation_code/recalled.npz, is written again by its own recipe: in thatmemory_choicelife two sampled acts match the complete greedy choice and count as own outcomes; its acts and the acts of its continuation are unchanged.
- Every founder brain and its checkpoint are unchanged: a brain without
Install: python -m pip install cadence-net==0.84.1.
Validation:
- The complete local suite passes on the release source, with ruff clean. All nine exact-source CI jobs pass, with strict mypy in each test job.
- The wheel and the sdist reproduce the source exactly, and both pass the same focused checks when installed fresh,
tests/test_episodic_policy.pyamong them. - The unchanged test inventories of two applications built on Cadence pass against the release source.
- At their defaults, the published 0.84.0 wheel and the 0.84.1 wheel give identical readings in the Stone Age environment: its V5 caregiver benchmark and a fully observed four-step chain.
Cadence 0.84.0: the recall memory
Cadence 0.84.0 adds the recall memory to the composed brain, opt-in, with its options and a guide. Every addition in this release is opt-in: Brain.compose(...) without the new settings builds the 0.83.0 composition unchanged.
- The recall memory (
Brain.compose(..., recall=True), classRecall; memory guide, genes; #199, #201, #203). The working trace keeps what the brain made of the moment before, and neither it nor the heard history gives back one earlier moment when the present asks for it. The recall memory keeps each stream's recent moments as slots, addresses them before each settle and holds what it recalled through the settle: a held-input recall.- After each act, and after each moment
waitsenses, every stream writes one slot: its key the event heard, its value the event (or the settled association activity,recall_value="cortex"), and the slot before learns it as its next. - Before each settle the moment's address, the key plus a learned map of the event and of the association activity of the moment before, weighs the slots by a softmax, and the recalled value and next drive a
recalland anextregion, which the association region reads through plastic projections. The settle answers on the mixture the address chose and does not revise the choice. With the map at zero the address is the event heard: a name finds the moment it was stated in before any lesson. - After each teacher lesson (
step(..., teacher=...), orBrain.lesson(observations, labels), the same lesson without its act) the address lesson, a rule of its own beside the graph's contrast, scores each slot's value and next against the association's movement under the nudge, weighs the scores with the address's own attention and steps the map toward the keys so weighted at the taught rows, each row's rate bounded by the row's own input energy. At the founder, rewards leave the map as it is. reset, ended episodes, imagination (it reads the live slots and writes none),wait,describe()andretunetreat the memory as they treat the heard history. The address map is a learned parameter that a reset keeps andparameters()counts.
- After each act, and after each moment
- Its settings, each passed as
recall_<gene>besiderecall=True, with their founders:recall_amplitude3.0 (the drive of a slot that holds the whole weight),recall_temperature0.25 (the softmax over a stream's slots),recall_heard1.0 (the weight of the present event in its key and its address),recall_recency0.25 (the logit cost per moment of a slot's age),recall_address0.01 (the address lesson's rate),recall_address_temperature0.1,recall_contextandrecall_context_decay0.0 and 0.5 (the fading history of earlier events in a key),recall_capacity64 (slots per stream, the oldest dropped first),recall_value"event",recall_nextTrue, and thecomposeargumentrecall_scale1.2 (the initial magnitude of the two projections).retunechanges the read and lesson genes in a life; the others are construction settings. - Its options, each a gene that a brain describes and saves only where it differs from its founder, so every founder brain and its checkpoint are as before:
recall_address_step="toward"steps the address by the named keys less the mixture it attended to, so that to first order the named slots' logits rise against the attended ones, whatever the keys' norms.recall_recency=Nonecharges a slot's ager * log(1 + age): an unmatched old slot's weight falls as a power of its age, and the exponent is set so that a full match of a unit-length key outweighs the age of every slot the capacity holds (Recall.charges()).recall_write="aroused"writes a moment only when its act was sampled.- A number
recall_nulladds a null slot of logitrecall_null / recall_temperaturethat reads nothing, so a moment that matches no slot recalls little. recall_address_rewardabove zero lets reward train the address map: each sampled act keeps the step the address lesson would take as the map's eligibility, in a trace of the actor's own, and each outcome steps the map by that rate times the dopamine times the trace (address_reward_stepin the report).recall_episodes="keep"keeps a stream's slots and the address map when its episode ends, while the working trace, efference copy and heard history begin afresh; the latest slot of the ended episode learns no successor from the next episode's first moment.Brain.reset(keep_memory=True)keeps the slots across a reset in the same way.recall_key="predecessor"(construction) adds the stream's previous moment to every key: the previous moment's event and the one-hot of the command the stream issued last.recall_windowk above 1, withrecall_window_decay(construction), makes every key an ordered window of the stream's last k events, each position on coordinates of its own, so that where an event recurs with different continuations a moment finds the occurrences whose recent history matches its own.
- Also new, each opt-in (changelog):
- The heard history,
Brain.compose(..., history_decays=(0.2, 0.8, 0.95)): ahistoryregion of one block per decay, each a fading trace of the observations as heard (context guide). - The observation code:
Brain.observation_code(x)is what the memories key on, the observation itself or, withcode=units, the brain's own sparse code of it;Brain.compose(inputs, actions, code=units)makes the sensory region the code (from pixels to keys). - Image shapes in
Brain.compose:inputs=(height, width)or(height, width, channels)makes the sensory region avisual_cortex. - A sparse pattern separator,
PatternSeparator(..., fan_in=k), withcover=cfor inputs read through an ON and an OFF channel byccode neurons each;Brain.compose(..., memory_choice=True, memory_fan_in=16)gives both episodic stores such a separator. - Lessons only where the answer differs:
LearnerConfig(surprise=True), orBrain.compose(..., learning_surprise=True), teaches only the rows whose free answer differs from the label (learning guide). - One holder of the current graph for several learners:
GraphHolderandLearner.sharing(first, outputs, ...)(learning guide). - Competitor arms for the comparison thread of #183 and #184: an online recurrent actor-critic with an Elman cell or a gated recurrent unit in
benchmarks/competitors.py.
- The heard history,
- Compatibility.
Brain.compose(...)without the new settings builds the 0.83.0 composition unchanged: a composed life gives the same actions and checkpoint arrays on both releases, and each release loads and continues the other's checkpoint.- A brain with the heard history saves checkpoint format
cadence-generic/7, a brain with the recall memorycadence-generic/8, and a brain with its own sparse codecadence-generic/9; earlier releases refuse these formats. Every other checkpoint keeps its format and loads unchanged. Learner.brainreads the graph from the learner'sGraphHolder, and an update replaces the holder's graph in one assignment after every check, so a refused update changes nothing. A shallowcopy.copyof a learner shares its holder, anddataclasses.replacebuilds a learner with a holder of its own.
Install: python -m pip install cadence-net==0.84.0.
Validation:
- The complete local suite passes on the release source, with ruff clean. All nine exact-source CI jobs pass, with strict mypy in each test job.
- The wheel and the sdist reproduce the source exactly, and both pass the same focused checks when installed fresh.
- The unchanged test inventories of two applications built on Cadence pass against the release source.
- At their defaults, the published 0.83.0 wheel and the 0.84.0 wheel give identical readings in the Stone Age environment: its V5 caregiver benchmark and a fully observed four-step chain.
Cadence 0.83.0: episodic memory for sequences
Cadence 0.83.0 adds an episodic memory for sequences to the composed brain, opt-in, and a guide to it.
- Episodic memory for sequences (
Brain.compose(..., memory_choice=True), guide; #111, #169, #84, #85, #121). The hippocampus remembers what happened in a situation at once, and its records vote in every choice, added to the motor readout before the softmax. Each record is kept twice: keyed by the observation, and keyed by the temporal context, the observation with a fading trace of what the stream saw and did before. A record is written when an outcome is known; a caregiver's demonstration is remembered as if it had paid. A reward replays the recent path backwards, back to the last known outcome, so the brain learns a chain paid only at its end without the world marking where an attempt ends. A reward that ends an attempt is replayed whole. In a continuing life a reward is replayed in proportion to its surprise, into each decision's context record, and into its place record only where the decision was an exploration rather than the brain's best guess. - Measured on fresh founders and seeds against the 0.82.0 composition, with criteria declared before running:
- A four-step crafting chain corrected by a caregiver: 38.1% -> 98.7% success after teaching, and 9.0% -> 97.8% after 80 episodes alone through
live. The same chain from reward alone: 9.1% -> 73.2%. - A second crafting chain, after the caregiver leaves: taught 2.8% -> 99.0%, reward only 15.0% -> 75.6%.
- A chain in one continuing life, paid only at its completion, without
done: 0 -> 108 greedy completions per thousand moments. - Rules that reverse in a continuing life (the odour nursery): 20 of 20 lives within every gate.
- Delayed response 6 of 6; two songs cued once 0.52 -> 0.65 of their notes; taught recall of a vanished cue 0.70 -> 0.75, unevenly.
- A continuing bandit whose history does not matter falls from 0.86 to 0.75. With this, and with the continuing chain and recall below their declared bars, the memory is not the default.
- A four-step crafting chain corrected by a caregiver: 38.1% -> 98.7% success after teaching, and 9.0% -> 97.8% after 80 episodes alone through
- Stone Age. Verified on the release wheel against the published 0.82.0 wheel in the Stone Age environment, with
memory_choice=Trueon 0.83.0. Figures are frozen full-chain success in %, sampled. The V5 caregiver benchmark (the published command, with the script's version guard widened andmemory_choice=Truepassed to its oneBrain.composecall), seeds 42 to 46 (the script's own; they were also used while developing): the corrective teacher goes from 26.4 to 99.8 immediately and from 25.6 to 97.6 after the caregiver leaves; reward only from 6.2 to 97.0. A fully observed four-step chain with fresh founders: correcting executed mistakes goes from 44.8 to 100, and alone afterwards from 33.2 to 94.1; reward alone from 13.4 to 50.1. The environment's own benchmarks, seeds 42 to 46, frozen full-chain success: backward lessons stopped at competency 8.4% -> 25.6% with a third of the lesson trips and a fifth of the rescue trips; retention rescue 6.2% -> 37.4%, keeping all four steps of the chain. - The sequential-task guide adds the measured continuation after teaching: a brain left alone through
livekeeps a taught chain wheresteperodes it (#191). - Compatibility.
Brain.compose(...)withoutmemory_choicebuilds the 0.82.0 composition unchanged: a composed life gives the same actions and checkpoint arrays on both releases.ActorCritic.actandprobabilitiestake abiasadded to the readout before the softmax.- A brain with the episodic memory saves checkpoint format
cadence-generic/6, which earlier releases refuse; every other checkpoint keeps its format.
Install: python -m pip install cadence-net==0.83.0.
Validation:
- The complete local suite passes on the release source (3,206 passed), with ruff clean. All nine exact-source CI jobs pass, with strict mypy in each test job.
- The wheel and the sdist reproduce the source exactly, and both pass the same focused checks when installed fresh.
- The unchanged Patch World v2 test inventory and the Transcribe inventory pass against the release source.
- A composed life without
memory_choicegives the same actions and checkpoint arrays on 0.82.0 and 0.83.0.
Cadence 0.82.0: context that starts quiet and is learned
Cadence 0.82.0 changes how a composed brain carries its context from one moment to the next, adds a guide to it, and removes the readout's intrinsic plasticity of 0.81.0.
- Context that starts quiet and is learned (#189).
Brain.composegains the construction settingworking_memory_scale: the initial scale of the plastic projection through which the prefrontal region feeds the carried interpretation back to the association cortex. Its founder is 1.2; every earlier release fixed it at 12. The working trace keeps amplitude 3.0, so the prefrontal region holds the copy as clearly as before. Its retention default (working_memory_decay) is now 0, so the trace carries exactly the last interpretation. A newborn answers mostly from what it sees now, and learning raises the past's influence where it predicts the outcome. On development seeds the composed brain still learns the delayed response oftests/test_generic.pyfrom reward alone in 6 of 6 seeds. On a continuing bandit whose history does not matter, its mean hit rate rises from 0.25 to 0.60. - Stone Age. The change was verified on the published wheel against 0.81.0 in the Stone Age environment. Figures are frozen full-chain success in %, sampled.
- V5 caregiver benchmark: the published command, with only the script's version guard widened to accept 0.82.0, on seeds 42 to 46. The corrective teacher goes from 18.8 to 26.4 immediately, and from 23.2 to 25.6 after the caregiver leaves.
- A fully observed four-step chain with fresh founders: correcting executed mistakes goes from 21.0 to 44.8. Reward alone goes from 0 to 13.4.
- Untrained founders no longer fall below uniform random (6.3 before, 12.3 now, against 11.6).
- The chain is not mastered; acquired chains still erode in some founders after the caregiver leaves (#169).
- A guide to context (
docs/context.md): what a brain carries, how to wire it for retention, the expert settings and how to check that the context does the work. Wiring for retention means a wide enough last module, a continuing life, and outcomes that depend on earlier cues. - The readout's intrinsic plasticity is removed (
LearnerConfig.homeostasis_rateandhomeostasis_target, theirlearning_homeostasis_*names andhomeostasis_step). A per-action set point constrains how often each action is chosen; under reward it flattened a six-action policy. Checkpoints written at the founder rate load unchanged. A checkpoint written with the gene on is refused with a message naming 0.81. - Compatibility.
- To rebuild the earlier composition, pass
working_memory_scale=12.0, working_memory_decay=0.2. - Composed checkpoints record the scale in their composition, and earlier releases refuse 0.82.0 composed checkpoints. A checkpoint saved before 0.82.0 loads with its own synapses and settings.
Brain.buildkeeps itsmemory_scaleof 12.- The frozen chamber protocols build the composition they were frozen under. Recall/4 and recall/5, which set the removed gene, run with 0.81.0.
- To rebuild the earlier composition, pass
- Packaging and guides. The source distribution leaves out receipts no test reads. The settling, learning and research guides state their assumptions and limits in place.
Install: python -m pip install cadence-net==0.82.0.
Validation:
- The complete local suite passes on the release source, with ruff clean. All nine exact-source CI jobs pass, with strict mypy in each test job.
- The wheel and the sdist reproduce the source exactly, and both pass the same focused checks when installed fresh.
- The unchanged Patch World v2 test inventory and the Transcribe inventory pass against the release source. Transcribe's legacy-genome equivalence test now pins scale 12.
Cadence 0.81.0: Brain.wait, the readout's intrinsic plasticity and two instruments
Cadence 0.81.0 adds an awaited outcome to the continuing stream, one learner mechanism with its founder off, two measuring instruments with their receipts, and a guide to sequential tasks. The settling, learning and memory equations and the composed defaults are those of 0.80.0; every composed brain, checkpoint and continuation is byte-identical at the founders.
Brain.wait(#111, #122). A stream can sense more before an outcome arrives: a waiting stream settles each observation and advances its working trace without taking an outcome, the awaited action keeps its forecasts, eligibility and situation, and the outcome later given toliveis credited as an immediate one would be.Brain.decision_idandlive(..., decision_id=...)refuse an outcome reported under another identity. A stream saved while waiting uses checkpoint formatcadence-generic/5; lives that do not wait keep their formats.- The readout's intrinsic plasticity (#84).
LearnerConfig.homeostasis_rate(founder 0) andhomeostasis_target(0.3): at every accepted teaching or reward update, host and device, each output neuron's bias moves by the rate times the shortfall of its free activation below the target, so a readout neither saturates, where a finite nudge has no slope, nor falls silent. Reachable aslearning_homeostasis_rateandlearning_homeostasis_targetincomposeandretune, reported bydescribe(), saved with the learner configuration;applyreportshomeostasis_step. Padding rows of a reward update do not enter the pull. Evidence boundary: under the recall chamber's teaching all four development founders end 64 repeats at clean recall of 0.95 or better; the fresh confirmations recall/4 and recall/5 failed closure, and under reward learning in the prerequisite-chain nursery the development point (rate 0.1 toward 0.3) lowers every reading of a six-action readout, so the gene as declared is a teaching-time mechanism. - Recall instruments (
benchmarks/recall).credit_landing.py, where each lesson's credit lands and what an untrained founder's trace carries; protocols recall/4 and recall/5 with their receipts; the chamber composes at a declared sensory scale. The README states the measured limit: a trace written after every event with one fixed weight cannot both hold a cue through distractors and let a replacement in. - The competing-skill ring (
benchmarks/competing, #169). A table world on the arena's founder brain: a nursery acquires one skill, a ring brings a competing skill, unavoidable burn, both or neither, with the issue's controls throughretune, readings from saved copies with the working trace carried and reset, per-projection drift, step consistency and the dopamine per skill; the ring may pay as the arena's melee does (--ring-pay), and--brainoverrides the brain point. Receipts on six seeds: under certain or weakly positive pay the acquired skill is not lost; under the melee's pay the loss reproduces at every actor step, and in a short nursery what the melee overwrites is the episodic memory's one-shot record. - Sequential tasks and prerequisite chains (
docs/sequential-tasks.md,benchmarks/chain). The guide says what the measurements establish about a chain of actions that collapses onto one action and the pattern they support; the prerequisite-chain nursery measures a chain of four actions with its state observed or hidden, pay at the end, shaped or in backward lessons, against uniform random, a frozen newborn, the stationary memoryless ceiling and a tabular learner with the same information.
Install: python -m pip install cadence-net==0.81.0.
Validation: the complete local suite passes on the release source with ruff and strict mypy clean, all nine exact-source CI jobs pass, both independently installed artifacts pass the same focused checks with an identical test inventory, and the unchanged Patch World v2 and Transcribe test inventories pass against the release source. Every shipped receipt binds the sources of the commit it was produced on, named in each README.
Cadence 0.80.0: simple composition and safe retuning
Cadence 0.80.0 makes the continuing-brain interface easier to configure and inspect. It addresses #170, #171 and #176 while preserving the numerical founders and existing learning laws. This release makes no claim of improved numerical performance or generally optimal task settings.
python -m pip install cadence-net==0.80.0from cadence import Brain
brain = Brain.compose(inputs=4, actions=2, arousal=True)
action = brain.live([[1.0, 0.0, 0.0, 0.0]])
# Execute the action, then report its actual reward with the next observation.
# Change only selected settings when the application requires it:
brain.retune(actor_eta=0.1, actor_eta_bias=0.01)
settings = brain.describe()The override in this example illustrates the interface; it is not a generally recommended learning rate.
arousal=Trueselects the founder arousal configuration. Omitting arousal retains the existing lower-level composition forstep, explicit teaching and batched streams.sensory_scaleexposes the initial sensory projection without a hand-built genome. Its default remains1.0and it is a construction setting.learning_*,actor_*,arousal_*and named memory settings change individual fields without replacing unrelated defaults.temperatureis the shared teaching/policy alias. Full configuration objects remain available to experts.retunevalidates a change atomically and preserves acquired parameters, optimizer history, activity, traces, records, randomness and pending feedback. Construction choices and missing components cannot be changed through retuning. Resetting arousal is explicit and preserves its age and work counters.describe()reports the layout, effective settings and initialization provenance; save/load carries the corresponding configuration metadata.pending_feedbackexposes whether the current action still awaits its actual outcome, including routinelivechoices.- The audit normalizes valid NumPy integer and floating-point configuration scalars for serialization and identical saved continuation, and rejects non-boolean
centeredteaching settings. Native-scalar defaults are unchanged; configuration and continuation checks cover these cases.
Reward updates use actor_eta, actor_eta_bias and actor_eta_critic; teaching uses learning_eta and learning_eta_bias. A rate-only override preserves the current bias rate: set both explicitly or pass the corresponding bias override as None to derive one tenth of the new rate. Retuning affects the next learned outcome, including an already pending one. Changing learning_beta with sampled feedback pending is refused until that outcome has been consumed.
#171 is addressed by documenting the evidence boundary rather than promoting an arena recipe. The current efference default is 0.0, the actor rate is 1.0, and the working-trace amplitude is 3.0. The arena's sensory scale and smaller nursery/ring rates are measured choices for that body family. They do not establish suitable defaults for music, Atari or another environment. The composition guide centralizes the defaults, rate ownership and application choices.
The demonstrations retain their model identities: arena lives use compose/live/retune; composed C64 and Atari paths retain their teaching and actual-outcome protocols; Amen retains its separate RecordPatchNet model and record-learning recipe. Companion native-code migrations and bounded checks are recorded at the public arena/Atari migration; the final wheel passes 41 arena, 14 synthetic C64 groove and 4 Atari checks. Existing generated browser packs and archived results keep their recorded library versions and recipes; a native interface check does not revalidate those historical packs or establish new end-to-end musical or gameplay capability.
This release also includes the library manifesto and synchronized contribution requirements, plus the native sensory-history rhythm instrument. Its passing period-four component and failed C64 transfer remain distinct; #140 and the durability work in #169 remain separate capability tracks.
Validation for release commit 9c3fd0e4229da297200343d18c9619b63f6464b1:
- Source lint/types and full suite: Ruff and mypy pass; 3,475 tests passed, 100 skipped, one expected failure.
- Executable documentation and local links: 35 passed; one existing finite-teaching budget warning. The 51 documented default values were independently checked against the running composition.
- Released-versus-candidate preservation: five workloads match across 25 exact checkpoint comparisons; see the validation summary. These are finite component lifecycle comparisons, including learned state, private imagination and saved pending-feedback continuation, not whole-application capability claims.
- Isolated wheel and source-distribution installs, changed contracts and runnable examples: 215 checks passed and 15 expected optional checks skipped in each install; all three examples pass in each. See the validation summary.
- CI on the released commit: all nine jobs passed.
- Public PyPI/GitHub artifacts, tag identity, hashes and fresh public-index installation: Official PyPI downloads match the tested artifact hashes; a fresh public-index install passes 215 checks (15 optional skips) and all three examples. The annotated tag and GitHub downloads also match the release commit and approved bytes. See the validation summary.
See the changelog and released documentation for the complete contracts and limitations.
Cadence 0.79.0 — exploration and actual-action credit
Cadence 0.79.0 repairs exploration and reward credit in continuing brains.
- Every actual outcome updates income, including exploratory multi-slot actions (#158). Surprise still uses the brain’s own greedy choices.
- Extra arousal heat applies to one motor slot per moment; other slots sample their learned base policy (#159).
- Local actor eligibility uses the policy that actually sampled the action, including its per-slot temperatures (#160).
The public loop remains Brain.compose(..., arousal=ArousalConfig()) followed by brain.live(...) with actual outcomes. Existing checkpoints retain learned state and pending feedback; the income counter migrates when older checkpoints are loaded. Configuration defaults remain unchanged.
python -m pip install --upgrade cadence-net==0.79.0Training results remain mixed. The complete, fixed nine-robot confirmation passed progress on 7 of 9 lives against 8 required, attack on 7 of 9, and both on 6 of 9. All nine passed outcome custody and exact saved continuation. That run used the arena’s original physics; the later collision repair was not tested in a new full training cohort. Longer training has not yet been shown to resolve the remaining failures.
The original failed confirmation, memory comparison, and reward-phase comparison retain every measured result, including losses of acquired attack performance. Those experimental memory and learning changes are excluded. Earlier weaker combat comparisons and slower nursery reacquisition are also retained.
Validation: all nine CI jobs passed on the released commit, including full Linux/macOS suites on Python 3.11–3.13 and NumPy-only installation checks on Linux, macOS and Windows. Separate fresh wheel and source-package installations each passed 142 focused behavior, continuation, packaging and documentation checks plus three examples; each had 15 documented optional-backend/platform/source-layout skips. Attached verification records bind the artifacts to the reviewed source.
The arena companion repair is merged on its main branch. It carries actual pending rewards through nursery and browser checkpoints, repairs phantom strikes from collision correction, and pins training and the browser pack builder to 0.79.0. All 28 arena tests passed against a fresh public PyPI installation. After retraining, run npm run pack in showcase-app before building the showcase; a frontend build alone reuses the historical pack.
Post-publication verification passed: official PyPI downloads and the initial GitHub assets match the approved bytes, the annotated tag resolves to the tested source, and a fresh uncached public-index install matches all 55 runtime modules. That installation passed the same 142 focused checks and three examples, with the same 15 documented skips. Public library and arena verification records are attached.
Cadence 0.78.0 — audited continuing brain experiments
Cadence 0.78.0 merges the reviewed key-door, loop and finite-recall experiments with maintainer corrections and additional bounded measurements. The library runtime matches 0.77.0 exactly apart from the version string: public interfaces, defaults, equations and checkpoint behavior are unchanged.
- Trustworthy delayed-credit comparisons. Fix the recurrent control's feedback/gradient ordering and complete gradient clipping. Verify trip, probe and work arithmetic and require the complete cohort to meet all gates in the same lives. Add private no-learning retention measurements; retain the failed historical gates and reject an eligibility-gene candidate that performed worse.
- Declared recall budgets. Execute the full frozen lesson count, retain independently replayable raw trace transitions, distinguish elapsed time from event count, and enforce process and storage bounds. Preserve historical receipts that used half the declared teaching budget. All six corrected founders complete the full budgets within the original limits, and all 78,264 raw transitions verify; recall closure still fails.
- Honest loop claims. The corrected sensory-history adapter result remains 5/5. Native trace-only development reaches 1/6; it does not close native closed-loop generation. Distinguish the explicit label-mismatch teacher from
Brain.live. - Explicit physical timing. Add shuffled-time and untaught controls, physically paced solver comparisons, action-availability timestamps and full brain/world continuation. Both development founders learn and resume, but the declared timing envelope still fails on this host. A separately paced conventional recurrent control passes all 16 physical cases. Failed attempts remain published.
The introductory guides continue to recommend one application path: create Brain.compose(..., arousal=ArousalConfig()), then call brain.live(...) with observations and actual outcomes. last_settlement is an optional diagnostic.
python -m pip install cadence-net==0.78.0Six existing acceptance items are complete across #84, #111 and #116. Research issues #84, #111, #116 and #140 retain their remaining acceptance; #121/#122 integration and the sentence-training hold are unchanged. Original protocols and evidence keep their producing-source identities. Walkers remains a local demo.
Validation: Ruff and mypy pass; the full source suite passes (3,357 passed, 98 skipped, 1 expected failure); all nine matching-source CI jobs pass. Unchanged consumer checks pass (6 Patch World and 55 Transcribe tests). Independent wheel and source-archive installations each pass 738 tests (9 skipped, 1 expected failure), all 21 documentation pages and five examples. Source/archive/wheel payload checks agree, and the complete runtime diff is the version string only.
The public PyPI/GitHub downloads, annotated tag and a fresh public-index installation are verified against the approved build. The public installation passes the same 738 tests and both continuing-brain examples. See the public verification receipt. The initial index-propagation failure is retained in the review evidence.