makepad/apps/clock/ci.splash
Admin d26814e045 platform, apps: deterministic app capture, one app registry, makepad-app-* names, and the platform fixes the Stage editor found -- the remote service gains a virtual clock (--virtual-clock; /step advances whole frames and answers after they are presented, bounded to 20 s), /settled, widget id paths in /snap (q=path:), in-process MP4 capture on that clock (/cap/start|stop|pause|resume, no overlay in the file), --window WxH@scale, a synthetic cursor drawn into frames and --seed; with those flags off nothing changes. Passes that sample another pass's target stay dirty until their source has drawn (black first frames under parallel load), a shader still compiling marks its pass dirty, the Mac text shader gets its pass's camera on the first draw, and texture readbacks go to the requester that asked (try_take_texture_readbacks_for). Splash: obj.delete removes a field, for-loop keys compare equal to their @id, a loop ending a module no longer empties the stack, and a call-scope leak is closed. CEF: one exclusive profile per process, relaunch handled without a Chrome window, JS dialogs suppressed, popups become embedded tabs, one app bundle per build. Speech: Kokoro reports word timings, whisper aligns known text (align_text) and word times are no longer a token late. libs/app_registry is the one list of apps (the WM and Builder read it, Stage finds apps by id); every app crate in apps/ is package and binary makepad-app-<id>. AGENTS.md records the current agent workflow and the rule against rm on a possibly empty variable.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 01:55:13 +02:00

24 lines
1.7 KiB
Text

// CI smoke test for apps/clock. Run by tools/ci, which finds every `ci.splash`
// in the checkout. The script decides every input; the vision model only
// judges the grab against the acceptance text below. Basic on purpose: does
// it check everywhere, build and come up here, and look like what it is.
use mod.std.*
use mod.ci;
ci.step("check other platforms", fn(){
ci.check_targets({packages: ["makepad-app-clock"] targets: ci.host.targets})
})
let app = ci.launch({package: "makepad-app-clock" binary: "makepad-app-clock" cwd: "."})
ci.step("comes up", fn(){
ci.sleep(3.0)
app.no_errors()
let shot = app.grab("start")
ci.accept(shot, "This is a screenshot of one application window taken from a Mac. A thin bright red frame runs around the very edge of the picture; it is the test harness's marker and is not part of the application. Ignore it. The application is a clock. It came up when these are true: 1. The picture is not blank: it is not one flat colour from edge to edge, and it is not entirely black or entirely white. 2. Some user interface is visible: at least two different things among text labels, buttons, icons, panels, lists, input fields, a toolbar, a drawing or a picture. 3. No error panel covers the window: there is no large block of text with words such as panic, error, failed, backtrace or unwrap. 4. The time is visible: a round clock face with hands, or large digits showing hours and minutes. Write one short bullet line for each numbered point saying what you see. YES means points 1, 2, 3 and 4 are all satisfied. Then write the verdict as the last line, in exactly this form: VERDICT: YES or VERDICT: NO")
})
app.no_errors()
app.quit()
nil