Skip to content

v4.0.0 — configuration is one explicit value

Choose a tag to compare

@AntonyBlakey AntonyBlakey released this 26 Jul 15:57
· 225 commits to main since this release

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
    under examples/, 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; your config.scm binds 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.sh enforces the decision-free library
    contract alongside the portability check.

Requires macOS 14+ (Sonoma), Apple silicon.