Repository navigation
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 aPicturesfolder beside the application,
ScrollView(child, {insets}),c.state.viewport(),Card(child),
Box(child, {width, height, padding}),Row(...).naturalWidth()andZStack(...)
lowering. The SmirkyCard window has no outer margin, so the toolbar band reaches the
window edges. Each card states its own margin withBox(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
Cardcontainer with four transparent bands;
CardStylenames 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);ConfirmDialogon 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 answersWM_QUERYENDSESSIONfrom 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,SmallLabelsize 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 renamedexpBlurUnit(); only the first unit (second child)
blurs, on every rail (#1464).NodeComposition::declareis one call per compose and the last declaration wins; the
append doors (ParentScope, the returned reference) are gone (#1324).
SceneManager::getCurrentScene()is gone (#1404).LedgerPolicyand
OPEN_REFUSED_STANDALONEare gone;StandaloneTransactionGuardis the bootstrap
bracket (#1335).Node::operator deleteis gone (#1275).Showaccepts only aState<bool>lvalue: a pointer, a bool, a converting value or a
temporary no longer compiles (#1371).- About and Quit come from
AboutMenu(),QuitMenu()andStandardMenuPresets();
composeDefaultMenuapps 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 answersWM_QUERYENDSESSIONfrom the
edited-document fact (#1512 #1543 #1545).
Evidence and verification
- Classic verdicts: MAME maciix golden bundle grew from 29 to 38 approved cells across
this cycle; owner approvals recorded at 49a8be3 (#1368), 33 cells (#1409), 34 (#1440),
35 (#1445), 36 (#1457), 37 (#1478 #1489 #1491 #1511 #1518), 38 (#1548 #1554). - macOS 10.4-10.9 blur: runtime-verified on Tiger 10.4.11 (MacBook2,1) and
Mavericks 10.9.5 (#1465 #1530 #1549). - Build-verified toolchain fixes: Tiger UB1 under GCC 4.0 (#1253 #1304 #1528), macOS tests
on GCC 4.2 / 10.6 SDK and Mavericks (#1277 #1288 #1556), pre-DR 253 clang (#1276 #1381). - Release tooling and aftercare: Windows archives assembled from WSL with SHA-256 match,
SimpleText and SmirkyCard scripts in every stage, repo links moved to the org
(#1252 #1254 #1255 #1256 #1257 #1260 #1261 #1262 #1263 #1269 #1270 #1271 #1274 #1281). - Process and docs: AGENTS.md refresh (rules only, review policy moved to
docs/ReviewPolicy.md) (#1339 #1340 #1343 #1344 #1345 #1346 #1347); CI refuses a
by-value QuickDraw Pattern (#1410); Win32 VM interactive tasks run under a desktop lock
(#1501); focus-test and host-fake hardening (#1424 #1497). - Internal ownership work with no app-facing change: roster/document windows, node
provenance, Win32/macOS leaf registries and HWND ownership (#1266 #1267 #1268 #1314
#1332 #1333 #1348 #1349 #1351 #1352 #1365 #1400 #1494).
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
bindsclock_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.