~ tildeThe guideGitHub ↗

Bounded M4 performance and regression qualification

Build first with npm run build; do not relink the GUI while a fixture launches it. node scripts/qualify-regressions.mjs --evidence NEW_PRIVATE_RUN reuses the actual SQLite FULL/locked, filesystem/receipt, redaction, UID/native IPC, credential mutation, exact-approval and crash fixtures. All credentials/providers are synthetic. Owned transient units and private state are removed by those fixtures. A process kill does not establish storage-loss durability. An unknown non-idempotent outcome is retained and never blindly redispatched. Cancellation cannot undo an effect; approved shell code retains ordinary account access.

node scripts/qualify-performance.mjs --mode offscreen --evidence NEW_PRIVATE_RUN starts two fresh fixture processes in owned transient user units capped at1GiB, 128tasks and80seconds each. The row fixture is128messages ×1700bytes; the answer fixture is32messages ×7800bytes. Each loads bounded history, takes30one-second baseline samples, performs3chat-scroll/Settings-navigation cycles, then takes 30settled samples without resetting the process. Raw RSS, process CPU and idle content-position changes are retained per second. The limits remain <512MiB, <0.25CPU seconds per settled second, <5idle position changes and <3seconds resident-window readiness. Compare baseline and settled profiles; investigate unexplained retained growth instead of clearing the process to hide it.

Five further fresh processes each report cold primary-input readiness, two warm focus observations and a ready-to-reconnect barrier after synthetic IPC loss. The driver retains all10warm and5cold/reconnect samples, distributions and threshold misses. Cold timing runs from the driver immediately before starting the owned unit through focused primary input, including private D-Bus, synthetic IPC and QML startup; it is not an in-process QML-only timing. The reference limits are <300ms warm focus, <1.5seconds cold input and <3seconds ready-to-reconnect. An activation ACK is never a compositor focus observation. Reconnect readiness does not authorize resuming work. Focus/navigation send zero inputs/decisions.

Offscreen/software is separate preparatory evidence. Its driver deliberately exits1 because performance.reference remains not_run. Actual default-renderer Wayland/X11 runs require --mode native --grant PRIVATE_OWNER_SCOPE, bound to the exact native fixture hash, current local logind session, new evidence path, expiry and at most240seconds. The scope is single-use, same-UID mode0600 in a mode0700 directory; symlinks/unsafe ownership/replay refuse before windows or units. It grants no desktop configuration, session interruption, service enablement or inference. Do not reuse an earlier desktop qualification scope. The driver records renderer API, session, runtime, hardware labels and cleanup; missing samples, unavailable focus, threshold misses or leaked units fail.

Normal CTest runs leave the lengthy fixture slots inactive. To exercise one explicitly, the driver sets TILDE_M4_RESOURCE_CASE=rows|bytes or TILDE_M4_TIMING=1 in private state. These are synthetic test entry points, not production model settings or authorization. The required final-source/ installed artifact qualification and final owner acceptance remain separate.