5.5 KiB
STEP20C negative-origin nested-grab fixture (EXPERIMENTAL)
This source-only fixture rebuilds the pinned private compositor and SceneFX through the historical nested-grab fixture, then applies only the historical parameterized pointer patch to a disposable client copy. The original nested client supplies two real XDG grabs and horizontal placements. No production source, installed library or historical fixture is modified. The probe report contains the coordinate contract and evidence.
Pinned inputs
| Input | Base | SHA-256 |
|---|---|---|
| SceneFX private patch | SceneFX 37ccd723bef49e6891156ffafce8f549f01446cc |
c74c515b98da8f5f637e260e6a3755c7a75bd78d1c39e54a67850f1c383e30e7 |
| Mosaic private patch | Mosaic cd550382b311efdbfe3ed892f4e1d281d852e754 |
d416f6413ea097a48a44d231e50ffba363914f46c8687f0ea2e4dcacd5f31fe9 |
| Hidden-owner guard | After Mosaic private patch | 35785a8f3e863b3c1fd87932d8ff0c2949b03cb04382cc34e1126170968f802b |
nested-client.c |
Original nested fixture | 2e40c98af72a0df8b316810589a0be8f4425a763db1de448b49a7813956b6f7d |
pointer-daemon.c |
Original valid-grab fixture, then patch below | a00fcedc38ccb7ca4c25c982d9f38e8bde3168a3833f0c9cf2056e841d720938 |
pointer-extents.patch |
Original vertical fixture | 4eeb9f808d0941edca82dc3c5d24a9c936cc3d9d8bb80af3db6aed6af0d47c50 |
The new prepare.sh (ed9d0e8bf50338d39519e003463e637cdba3ecfb147e05a097e88ac6c8def694),
run.py (7b9e2d311dcf942e4dc625b8fcc25c650b7c3ec1f604828397cf1de120b43541),
analyze.py (2d33f4876ea1e982b32f9e73145db86836ba2fa7f5382f9433b4b9f076098a49)
and patched pointer source (ede9a39adbe1744c771a784f6ad0c296259e36b942c78d75be620b86b9f2a66d)
can be rechecked against the source manifest in each laboratory. The
three private patches, nested client and pointer patch remain byte-identical
to their historical versions. No new SceneFX, Mosaic or client patch is
needed for this geometry; all changes are in the new runner and wrapper.
Fresh preparation and replay
Run from a full Git checkout containing the pinned commits. Dependencies are
those listed in the linked historical fixture: Git, Meson, Ninja, C17
compiler, pkg-config, wayland-scanner, kitty, grim, wev, swaymsg,
Python and the documented development libraries. prepare.sh creates a new
temporary laboratory, checks and applies private patches there, builds
SceneFX/Mosaic privately, generates protocol bindings and compiles the two
clients. It prints LAB and BUILD_LOG; retain both paths.
analyze.py additionally needs Pillow to decode the retained PNG captures.
prep=$(sh tooling/probes/step20c-negative-origin/prepare.sh)
printf '%s\n' "$prep"
LAB=$(printf '%s\n' "$prep" | sed -n 's/^LAB=//p')
test -d "$LAB"
for mode in control private_standard private_mosaic; do
python tooling/probes/step20c-negative-origin/run.py "$LAB" "$mode" pointer negative
python tooling/probes/step20c-negative-origin/run.py "$LAB" "$mode" visible negative
python tooling/probes/step20c-negative-origin/run.py "$LAB" "$mode" b_cross negative
python tooling/probes/step20c-negative-origin/run.py "$LAB" "$mode" both_cross negative
python tooling/probes/step20c-negative-origin/run.py "$LAB" "$mode" a_cross negative
python tooling/probes/step20c-negative-origin/run.py "$LAB" "$mode" outside negative
done
for scenario in hidden hidden_click toggle; do
python tooling/probes/step20c-negative-origin/run.py "$LAB" private_mosaic "$scenario" negative
done
for mode in control private_standard private_mosaic; do
python tooling/probes/step20c-negative-origin/run.py "$LAB" "$mode" b_cross positive
done
PYTHONDONTWRITEBYTECODE=1 python tooling/probes/step20c-negative-origin/analyze.py "$LAB"
Each invocation creates a single-use run-GEOMETRY-CASE-SCENARIO directory
under LAB. Retain a failed case by renaming its directory before retrying.
The runner writes outputs-verified.json, injections.json,
pointer-validation.json, measurements.json for popup scenarios, IPC tree
and output snapshots, WAYLAND_DEBUG=1 client trace, wev, pointer and
compositor logs, captures of both outputs, and exit-status.json. The
coordinate conversion is sent_x=global_x-min_x after IPC confirms the
negative layout bounds; the absolute extent is 1600×600. Inspect client
events as well as pointer acknowledgements. A control popup crossing is
conclusive only if actual pixels and buttons cross the border.
Each case uses a short, private mode-0700 /tmp/mno-* runtime and an explicit
discovered SWAYSOCK for every swaymsg -s call. WAYLAND_DISPLAY is private.
The runner removes its own runtime only after reaping its process groups and
writing exit codes. Private SceneFX is loaded only for the private compositor.
The current desktop and ordinary Sway IPC socket are never addressed.
Checks and cleanup
sh -n tooling/probes/step20c-negative-origin/prepare.sh
PYTHONDONTWRITEBYTECODE=1 python -c 'import ast; ast.parse(open("tooling/probes/step20c-negative-origin/run.py").read())'
(cd "$LAB" && sha256sum -c negative-origin-source-sha256.txt)
git diff --check
Review measurements and hash evidence before removing the named LAB and
BUILD_LOG. Generated protocol sources, binaries, captures, logs and sockets
remain outside Git. Cleanup must target only paths printed by this probe;
historical laboratories and the active session are outside its ownership.