Repository navigation
v4.0.0 — configuration is one explicit value
Modaliser v4.0.0 — configuration is one explicit value
A major release. The authoring surface changed: configuration is now a single
value you compose and hand off once, replacing the registration-based model.
Configurations written for 3.x will not load.
Breaking
- No
register!/set-*!on the authoring surface. Library exports are
pure constructors returning fragments; ordinary Scheme composes them,
(configuration fragment…)purely merges them into one Configuration value,
and(modaliser:start! config)is the only effectful moment — it lowers,
installs and arms the leaders exactly once. The merge rejects conflicting
contributions instead of silently absorbing them. See ADR-0018 and
docs/specs/configuration-value.md. (modaliser state-machine)and(modaliser leader)are gone, replaced
by(modaliser fsm),(modaliser configuration),(modaliser handoff)and
(modaliser activation).- Bundled
app-trees/includes are retired. Setups a fresh install does
not seed (tmux, Chrome) now ship as never-loaded reference configurations
underexamples/, to copy from rather than include.default-config.scm
grows into the full composed configuration. - Clipboard history is removed — all five primitives resolved at the
Scheme prompt and permanently returned null, because the store and monitor
they guarded on were never assigned. - No library authors a key or a label (ADR-0021). Libraries export ops,
blocks, providers and wiring; yourconfig.scmbinds them into screens.
Upgrading
A 3.x config no longer wedges the app: when a config fails to load, Modaliser
evaluates the bundled default in its place, keeps every leader key working,
and reports the error on the menu bar and in a dialog (ADR-0022). So the
upgrade path is: install, let it fall back, then port your config against
docs/reference/dsl.md and the seeded config.scm — Reset Config to Bundled Default… in the menu bar backs yours up first.
~/.config/modaliser/sys/scheme/ is re-mirrored from the new bundle on first
launch, so the shipped library tree is always fresh; only your config.scm is
yours to migrate (ADR-0019).
Also in this release
- Display-value model with two-layer rendering (ADR-0011) — dispatch
structure carries an attached display; Scheme builds data and pushes JSON,
JavaScript renders into the DOM. - herdr socket transport (ADR-0020) — herdr is driven over a Unix socket
rather than by shelling out, with one read seam. - Terminal context-map activation completed (ADR-0013), plus explicit FSM
graph validation at load time (ADR-0015). - Outward reach is host-installed (ADR-0023) — shell spawning and HTTP
fetching sit behind seams that are inert until the host wires them, so the
test suite reaches nothing outside the process. - New
scripts/check-decision-free.shenforces the decision-free library
contract alongside the portability check.
Requires macOS 14+ (Sonoma), Apple silicon.