Repository navigation
v0.3.0: Typed process layer — families, carriers, operators, scheduling, compilation
What's new
Canvas-engineering gains a typed process layer on top of the existing typed layout:
CanvasProgram layer
- 5 region families: observation, state, memory, residual, action — everything else is tags
- 5 carriers: deterministic, diffusive, filter, memory, residual — not everything follows diffusion dynamics
- Operators: semantic intent (observe, predict, correct, retrieve, write, act) separate from backend (cross_attention, mamba, perceiver, etc.)
- Auto-wiring:
compile_program()auto-sets operators from region family pairs - ClockSpec: periodic, on_event (residual threshold), boundary clocks with cooldown and max_silence
Runtime
- ResidualAccumulator: tracks running scalar EMA summaries of error signals per region
- RegionScheduler: evaluates clock rules to decide which regions fire each step
- AttentionDispatcher.active_regions: skip inactive regions, pass through unchanged
Compilation
- ProgramCompiler: freeze/constant/export/dead-elimination passes
- Per-family learning defaults: ssl_prediction for observation, posterior_match for state, retrieval for memory, calibration for residual, supervised for action
New modules
program.py— CanvasProgram, RegionProgram, ConnectionProgram, ClockSpec, LearningSpecresiduals.py— ResidualSpec, ResidualAccumulatorscheduling.py— RegionSchedulerlearning.py— FAMILY_DEFAULTS, default_learning()compiler.py— ProgramCompiler, CompiledProgram
Stats
- 361 tests, all passing
- 122 new tests for v2 features
- All 239 v0.2.0 tests pass unchanged
- Full backward compatibility:
compile_schema()unchanged, all existing code works