Repository navigation
Tags
Tags
0.1.4 The failure-recovery pass. `prelude.replay` is `prelude.supervise`: one signal (`interrupted[F]`) and two mechanisms over it — re-run the block (`forever` / `exponential`) or hand the failure back as a value (`once`, which was internal and is half the module). Two `use`-shaped converters, `signal_throws[T]` and `signal_panics[F]`, replace the guard every program hand-wrote to turn a throw or a panic into a signal; stacked, they fold both channels into one flat match. Put the pair inside a fiber and you have a supervisor, which is why there is no supervision API: the four published examples now restart their own watches with a budget, and the crash policy they each carried — a name constant per fiber, a verdict sum, a fork per arm, and no bound on the restarts — is gone. `prelude.catch` and `catch_all` are removed; `supervise.once` + a converter does more (selective, and it widens the result to a sum). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017oXCfmxp7QSGkGgVQqDoDL
v0.1.1 — what the compiler says, and what a restart costs Two things, both found by putting the language in front of readers who had not written it. A durable program may hold only durable values, and a pointer into a sidecar's process memory is not one. The chat packages were handing one out: after a runtime restart, replay served the recorded handle into a fresh process whose registry was empty, every call through it panicked, and re-forking the watcher re-used the same dead handle — a silent crash loop that the tutorial's own recovery advice walked readers into. discord 0.7.0 and slack 0.5.0 stop the pointer crossing: every call carries the token it acts with, a connection belongs to the call that needs it, and re-forking a watcher connects again. The examples that were carrying a supervisor to work around this deleted it, and two properties they had retracted came back — a half-collected standup keeps its replies, a concierge keeps its conversation. The diagnostics stop speaking type-checker. Fourteen message families move onto actual/expected plus a fix; a missing required argument says so instead of reporting an optionality mismatch; names suggest their near neighbours; a derived error no longer prints ahead of its cause. K3028 warns when a statement's value is discarded, which is what makes an outcome-answering agent's answer hard to ignore — and a dependency's warnings stay out of a consumer's build, because a warning nobody can act on teaches people to stop reading warnings. The escalation report shows what is worth reading and counts the rest, with the old bytes one flag away. `katari ls packages` answers what there is to add. Pre-1.0: `memory.forget` and the two chat packages change shape. The lockfile and the image tag are how you choose when to move.
v0.1.0 — the first release Katari is a language for orchestration logic for AI agents: you write a program, the compiler lowers it to an IR, and a persistent runtime executes it. Every step of a run is durable, so a program can wait months on a human answer and pick up where it left off; parallelism and concurrency are in the language rather than in a library; and an effect row makes what a program may perform — which secrets it reads, whose calendar it writes, which questions it escalates to a person — a thing the compiler checks and the toolchain reports. This release freezes that surface for the first time: the language and its diagnostics, the standard library, the IR and its schema version, the runtime API, the CLI and its lockfile discipline, the LSP and the editor extension, the package registry with its immutable snapshots, and the documentation site — served both to people and, as an MCP server, to the coding agents that write Katari. Pre-1.0, so a minor version may still break; the lockfile and the image tag exist so you choose when to move.
release: 0.1.0-rc12 — http vocabulary v2, composition helpers, honest… … templates; rc owns latest Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QspNJfkBmkndYcAzpZpxtu
release: 0.1.0-rc11 — anonymous agents, resident-desk & durable-log f…
…acilities, region.failed
Language: anonymous agent expressions (K3027 rejects generics), record spread
`{...base, k=v}`, next-line `else`, sum-type tool-arg schemas keep their docs.
stdlib: poll.subscribe (durable subscription), store.share / shared_as, store.log
(bounded evict/reject), region.post, region.failed (a fiber's uncaught throw is
trapped at watch and delivered typed; fork absorbs `prelude.throw[unknown]`),
json.try_validate, store.exclusive_as, reflection.describe (runtime doc compose),
http.auth_error | api_error.
runtime: region.failed trap; describe / try_validate prims; dependency-inversion
audit — region ABI moved out of engine, cross-language `$katari_*` trip-wires,
never-request & stdlib-name registries, SchemaViewer / Run.hs SchemaDescribed fixes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QspNJfkBmkndYcAzpZpxtu
PreviousNext