Commit graph

17 commits

Author SHA1 Message Date
Admin
ff61d1e8ef ci: a full disk empties the build output before the run, not every row after it -- the mini's wall went red on workspace ("check host": failed to write full.rmeta: No space left on device), apps/browser ("comes up": grab write: No space left on device) and apps/calculator on ac1917d70: the volume had 104 MB left, 207 GB of it the checkout's target (16 target triples, 59 GB host debug). Cargo never removes what it built for a feature set or dependency graph that is gone: each triple held 8 to 10 builds of makepad-widgets alone since 09-21, and tonight's makepad-widgets features added new ones for every crate above it on every triple. The sync step now counts the build output (stopping once it reaches the free space; 434k files on the mini) and, when it is as large as what the volume has left, removes it and the run builds from cold: the worst a run adds is one more copy of what is there.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 01:16:33 +02:00
Admin
76627b6f19 ci: a driven app takes every key once, and the storage module builds for the browser -- the mini's wm script went red one run in three at the browser launch, and the shell menu's new log lines said why: the filter read "bbrowser" and the menu had opened twice. The remote bridge applied every wait=1 input first and, when the frame after it could not be sealed (the window was busy presenting the warm browsers), answered "requested input frame could not be submitted; retry"; the CI driver took that at its word and sent the input again, so a busy app took the Cmd+Space and the first letter twice. The bridge now keeps the waiters of an applied input and asks for the frame on the next beat, as it already did for a drawable still being acquired; the driver never asks an input route twice, whatever the answer, and still retries a grab it could not place. The workspace row was orange and apps/scope red on wasm32 since 8d7246231: the public volume_available_bytes had been put between the not(wasm32) guard and the native module it guarded, so the module compiled in the browser with nothing using it (17 warnings) and the function it exported was missing there; the guard is back on the module, and the browser has a volume_available_bytes that says the free space is not known 2026-09-22 19:04:04 +02:00
Admin
f7ac37f690 ci: a card is as high as its content -- with the time beside the count there is no bottom line to keep room for, so the tile height is capped at the name and two lines under it with the padding around them, and the name takes the size the width allows; the layout test asserts what matters (the whole name fits) instead of an exact column count
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 10:26:13 +02:00
Admin
611a4e2035 ci: the tests are the platform's own, in release, in two minutes -- the user's law: "we mostly only care about the platform tests", "a max of about 2 minutes of tests", "test everything the CI does in release builds; debug builds are uselessly slow for this". ci.test now builds every test binary of its selection ONCE in release and runs them several at a time (half the cores, at least two), each one timed and capped, so a hung test costs its own cap and never the hour, and the step's detail names the slowest binaries with their counts; the doc tests follow through cargo for the packages that have a library. A selection is dirs (the packages whose manifests live under those directories, by cargo metadata), packages, package or workspace: true; a run over budget_secs (120 by default) turns the block orange and says so. The root script runs platform, draw, widgets and tools/ci by default: 49 binaries, 2535 tests, 22 s on a laptop. Every other crate's tests are the deep run, opt-in with deep_tests = true in ci.toml or ci --deep (ci.deep in scripts). The wall's cards lose a line: the time sits beside the count, 1 passed · 12s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 09:50:38 +02:00
Admin
06a708dc3f ci: the header names the tip being tested -- while a run was on, the branch line still showed the tip of the last finished run beside "testing now", since the live state only learned the tip when the run ended; the record a run keeps as it goes now carries the tip under test from its first update
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 08:57:50 +02:00
Admin
c20cf99c89 ci: a judgement is never lost to the way it was phrased, and every "retry" of the bridge is retried -- the small vision model, asked to describe the desk's terminal, locked onto one phrase and repeated it to the token cap, so its answer had no verdict line and the window manager tile went red over a terminal that was fine; the decoder now stops a looping answer (the tail of the text is one short pattern over and over), and when the free answer has no verdict line the conversation is continued with "VERDICT:" already written and the model finishes that line, so the judgement is asked for outright instead of being lost. The harness retries every answer of the bridge that ends in "; retry" (a grab it could not arm as well as an input frame it could not place), where it matched one wording only and failed the browser step on the other. The workspace test suite gets three hours instead of one: it runs beside the app scripts now, and a hung test was worth a whole hour before
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 08:46:45 +02:00
Admin
863ca812a3 ci: the workspace script gives the wall back after warming -- after a push that touches a core crate the workspace script spent ten minutes and more alone (fifteen target checks, a release build of every app, the workspace check and the whole test suite) while every other tile sat grey, which read as a hang. It still goes first and alone for the part only it may do alone, warming the cache every other script reads, and then calls ci.shared(): its permit turns from exclusive into an ordinary one and the waiting scripts start beside its checks and tests. The runner sends it through the same pool as the rest and hands out nothing else until it holds the wall, instead of running it to the end before the pool even started. It also builds the pty helper while it is alone, so the terminal, director and window manager scripts get a cache answer instead of a cargo run that would queue behind the test build
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 00:07:23 +02:00
Admin
53d4960320 ci: a library's warnings turn the workspace block yellow, and a desktop tool is not warmed for the web -- warming blames nobody for an APP's trouble, since the app's own tile tells it, but a library has no tile: its warnings scrolled past in the log while the workspace block stayed green. The warm step now collects the warnings of every package that is not one of the apps being warmed, names the crates with their counts, and goes yellow. ci.warm and ci.check_targets take desktop_only, packages that are left out of the web, mobile and embedded rows; the root script lists director there, as its own script already asks only for the desktop targets, which takes its 139 compiled-out-worker warnings off the wall
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 23:56:25 +02:00
Admin
c091430d32 ci: a quiet header, a build that visibly moves, and scripts that leave the machine alone -- the window's top is one band: the branch and its tip, the test progress large (17 / 29) with failed and warning counts only when there are any, the run's elapsed time, Run now and Stop; the line under it is the run progress bar and the tiles start right below it, the rows of counts, "now:" and "Watching" are gone and next poll and the model's state moved to the one footer line; a running step carries what its command is doing ("compiled makepad_draw · 212 crates", told at most twice a second from cargo's artifact messages) and the running tile shows it, so a ten-minute warm build no longer looks stuck; director embeds a terminal, so its script builds the pty helper as the terminal's does; ci.launch takes app_env, and Files runs on its synthetic tree (MAKEPAD_FILES_DEMO) instead of walking the real home, which made macOS ask the person at the CI box for access to Downloads on behalf of "release"; and the workspace tests run with --no-fail-fast, so a run names every failing test target instead of the first
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 23:41:02 +02:00
Admin
7ffcdab2ca ci: a stop or a restart is not a test result -- restarting the CI app in the middle of a run painted the whole wall red and then left it red: every script still going failed with "stopped by user", a script that had not launched yet got nil from ci.launch and raised method-not-found errors that counted as real failures, and the interrupted tip was recorded as tested, so the new process had nothing to run. Now a failure recorded while the run is already stopped is a skipped step, never a failed one; ci.launch hands a stopped script the inert app; a run the process shutdown interrupts leaves the last finished run as the record and its tip untested, so the next start runs it again; and a run the user stops keeps what finished, leaves the rest untested and says "stopped before it finished" instead of passing
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 23:15:29 +02:00
Admin
5f4a1632a8 ci: the window is a dashboard -- inside the wall's law (filled grey tiles, near-black ground, a failure the only bright thing) the window gets a header that reads as one: wordmark, branch with its tip in a monospace face and its state in words, the next poll, the model's state and quiet Run now / Stop buttons, with a thin grey run-progress bar under it and one line for what runs now; tiles have rounded corners drawn in their own shader, an even gutter, a large whole name, measured ellipsis instead of counted characters, the duration pinned to the bottom edge and the running tile's progress inside its rounded shape; tiles keep a stable order while a run is on and put failures first when none is; the detail is a panel with a steps list (state mark, name, duration, the failed step expanded with its reason in a monospace block), captures with an index and the log tail, and a footer names the checkout, the host target, the model and the run directory
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 23:05:31 +02:00
Admin
5165eaf349 ci: the terminal gets its pty helper, director is a desktop tool, and a refused input is asked again -- on macOS the terminal starts its shell through makepad-screen, which lives next to it and which an app build alone does not produce, so the terminal and window manager scripts build it (the CI box had a terminal that could not spawn a shell and a desk whose terminal window stayed blank); director drives cargo builds and child processes and most of it is compiled out on web and mobile, so its script asks for the desktop targets only; and when an app answers that it could not place an input on a frame and says retry, the harness asks again, up to five times, instead of failing the step
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 22:44:50 +02:00
Admin
c0ea5bc162 ci: warming fills the cache and blames nobody -- a package that fails or warns in the root script's batched warm-up is told by the script that asks for it, on its own tile, so one app that does not compile for wasm no longer turns the workspace tile red as well; the warm step notes which packages are failing, and goes red only when cargo itself could not run
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 22:15:53 +02:00
Admin
8c0a75861e ci: untested is grey and nothing else -- the wall no longer puts a bright dot of the last finished run's verdict on a tile that has not been tested yet; that history is told in words in the detail header, and the name gets the width the dot had reserved
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 22:12:39 +02:00
Admin
fbe8c2e6c4 ci: the wall shows THIS run and is fit for an OLED -- a tile is grey until its script is tested, grey-blue with a progress bar while it runs, then grey-green, grey-amber or the one bright thing on the screen, a failure red; what the last finished run said is a small dot, never the tile's colour, and a script the user stopped or a restart interrupted goes back to untested instead of red; tiles carry their short name (wm, scope, workspace) in a named font family, since an empty family only rendered where a system fallback happened to exist and the tiles came up blank on the CI box; the packing picks the columns that give the largest whole name; a progress line says how many are tested, passed, warned and failed and what runs now; the pulse and the clocks tick on an 8 Hz timer only while something runs, never per frame on a 240 Hz display; the window no longer maximizes into native fullscreen over its left-half geometry, the background is near-black, the detail sits under the grid so it fits 960 points, a watcher problem is one header line, and the install button shows only when the vision model is missing; a compiler warning is orange and never red in the root script, and a desktop-only app with no library is not applicable on web and mobile targets instead of a standing warning
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 22:10:19 +02:00
Admin
0458f0c2b7 ci: a run is one target dir and one cargo batch per target, and the wall draws -- the root script warms a run-level cache with ONE cargo check per target covering every app package (the matrix's BuildTy per row, diagnostics attributed by package_id, --keep-going then per-package fallback when one package fails) and one release build of all bins, so the 24 app scripts answer check_targets and build from the cache; the tile grid registers its draw type on DrawQuad and merges its shader into the widget, which is what makes the green / orange / red / grey tiles appear at all; the window takes the left half of the main display (system_profiler, overridable with window = [x, y, w, h]); only apps/<name>/Cargo.toml is an app, so a private app's nested deps are its libraries; scope is no longer skipped by default; a failed launch hands the script an inert app instead of nil and a failure a step already carries is said once; the log keeps the first 20 diagnostics per cargo invocation and hub-install counts a present file once
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 21:52:43 +02:00
Admin
229cdd4d2e ci: tools/ci, a Splash runtime that watches a branch and runs every ci.splash it finds -- each script checks its app on every other platform, builds and runs it here, drives it over --remote and has a small local vision model judge the grabs
A test is a ci.splash beside what it tests; the script decides every input and the model only ever judges one picture against one acceptance text. mod.ci: launch (hidden, --remote, user_seq preserved), key, type_text, click, get, snap, wait_log (a * is a gap inside one line), no_errors, grab, quit; step, sleep, check, run; cargo, check_targets (the cargo makepad check matrix, check only for platforms we are not on, a test fails if the two tables drift), test, build, machine (another box over the makepad tunnel), exclusive; judge, accept, ask. The watcher polls git ls-remote once a minute for work and any extra branches, syncs a checkout the CI owns, runs the root script first and alone, then the rest up to a parallel limit behind one shared model judge. The window is a wall of squares, one per script: green passed, orange warnings, red failures, with a detail panel for the selected one.

Scripts: the root ci.splash (workspace check with core warnings denied, the tests), apps/wm (desktop up, switch to macOS by Cmd+Space / type / Return, launch the terminal and the browser, each waited for by the WM's own first-frame line), and one per main app in the default shape. Proven here: apps/wm/ci.splash green in 280 s, fifteen target checks and seven vision verdicts.

Models come from Hugging Face through the hub: registry entries qwen3.5-4b-vision and qwen3.5-9b-vision with exact revisions, sizes and digests, and hub-install, a command line over LocalModels::start_install. vlm-probe reads PNG.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 21:23:11 +02:00