Renderingen-US

Radix 0.23.0

FieldValue
ProductRadix
Version0.23.0
SourceClosed for now — see Open source

Install this version#

No prebuilt archives were published for this version. It is listed here because its release notes are part of the record.

Release notes#

Release spanning 77 non-merge commits (v0.22.0..v0.23.0, 2026-01-13 → 2026-01-15). This release delivers a complete CLI framework with codegen, the HAL @subsidia layer with full TypeScript codegen, a major Go codegen expansion for Rivus (control flow, tagged unions, expressions, error returns), union/match all exhaustiveness enforcement across faber and Rivus, post-function modifier support including exit exit-code semantics, a Norma builtin-type reorganization, and a comprehensive exempla reorganization with Latin naming.

Scale#

SignalCount
Commits (no merges)77
Date span2026-01-13 → 2026-01-15

Major tracks#

CLI framework with TypeScript codegen#

  • Path-based nested subcommands (#156): faber/cli.ts gains recursive subcommand resolution via the parser's exClause annotation syntax. (ae10a8852, 0a0f6cd45)
  • Module-based command groups (#157 phase 2): a CLI detector/resolver pipeline (fons/faber/codegen/cli/) discovers command modules and generates grouped subcommands. (f93ff8b25)
  • Help text descriptions (#157 phase 4): generated CLI help text includes command descriptions from metadata. (87c68bddf)
  • TypeScript CLI codegen target: the codegen pipeline emits a complete CLI framework for the TypeScript target, wrapping main/argumenta into command dispatch. (ae53429ea)
  • `faber build` command: multi-file compilation support — the build subcommand compiles all sources and generates output from a project directory. (b167360e1)
  • `faber compile` renamed to `emit`: the compile subcommand is renamed for clarity. (08182170a)
  • Documentation: fons/grammatica/cli.md created with CLI framework docs. (4042b0a55)
  • Coreutils example stubs (echo, true, false) for CLI experimentation. (1411398f9)
  • coreutils/bin/echo.fab updated with keyword renames (tenta → tempta, coalesce → else, iunge → coniunge). (1a779dbd1)
  • CLI examples moved to fons/exempla/cli/. (23251aac6)

HAL @subsidia layer#

  • PoC injection: initial proof-of-concept for a new Hardware Abstraction Layer with consolum and processus modules. (60b773f3b)
  • Full HAL layer: 10+ HAL modules (aleator, arca, caelum, consolum, processus, crypta, json, nomenclator, nuncius, pressura, rete) with TypeScript codegen covering all modules. (e986bb6f4, b0fde1ac3)
  • `@subsidia` import resolution (#167): semantic-level import resolution for the @subsidia pattern — HAL modules are resolved through a pactum-based dependency mechanism. (3060409fc)
  • Pactum plumbing: pactum declarations generate proper TypeScript interfaces and import paths for HAL dependencies. (bda74f938)
  • Focused examples: consolum and processus exempla added. (ad7e5b077)
  • Removed broken norma/hal/* import magic from the faber semantic layer. (eab91c43a)

Discretio (tagged unions) and match all exhaustiveness#

  • Parser flag: match all keyword added to parser AST for both faber and Rivus. (da1f0907a)
  • Faber exhaustiveness: the faber semantic analyzer enforces that match all branches cover all union variants. (abb2dda39)
  • Rivus exhaustiveness: Rivus semantic analyzer enforces the same exhaustiveness invariant. (c5dbc100f)
  • Metadata plumbing: union declaration indices and variant metadata are exported through modules and imports in both faber and Rivus. (52e5b7b82, 2818ad7fa, 372dcb361, 5e67bc782)
  • Go codegen for `union`: Rivus generates Go tagged-union types (interface + per-variant structs). (283ec2b41)
  • Go codegen for `switch` and `match` (Phase 2): control-flow codegen for switch (type-switch pattern) and match (match expressions). (601f4482b)
  • Target flag and variant imports: the --target flag controls output, and union variant types are properly imported in generated code. (3cfb573b6)
  • Variant type export fix: variant types are exported from union union codegen in both TS and Rivus targets. (e3d4c98c9)

Post-function modifiers and exit#

  • `exit` function postfix (#186): a post-function modifier that marks a function as an exit-code terminal — the generated code returns a numeric exit code. Full semantic validation and TS codegen support. (e7ef8ded1)
  • Multiple post-function modifiers: parser, AST, and semantic analysis extended to support stacking multiple post-function modifiers (e.g., exit + custom annotations). (d7fb09c30)
  • Post-function modifier alignment: docs, EBNF, and parser unified under a consistent post-modifier grammar. (f41dbac91)
  • Semantic validation of function modifiers: the semantic layer validates modifier placement and compatibility. (f3895f05c)
  • Go errors returns (rivus/go): the exit pattern generates Go-style error returns from errata-bearing functions. (3dd22ac96)

Rivus Go codegen expansion#

Phase 1 — Control flow and expressions:

  • Go codegen for control flow (if, while, per) and yield/return statements. (ba6449e48)
  • Go lambda expression codegen (fn → anonymous Go functions). (0d400acf6)
  • Go novum constructor codegen (struct constructors). (1777d40de)
  • Go class method codegen (method definitions on class structs). (21961999f)
  • Go class struct codegen (struct type generation). (3217d9f9d)
  • Go object literal codegen (struct literal initialization). (cd1bea33f)
  • Go assert codegen (variable/const declaration). (94ce5088f)
  • Go coalesce coalesce operator (?? → Go nil-coalescing pattern). (e4c46a6a5)
  • Go optional chaining (?. → Go nil-guard pattern). (4f7c50795)
  • Go target integrated into build:exempla pipeline with improved TODO diagnostics for uncovered constructs. (172e05a6e)

Fixes and refinements:

  • Respect default/private visibility for class methods in Go (#193). (4337e7752)
  • Preserve statement order in main function generation. (9080ff5ce)
  • Avoid empty output files and infer slice literal types. (4b5eb91a6)
  • Add --target flag to Rivus CLI for output language selection. (3cfb573b6)
  • Artifex build failures resolved (TS preamble order, Go expression guards). (d8c4f7f7c)

Rivus parser and semantic fixes#

  • Keyword disambiguation: LPAREN lookahead distinguishes keywords from function calls in the faber parser. (92d0cabdb)
  • `yield` in `async_main` blocks: Rivus semantic analyzer now accepts yield (break) within async_main (loop) blocks. (993f82dea)
  • `assignabileAd` nil crash fix: guard against null dereference in Rivus binary expression semantic checks. (69276ba15)
  • `prae type` in parameter lists: Rivus parser handles default type annotations (prae) in function parameter lists. (0c1c8f1b1)
  • Function type annotations: Rivus parser and semantic layer support function type annotations (fn(T) -> U syntax). (3b0170b1d)
  • `range ubi` identifier prefixing (TS codegen): Rivus TS codegen prefixes identifiers in range (import) and ubi (use) contexts to avoid collisions. (74aca1828)
  • `default` support in `match` parser: the Rivus match parser handles default (else/default) branches. (314d38226)
  • `curata` keyword consumption: fix where the curata allocator keyword was not consumed when parsing function declarations. (07dd0e6a0)
  • `qua -> set` constructor special case removed: cleanup of an old codegen path in favor of the general constructor pattern. (28f49e392)
  • Detector import of Sententia variants fixed. (94b876baf)
  • typi.fab updated for type system consistency. (b08bef2e0)
  • PR review feedback: CI workflow improvements, CLI detector/resolver edge cases. (b7f93594a)

Norma / stdlib reorganization#

  • Builtin type reorganization (#168): standard library builtin types (set, float, list, int, map, string) moved into fons/norma/innatum/ directory with an updated build pipeline. (d7e374c88)
  • Per-target registry files: the Norma build pipeline generates separate registry files for each target language (C++, Python, Rust, TypeScript, Zig), each containing target-specific type bindings. (0e99b94f3)
  • Regenerated Norma (post-organization): all generated registry files refreshed. (51f10f434)
  • Renaming: norma-registry.gen.fab → norma.gen.fab; norma-registry.ts → norma.ts across all consumers. (80698a77c, 4ccfdad5b)
  • Nested `switch` → data structure: the Rivus Norma registry replaced nested switch (switch) chains with a data-structure-driven lookup. (c215042c8)
  • Old `@rename` stdlib files archived: pre-HAL stdlib modules moved to fons/norma/archivum/. (36757e517)
  • Timestamp-free builds: build:norma regenerated files without timestamp headers. (659cc9e95)
  • Dead code removal: unused index.json and stale build artifacts removed. (2286ef4e3)

Exempla reorganization and cleanup#

  • Root exempla consolidated into fons/exempla/ — the top-level exempla/ directory is removed and all examples live under fons/exempla/. (231a8750c)
  • Latin naming convention: all example files renamed to Latin (discerne.fab, clausa.fab, adfirma.fab, etc.) for consistency. (291751598)
  • Stub files added for missing language constructs (28 files covering abstractus, call, before, or, yield, rest, demum, self, and, await_const, const, future, todo, static, implements, read, warn, nexum, and more). (cb7849f21)
  • `selfhost-rivus` deleted: the self-hosted Rivus bootstrap script was removed. (31779b755)
  • `princeps.fab` deleted from exempla imports. (af0b871ee)
  • Various exempla updates (conversio.fab, greet.fab, morphologia.fab). (c41f307ed, dda2459a5, b9b9a0806)

---

All releases · Start