makepad/apps/photos/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.6 KiB
Text

// CI smoke test for apps/photos. 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-photos"] targets: ci.host.targets})
})
let app = ci.launch({package: "makepad-app-photos" binary: "makepad-app-photos" 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 photo library that shows a grid of pictures, or an empty-library message. 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. Write one short bullet line for each numbered point saying what you see. YES means points 1, 2 and 3 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