Repository navigation
Loka 0.0.2
Pre-release
Pre-release
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
RETIREDfact 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/
Showsubtrees 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. |