Skip to content

Loka 0.0.2

Pre-release
Pre-release

Choose a tag to compare

@Lihi-AI Lihi-AI released this 25 Jul 03:18
· 1101 commits to main since this release
6f7e938

Loka 0.0.2 delivers the promise of the 0.0.x line: tightened lifecycle and ownership contracts, verified across four platforms. 88 pull requests since 0.0.1.

Highlights

Lifecycle & ownership contracts

  • The Window now owns its Scenes end to end: one-shot props handoff, two-phase retire pools drained at flush boundaries, and an App-owned close queue (#73, #85, #87).
  • The node lifecycle was rebuilt around a single fact channel — one enum, one door: living transitions and the terminal RETIRED fact are delivered at apply time, and the ad-hoc hook surface is gone (#105–#111).
  • Retired arena and heap nodes are destroyed at the clock, never mid-teardown; pending update targets can no longer dangle across detach/re-attach (#90–#96, #153).
  • Conditional/Show subtrees keep their seats across recomposition, with boundary-local rebuild consolidated behind one path (#113–#119).

State correctness

  • State writes landing during a tracker commit now queue into an explicit next transaction instead of being silently dropped (#158).
  • Direct-root boundaries register their observed state on the compose path (#154, #156); flow-level success resume no longer double-fires cleanup (#131).

Allocation discipline

  • Every scene allocation now routes through a gated backend with an audit trail; materialization failure travels by value, arena refusal is a contracted degradation, and steady-state per-interaction allocations are pinned by a ratchet budget (#133, #134, #140, #142, #146, #147, #148).
  • That work makes allocation failure propagate rather than vanish. It does not by itself make structural materialization failure-atomic — see #144 under Known issues.

Win32 correctness

  • Text is UTF-16 end to end: popup items, Text measurement/set, buttons, window title, menus, cells, and edit text — no more mojibake on any ANSI codepage, and Japanese IME input round-trips losslessly into bound state (#161, #162, #168; closes #160). The sweep covers UI text surfaces; file paths still travel through narrow APIs (#15).
  • The open-file dialog now holds sibling windows app-modal, closing the confirmed re-entrancy trigger for #152 (#165).

Classic Mac (Toolbox / Retro68)

  • Retired subtrees drop their hit-table entries and state bindings; edit focus survives control-vector erases; and a detached EditText now synchronously retires its native TEHandle with per-context identity — two controls sharing one text state each keep their own native binding (#157, #163, #166).
  • Classic binaries shed the C++ unwinder and MacsBug names, with compact vs diagnostic build profiles and per-app SIZE partitions (#136–#138).

Verification infrastructure

  • 192-test contract/scenario suite registered with CTest, run headless and under ASan (#129, #105).
  • A reproducible MAME runtime-verification workflow — scenario isolation, Lua-driven ADB input, headless/visible replay — is documented and already used to runtime-verify fixes (#122, #163, #166).
  • Wiring and mechanism changes now require mutation-backed red→green evidence (#114).

Verified on

Platform Evidence
Linux (headless + ASan) 192/192 both suites
Windows 11 (ARM64, ACP=932) test suite green incl. Win32-only pins; all 5 examples launch and exercise
Retro68 68K (release + diag) & PPC builds clean; MAME maciix runtime scenarios (#163, #166)
macOS (arm64) test suite green; all 5 examples runtime-verified incl. Japanese text spot check (#164)

Known issues

Issue Status
#152 re-entrant detach/unmount during an in-flight compose/apply cycle frees live-stack boundaries Open. The confirmed Win32 trigger — sibling windows during the open-file dialog — is mitigated in this release by #165. The underlying in-flight teardown mechanism is unfixed, and is scheduled for the owner-clock / transactional-kernel design track (0.0.3+). That track is not issue #144.
#144 partially materialized conditional seat is stamped applied and never retried Open. A Std boundary can publish an incomplete tree when a branch seat is registered with active.root present and active.allocationFailed also true.
#145 heap-fallback state OOM in a BoundaryInnerStateOwner is silently swallowed Open. The default no-op white flag discards the failure.
#15 fopen fails on Windows for paths containing full-width characters Open, and predates this release. The UTF-16 sweep covered UI text; the file dialog and file I/O still use narrow APIs.
#45-3 double-notify on forced state set Deferred to the memory-model track; see also #173.
#45-7 TEXT_WRAP_CHAR measured as word-wrap on macOS/Win32 Design pass pending. The structural cause — layout geometry has no headless coverage — is filed as #174.
#125 parked-only conditional branches orphaned on seat shift Latent until Conditional/For DSL lands; red fixture recorded.
#167 Tutorial has no runtime path to exercise EditText Example-content gap found during the macOS sweep.