Skip to content

Loka 0.0.7

Latest

Choose a tag to compare

@Lihi-AI Lihi-AI released this 23 Oct 12:59
· 147 commits to main since this release
193129e

Loka v0.0.7

A look-and-feel release: cards with shadows and rounded corners, ZStack units with
blur
(a live photo band on Classic and macOS 10.4-10.9), a ScrollView that scrolls
sideways and carries content insets
, a real quit and close story on every rail, and
SmirkyTracker, a SmirkyCard (experimental) showcase that exercises all of it.

Highlights

  • SmirkyTracker (SmirkyCard): LaptopTracker.JS became SmirkyTracker, a card of 13 Macs
    with the owner's artwork (320x200 color plus one-bit renderings chosen by the machine's
    display depth), a 1-column / 2-column list, an About window over a static blur, and a
    toolbar that is a live band over a scrolling page. JavaScript gains machine facts
    (c.machine.cpuClass, c.machine.displayDepth), named picture seats
    (c.state.image('STEM')) loaded from a Pictures folder beside the application,
    ScrollView(child, {insets}), c.state.viewport(), Card(child),
    Box(child, {width, height, padding}), Row(...).naturalWidth() and ZStack(...)
    lowering. The SmirkyCard window has no outer margin, so the toolbar band reaches the
    window edges. Each card states its own margin with Box(child, {padding: 'standard'}),
    and the other cards look exactly as before. (#1382 #1383 #1384 #1385 #1391 #1393 #1397
    #1420 #1459 #1463 #1475 #1477 #1479 #1480 #1481 #1483 #1486 #1490 #1505 #1508 #1514
    #1525 #1552 #1561)
  • Cards, shadows and rounded corners: a Card container with four transparent bands;
    CardStyle names a shadow as extent (NONE, DROP, WIDE) times ink (STENCIL, ALPHA);
    every native rail draws it (Toolbox 4/8 patterns and nine-cell borders, Win32 child
    windows with clipped masks, macOS views with constant-density runs, about 3x faster);
    a style-less Card takes the process's standard look, chosen from the CPU class
    (G3-or-faster gets WIDE x ALPHA). Ribbon groups draw their frame edges the same way.
    (#1308 #1309 #1310 #1311 #1358 #1360 #1364 #1379 #1392 #1396 #1405 #1407 #1412
    #1417 #1426 #1427 #1428 #1434 #1450 #1488)
  • ZStack units and blur: every ZStack child after the first is an opaque unit on all
    rails; ZStack().expBlurUnit() blurs the content beneath it (macOS 10.10+ with
    NSVisualEffectView; Toolbox as a milk frost, then a coarse static blur
    (expStaticBlurUnit()) and a band blur that recaptures at redraws); macOS 10.4-10.9
    shows a blurred photo of the content beneath and the band follows each scroll step.
    Toolbox StaticBlur never asks for a redraw of its own. CardShowcase is a macOS sample.
    (#1438 #1442 #1444 #1449 #1454 #1455 #1456 #1458 #1464 #1465 #1495 #1503 #1508
    #1510 #1517 #1524 #1530 #1531 #1532 #1542 #1549)
  • ScrollView: horizontal scrolling on Toolbox, Win32 and macOS (content-width range,
    bar only while a range exists); content insets (top, bottom) on every rail; a published
    viewport fact with the visible size; VStack().naturalHeight() so a vertical list
    stacks instead of the first row filling the viewport; the vertical bar and scroller
    stay out of the inset rows. (#1341 #1350 #1355 #1356 #1357 #1362 #1367 #1370 #1376
    #1377 #1413 #1415 #1418 #1419 #1467 #1472 #1473 #1474 #1516 #1550 #1551)
  • Quit, close and dialogs: a native close of a keyed document window is a request the
    node answers (App::closeAsked, App::requestQuit); ConfirmDialog on Toolbox
    (caution icon, Command-D for Don't Save), Win32 (MessageBoxW) and macOS (NSAlert);
    SimpleText asks before closing an edited document; Classic Shut Down arrives as File >
    Quit; Win32 answers WM_QUERYENDSESSION from the edited-document fact; macOS answers
    the quit Apple Event itself (Dock Quit, logout, osascript). (#1282 #1286 #1287 #1290
    #1293 #1294 #1295 #1300 #1512 #1543 #1545 #1546 #1555)
  • Menus: About and Quit come from the app container (AboutMenu(), QuitMenu(),
    StandardMenuPresets()); the Apple menu is always present on Classic, Quit sits at the
    end of File on Classic/Win32 and in the app menu on macOS; menu projection keeps the
    installed bar on a refused build and submenu IDs no longer collide. (#1312 #1315
    #1316 #1317 #1318 #1521 #1526 #1529 #1533 #1535 #1536 #1537 #1538)
  • Layout and spacing: containers own the gap between seats (.gap(n) on Stack and
    Box), the window owns its outer margin (StandardWindowMargin()), Box().width(n) /
    height(n), natural-width Text/Row/Ribbon measurement, SmallLabel size role,
    Buttons at the native push-button height, and an aligned Row ending at its lowest
    child. (#1283 #1284 #1285 #1292 #1296 #1297 #1298 #1329 #1334 #1342 #1353 #1361 #1363
    #1369 #1373 #1374 #1375 #1386 #1387 #1388 #1389 #1390 #1402 #1432 #1470 #1509)
  • TextEditor: Toolbox editor shows a vertical scroll bar; Page Up/Down/Home/End move
    the view; control bytes are ignored and 0x7F deletes forward; KanjiTalk two-byte
    characters are refused as one unit; macOS no longer crashes on input-method typing and
    Tab moves focus between fields (Toolbox Tab too). (#1303 #1431 #1436 #1441 #1443 #1451
    #1452 #1462 #1468)
  • Input and paint (Toolbox): presses go through one render-order press ledger;
    hidden or covered rows no longer take presses, keys on parked fields or hover; controls
    draw in the composition walk; word-aligned gradient patterns fix a Mac Plus Address
    Error; a back window's first click selects it. (#1322 #1338 #1405 #1446 #1485 #1492
    #1496 #1504 #1507)
  • macOS 10.4-10.9 performance and fixes: ImageView converts a bitmap to device RGB once, so
    drawing under a scroll stops color-matching; relayout applies a frame only when it
    changed, so unchanged scroll content is not repainted every pass; on 10.4 the About
    card no longer leaves the window undrawn (a ZStack unit marks its own rectangles
    when its frame changes), and the application menu is registered with AppKit so no
    second "App" menu appears. (#1540 #1541 #1569)

Breaking changes for application authors

  • ZStack().expBlurUnits() is renamed expBlurUnit(); only the first unit (second child)
    blurs, on every rail (#1464).
  • NodeComposition::declare is one call per compose and the last declaration wins; the
    append doors (ParentScope, the returned reference) are gone (#1324).
    SceneManager::getCurrentScene() is gone (#1404). LedgerPolicy and
    OPEN_REFUSED_STANDALONE are gone; StandaloneTransactionGuard is the bootstrap
    bracket (#1335). Node::operator delete is gone (#1275).
  • Show accepts only a State<bool> lvalue: a pointer, a bool, a converting value or a
    temporary no longer compiles (#1371).
  • About and Quit come from AboutMenu(), QuitMenu() and StandardMenuPresets();
    composeDefaultMenu apps declare them through the presets (#1538). Windows shows Exit.
  • The window owns its outer margin (StandardWindowMargin()); containers own the gap
    between seats, so apps that padded by hand may need to drop their own margins (#1386
    #1390). The SmirkyCard window has no outer margin (#1561).
  • A vertical ScrollView list stacks its rows only with VStack().naturalHeight();
    without it the first row fills the viewport as before (#1516).
  • A native close of a keyed document window is a request the node answers
    (App::closeAsked, App::requestQuit); Win32 answers WM_QUERYENDSESSION from the
    edited-document fact (#1512 #1543 #1545).

Evidence and verification

Support matrix changes

  • macOS 10.4-10.9: photo blur runtime-verified (above); Tiger 10.4.11 on a MacBook (2006) ran the RC3 UB1 archive (i386) on 2026-10-23.
  • Windows XP (x86): runtime-verified on the owner's VAIO P (RC3 archive, 2026-10-23; SmirkyTracker by hand).
  • Classic PowerBook 180c (68030, KanjiTalk 7.1): runtime-verified on the RC3 archive, 2026-10-23 (SmirkyTracker by hand; the blur band scrolls as lightly as on a G4).
  • Other rows: unchanged from v0.0.6 unless the release PR says otherwise
    (docs PR #1572 updates the README rows and environments.md).

Known issues

  • #1460 macOS 10.9: a focused text field beneath a ZStack unit paints its focus ring and
    caret over the unit.
  • #1498 Toolbox: rows fully covered by a ZStack unit still take keys, Tab, caret blink
    and direct paints (presses are shielded since #1496).
  • #1372 Win32 ScrollView: a short-range-refused traversal leaves already placed children
    at the refused pass's scroll translation while the bars keep the last good layout.
  • #1354 Outside any ScrollView, native layout narrows an out-of-range Y to short without
    refusing it, so content past 32767 wraps to a negative Y on every rail.
  • #1513 Classic: SmirkyTracker draws its list twice at launch and on Back (a ScrollView's
    own viewport report re-runs layout).
  • #1560 SmirkyTracker: in the two-column list, a narrow window lets each card's
    thumbnail draw past the card's border (all rails; clip contract in 0.0.8).
  • #1566 macOS ScrollView (10.6, 10.8 and 26 observed): a wheel scroll to the very bottom
    jitters over the last few points and may not settle at the end (SmirkyTracker's list
    page; the detail page is smooth).
  • #1570 macOS 10.4-10.9: the list page scrolls at a low
    frame rate because each card's shadow is drawn with Core Graphics on every scroll
    step; 10.10 and later are smooth. 0.0.8 moves the shadow to a pre-rendered nine-patch
    and draws only the exposed band (plans: decoration rally page 9 follow-up).
  • #1563 macOS 10.7-10.11: SmirkyCard from an Xcode project generated with a 10.12+ SDK
    and a lower deployment target (the lion-ub1 generator) aborts on launch because QuickJS
    binds clock_gettime, which libSystem exports only from 10.12. The shipped archives are
    not affected (UB1 uses the 10.4u SDK and its own clock; UB2's floor is 10.13).
  • #1527 macOS: menu projection drops the installed main menu before building its
    replacement and dispatches by a tag every rebuild reuses.
  • Carried over from 0.0.6, still open: #496 Win32 MineSweeper's board settles to an
    incompletely painted grid on about one run in three; #501 the standalone audit flushes
    every record to disk, which slows FloppyBird on a 68030; #800 Toolbox HelloWorld's
    scroll bar visibly redraws after each scroll (Mac OS 9.2.2); #802 Mac OS X 10.4 (UB1)
    SimpleViewer's buttons below the status Text are not redrawn after the Text's height
    changes.
  • Excluded on purpose: #1394 (test-rig only); #1515 only if it is visible in a shipped app.

Assets

All five archives were assembled at tag v0.0.7 (commit 193129e) by scripts/release/assemble.py; each .manifest.txt records the commit, allowlist and build commands.

Archive Size SHA-256
Loka-v0.0.7-classic.zip 26M bab0ee5d144ad9180d2ec348d356d4fb2fd3326c400a50dc10cfd2e5294e53b5
Loka-v0.0.7-macos-ub1-tiger.zip 8.3M 314a001ef33befae410bac6c70787ff3f828aea4456e24bea3cf40c9c33dedf2
Loka-v0.0.7-macos-ub2.zip 6.9M 53e274219f71d67af8975c97373d501bbdc783bf2219597bed8e8ec6400bbd52
Loka-v0.0.7-win32-x64.zip 7.7M b3beb96dc0cb487d06b34a93249775fcb80636f8793b7b4a3b3dbed87b5221c9
Loka-v0.0.7-win32-x86-xp.zip 6.1M 8cb3e18ec462dd98ad49918131d779376d3bbfb9262286bc85a662fdb9cb5355

Archive smoke (every application launched; loops judged by LOG.TXT): Windows XP (x86) on a Windows 8.1 VM, Windows x64 on a Windows 11 VM, UB2 on Catalina 10.15.7, UB1 on Mavericks 10.9.5 (i386) and Leopard 10.5.8 (PPC). Classic verdicts are the 38-cell MAME maciix golden bundle (#1562). Owner hardware at RC3 (f693e4a, same shipped code): PowerBook 180c / KanjiTalk 7.1, VAIO P / Windows XP, MacBook (2006) / Tiger 10.4.11.