swayfx-mosaic/tooling/probes/step20c-targeted/README.md
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

88 lines
5.1 KiB
Markdown

# 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:
```sh
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:
```sh
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.