Commit graph

367 commits

Author SHA1 Message Date
99ca24dbbc Merge upstream origin/work 5f99533 into nigig fork alongside dev 2026-09-25 17:32:26 +03:00
a0f46b7d83 Merge upstream origin/dev fda40f56 into nigig fork - preserve nigig hub/web_server, take upstream dev updates 2026-09-25 17:25:35 +03:00
Admin
d51069baea Merge branch 'win-deck' into work 2026-09-25 10:53:36 +02:00
Admin
c023dbd28b builder: an app edited after its build shows as needing a compile -- besides a newer release, the Builder reads Cargo's dep-info for the built app (target/release/<binary>.d) and shows 'compile' when any source it lists is newer than the app or gone, so changes made by a coding agent or the person are visible in the menu after an update; the check is cached per app (rechecked when the app is rebuilt or after 5 s)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 10:19:39 +02:00
Admin
8f4e447367 builder: CUDA crates build in an installation whose path has a space -- nvcc cannot create its intermediate files under a TMP with a space (Downloads\makepad-builder (2)) or in the verbatim \\?\ form canonicalize gives on Windows ("Could not open output file '\\?\...\tmp/tmpxft_...'"), so with CUDA installed every crate with CUDA kernels failed (aichat and files, built by wm, on .100). On Windows TEMP/TMP/TMPDIR are the tmp folder's plain short (8.3) path; measured on .100: the verbatim and spaced TMP fail, the short one compiles
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 01:54:08 +02:00
Admin
e8dae096f5 builder: menus wrap around -- Up on the first row goes to the last and Down on the last to the first, in the Rust TUI and the shell previews' lists
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 01:53:40 +02:00
Admin
7fdb4dd742 builder: the compile bar's total is the app's own crates -- the estimate takes the packages from cargo tree -p <app> (resolved for that package alone; cargo metadata resolved every workspace member's features and counted about twice as many, so an app whose other crates were already built showed 3 / 70), and after a successful build the exact count is kept beside the build output (<binary>.crates) for the next one; fresh crates still leave the total
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 01:35:44 +02:00
Admin
01911e2374 builder: an incremental compile's bar follows what really compiles -- crates Cargo reports as fresh (already up to date) leave the total instead of adding to the count, so the bar no longer jumps to half at once and crawls through the rest
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 01:20:01 +02:00
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
ac1917d70c windows: desktop apps open no console window, and still speak through pipes -- the Builder links apps as windowed programs (/SUBSYSTEM:WINDOWS, mainCRTStartup), so starting one from Explorer or the Builder shows no cmd window; app_main joins the parent terminal's console only when the process has no stdout (started from a terminal), so a pipe (an MCP client starting --mcp) and console builds keep their stdin/stdout untouched
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 00:26:00 +02:00
Admin
952cdc8b12 builder: the Windows exe is built for size -- cross-windows.py compiles the Builder with fat LTO, one codegen unit and opt-level z (29.8 -> 21.8 MB measured before the widget trim)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 00:14:18 +02:00
Admin
2e176aaea5 widgets, builder: the big widget families are features, all on by default, and the Builder takes none of them -- makepad-widgets gains tweaker (with reflect and the theme store; needs dock and data), charts (chart, chart shapes, waveform; needs color), color, data (data grid, tree view, file tree), dates (calendar, date and time pickers), chat, dock, rich_text (text flow, rich text, HTML, Markdown, LaTeX maths, log list; makepad-html, pulldown-cmark and latex-math become optional), dropzone, vector, glass and nav_menus (floating action, radial, pill-nav, line and hamburger menus) and command_palette. Each gates its modules, re-exports and registration; the core stays unconditional. Without the tweaker a Window's Tweaker is an empty hidden view, as the voice wave is without voice, and the window, widget tree and fab panel skip their tweaker and dock hooks. wm_theme and wm_api take no families; the terminal app keeps them all through a default all_widgets feature so shared target dirs build makepad-widgets once. The Builder (tools/makepad_builder) takes widgets and terminal without defaults: macOS release 30.04 MB -> 24.41 MB (stripped 24.39 -> 19.70 MB, __text 15.96 -> 12.62 MB), window and TUI unchanged (identical grab), no script errors in its log. Checked: cargo check --workspace, widgets with no features and with each feature alone, widget lib tests with and without defaults (1849 / 1100 pass), Builder on macOS, Windows and Linux targets.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 00:10:52 +02:00
Admin
6b22295eae builder: CUDA whenever the machine has NVIDIA -- on Windows with an NVIDIA driver, Install build tools includes the NVIDIA CUDA Toolkit as one more step (its agreement on the same consent screen), an installation that has the tools but not CUDA offers just that step at start, and every build and launch uses CUDA exactly when the driver and the private toolkit are there (cuda::build_with); the CUDA row's on/off switch and the installed-cuda record are gone
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 23:17:24 +02:00
Admin
1530e2818b builder: the menu opens on the first of YOUR APPS -- the start-up setup's work page left Build tools as the row to return to, so after a first install the cursor sat on Build tools; that is forgotten before the menu opens, while work started from the menu still returns to its row
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 23:11:29 +02:00
Admin
e6e18588c3 builder: wait out Windows security on fresh Rust -- moving the unpacked toolchain into place failed at once when a scanner still held files from the rustc check (Windows refuses to rename a folder with open files), which showed 'still scanning' to a new user; the rename now retries with the same bounded waits as the rustc check, both about 30 seconds in all, with a 'waiting for Windows security' status
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 23:08:00 +02:00
Admin
d02335e27b builder: no menu flash after log-in -- the log-in screen checked the email through refresh_licenses, which switched to the main menu for its busy line, so the menu showed between typing the email and the setup screens; that check now keeps the log-in page and shows its busy line there
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 22:55:29 +02:00
Admin
706f8f295d builder: the menu waits for a choice -- after log-in, graphics, agreements and build tools the Builder stops at the menu with the first app selected instead of downloading, compiling and opening Scope by itself
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 19:56:17 +02:00
Admin
addc9e9c7e builder: a HEAD request is a HEAD -- fetch_method_progress sent every method but POST as GET, so asking the three Rust archives' sizes downloaded all of them (about 180 MB, no progress shown) before the real download started; HEAD now uses the HEAD method and an unknown method is an error. builder.log lines carry the seconds since start
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 19:27:33 +02:00
Admin
dc1b8d193f builder: no Scope command -- the menu row that put a scope shim on the user PATH (registry on Windows, ~/.local/bin and a shell profile line on Unix) and its repair on every start are gone; the Builder never edits the user PATH or shell profiles
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 19:18:11 +02:00
Admin
9f4c781444 builder: apps get the icon their package declares -- after the workspace's resources/icon.icns or icon_1024.png, the icon comes from icon = "…" under [package.metadata.makepad.desktop] in the package's Cargo.toml (as cargo makepad reads it), so Makepad Amp's exe and macOS bundle carry apps/music/resources/music-icon.png instead of the default
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 19:18:11 +02:00
Admin
f89ef3d4e2 builder: the compile line is the bar and n / total crates -- no crate names flickering past; the Builder's own rebuild (with Scope) counts its crates too, with the same --no-default-features it builds with, and an app's features are passed to the count
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 19:11:55 +02:00
Admin
c490c709cf builder: Compile shows a real bar -- the crates the build produces are counted beforehand from cargo metadata for this platform (packages reachable through normal and build dependencies, their build scripts, the app's binary) and the bar reads n / total crates; a component's package record ends with its bar, so Compile no longer showed the source download's 2 of 2 as a fixed 50%
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 19:10:42 +02:00
Admin
6b199fddc7 builder: a first build resolves online, the Rust row and bars move when the work does, and the window fits the TUI -- cargo ran with --offline whenever a Cargo.lock existed, so a new private CARGO_HOME could not resolve the Android/OpenHarmony crates in the graph (hilog-sys) and Scope failed to build; Rust becomes the current step with its first package and its manifest downloads with a bar; unpacking source reports the pack import and file checkout with their totals instead of holding the bar at half; the window opens at 664 x 650, the TUI's 80 columns and menu height
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 18:40:46 +02:00
Admin
6d9830e778 builder: long work runs on its own page -- installing build tools, CUDA, an app (download source, compile, open) and Update show a checklist of the steps that actually run, the current one carrying its bar (one forward-only bar over all source packs; compile counts crates), then return to where they started with the result; a failed step shows a red ✗ and its reason with ⏎ back; the Disk action reads clear build data
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 17:57:50 +02:00
Admin
624c8e3bc3 builder previews: long work gets a page of its own (steps as a checklist, the current one carrying its bar, footer working · ctrl+c stops), Account shows ✓ email, and the Disk action reads clear build data
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 17:54:42 +02:00
Admin
b3159c7d35 builder: a refused email says "Email not recognised" and keeps what was typed for fixing
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 17:48:30 +02:00
Admin
a65be5428d builder: a refused email opens the editor again with what was typed and says why, and the app section is YOUR APPS -- when the server answers not enabled / unknown, the log-in screen and Account keep the text with a yellow reason line (Return checks again, Esc keeps the previous email); offline or server errors do not; YOUR LICENSES is renamed YOUR APPS in the TUI, the previews and AGENTS.md
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 17:33:08 +02:00
Admin
06ac6e4357 cuda: builds link only the CUDA toolkit they are given, never a system install -- makepad-ai-cuda's build script takes its toolkit from MAKEPAD_CUDA_ROOT alone; CUDA_PATH, CUDA_HOME and the Program Files / /usr/local / /opt scans are gone, because an exe linked against a system toolkit then needs that toolkit's DLLs on PATH wherever it runs (music.exe on a box with CUDA 12.4 installed but not on PATH stopped with "cublasLt64_12.dll was not found"). The Builder passes its private toolkit as MAKEPAD_CUDA_ROOT when CUDA is enabled; the Arch fleet provisioning opts in with MAKEPAD_CUDA_ROOT=/opt/cuda.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 15:56:53 +02:00
Admin
c052c25da4 builder: the GPU notice is remembered -- choosing I understand writes graphics-notice-read in the install folder, so later starts on Windows and Linux skip it; the Graphics row reopens it and MAKEPAD_GPU_ACK is gone
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 15:21:26 +02:00
Admin
59d4759c6a builder: one forward-only bar per setup component, green checks on finished setup rows, a black Builder window and a smaller Windows ZIP -- Build tools, Windows SDK, Rust and CUDA each show a bar totalled from the manifests' real byte sizes (download + unpack, cache hits count as done) under a "✓ Build tools ● Windows SDK ○ Rust" line; Account, Graphics, Agreements, Build tools/Rust, Xcode tools/System packages and CUDA show a green ✓ when done; the Agreements screen can agree or disagree (recorded in agreements-accepted, withdrawing never deletes anything); Update reads "check for updates"; builds use --offline instead of --locked (the pinned commits are the lock, a stale Cargo.lock no longer fails a build); macOS bundles are named after the catalog title (Makepad Scope.app, Makepad Amp.app); the Builder window is black; the Windows ZIP leaves out the CJK and colour-emoji fonts the Builder never draws.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 15:13:46 +02:00
Admin
2389e46094 builder: the terminal scripts delete nothing and read top to bottom, and every Builder delete stays inside its own folder -- bootstrap.sh/check-tools.sh/installer.sh are rewritten as four numbered steps with plain prompts: downloads go to fixed .part names that are renamed into place, Rust components unpack straight into a staging folder (tar --strip-components) that is renamed when verified, the source is checked out in a staging folder the same way, and no rm/rmdir remains; the installer only accepts an empty folder or an earlier Builder folder, never / or the home folder, and the compile shows one counting line with the full log in build.log. In the Rust crate every remaining file delete goes through remove_inside(root, path), which refuses anything not strictly inside a validated install root; gitclone no longer removes a destination on failure, downloads and links are replaced by rename instead of delete-then-write, and clean build is cargo clean --target-dir. tui.rs is regrouped by screen with smaller functions.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 14:05:49 +02:00
Admin
41fc2e3b0a builder: the Builder TUI matches the new terminal design, Windows executables carry app icons, and every app has one -- plain full-screen menu (SETUP / YOUR LICENSES / MAKEPAD EXPERIMENTS / CODING AGENTS) with one status line and one progress bar; log in with an email kept in the install folder (downloads are no longer personalized); consent screens list each license agreement (Return opens it) with Agree to all / Cancel; a GPU notice screen on Windows and Linux; optional CUDA for Makepad Amp on NVIDIA GPUs; Apple developer tools screen on macOS; updates save local edits as changes/<app>-<date>.diff for a coding agent to merge back; "clean build" runs cargo clean. libs/win_resource writes Windows icon and version resources without rc.exe from the same icon source as macOS bundles; cargo-makepad uses it. Apps get icon.svg + icon_1024.png (tools/app_icons/render.sh). makepad-mac.sh and makepad-windows-preview.sh are the simulated visual specs.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 13:48:33 +02:00
Admin
d15996efd9 task, cargo-makepad, widgets, audio: the task manager chooses its columns, graphs every process' network and disk traffic and installs itself as a Dock app built by cargo makepad -- cargo makepad desktop bundle -p <crate> [--install[=DIR]] builds a self-contained, signed macOS .app (MAKEPAD_PACKAGE_DIR=resources in its own target dir, every dependency's resources plus only the fonts the binary's manifest names, icon from [package.metadata.makepad.desktop], per-app usage strings, signed with the Apple Development identity so privacy grants survive rebuilds) and installs it outside target/ (default ~/.makepad/apps), replacing the per-app package-macos.sh scripts
- task: a right-click column chooser (sections as flyouts, Default Columns), every figure and graph its own sortable column, dragged order and widths saved; per-process network bytes/packets from the kernel's ntstat control socket (matches nettop, no root), disk bytes, footprint and idle wake-ups every tick; history journal v4
- widgets: data_grid_columns, one column helper (chooser, reorder, resize, fit, sort cycle, layout text) that task uses and other tables can reuse; the menu engine refreshes marks inside an open flyout; the segmented control centres its labels on the line height and no longer glides after a moved row
- svg: a stroke join never connects to the previous subpath (the diagonal through outline icons)
- platform: home::app_data_dir; script: ScriptIp body ids widened to 14 bits (16384 bodies, was 4096) with an index of 26 bits, and a clear stop instead of aliasing past the limit
- audio_route (new): tap an app's audio output through the Core Audio process tap into a host processor (equalizer, gain, limiter, analyzer) and play it; audio_picture owns the one FFT; audio_decode probes tags and length from a file's head and tail; search::fold_words; zip_file reads archives with a trailing comment

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 22:34:45 +02:00
Admin
5ac42f026d wm on Android: the shell follows the Pixel launcher's motion -- launching from an icon grows the window from an icon-sized circle over 500 ms on the emphasized curves while the icon crossfades out (25-75 ms) and home scales to 0.97; releasing an app to Home flies it into its icon or tile on Quickstep's three springs (dock-row circle fallback), gone by 85% while home reveals from 0.85 over 1 s; the lift subtracts the 11.3 dp slop, a motion pause opens Recents with a haptic click and neighbour cards sliding in over 300 ms, >= 36 dp goes Home; All Apps is a full-screen panel rising 300 dp with the launcher's fades, home at 0.97 and hidden at 40%, opening past 40% or on a > 1 dp/ms fling. Cx::haptic_feedback reaches the Activity's performHaptic. The status band keeps the app's last sampled colour while a Recents card opens. Latency: a finger move goes to a hosted child at once with its own tick and every batched MotionEvent sample reaches it (Mail scroll touch->present 22.1 -> 15.7 ms mean). Values from AOSP Launcher3/Quickstep
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 22:34:44 +02:00
Admin
e603d6ae84 wm on Android: apps build on the phone -- the multi-process WM's APK can now carry the toolchain, source tree and prebuilt target/ (proc-pack --proc-toolchain=<tc>, written as wm-proc-ondevice.apk), like wm-dyn's super-app, but without the engine dylib: each app is a small generated wrapper crate linking the engine statically, so an on-device cargo build reuses the shipped engine rlibs and compiles only the app. With debug.makepad.wm.ondevice=1 the launcher (--build) builds the app before loading it; builds take turns on a lock, each finished library is copied to its own file in files/run/ and loaded from there, and a build or lock wait past its deadline (300 s, 600 s for the first proc-macro bootstrap) is killed with its process group and the APK's prebuilt library runs instead. Provisioning, unpacking and the proc-macro bootstrap moved out of the WM's dylib host into libs/ondevice_build, shared with wm-dyn (streaming LZ4 parts, same stamps and paths); dyn-pack's staging was factored so proc-pack reuses it. The debuggable switch is opt-in and only for the on-device APK. Proven on a Pixel 11 Pro XL: calculator's source edited in the phone's copy rebuilt in 12.7 s and showed the change; four apps built in turn in about 6 s each
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 22:34:44 +02:00
Admin
9baf6d6854 platform, wm: hosted apps ask the WM for what they cannot do themselves -- a hosted child has no OS window and, on Android, no JVM, so the clipboard menu, opening a URL, permission prompts, file pickers and HTTP were unavailable to it (Weather sat on "Loading" as a phone child process). AppToStudio::Relay / StudioToApp::Relay (appended, tags 26/27, existing ordinals pinned) carry these requests (platform/studio/src/relay.rs); the child side routes them automatically from the ordinary Cx APIs (platform/src/hosted_relay.rs), the WM executes them and answers by a host request id mapped back to the child's. HTTP for Android children is relayed through the WM's own Java HTTPS (NDK code has no TLS and the repo takes no external TLS crate), arriving as the NetworkResponses apps already handle; a relayed request fails after 60 s without an answer. The WM serves relays only to clients it holds a live connection to; open_url allows http, https, mailto, tel and geo; picked documents are copied on a worker into a per-pick cache folder (older than a day deleted); Android save/folder pickers answer cancelled until children can write through SAF. open_url, which was unimplemented on Android, now opens the URL. linux_direct gets a clipboard of its own (platform/src/direct_clipboard.rs): the WM owns it, Ctrl/Logo+C/X/V work as on X11, and children reach it through the existing copy/paste messages
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 22:34:44 +02:00
Admin
a8bf0e4dcf wm on Android: every app is its own process -- the plain makepad-wm now ships as an Android APK (cargo makepad android ... proc-pack -p makepad-wm-android) whose phone apps run as real child processes instead of dylibs loaded into the WM. The interface between WM and app shrinks to what the desktop WM uses: shared GPU buffers and the StudioToApp/AppToStudio protocol. The WM allocates each app's swapchain as AHardwareBuffers and hands them over a unix socket (AHardwareBuffer_sendHandleToUnixSocket, API 26); the child, started through the libmakepad_launch.so launcher in nativeLibraryDir (W^X allows it there), imports them into a windowless Vulkan device and renders its window pass into them (android_hosted.rs). Each app library links the engine statically, so the engine-dylib identity handling of wm-dyn is not needed. Children have no JVM: assets are read from the APK file, audio device lookup no longer goes through Java, and the startup/resize extra draw of the Activity build is repeated so the first frame carries its text. On a phone the WM asks for the soft keyboard only while the child reports a focused text field. Proven on a Pixel 11 Pro XL: all twelve phone apps launch as processes (first frame 1.6-2.4 s cold), taps reach them. Not yet: HTTP in children (the Activity build borrows Java's), clipboard/permission/file-picker relays, idle-app reclaim, and on-device builds of app libraries
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 22:34:44 +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
ab64a64e7e tools: makepad-screen is makepad-agents, and its binary is agents -- the crate is the agent session manager (start, attach, list, the TUI); "screen" was a nod to GNU screen, and its other job, the pty trampoline a terminal starts its shell through, does not need the old name either. The package is makepad-agents in tools/agents, the executable is agents, so it is the command on the PATH itself and the shell wrapper that existed only to give it that name is gone (the binary already resolves the workspace's session directory the wrapper used to export); the terminal's pty spawn looks for agents beside the app, Director looks for and pins the sibling agents with the makepad-agents-v1 record and the agents version line, the session environment is MAKEPAD_AGENTS_SESSION and MAKEPAD_AGENTS_STATE_DIR, the CI scripts build makepad-agents, and Director's notes say how to build and run it
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 09:36:13 +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
11cd394812 Remove Flow, asset and VJ applications moved into Stage
Remove the retired applications, asset-specific libraries and DJ pack tool
from Makepad, together with their workspace and launcher entries. All 981
removed source paths are accounted for in the private Stage repository.

Keep public AI chat generation through the AI Hub's generic job runner.
Extract shared SHA-256 and UDP binding into core_util so the public hub and
model crates no longer depend on the relocated asset libraries. Preserve
the retained public coverage in the split wasm validation script.

Validation on the exact cleanup tree in an isolated checkout:
- Release checks: core_util, model, aichat, WM and Builder.
- Release builds: aichat, WM and Builder.
- Existing tests: core_util 5, model 30, aichat 7, Builder 2 passed.
- Core/model checks: wasm32, Linux and Windows passed.
- No warnings in the successful checks, builds or tests.

Known baseline: WM library tests do not compile because the unchanged
style-transition assertion compares seven expected weights with eight.
The unrelated working-tree correction is intentionally outside this commit.
2026-09-21 23:09:50 +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
Kevin Boos
ccb1041a90
cargo-makepad: keep the android SDK at a stable path (#1253)
The SDK came from `env!("CARGO_MANIFEST_DIR")`, so every copy of the binary had
its own NDK at its own path. Switching copies changes `CMAKE_C_COMPILER`, and
cmake then deletes its cache and re-configures *without* the `-D` flags, losing
`CMAKE_SYSTEM_NAME=Android`. Deps like `aws-lc-sys` then build for the host and
Darwin forces `-arch arm64` into the NDK clang.

* default to `~/.makepad/<host-dir>`, independent of which binary runs
* migrate an existing per-checkout SDK with a single `rename`
2026-09-21 23:03:57 +02:00