Skip to content

Submilli v0.4.0

Choose a tag to compare

@somdoron somdoron released this 13 Oct 05:18
· 114 commits to main since this release

Submilli 0.4.0

This release adds undefined as a distinct value, persists sessions in SQLite, brings the playground to the CLI with real agents, and publishes the engine as the submilli-engine crate. Helm chart 0.4.1 deploys runtime 0.4.0.

Upgrade notes

  • undefined is now its own value and type, distinct from null. Optional fields and parameters read as T | undefined, and standard-library absence (secrets, fs, session, url, git, llm, embedding, Map.get, at() past the end) is undefined. Code that compared these results with === null must compare with === undefined, or test both. == null and == undefined are rejected with a fix, since == compares like ===. Curated Packages and the book are migrated. Check your own Packages with submilli build check before upgrading a server that runs them. (#193)
  • Sessions move to SQLite. Stop the old server and back up its entire state directory or volume before the first 0.4.0 startup. Session files are imported into the server database in one transaction, then the session directory is archived to server/archive/sessions/. Rolling back to 0.3.0 requires restoring the pre-upgrade backup. (#131)
  • Harness credentials now survive restarts, encrypted with the secret store's key. Keep that key across restarts; durable bindings require it. Session KV and last-run state are not yet persisted. Session deletion and idle cleanup do not yet wait for active executions (SUB-1432).
  • Authority-map and security-review report JSON move to schema 2. (#181)
  • Embedded Rust callers: the interpreter crate is renamed submilli-engine. SessionManager::spawn_reaper, watchdog::arm and RuntimeConfig::arm_timeout now return Result, and string builder helpers take tenant limits. This is a pre-1.0 minor release with embedding API changes. (#196, #172, #169, #179)
  • Some programs that used to run with a different answer than Node are now compile errors that name the problem, as tsc --strict would. (#192)

New capabilities

  • Playground from the CLI. submilli playground can read runs (runs, show, explain, compare, audit, changes, sessions) and act on them (exec, bind, session, recheck, test, rerun, draft-rule, watch). show --program prints the program a run ran, and show lists its tests and reruns. (#191, #204)
  • Playground playback. After a Blueprint edit, re-check a recorded run's permission decisions, or run its program again with HTTP, MCP and model calls answered from the recording. (#166)
  • Try a real agent against your Blueprint. submilli playground chat drives a model with your own Anthropic, OpenAI or Gemini key through the same tools a production agent sees, or submilli playground mcp lets your coding assistant stand in for the agent. (#202)
  • The engine on crates.io. submilli-engine is published with each release. Embedders choose optional packages, including the new submilli:agents and submilli:skills, which stay hidden unless a harness enables them. (#196, #197)
  • build security-review compiles the Package into bounded authority evidence (checks, effects, call edges) for the reviewer and drops the noisy broad warnings. (#181, #170)

Language and reliability fixes

  • More than 100 TypeScript and ECMAScript conformance issues fixed across generic inference, literal types, narrowing, arrays and object shapes, and output that differed from Node 24 (RegExp, Map/Set, surrogates, Uint8Array, ReferenceError and URIError). (#126, #174, #175, #176, #178, #182, #184, #186, #187, #190, #192, #198, #200)
  • String repeat, padding and concatenation admit their output against the memory limit before allocating. Compilation bounds the total Wasm locals per module. (#179, #189)
  • Invalid session reaper timers are rejected at startup, and a watchdog thread that cannot start is a setup error instead of a panic. (#172, #169)

Known limitations

  • Building large strings by concatenation can reach the server memory cap well before the program's live data does: a 32 MB string fails under a 50 MB cap, and a 64 MB string under a 200 MB cap. The stricter admission from #179 introduced this; a fix is planned for a patch release (SUB-1668).

Helm chart

After publication:

helm install submilli oci://ghcr.io/submilli/charts/submilli --version 0.4.1 --wait
helm test submilli

Chart 0.4.1 has no template changes from 0.4.0. For an existing chart 0.4.0 deployment, stop the old workload and snapshot its state before upgrading. Preserve the tokens and the submilli-secret-store Secret. Do not roll back the image without restoring the pre-upgrade state.

Documentation

Docs pages now carry the undefined semantics throughout, and the generated CLI and built-in references cover the new playground commands.

All changes since v0.3.0