Diagnose and verify an app
From anywhere inside the app:
tilo-app doctor --json
tilo-app test --json
tilo-app inspect --audit --output target/inspect.json --audit-report target/audit.json --json
tilo-app check --artifacts target/check --json
doctor reports manifest, resource/lifecycle wiring, serialized screens,
translations and scenario problems together. test runs Rust tests;
check also runs strict lints and saved accessibility-audited scenarios.
Fix a reported failure instead of treating an unavailable check as a pass.
inspect writes the actual post-layout widget and accessibility tree without
opening a window. Inspect action bindings, accessible names and bounds there.
Use semantic resource actions for behaviour tests; use pointer events when
the subject is hit-testing or geometry.
Capture the production view in more than one theme and window size:
TILO_SHOTS_THEME=light tilo-app shot --output target/light.png --viewport 480x900
TILO_SHOTS_THEME=high-contrast tilo-app shot --output target/contrast.png --viewport 1200x900
Pass --scenario NAME only for a scenario your app declares. Put illustrative
data in that capture fixture, not the live app. Check that artwork is decoded,
controls fit, long copy wraps and the primary action remains reachable.
--json returns one result document; progress goes to stderr. It does not
bypass permission checks or confirmation. Headless peer tests prove resource
merging; real device transport and authenticated membership need separate
integration journeys.
Verify an installed resource
Use the authorized session’s tilo-control socket. Run actions list for
permission-filtered descriptors, then invoke the returned provider and id.
Keep the caller, workspace and record fixed.
- Completion:
acceptedonly means admitted. Savebroker_invocation_id; follow it withtilo-control actions status ID --wait. If unavailable, outcome is unknown; do not replay a mutation to replace a lost reply. - Result: observe the changed resource through its action surface and production view. Wait boundedly for cold publication; the first empty listing is inconclusive. Use the returned resource id, not its title.
- Missing actions: if an opted-in
native_admissioncheckpoint exists, inspectmanager_connected,custody_reconciled,action_history_ready,directory_enqueuedand directory RPC counters to distinguish connection, applied history and publication. A painted window proves no action readiness. A missing snapshot is inconclusive; ordinary dev slots need not serve the device-owner socket. Use existing authorized diagnostics and retain publication checks. These observations do not prove durable-owner ACK. - Reopen: close the view; restart the owned session if under test; reopen normally with the same caller and workspace. Verify the original record and edit without replay. A closed-tab undo stack is no reopen API.
- Durability and sync: saved bytes and a repainted view prove only those facts. Observe required owner ACK or remote delivery separately with the real authorized owner or peer. In-memory replica tests do not prove transport.
More: Build an app, Headless testing.
This page is docs/developers/tasks/verify.md in the Tilo repository, at 29fbb80121. Changes to it are made there.