swayfx-mosaic/tooling/probes/step20c-targeted
fy59 ed9375797e test(mosaic): record targeted STEP20C partial closure
Record exact-SHA scale and extended G samples, same-source blur measurements
and retained negative saved/input results. Keep STEP20C NEXT and production
multi-output unsupported; no production integration.

Preserve immutable probe fixtures, offline regressions and compact artifact
provenance. Fourteen consumed runs / 125 output captures, independent final
audit accepted. Saved timeout/GPU lifetime, whole-H1 return, input after camera
mutation and all-frame damage remain open.
2026-10-14 07:00:33 +02:00
..
cases.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
engine.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
fx-client.c test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
fx.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
fx_validators.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
gate.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
geometry.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
plans.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
prepare.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
README.md test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
replay.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
run.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
test_fx.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
test_targeted.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00
validators.py test(mosaic): record targeted STEP20C partial closure 2026-10-14 07:00:33 +02:00

STEP20C targeted fixtures

EXPERIMENTAL / PLANNED. These source fixtures repair bounded measurement procedures identified in the overnight evidence. STEP20C remains NEXT; production multi-output remains NOT YET SUPPORTED. No production integration, UX policy, package dependency, compositor build, installation or live socket operation is part of this fixture.

The new private laboratory is /home/fy59/swayfx-mosaic-targeted-7gge6h8b (owned mode 0700). The historical /home/fy59/swayfx-mosaic-overnight-mcolx0gq is read only: its 18 runs are exhausted. Historical verdicts remain unchanged. Public Python tests accept --historical so paths can be supplied explicitly.

plans.py declares 13 accessible attempts: scale A/G, held saved A/G, effects pristine/A/G, refreshed input pristine/A/G and G dynamic/hidden/R90. The independent ledger permits at most 14 attempts, at most 16 compositor PNGs per attempt, campaign PNG caps scale24/saved30/FX48/input36/G36, and total174. Current planned allocation is164. The unused saved diagnostic is disabled; it requires a separate parent decision, exact diagnostic identity and distinct review/freeze. No diagnostic attempt is consumed by preparation.

Every launch/action reserves first in the same locked persistent ledger. It uses flock, atomic replacement, file and directory fsync; a consumed run token persists on failure. There is no reset, refund or retry operation. Local click/motion/grab/chain/camera/mutation/configuration/spawn/capture limits are reconciled from every reservation. The watchdog stops active measurement at143 seconds and limits the total run logs to32MiB. Cleanup retains terminal IPC response, normal process codes, rescue status and150-second bound.

engine.Session(spec, auth, lab) exposes owner, find, cmd, client_cmd, capture, pair_capture, click, close_client, debit, spawn, log, launch_client, wait, save, calibrate and inject. Clients are under LAB/clients; raw run evidence is LAB/runs/<id>/run. All compositor/control IPC explicitly names its private socket; inherited display/library selections are removed.

Scale/R90 uses five marker pixels and the reviewed pre-owner layer-host baseline before identifying one new XDG root. The same shared root validator replays actual D2 and rejects host substitution, multiple candidates, missing host, incorrect ancestry and incoherent callback order. Replay qualifies association only; it does not invent missing historical input/final evidence.

Held saved uses source-audited gaps inner current set 30 and startup -Dtxn-timeout=2500. It requires mapped real SHM, a previous actual ACK, a new received configure held without ACK, and a natural waiting transaction timeout with the client alive. Actual argv plus source and elapsed timeout corroborate2500ms; no native configured-value log exists. A/G expose no saved node/render identity. SHM and pixels cannot fill that gap, so saved clipping remains INCONCLUSIVE / SOURCE ONLY.

Input recomputes painted global coordinates after region restore, focus, camera and layout mutations. It requires fresh local pointer coordinates, actual client wire/button serial and target. The empty region intentionally uses the previous global point to compare no owner delivery. Historical F analysis processes ALL exact output/commit_seq pairs and reports missing presents. No atomic generation, presented buffer identity or GPU lifetime is inferred. Dynamic G samples fresh popup input after each resize/migration; legitimate popup_done is retained and fresh toplevel input is sampled without recreating a popup chain. Hidden G retains the same chain on return.

Preparation and validation are offline:

PYTHONDONTWRITEBYTECODE=1 python tooling/probes/step20c-targeted/prepare.py --lab LAB
PYTHONDONTWRITEBYTECODE=1 python tooling/probes/step20c-targeted/test_targeted.py --historical HIST --output LAB/offline.json
PYTHONDONTWRITEBYTECODE=1 python tooling/probes/step20c-targeted/replay.py --historical HIST --output LAB/replay.json

Preparation verifies retained binary/client/protocol hashes and privately compiles only the new FX client. Generated protocol headers/C, binaries, SHM, logs, captures and runtime directories remain outside Git. identity.json records copied client source SHA and provenance closure. gate.seal(LAB) requires14 passing core tests and5 passing FX tests, executed commands, raw output and exact source bindings, plus typed actual D2/F/E2 replay receipts and binds all fixture/import/client/tool/ binary/library/source evidence. A separate independent reviewer must write LAB/review.json with scope STEP20C_TARGETED_FINAL_BYTES_V1, exact freeze SHA and file bindings, accepted read-only independent review, empty blockers and bound report bytes. The author does not create that acceptance.

Only after independent acceptance and explicit runtime authorization:

PYTHONDONTWRITEBYTECODE=1 python tooling/probes/step20c-targeted/run.py --lab LAB scale-A

Each invocation is one unique attempt. A missing or changed acceptance fails before a run token, process or runtime exists. This fixture does not launch an entire campaign automatically. Unexercised matrix cells remain NOT TESTED.