mordaunt.dev/code

code / jm / log

jm log

739 commits, newest first

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