jm log
739 commits, newest first
- 2026-11-07538d051datagrid: prove expected Windows assertions without trapping
- 2026-11-0768ebe2fdatagrid: make assertion-child capture inheritable on Windows
- 2026-11-0748b1a08datagrid: bound assertion-child cleanup and retain process ownership
- 2026-11-0753d4459datagrid: isolate the Windows expected assertion from sibling tests
- 2026-11-07e1870d2examples: observe already settled todo results in app tests
- 2026-11-078b8eb98http: discover smoke children from the running executable
- 2026-11-07ede3b85files: accept both Windows path separators in breadcrumbs
- 2026-11-07841818ahttp: isolate smoke cases to enforce their existing deadlines
- 2026-11-07e4eb459files: preserve native absolute roots in plans and breadcrumbs
- 2026-11-0798cb692http: handle headerless loopback responses without a bounds trap
- 2026-11-079980908ci: use binding library pins and bound native jobs
- 2026-11-0684fcad2build: bound Unix Blend2D compiler parallelism
- 2026-11-069a22ed5timefmt: floor negative fractional transition lookups
- 2026-11-060b74f2cprimer: size banner controls before its first frame
- 2026-11-066ca263atimefmt: select the zone in force at a transition
- 2026-10-29fd04c29sqlite3: expose guarded memory-image recovery interfaces
- 2026-10-29be67f55shell: retain native macOS title-bar regression checks
- 2026-10-29a8bb070shell: support unified macOS title bars with native traffic lights
- 2026-10-28b26d073windows: add Windows 11 caption buttons
- 2026-10-28b43bd53shell: hit-test and perform caption buttons the frame draws
- 2026-10-28f18c9ebui: let a frame draw its own caption buttons
- 2026-10-28631d6beui: let a frame share the Windows caption
- 2026-10-2812e904fhttp/fuzz: judge a missing libcurl
- 2026-10-28fe54958build: put Git coreutils ahead of System32
- 2026-10-2801a1cfbgit: do the whole job of an app that keeps its data in git
- 2026-10-284dbc203build: run Windows recipes in Git bash
- 2026-10-28ee235b0jm: move focus off an area the frame did not draw
- 2026-10-26e0b88f9debug: isolate diagnostic scratch from the wrapped temporary arena
- 2026-10-2650a2fbcpath: integrate unique temporary directory names
- 2026-10-25e05be4fhttp: integrate the timeout regression with sanitizer fixes
- 2026-10-2549f0152path: name temp folders by pid and counter, not by the test runner's shared seed
- 2026-10-25ad4b4f3http: assert the cause of a timeout, not its wall-clock lower bound
- 2026-10-246ab62f6debug: print an issue through the runtime's temp allocator, not the wrapper
- 2026-10-241d0ae5ahttp/loopback: store stopping atomically, as stopping loads it
- 2026-10-24b025f5ehttp/libcurl: keep curl's procedures when a library is refused
- 2026-10-2430fa8aeflow: sum a stopped run's test over the items it queued
- 2026-10-228e0dd1dui/render: draw the compose list test's rows with base, not material
- 2026-10-22df28b34http: merge the run-time libcurl open from leita-543
- 2026-10-20d67e755prelude: cleanup
- 2026-10-176d85e47http: open libcurl at run time on Linux when JM_HTTP_DLOPEN is set
- 2026-10-162b146bbui/shell: host polls for a rebuild without running a frame
- 2026-10-161a24916ui/child: let the debug tray ride frames instead of forcing them
- 2026-10-16cf61f75ui/shell: present animation-only frames at 60 Hz on faster displays
- 2026-10-16de62c8fui/shape: drop the contexts before the cache map goes
- 2026-10-16eb3498cui/render: rehash only the draws that changed
- 2026-10-1647b31caui/shell: age the shaped-text cache once a frame
- 2026-10-162d4df0fui/shape: keep shaped text across frames
- 2026-10-162067a50ui/shell: let the debug tray ride frames instead of forcing them
- 2026-10-16f8cd9a9ui: ask no frame for a scroll bar Reveal holds up
- 2026-10-16cc2b9ffui/shell: give wake its own event type so it is never taken for a Dock reopen
- 2026-10-16244325cui/primer: add slot, a row that keeps its height when its content comes and goes
- 2026-10-166f64a46ui/shell: hide the window on macOS at close, reopen it from the Dock
- 2026-10-1698fa423ui: let a frame name the window
- 2026-10-163c0a6d3ui/shell: build SDL3 static on macOS
- 2026-10-1539bba95flow: wake one sleeper per queued item instead of every worker
- 2026-10-14afc84beui: add scaled, a container that draws its children zoomed
- 2026-10-14aa8e374shell: open the window fullscreen when the app asks
- 2026-10-1336ee5acui/primer: colour a list item's leading icon
- 2026-10-125e5c8a1http/loopback: say Connection: close on a connection it closes
- 2026-10-11240e028examples/game: add Survivors, a Vampire Survivors-like
- 2026-10-116d97954game: add a camera the overlay draws through
- 2026-10-11217792fgame: let step and draw annotate the game in a debug overlay
- 2026-10-11e665380game: dump, diff and watch the World as text
- 2026-10-1152d5870game: record runs to tapes and replay them exactly
- 2026-10-116509002game: draw sprites from sheets, pixelated
- 2026-10-11d5e4ca7game: type the Runner by its World
- 2026-10-117a60375game: add a fixed-step game substrate over jm:ui
- 2026-10-117d871c3ui: track held keys with a Key_Up event
- 2026-10-09917cac4ui/shell: let an app keep Escape instead of quitting on it
- 2026-10-09c0e7b21ui: add a save dialog to path picks
- 2026-10-09e0c6ce2Merge branch 'i18n'
- 2026-10-09eab075bexamples/i18n: add Atlas, an app that switches language live
- 2026-10-09262a0adexamples/i18n: add Atlas's messages in twenty-one languages
- 2026-10-094fec4a5i18n: add a translation layer that allocates nothing after load
- 2026-10-09c8dce48ui/fluent: add the globe icon
- 2026-10-089d00e63Merge branch 'ui-assist-expand'
- 2026-10-0873ed069ui: list a recording's eventful frames and diff one frame as text
- 2026-10-08aa0edd1examples/material-kitchen: put the page's scroll bar at the window's edge
- 2026-10-08e791c21ui: hand an assistive technology's expand and collapse to the area named
- 2026-10-08823f80fchild: remove a build output committed at the root by the gestures merge
- 2026-10-081b306c7examples/fluent-kitchen: accept the pie avatar's initials cut at both sides
- 2026-10-08eba8e7fui/scrub: step through a recording forwards and backwards in a window
- 2026-10-083e6895aui: embed a laid-out frame as a picture, and record boxes without the inspector
- 2026-10-08a0a4faaui: check a recording's replay against blessed frame digests
- 2026-10-08b0941a6ui/primer: let an app register icons of its own beside the octicons
- 2026-10-084b7b9acui/material: clip carousel items to the focus ring's rounded rect
- 2026-10-087c5565eMerge branch 'gestures'
- 2026-10-08e139143ui: restore pick_file, a file dialog beside pick_folder
- 2026-10-088f01a32ui: pick a folder with the platform's dialog, and drop a respawned child's needs
- 2026-10-08e911f0dui/primer: leave a caller's tooltip alone when an icon button has none
- 2026-10-0888ecbeeexamples/text-lab: demonstrate and test input method composition
- 2026-10-08b948c24ui: draw an input method's composition in every design system's field
- 2026-10-081843b78ui: compose input method text beside the buffer, and place its window
- 2026-10-08f8034aaui: undo and redo a text field's edits, then hand the shortcut on
- 2026-10-08d8fc386ui/shell: hand a frame's needs and commands on before it renders
- 2026-10-08a73d06dui/datagrid: move CSV export out of the grid, over its view
- 2026-10-087bea9afui/datagrid: ask a remote's pages of the caller's fetch, not by need
- 2026-10-073ececafui/shell: end run on SIGINT or SIGTERM as closing the window does
- 2026-10-0704d67f0ui/datagrid: ask a grid's rows of one Rows, a table or a remote
- 2026-10-07a8fafdeui/datagrid: drop row grouping
- 2026-10-076a656e6ui/datagrid: give the cell slot its own user pointer
- 2026-10-0700980beui/accesskit: give AccessKit node bounds in physical pixels
- 2026-10-07a9359efui/datagrid: make a filter's rule a union of its kinds
- 2026-10-062e26b97Merge branch 'ergon-phase0'
- 2026-10-0672d0676ui/ops: move the wire version to 37 for Role Password_Field
- 2026-10-06b77f523ui: click the topmost of a name and scroll at a point in a probe
- 2026-10-060b14d25stream: start the sources on the first step
- 2026-10-06fffbaa2ui/datagrid: say Loading… until a paged query has an answer
- 2026-10-06dc8e9b0ui/datagrid: key a failed page's skin slot by its row
- 2026-10-062034acdui/primer: check select-all selected before checking the clipboard
- 2026-10-062cc7526ui: draw a secret field's characters as U+25CF
- 2026-10-06e8472d0ui/primer: test that clicks on a secret input land on rune boundaries
- 2026-10-064cc7e2aui/primer: take a password in TextInput with secret
- 2026-10-063e17030ui: edit secret text for password fields
- 2026-10-06c399672Merge branch 'datagrid'
- 2026-10-06def2a8bui/primer: count a Set panel's values under the other filters only
- 2026-10-06c68ecaaui/datagrid: build a client order over frames, drawing the old one stale
- 2026-10-06908bbcfui/primer: add Text and Range filter panels to the data grid
- 2026-10-0616c0f80ui/render: type text in a headless session with -type
- 2026-10-066593b93Merge branch 'main' into datagrid
- 2026-10-06707a55cui/render: accept Blend2D's coverage at a band's bottom edge in fuzz
- 2026-10-06619d0c5Merge branch 'http-async'
- 2026-10-06058eae0ui/datagrid: size the grid from what its container offers
- 2026-10-06d967f7cMerge branch 'main' into datagrid
- 2026-10-06225913dui/primer: pin columns to the right from the Columns menu
- 2026-10-06ab5ef11ui/datagrid/fuzz: split the suites' checks past eight branches
- 2026-10-06ca10efdMerge branch 'main' into http-async
- 2026-10-0698b5301examples/files: test that a job is pending until its answer is in
- 2026-10-062ac6472stream: keep a stop made before run starts
- 2026-10-06f64bb8eui/datagrid: split procs past eight branches
- 2026-10-068866928ui/datagrid: test rows of their own heights through the grid
- 2026-10-065e7d17fui/datagrid: prove a steady paged frame allocates nothing too
- 2026-10-066186dceui: keep a frame's needs in an arena used again each frame
- 2026-10-068805f9bui/primer: keep a grid's header filter buttons out of the Tab order
- 2026-10-06162a05aui/fluent: dress jm:ui/datagrid in Fluent's Table look
- 2026-10-06a4465b4ui/primer: rebuild DataTable on jm:ui/datagrid
- 2026-10-06b25195bui/design: share thousands between the design systems
- 2026-10-063c88adeMerge branch 'http-async'
- 2026-10-065bc56e2ui/datagrid: lay a skin's slots out where the grid draws them
- 2026-10-0624a7420ui: let a probe answer its needs through a data host
- 2026-10-062588199Merge branch 'sqlgen'
- 2026-10-061db132aui/datagrid: give a skin what its toolbar needs
- 2026-10-067f26fc2ui/datagrid/fuzz: fuzz the grid's model and its paged mode
- 2026-10-06d30ee11Merge branch 'main' into http-async
- 2026-10-06f607248examples/todo/app: bound waits only against a hang, and wait for Active
- 2026-10-069532b9dstream: give the pinned pool's quiescence test 30 s, not 2 s
- 2026-10-06da4ac6afuzz: give the killed child's test a bound only a wait-out reaches
- 2026-10-06bf88083sh: bound the timeout test's waits only against a hang
- 2026-10-0664f3b0aui/shell: bound wait_for_child's test only against a hang
- 2026-10-06981dfdeui: record into a folder of the test's own
- 2026-10-06cb41ecbexamples/gallery: give each host and test file a folder of its own
- 2026-10-06f3f9bc0jm-sqlgen: generate typed queries for PostgreSQL over jm:pq
- 2026-10-068cb603bexamples/files: wait on the host only to bound a hang
- 2026-10-061c17d96examples/files: trash under names no other run uses
- 2026-10-06ce26defpq: keep exec_values' NUL refusals within 100 columns
- 2026-10-06d564c55examples/files: give each host and test folder a name of its own
- 2026-10-0660f3e55examples/files: retire a job only once its answer is in the inbox
- 2026-10-067a4bca0examples/7guis/cells: count a frame's work instead of timing it
- 2026-10-063ff7b3fjustfile: run flow and http/fuzz with the other packages
- 2026-10-062043abaflow: show the split with a meeting, not with costly work
- 2026-10-06254a877http/fuzz: hold deadlines to a 5 s slack that only a hang exceeds
- 2026-10-06ba2b7d6ui/datagrid: find a paged grid's end from the pages it holds
- 2026-10-06fa3a1a9http: bound only hangs in the client's tests
- 2026-10-062a338b8http/loopback: dial until the acceptor wakes
- 2026-10-06c5c827ejm-sqlgen: split the emitters and seeding by engine
- 2026-10-0670c600dMerge branch 'plot'
- 2026-10-06eaf52cdprimer-kitchen: name the dense chart's span and its one bad hour
- 2026-10-06a05aa17ui/plot: hand the narrow-chart test's label scan to a helper
- 2026-10-067141ce1ui/plot: keep gridlines recessive in high-contrast themes
- 2026-10-06659258bdocs: list ui/plot and what its fuzz suite found
- 2026-10-06e4cb4e4pq: add typed parameters, exact readers and a statement shape check
- 2026-10-066c59b77ui/plot: test hairlines at 1x, 1.5x and 2x and a phone-width chart
- 2026-10-06812deddui: let a probe frame draw at a display density
- 2026-10-0683e56f0ui/plot: make the no-allocation test count, and cover bars and boxes
- 2026-10-06bfe430fui/datagrid: answer pages from memory, and test the paged grid
- 2026-10-066db6aacprimer-kitchen: a charts page of the admin's charts
- 2026-10-06311f67etools/ui-bench: time the data grid over 100,000 rows
- 2026-10-06cc7f73cui/render/fuzz: read Arial on macOS
- 2026-10-06fcb50a2ui/render: move scrolled regions that meet or border other clips
- 2026-10-0610de42fui/datagrid: draw the grid over the model, with its input
- 2026-10-0691c197bjm-sqlgen: generate a guard and a slice for :many queries
- 2026-10-06ff885ceui/plot: probe log, step, area, two-axis and bar layouts
- 2026-10-06744702dui/plot: end a value axis short of a step its data barely enters
- 2026-10-069ffc434ui/datagrid: wrap the model at 100 columns
- 2026-10-065831d9fui/plot: write each log tick on its own magnitude
- 2026-10-0661998c3ui/plot: split the procs that branch more than eight ways
- 2026-10-06309157bexamples/todo: generate the store's queries with jm-sqlgen
- 2026-10-06f8cb06cjm-sqlgen: read through jm:sqlite3, test kinds the store lacks
- 2026-10-069a66364ui/plot: pin the tick counts the week and half-hour tests expect
- 2026-10-0626fff79ui/plot: wrap the package to jm's 100 columns
- 2026-10-069adeb69sqlite3: add exact typed readers and a statement shape check
- 2026-10-062341fb4ui/plot: build chart styles from the Primer and Fluent themes
- 2026-10-065ab9c71jm-sqlgen: take parameters in the order the params line declares
- 2026-10-06f07b08cui/plot: draw line, area, bar and box charts
- 2026-10-066dba6a9ui/plot: lay out and listen like a chart: legend, axes, tooltip
- 2026-10-0678a3cfeui/ops: share growing a rect by a margin
- 2026-10-0661f3c4dui/plot/fuzz: keep the cases the first runs found
- 2026-10-06bb26209ui/plot: fuzz ticks, labels, decimation and box stats
- 2026-10-069ace3c8ui/plot: decimate lines, summarise boxes, stack, check palettes
- 2026-10-06f890b05ui/plot: tick time axes on a zone's calendar
- 2026-10-06c9d0f77ui/plot: add nice ticks, scales and number labels
- 2026-10-0685deaf0Merge branch 'main' into datagrid
- 2026-10-06f76654bui: tell a frame its display density
- 2026-10-052e68c5aui/datagrid: build the query, saved views and the page cache
- 2026-10-056cbea56ui: let a component hash with FNV as ids and needs do
- 2026-10-05f746393ui/datagrid: solve column widths, row heights and the selection
- 2026-10-05967ac07Merge branch 'http-async'
- 2026-10-0555edc27ui: report the version of a need's delivery
- 2026-10-05cc9cfbbui: name the innermost open container's id
- 2026-10-058570acdjm-sqlgen: generate typed Odin from a package's SQLite queries
- 2026-10-056bb538ctools/wasm-bench: count the work that scaling is checked on
- 2026-10-057eb3542sqlite3: build with column metadata, expose origin and parameter names
- 2026-10-058e6563eMerge branch 'http-async'
- 2026-10-0564994a6stream: queue the sources under the lock that decides quiescence
- 2026-10-05b5937f9ui/ops: give a semantic node a table's counts, places and sort
- 2026-10-059f5bcbdstream: never queue a node that has finished
- 2026-10-05103ca26Merge branch 'primer-datepicker'
- 2026-10-050d8d892ui/primer: reserve picker widths, type ranges, key the months page
- 2026-10-0562f9d6dui/primer: put a block button's trailing action at its end
- 2026-10-0590dda88ui/primer: claim a keyed form control's column apart from it
- 2026-10-057a16b05Merge branch 'http-async'
- 2026-10-057e16869http: say that on_done runs on the I/O thread and must not block
- 2026-10-05b467d73git: name zlib as a library so curl and git link it once
- 2026-10-05e0009cbui/primer: spare sticky toasts, copy text and pack narrow toasts
- 2026-10-0529e1412Merge branch 'primer-toast'
- 2026-10-05d57ea67Merge branch 'primer-datepicker'
- 2026-10-05f6d327cMerge branch 'http-async'
- 2026-10-05182ee4aMerge branch 'pq-describe'
- 2026-10-05ffc1390http/fuzz: fuzz the client against hostile servers and a model
- 2026-10-0563a7a0fhttp: free the client thread's temp allocator after each pass
- 2026-10-05ff88527ui/primer: add a date picker and a date range picker
- 2026-10-05a7bc227design: share date arithmetic for the calendars
- 2026-10-05fa65938http: add a Client whose requests can be cancelled from any thread
- 2026-10-056530561http: configure blocking transfers through one shared setup
- 2026-10-05d586afbui/primer: add a toast queue and toaster from Primer CSS
- 2026-10-0592034bapq: describe a statement's parameters and columns without running it
- 2026-10-05be79445pq: bind libpq's prepare, describe and field metadata calls
- 2026-10-05968c037ops, ui, accesskit: name a grid's column headers and the current date
- 2026-10-0549662e9examples/files: rename, copy, move, trash and undo, at any window size
- 2026-10-05093d031examples/files: add the commands and the pure domains that decide them
- 2026-10-05a6312a0ui/fluent: export toolbar_padding
- 2026-10-052eed383ui/fluent: report a search box's area so a caller can focus it
- 2026-10-0580305a5ui/fluent: keep a menu's icon column for items without an icon
- 2026-10-05df34acaui/fluent: report a table row's context-menu press and where it fell
- 2026-10-056fe065cui/fluent: cut a nav row's long label with an ellipsis
- 2026-10-05784b4c5ui/fluent: measure buttons and breadcrumb parts before drawing them
- 2026-10-05e186bfbui/shell: scroll by a trackpad's points and its momentum on macOS
- 2026-10-05fab03d3ui/shell: let an app set the smallest size its window may be made
- 2026-10-05b0d736dui/shell: rename ui/sdl to ui/shell
- 2026-10-0561f0086ui, examples: format with odinfmt
- 2026-10-05db4133eexamples/common: rename Db_Thread to DB_Thread
- 2026-10-05b02ef0fui: rename Ui_Proc to UI_Proc
- 2026-10-0509433d7jm: hold mutexes with guards instead of paired lock and unlock
- 2026-10-059931e08stream: let exactly one caller of start queue the sources
- 2026-10-04b350b43examples/primer-kitchen: open containers as guards
- 2026-10-042a0f9e2examples/material-kitchen: open containers as guards
- 2026-10-0418e60ebexamples/fluent-kitchen: open containers as guards
- 2026-10-04ca1d40aexamples: open containers as guards in 7guis, kitchen and text-lab
- 2026-10-04b24ee94examples: make common.cell a guard and move its callers onto guards
- 2026-10-04bf40a64ui/primer: give every container opener a guard
- 2026-10-04cab0afcui: guard grid, overlay and scope, and close a statement guard with its block
- 2026-10-0493cde5cexamples/todo: split the contract into commands, queries and domain rules
- 2026-10-043830f52examples/todo: wrap long calls and name the pipeline's streams
- 2026-10-04081efd3stream: hold the timer mutex with a guard in disarm and fired
- 2026-10-040f187c2ui/blend2d: link the C++ runtime from the foreign import
- 2026-10-03719c67eexamples/7guis: the seven 7GUIs tasks, a program each
- 2026-10-03a5c6d01material: open or shut a reveal row on a flick
- 2026-10-03a31ba97material: fling the carousel as Compose snaps and glides it
- 2026-10-0313d8c0cui/probe: click at a point and with a click count
- 2026-10-035c6557ematerial: read the bottom sheet's drag through ui.drag
- 2026-10-03df688d5primer: drive the pane handle and the textarea grip by ui.drag
- 2026-10-031b35ee6material: drive list rows, the drag handle, dial and carousel by ui.drag
- 2026-10-0353336f9ui: drive the scroll bar thumb and the debug tray through ui.drag
- 2026-10-032c08745gallery: let the viewer's pan glide on after a fast release
- 2026-10-03d4975e6material: estimate a sheet's fling from timed moves, not the last one
- 2026-10-0338f73aaui: let scroll_box and list scroll by dragging, with a sling
- 2026-10-03221d83fui: add a drag gesture, a velocity tracker and a sling
- 2026-10-03434dffbui: stamp input events with their time and version the input wire
- 2026-10-036c8c974ui, ui/sdl: carry scroll in pixels and keep macOS momentum
- 2026-10-03b6b6d38branding: replace the stacked-bars mark with the kit mark
- 2026-10-0393b086ejm: point package comments at the guides in docs/
- 2026-10-0367a89d8docs/ui: show every example app and a recorded gallery demo
- 2026-10-031579c9bdocs: make the guides scannable
- 2026-10-03d452bd0justfile: render GitHub alerts in the readme recipe
- 2026-10-03bbe981bkitchen: lint every page in every theme as text against a lint.txt
- 2026-10-03c01fd8aui/sdl: give the hot-reload hosts one main, run_host_from_args
- 2026-10-0327ae802justfile: copy native libraries into a fresh worktree from the main one
- 2026-10-03d963156tools: rename each kit's vendored source/ to upstream/
- 2026-10-038b09bd8justfile: let test and check take the packages to run
- 2026-10-0336605ebjustfile: run the four hot-reloaded apps through one _hot recipe
- 2026-10-0307c3928tools/hot-watch: delete old child builds as new ones land
- 2026-10-03f06b295justfile: give the hot-reloaded apps a release mode
- 2026-10-03757fe8ftools/hot-watch: add a -release flag that builds with -o:speed
- 2026-10-032e628ddjustfile: prefix the odin-run recipes with their section name
- 2026-10-03f6ee8a7justfile: add a readme recipe that renders the docs and opens them
- 2026-10-0357c2e16readme: lead with what jm offers and move the reference into docs
- 2026-10-039e9fb57branding: add the jm mark, hero lockup and kitchen screenshots
- 2026-10-03c11dd3eLICENSE: license jm under Apache-2.0 and list third-party notices
- 2026-10-0359897a5primer: draw each octicon path on its own, even-odd ones too
- 2026-10-03884e878ops, render: give a path its own fill rule
- 2026-10-036de0cc2primer-kitchen: add an Octicons page with a pinned fuzzy filter
- 2026-10-033db5332text-lab: add a Stress page that finds how much text holds 60 fps
- 2026-10-03147e061material: make toolbars and app bars one Tab stop
- 2026-10-037ccb54cprimer: rove a menu or listbox action list unless told otherwise
- 2026-10-032b725daui, kitchen: show the group check ran before trusting it found nothing
- 2026-10-035194b02ui, kitchen: fail a kitchen page whose group has several Tab stops
- 2026-10-03aa0cb93material: add a radio group that is one Tab stop
- 2026-10-03ff8b892material: give the menu its arrow keys and focus return
- 2026-10-03596e2edui: give focus back from a trap that stops trapping while drawn
- 2026-10-03fb9712ematerial: make a single-select button group a roving radio group
- 2026-10-0396f14e9material: make a single-select segmented button a roving radio group
- 2026-10-033d27541ui: name the focused area's tag in one probe helper
- 2026-10-03c071fb1material: make tabs, the navigation bar and the rail one Tab stop each
- 2026-10-036f20fa0fluent: give the tree a container that is one Tab stop
- 2026-10-03f5e22d5fluent: give the menu its arrow keys and focus return
- 2026-10-0378f5184ui: remember a trap's return before the request that focuses it
- 2026-10-03a61a4e1fluent: rove carousel and teaching popover dots as their specs say
- 2026-10-03d43e0e2fluent: make the nav one Tab stop entered at the selected row
- 2026-10-033d1ea18ui: walk Tab in reading order, a deferred layer where it was recorded
- 2026-10-03277c044fluent: make a toolbar one Tab stop
- 2026-10-0389f6bb7fluent: make radio groups and swatch pickers one Tab stop
- 2026-10-033dd3ea2fluent: rove the tab list's focus as its spec says
- 2026-10-03343abfeprimer: make a radio group one Tab stop through a core focus scope
- 2026-10-03b6a37c6ui: say on a Focus event which key moved focus
- 2026-10-03044ad35primer: rove underline panel tabs through a core focus scope
- 2026-10-03bec6990primer: make a toolbar button group one Tab stop
- 2026-10-0346fa157primer: rove the action list through a core focus scope
- 2026-10-0342b95a9primer: rove the tree view through a core focus scope
- 2026-10-03a181094ui: let only a text field keep a roving scope's arrows
- 2026-10-0391235aeui: enter a roving scope at its entry before where focus last was
- 2026-10-033f5aa66primer: rove the action bar through a core focus scope
- 2026-10-039a46a45design, primer: keep a button out of Tab's order without deafening it
- 2026-10-03f9355eeui: end a roving scope's reach at a trap inside it
- 2026-10-033ce0f94ops, ui: let an area take focus without being a Tab stop
- 2026-10-0302b1832ui: draw focus scopes and Tab stops under a debug toggle
- 2026-10-0375cf06fops, ui: rove focus scopes and give focus back from traps
- 2026-10-02ce5162cprimer: navigation menus on action menu and action list
- 2026-10-027bacbb3primer: build nav list on action list
- 2026-10-0291dfe27primer: nest action list sub-items inside their parent, mark the current link
- 2026-10-020ada653primer: head underline nav with its hidden navigation heading
- 2026-10-024aa164bprimer: scroll the row or tab focus moves to into view
- 2026-10-022fd6879ui: scroll a rect into view from inside a scroll box
- 2026-10-026dd9de2primer: ring navigation outlines through design.paint_focus_visible_ring
- 2026-10-02b7c9f9fprimer: nav list
- 2026-10-023cab0f6primer: breadcrumbs and underline nav
- 2026-10-021a4332bprimer: pagination, sub nav and underline panels
- 2026-10-02430fdecprimer: tree view
- 2026-10-02efb5b96ops, ui, accesskit: say what a tree, its items and the current item are
- 2026-10-0288254cdprimer: keybinding hints in buttons and in icon button tooltips
- 2026-10-02358c03cprimer: action bar
- 2026-10-02b5e2602primer: select panel
- 2026-10-027a48753primer: text input with tokens and autocomplete
- 2026-10-02a8fd721primer: action menu
- 2026-10-02520e45dprimer: action list
- 2026-10-02ceacb4aprimer: give a button an expanded state and an optional tab stop
- 2026-10-02b6c7ab9primer-kit: cite focus-zone for list, menu and toolbar keys
- 2026-10-021230c05ops, ui, accesskit: carry an active descendant and checkable menu items
- 2026-10-027c060a8primer: page layout sidebar on the pane's width machinery
- 2026-10-022cb27ceprimer: button group, and one keyboard-focus ring for every kit
- 2026-10-0286d27b2fluent, primer: say why focus is not trapped now that Tab moves it
- 2026-10-0200f09a1primer-kitchen: the overlay pages
- 2026-10-0264a52d6primer: dialog and confirmation dialog
- 2026-10-02682c6ccprimer: overlay, anchored overlay, popover, tooltip and details
- 2026-10-022cc0eaaui: say where a focus scope must be recorded to hold its widgets
- 2026-10-02cad9db8ui: fit a scroll box to its content and name the widget just closed
- 2026-10-02b82e34aops, ui, render: fade what is drawn inside an opacity push
- 2026-10-02842cc18ops, ui: move focus by Tab, trap it in scopes, and focus a scope's first
- 2026-10-021cdc01dops, ui: dismiss stacked popups newest first, by Escape and outside press
- 2026-10-0208288faops, ui: place popups by ordered side and alignment fallbacks
- 2026-10-02809c429tools/primer: cite the vendored anchored-position for placement
- 2026-10-0203723adprimer: show a table group's count as a number and speak row or rows
- 2026-10-0259a0cf5primer: data table and its pagination
- 2026-10-02ec71902primer: page header, page layout and split page layout
- 2026-10-024b6e475primer: stack, card and header, and their kitchen pages
- 2026-10-024f77010ui: tell a component what its container offers before it opens
- 2026-10-02b86bf2bops, ui: pin content to the top of the box it scrolls in
- 2026-10-022b89490ui: scroll content that sizes itself sideways
- 2026-10-022312a0bui: lay children in a grid of columns sized from their cells
- 2026-10-0244c360bui: record a run of widgets to place once its size is known
- 2026-10-02d357b0aui: justify a flex's children along its main axis
- 2026-10-0247c6fc5primer: banner, inline message, blankslate and timeline, and their pages
- 2026-10-0292401c9primer: heading, text, truncate and relative time
- 2026-10-022526088ui: expand tabs to tab stops under the preserving white-space modes
- 2026-10-024f3602cui, design: balance a paragraph's lines and collapse white space as CSS
- 2026-10-0227d3e97ops, ui, accesskit: carry a heading's level and a region landmark
- 2026-10-0256c9592ui: give every widget the window's size as Ctx.viewport
- 2026-10-021776365primer-kitchen: pages for the form controls
- 2026-10-02cdc0937primer: segmented control
- 2026-10-02d5d4801primer: text input, textarea and select
- 2026-10-02766f2cedesign: name the event kinds a text field listens for
- 2026-10-0212ad42dprimer: form control, checkbox, radio, toggle switch and groups
- 2026-10-02b298338testutil: compare floats within rounding
- 2026-10-0236b04e6ops, accesskit: say a field's value is invalid
- 2026-10-024b9741eui: move a caret between lines and keep it in view
- 2026-10-025a29306ui: record the replay test's file in the temp directory
- 2026-10-022194693primer: avatars, avatar stacks, progress bars and skeletons
- 2026-10-0272e9b73primer: labels, tokens, tags, branch names, badges and label groups
- 2026-10-026128290ui: say how many children a row holds and where they end
- 2026-10-0268b9ea5ops, render: draw an image at an alpha
- 2026-10-02e7f5862ui, sdl, child: tell components the user asked for less motion
- 2026-10-023743ee5ui: measure a row's children before choosing which to show
- 2026-10-02b4bcfbfexamples/material-kitchen: draw on the shared kitchen scaffold
- 2026-10-028bd7e52examples/fluent-kitchen: draw on the shared kitchen scaffold
- 2026-10-02c307eeaexamples/kitchen: run only the frames a step needs
- 2026-10-02a6609b7primer: link, links in prose, and the keybinding hint
- 2026-10-025c2e29eprimer-kitchen: draw the system sans at Primer's three weights
- 2026-10-0213cbad1ops, render, shape: draw a variable font at a chosen weight
- 2026-10-02b1b218bui/glyf: decode TrueType outlines at a variable font's axis values
- 2026-10-021b52262primer-kitchen: give each component family its own slot of demo state
- 2026-10-02e128ac3primer: button, icon button, counter label and spinner, and the kitchen
- 2026-10-029237345examples/kitchen: share a kitchen's state grid, session and command line
- 2026-10-027070253design: parse SVG elliptical arcs, which octicons draw with
- 2026-10-02d2c9876primer: the Primer system's themes, type, sizes, states, focus and icons
- 2026-10-025b7e83fops, design: share rgba and state_if, which a third system needed
- 2026-10-024051dd7tools/primer: record where dark dimmed binds under AA
- 2026-10-027c0a8cebase: lower the hairline floor to 1.3:1, which Primer's borders meet
- 2026-10-021a8c903tools/primer: spec the navigation components
- 2026-10-02248bc4atools/primer: spec the list and picker components
- 2026-10-0250ba335tools/primer: spec the label and status components
- 2026-10-02714c36btools/primer: spec the form-input components
- 2026-10-023d8adc9tools/primer: vendor octicons' data where git tracks it
- 2026-10-02f033919tools/primer: put the wide viewport range at xxlarge, as its token says
- 2026-10-0270b496etools/primer: spec the layout and data components
- 2026-10-021c71a72tools/primer: vendor the behaviour packages Primer React depends on
- 2026-10-024fe54a6tools/primer: spec the overlay components
- 2026-10-02e68d30etools/primer: spec the message and text components
- 2026-10-023d152f2tools/primer: spec the button-family components
- 2026-10-02fb2f0dbtools/primer: let a citation name a hyphenated file
- 2026-10-0288fdc7fdesign: paint sharp inset box shadows
- 2026-10-0214d77e1design: share per-state colour roles and colour fades
- 2026-10-028f49d3bdesign-tokens: generate ui/primer/tokens from the primer-kit
- 2026-10-02f647f28tools/primer: cite a file by path where its base name repeats
- 2026-10-0223dad43tools/primer: take a component's status verbatim from its docs file
- 2026-10-026e1502atools/primer: vendor Primer and write the kit's tokens, schemas, foundations
- 2026-10-02f6ba63fui: keep the density scale under root overlays
- 2026-10-02154f9c2examples/files: a file browser over the real filesystem
- 2026-10-0202b234cexamples/gallery: a grid of pictures made on demand, zoomed by patches
- 2026-10-02046d46aexamples/common: share the fonts, the cells and the loading delay
- 2026-10-02d5171deexamples/todo: TodoMVC on needs, commands and a SQLite data engine
- 2026-10-02f95b0c5sqlite3: install the connection's change hooks
- 2026-10-023490313ui/fluent: report a row's double click, take an image as cell media
- 2026-10-022e6c500ui: own image paths, run top layers last, step a list by the wheel
- 2026-10-02ebf05d8ui: take needs and commands through the frame
- 2026-10-026a231d6ui/fluent: collapse the nav to a rail
- 2026-10-02eb0bfcdtools/stream-bench: time, stress and find the crossover of jm:stream
- 2026-10-02032c3bbstream/fuzz: fuzz random pipelines against a sequential model
- 2026-10-02d43d5e6stream: add a non-blocking dataflow pipeline package
- 2026-10-02e00e77astream/ring: add a padded one-producer one-consumer ring
- 2026-10-01102bd19ui/accesskit, ui/sdl: bind the Windows and macOS adapters
- 2026-10-017aa4009ui/sdl: give the window's semantics to assistive technology through AccessKit
- 2026-10-019e3546aui/accesskit: bind AccessKit and build its tree from a frame's semantics
- 2026-10-015bd1813ui: take a focus request from the platform, and tell it the focused area
- 2026-10-010e693cbmaterial: read the date picker as a grid, pick lists as list boxes, and captions as names
- 2026-10-01948a608fluent: read the calendar as a grid, pickers as list boxes, and captions as names
- 2026-10-01cd5072dui: let an overlay's node take the overlay's own area and a box
- 2026-10-012d96f11ui: name a node by another's label, describe overlays, and read headings
- 2026-10-01406cbd5fluent: declare every component's semantics, and take Escape without focus
- 2026-10-01f92862fmaterial: declare every component's semantics, and take Escape without focus
- 2026-10-01f54287aui: nest a widget's parts under it whatever the order of declarations
- 2026-10-01c6de4bfui: nest semantic nodes by their declared parent, and describe a widget's parts
- 2026-10-01b70d77fui: describe widgets to assistive technology, and take keys without focus
- 2026-10-01ffe89ebui/sdl: expect the counter's struct blob on the frame its count changes
- 2026-10-01cb6bbd8ui: persist a struct as keyed lines of text, and let an app own a scroll offset
- 2026-10-01bf693f8ui: record a session's inputs and replay them headless
- 2026-10-0173e2fbbui: keep an app's state in the host across a hot-reload respawn
- 2026-10-01c10e779ui: show a widget's data values in the inspector
- 2026-10-0150b2a7bui: drag by tag name in the probe and the headless session
- 2026-10-0133884f0ui: let a tag carry its widget's bounds, so a probe finds text
- 2026-10-018c857ceui: read resident memory without allocating
- 2026-10-01518459aui: let a modal overlay cover its whole enclosing container
- 2026-10-014b6f04bui: truncate fluent text and material list rows with max_lines
- 2026-10-012d82a92Merge branch 'text-truncate'
- 2026-10-0113fe7bbMerge remote-tracking branch 'github/main'
- 2026-10-01baa24f5ui: truncate a paragraph at max_lines with an ellipsis
- 2026-09-300260e70tools/mkpatch: write the compressed asset and patches for a release
- 2026-09-30f128bd6selfupdate: take a patch or the compressed asset before the full one
- 2026-09-30431842ezstd/fuzz: check that a damaged patch never decodes to other bytes
- 2026-09-30c488592zstd: bind libzstd, with binary patches over its prefix mode
- 2026-09-30e9c66dczstd: vendor the zstd 1.5.7 single-file library
- 2026-09-309ddfdb4ui: keep flatten's stacks on the Frame
- 2026-09-30a5ec700ui/material: wrap any control in a tooltip
- 2026-09-3069ea2aeui/material: add text, a selectable wrapping text widget
- 2026-09-30331e339ui: send Enter and Leave to observer areas
- 2026-09-302061f3fui/ops: add observer input areas
- 2026-09-30ee539c1ui/base: add box to fix or bound a body's size
- 2026-09-302dd8667ui: bound a subtree's size with sized
- 2026-09-309da6608ui: align row children on their first baselines
- 2026-09-30c602702ui: open URLs through a platform request
- 2026-09-30870adb4ui/fluent: size auto-width block text to its widest line
- 2026-09-3032e2442ui/fluent: stack an accordion item's body in a column
- 2026-09-30e813c3cui/fluent: draw focus indicators only for keyboard focus
- 2026-09-309047b31ui/design: carry keyboard focus on Control as focus_visible
- 2026-09-307556a5eui: report whether focus came from a key
- 2026-09-30b75ffe0ui: make dialog, toast and text block text selectable
- 2026-09-307a17e58material: meet base's outline axiom and cite the selection default
- 2026-09-3065dff6fui: make label text selectable, even inside clickable cards
- 2026-09-30a8d0b0fui: select text with the pointer
- 2026-09-308dc6a3eui: highlight selected text in the design system's colours
- 2026-09-30a5a35d7ui: select, copy and paste text in inputs
- 2026-09-300081cc7ui: carry clipboard, focus and cursor to the platform
- 2026-09-30359969ddebug: poison arena resets and check lifetime claims in tests
- 2026-09-303f4fd06tools/fluent: take in the fluent-kit and pin the icons ui/fluent draws
- 2026-09-3034fc99btools/material: take in the m3e-kit that ui/material is generated from
- 2026-09-30e9d6922justfile: clean every compiled library, not four of six
- 2026-09-30ac0af61justfile: section the recipes by the package or tool they serve
- 2026-09-30fece37fjustfile: find packages for check, test and link, and run them in parallel
- 2026-09-30296b606ci: link every program and test ui/sdl on all three platforms
- 2026-09-30763e9bejustfile: list the programs once, for check and ci
- 2026-09-308161c84ci: pin every action to a commit hash
- 2026-09-304097d98setup: install and check what the recipes need on each platform
- 2026-09-308170966justfile: find homebrew's keg-only libpq on macos
- 2026-09-30241831csqlite3, wasm, pg_query: skip -lm and -lpthread on darwin
- 2026-09-309355795ui: fail when two widgets claim one id in a frame
- 2026-09-304a74f4cui: give each widget call its own id by default
- 2026-09-30f26810bui/fluent, ui/material: key inner openers from the component's own id
- 2026-09-30b221e09ui: claim ids through claim_id and carry guard handles on a stack
- 2026-09-3033b6d3aui: register an app's fonts under their own ids
- 2026-09-30b063b95build: fetch Blend2D, asmjit and libgit2 at pinned commits
- 2026-09-30195fbe0build: stop the unix blend2d and libgit2 recipes at the first failure
- 2026-09-3099e9671ui: fall back to other fonts for runes a font lacks
- 2026-09-309218608ui: move text inputs onto paragraphs and graphemes
- 2026-09-307a4b6e3ui: lay out paragraphs with wrapping and bidi
- 2026-09-3032340b8ui: shape text with vendored kb_text_shape
- 2026-09-303969116render: align mask buffers to 16 bytes
- 2026-09-30a7aa710examples: add a text lab for shaper work
- 2026-09-3017bd284ui: carry clusters on glyphs and place carets from them
- 2026-09-30129513ffluent: say why the popover's arrow has no shadow
- 2026-09-30538bf63design: drop the blur-free shadow approximation
- 2026-09-301d805admaterial: paint elevation as a key and an ambient shadow per level
- 2026-09-30ff9de0adesign: paint box-shadow layers as Shadow ops
- 2026-09-30ef92096render: draw Shadow ops as exact Gaussian box shadows, cached
- 2026-09-30df9ae5aui: carry Shadow draws through the frame
- 2026-09-3042f975fops: add a Shadow op for the soft shadow of a rounded rect
- 2026-09-30dae9582fluent-kitchen: give each skeleton card its own scope
- 2026-09-303875cb4fluent: draw the colour picker, skeleton and progress fades as gradients
- 2026-09-2965b5c8dfluent-kitchen: pages for every new component, and the toolkit's own nav
- 2026-09-297315bfdfluent: toast, message bar, popover, teaching popover, info label, carousel
- 2026-09-29df3b599fluent: calendar, date picker and time picker
- 2026-09-29add0357fluent: table, list, tag, persona, avatar group, skeleton, text, image
- 2026-09-293e53b5cfluent: combobox, select, spin button, search box and the pickers
- 2026-09-2968d137dfluent: nav, drawer, breadcrumb and tree
- 2026-09-2913fb4ecfluent: open the menu and tooltip by placement
- 2026-09-2994884e3material: open menus, tooltips, dropdowns and slider labels by placement
- 2026-09-2958c826aui: place popups in flatten, flipped and shifted to stay in the window
- 2026-09-29ab7b8fedesign: hold the calendar arithmetic every date picker shares
- 2026-09-29d6f9a12ops: mix colours premultiplied, so a fade from transparent does not darken
- 2026-09-29868c7aefluent: menu, dialog, tooltip and the rest of the button family
- 2026-09-2994dc2aafluent: badge, avatar, progress bar and spinner
- 2026-09-292b72bcdfluent: card, divider, tab list, toolbar and accordion
- 2026-09-29c6230a5fluent: input, textarea, field, label and link
- 2026-09-298a7c450fluent: checkbox, radio group, switch and slider, with 20 more icons
- 2026-09-29d79009bsdl: wait for the watch pointer file before opening the host window
- 2026-09-29240e311fluent: the button, and a kitchen that shows it in every theme and state
- 2026-09-299f33cd3design: parse SVG paths and cache a system's icons for any Icon enum
- 2026-09-29e634319fluent: the Fluent 2 system's scheme, themes, text, states and motion
- 2026-09-2965b7697tools: generalise material-tokens into design-tokens, one generator for two kits
- 2026-09-29fb22e81ui: move the toolkit's look into ui/base, an instance of ui/design
- 2026-09-2917fe1edui: name each widget by the proc that made it, and slug the ancestry with it
- 2026-09-2980c551dmaterial: give card and the sheets the guard form too
- 2026-09-298bf5545ui: show the inspected widget's ancestry as a slug
- 2026-09-29091edabui: keep in Theme only what ui itself reads
- 2026-09-29a0ea630ui: carve the recorded drawing out into ui/ops
- 2026-09-2953698b0ui: delete the core Material widgets; ui/material owns them
- 2026-09-2950eff18ui: one vocabulary for every pair, open and close, and a guard per container
- 2026-09-29c14e0f4ui: push each container complete instead of poking it after
- 2026-09-29c10bacbci: run jm:wasm on windows again, now that its trap survives a vectored handler
- 2026-09-299790842wasm: catch a guarded-memory fault on windows with a vectored handler, first in line
- 2026-09-292eac79dwasm: one test per trap, and a windows workflow that runs them under cdb
- 2026-09-29a2a7c5breadme: say what the workflow leaves out on windows
- 2026-09-29db00436ci: leave jm:wasm out on windows until its bounds trap is understood
- 2026-09-296ba5aedci: an 8 MB thread stack on windows for wasm3's exhaustion trap
- 2026-09-2947e6b10ci: keep line endings on windows; wasm links advapi32 for wasi's random_get
- 2026-09-298d38433ci: give the windows linker libpq's path without the space
- 2026-09-298fc9e26render: size every worker's band buffers for the frame before painting
- 2026-09-2982ba0c7ci: msvc port shims for libpg_query on windows; name the steady-state allocations
- 2026-09-29eb1891dci: the unix file set for libpg_query on windows, and a macos font for the render tests
- 2026-09-29e3322c1ci: quote the linker flags as one argument and show cl's errors
- 2026-09-29de87886ci: one linker flag per build, libpq's own keg on macos, clang-cl for wasm3
- 2026-09-29f0ef640ci: type-check every target and run the suite on linux, macos and windows
- 2026-09-2919025acgit: prove the remote paths and refuse a rejected token once
- 2026-09-292277357git/fuzz: name the upstream fix the object store waits for
- 2026-09-299a517b5git/fuzz: hold the binding against a model of two clones
- 2026-09-2956eb0begit: bind libgit2 for programs that ship
- 2026-09-29dec1ce6ui: make the accessor test compile and name the overlay swap for containers
- 2026-09-29cb195b3ui: name every way into the layout's container stack
- 2026-09-298035eb8ui: assert the retained value and name the ripple counter for what it does
- 2026-09-29f51078dui: keep only the universal in Widget_State
- 2026-09-28eac7f7fui: factor the universal design layer out of material into ui/design
- 2026-09-281b3b9d8ui: show the host's resident memory in the debug tray
- 2026-09-283fadd3cui: free what decode read at the next decode, not never
- 2026-09-28d99c9a3ui: let the debug tray be dragged by a title bar
- 2026-09-28edb42eeui/sdl: draw the repaint flash as a faint fill with a stronger edge
- 2026-09-28054b1f3ui: keep the repaint flash off the debug tray and inspector panel
- 2026-09-285b784c9ui: switch the repaint flash off while full frames are on
- 2026-09-28cf7dd11examples/material-kitchen: note the tray's new diagnostics in the usage
- 2026-09-28409942eui: add repaint flash, host timing and an event log to the debug tray
- 2026-09-28b148e99examples/material-kitchen: note the debug tray and -stats in the usage
- 2026-09-282f2d454ui: open a debug tray with F11, for toggles, frame stats and full frames
- 2026-09-28358303fui/material: merge the containment group's move onto typed widget state
- 2026-09-283354c8cui/material: give the menu and dialog scoped ids
- 2026-09-28cf6fc9aui/material: keep the autocomplete's highlight in its own widget_data
- 2026-09-28bd12265ui/material: keep a list row's drag and reveal in List_Item_State
- 2026-09-286b7c406ui/material: merge the surfaces group's move onto typed widget state
- 2026-09-2894824c9ui/material: keep picker and carousel state in typed widget_data
- 2026-09-28d99c09dui/material: keep search and sheet state in typed widget_data
- 2026-09-287ae4cbfui/material: keep the range slider's handle and wave ramp off Widget_State
- 2026-09-28bad9901ui/material: keep the card's elevation tween in its own widget_data
- 2026-09-28fea4eadui/material: keep the checkbox's uncheck clock in its own widget_data
- 2026-09-28a2fb564ui/material: give tabs and the drawer caller-owned scroll state
- 2026-09-280b58495ui/material: keep the icon button's tooltip timer in its own widget_data
- 2026-09-2847d255bui/render: add -hover, to move the pointer onto a tagged area
- 2026-09-284579ddcexamples/material-kitchen: scope each page, and keep every page's state
- 2026-09-28187c679ui: add scope, retain and widget_data, and keep state pointers stable
- 2026-09-2846ecc6eexamples/material-kitchen: note the inspector in the usage
- 2026-09-284449853ui/render: add -layout and -inspect steps to the headless session
- 2026-09-28edab741ui: add an inspector, and outline every input area in debug mode
- 2026-09-28a3dfacfexamples/material-kitchen: note F11's debug toggle in the usage
- 2026-09-285dc4e01ui: toggle debug mode with F11 in a running app
- 2026-09-28a9d998etools/hot-watch: rebuild the host too, with -host
- 2026-09-28aea09f6ui/sdl: restart the host when it was rebuilt under a newer child
- 2026-09-28d430a73ui: poison a frame's memory when its arena resets, in debug builds
- 2026-09-28ba8a5bbexamples/material-kitchen: fit the rows -overflow found cut off
- 2026-09-288466943ui/render: add -overflow, the session's overflow report, as a step
- 2026-09-28b43b1deui: add frame_overflow, a text report of content cut off at the sides
- 2026-09-28b309f2eexamples/material-kitchen: run headless flags as one session
- 2026-09-2874e28b1ui/render: add Headless, a scripted session over one real-text probe
- 2026-09-280dd5cecui/material: read indeterminate loops from the frame clock
- 2026-09-2828f96baui: add a frame clock, Ctx.time, and Debug_Flag.Slow
- 2026-09-283105616examples/material-kitchen: add -bounds, to outline every widget
- 2026-09-28cb4a502ui: add Debug_Flag.Bounds, and name debug flags in JM_UI_DEBUG
- 2026-09-28897a857examples/material-kitchen: add -reveal, to render hidden parts
- 2026-09-281fe8558ui: add Debug_Flag.Reveal, to show what hides until it is used
- 2026-09-281f79ec6ui/material: keep the drawer's contents and scroll bar inside its corners
- 2026-09-28ae00e0cui: let a scroll bar stop short of a rounded box's corners
- 2026-09-28b387338ui: make scroll bars overlay scrollers that show only when used
- 2026-09-28126d85dexamples/material-kitchen: reflow every page instead of scrolling sideways
- 2026-09-28bec821eui: add wrap, a row that breaks its children into lines
- 2026-09-2808526d6ui/material: show a scroll bar on the drawer and the year grid
- 2026-09-2865ef105ui: draw scroll bars on scroll_box, and export them for painted lists
- 2026-09-28b824de3examples/material-kitchen: show every ui/material component by state
- 2026-09-28412ce06ui/material: add Material 3 Expressive on jm:ui
- 2026-09-288070edbtools/material-shapes: generate the loading indicator's morphs as Odin
- 2026-09-28eca7532tools/material-tokens: generate M3 Expressive tokens as Odin
- 2026-09-28fea7b4fui: give pointer events their travel since the last one
- 2026-09-289cd2e39ui: let scroll_box lay content out wider than itself and scroll sideways
- 2026-09-28504dc06ui: add Spring, and four spring slots per widget
- 2026-09-2817b7e82ui: bump the ops wire version for Defer, and say why a child stops
- 2026-09-28336b388ui: add Defer and overlay, a layer drawn above the frame
- 2026-09-281db3bc0ui: export the helpers a widget package outside ui needs
- 2026-09-28be5ac80ui: add scroll_box, a box paint hook, and negative padding
- 2026-09-28c72fd60tools/hot-watch: link Blend2D children on unix, watch extra dirs
- 2026-09-288998e5fui/sdl: stop the hot-reload host crashing and killing its own group
- 2026-09-2745e85a2ui: port Material 3's button family onto jm:ui
- 2026-09-27777c339ui: three ways to make jm:ui cheaper for an agent to iterate on
- 2026-09-27c3c94e0ui: hot reload for real — respawn on rebuild, and a live demo
- 2026-09-2726965b6selfupdate: write byte caps with core:mem units
- 2026-09-2773f6fe4selfupdate: add the fixed-capacity writer the rewrite relies on
- 2026-09-272672fa5selfupdate: allocate nothing from the caller's context
- 2026-09-270c2106chttp: stream every transfer to an io.Writer
- 2026-09-275590bb9ui: split the host from the ui proc — the subprocess hot-reload split
- 2026-09-27d3da895selfupdate: take any base path, not a GitHub repository
- 2026-09-2760c7700selfupdate: update a distributed binary from a signed release
- 2026-09-2741f3a74ui: promote diagram kit, Tween and a shared test helper out of the example
- 2026-09-27f289589ui: harden custom-widget primitives against another dogfood pass
- 2026-09-27abab36fui/sdl: leave window moves alone and grow buffers once per resize
- 2026-09-270683636ui/render: hash a tile a solid fill covers by the fill's color
- 2026-09-278bea357ui/render: scroll only content whose whole clip chain is rects
- 2026-09-27a9a7b53ui/sdl: hold each resize frame until the compositor shows it
- 2026-09-2741fa5caui/render: repaint only what changed when a target is resized in place
- 2026-09-272cbbc20ui/sdl: turn vsync off while a resize is in progress
- 2026-09-27c13ba5bui/sdl: keep drawing while the window is being resized
- 2026-09-27059eb50ui: ask for one more frame after handling input
- 2026-09-27ddb5eb0ui/render/fuzz: fuzz the compositor against whole renders
- 2026-09-27010cf69ui/render: run the scroll sequence test on a fixed sequence
- 2026-09-27b250da2ui/render: let unmoved content vote in scroll detection
- 2026-09-27c61c8feui/render: never hand the crew overlapping rects
- 2026-09-273e1b6eeui/render: bound a draw by the pixels its clip can reach
- 2026-09-2760b22abui/render: hash which run a masked draw is in, per tile
- 2026-09-275d34fd0ui/render: group a band's draws the way the whole frame groups them
- 2026-09-27c2770eeui/render: say a crew's allocator must be thread-safe
- 2026-09-26794c3b4ui/sdl: wait for input or a requested frame instead of every refresh
- 2026-09-2621b8acaexamples/ui-kitchen: ask for frames only while the badge turns
- 2026-09-26e050a89ui: let the ui ask the host for its next frame
- 2026-09-26211b66bui/sdl: move scrolled pixels on the GPU instead of uploading them
- 2026-09-267efa786ui/render: cut thin bands so the crew shares a scroll's strip
- 2026-09-267a81537ui/render: hand out per-draw work in chunks of 256 draws
- 2026-09-268bfadf2ui/render: share scroll detection's per-draw work with the crew
- 2026-09-26cda90a7ui/render: move a large scroll's pixels on the whole crew
- 2026-09-2624c3a06ui/render: draw a clip's interior without its mask
- 2026-09-2680c8129tools/ui-bench: add -compose to time partial repaints
- 2026-09-26db36b48ui/sdl: compose frames and upload only changed rects
- 2026-09-268da7fbfui/render: repaint damaged bands on a worker crew
- 2026-09-269b01bddui/render: track which tiles a frame changed
- 2026-09-260d719eaui/render: paint runs of draws sharing a clip through one mask
- 2026-09-26cb900fbtools/ui-bench: add -sweep to find how much content fits a frame
- 2026-09-26d267979ui/sdl: free the temp allocator every frame
- 2026-09-26f324a4cui/sdl: render on Blend2D workers when App.threads is set
- 2026-09-2640b052bui/sdl: render into a CPU-side image, not the locked texture
- 2026-09-26ab46d42build: build Blend2D and the kitchen demo on Windows
- 2026-09-2689217a8sh: make the spooled stdin inheritable on Windows
- 2026-09-25cbc7d99ui: (wip) benchmark multithreaded rendering
- 2026-09-254c60e63tools/ui-bench: time layout and the Blend2D executor per frame
- 2026-09-25de38a3epq: document the dynamic link and how tests find a server
- 2026-09-250024b52examples: add the jm:ui kitchen demo and the recipes that build it
- 2026-09-251c2690cpq: fuzz the bindings against the properties they promise
- 2026-09-2522eeeeeui: lay out with constraints down and dims up, style from a theme, add the widgets
- 2026-09-25becf5a8pq: bind the system libpq
- 2026-09-25f4cade2ui: give the probe a layout of its own
- 2026-09-254b04695ui/render, ui/sdl: execute a frame on Blend2D and open an SDL3 window
- 2026-09-25c3ac74bui: route input against the previous frame and drive frames headlessly
- 2026-09-25e263896ui: flatten scene ops into a frame, dump them as text, encode them for the wire
- 2026-09-251b7325cui: add the raw device event and the layout hook to the contract
- 2026-09-25453d966ui: lay down the immediate-mode contract and vendor the Blend2D binding
- 2026-09-259f5a494pg_query: document the parser and what fuzzing it found
- 2026-09-25b6d4df0pg_query: fuzz the bindings against the properties they promise
- 2026-09-2572e80d3pg_query: bind libpg_query over the vendored parser
- 2026-09-25cfd3481wasm: time the bindings, and the engines they could have been
- 2026-09-253461166wasm: fuzz the bindings against the properties they promise
- 2026-09-25048659bwasm: bind wasm3 over the vendored interpreter
- 2026-09-2581e911bfuzz: run each case in a child process when asked
- 2026-09-25541387atar: compare the size field by subtraction, not by adding to it
- 2026-09-24c18f14ffuzz: move the sqlite3 suite onto jm:fuzz and add a tar one
- 2026-09-2412b3453fuzz: add a property fuzzer that shrinks what it finds
- 2026-09-24d2f70a1tar: refuse a size field and a pax record that slice backwards
- 2026-09-2459ff9c1sqlite3: fuzz the bindings against the properties they promise
- 2026-09-24924a2d9sqlite3: bind SQLite over the vendored amalgamation
- 2026-09-24190a339sqlite3: vendor the SQLite 3.53.4 amalgamation
- 2026-09-2472ed703jm: rename the collection from jfm to jm
- 2026-09-23f4d4f24examples: add a script that touches every package
- 2026-09-238daab04odin-run: compile a script once and run the cached binary after that
- 2026-09-23710fb57tar: read git archive output without a tar program
- 2026-09-2308b3ecbflow: add the worker-pool package from sonar
- 2026-09-2384ba231http: add a small client over vendor:curl
- 2026-09-233636dc0timefmt: format and parse times with strftime directives
- 2026-09-239e2ca18path: add the file-system vocabulary a script reaches for
- 2026-09-2312abde4sh: run external commands through the shell or by argv
- 2026-09-232300ca1prelude: give scripts init, must, die and a log file
- 2026-09-235a3b383debug: add the guard-byte allocator copied from sonar
- 2026-09-2395faf8ereadme, justfile: shape the jfm collection for Odin scripts