swayfx-mosaic/tooling/probes/step20c-scenefx-static-contract/README.md

6.5 KiB

Static SceneFX distribution contract fixture

EXPERIMENTAL / PRESERVED HISTORICAL EVIDENCE / not production or a package recipe. Read the contract dossier. All builds, binaries, notices, logs and JSON inventories stay in an external LAB. No compositor entry point, desktop IPC, installation, package publication, system library modification or symbol visibility experiment is allowed.

Protocol before execution

Verify immutable historical manifests, using the exact historical README snapshot identified by the ABI freeze report. Reuse trusted qualified static binary after SHA-256 and Meson-option checks. The old build prefix is /usr/local: never change its sealed sources or build metadata. Prepare a new private Meson installation plan from byte-verified copies of the same source tree with --prefix=/usr --bindir=bin and identical package options. Reuse the original qualified executable at its expected build-relative path with identical hash. Run exactly one meson install --no-rebuild --destdir LAB/stage-static. No compilation, linking, stripping or retesting of old compositor builds is needed. Record the metadata adaptation separately.

If metadata setup fails, retain its failure; do not improvise manual staging or rerun the historical chain. A future independent reproduction may build only the static chain from pinned sources and private patches listed in the ABI fixture, with /usr prefix from the beginning. The historical laboratory is not a required future input.

Audit readelf/nm outputs, retained actual loader bindings and source call sites; never infer provider selection from a matching symbol name. Notice embedding, if exercised, uses a disposable copy and objcopy only; byte-for-byte extraction establishes technical feasibility, not legal approval. Do not stage that altered copy or add a notice policy to production. Budget: one static DESTDIR stage, zero graphical runs, zero shared builds, at most one necessary static reconstruction (not required if reuse succeeds).

Completed local campaign

LAB: /home/fy59/swayfx-mosaic-static-contract-7_vlvpjw. Historical README mapping: /home/fy59/swayfx-mosaic-abi-freeze-i6x1osil/historical-fixture-README.md. PARTIALLY_FEASIBLE; STATIC_DISTRIBUTION_REQUIRES_CONTRACT_DECISION; production strategy NONE — USER DECISION REQUIRED. Phase B stays local.

One stage passed with exactly one regular /usr/bin/swayfx-mosaic, no symlink, library or notice. SHA-256 ccd47ce5b74c132e19bcd46d022a80e90e8a944acc3db521a89427ee7913c614. The normal Meson plan uses /usr; the reused executable retains its historical build strings/options. Runtime path/graphics qualification is not claimed. Initial Python preparation failed on an absent optional subprojects directory before setup/staging. The source-copy assumption was corrected and preparation resumed; one setup and one install were executed, with zero compositor rebuilds.

python tooling/probes/step20c-scenefx-static-contract/audit.py LAB \
  --historical HISTORICAL_LAB --historical-readme HISTORICAL_README --stage

This historical-reuse mode verifies exact sealed manifest identities and trusted binaries, records commands/return codes, inventories symbols/provider consumers, dependencies/source notice candidates, and stages once. --stage must never be run again after stage-install-started.json exists. Omitting --stage allows repeated static analysis before sealing only. The sole notice probe modifies a disposable copy with objcopy, not production or the staged executable. After sealing, only --verify is permitted; it rechecks every new inventory entry without writing. Historical manifests use their README snapshot mapping.

Independent reproduction without the old laboratory

Use local Git object stores with the four exact pins in the report. Materialize new SceneFX and Mosaic sources with git archive at their respective commits; archive pinned wlroots for comparison. Apply the eight private patches in the report's ordered list with git apply --check before each application. Use the same installed wlroots/header/build identities, compiler/scanner/protocol and renderer features; otherwise mark the new matrix unqualified, not equivalent. The report is reproducible from these source inputs, not dependent on retaining the old executable or /home/fy59 paths. Future execution needs its own budget and authorization; these commands were not run in this ticket:

meson setup "$TASKLAB/scene-build" "$TASKLAB/scene-source" \
  -Ddefault_library=static -Dexamples=false -Dwerror=false
meson compile -C "$TASKLAB/scene-build" -j 8
PKG_CONFIG_PATH="$TASKLAB/scene-build/meson-uninstalled" \
  meson setup "$TASKLAB/mosaic-build" "$TASKLAB/mosaic-source" \
  --prefix=/usr --bindir=bin -Dwerror=false -Dsd-bus-provider=libsystemd \
  -Dmosaic-package=true -Dswaybar=false -Dswaynag=false \
  -Dman-pages=disabled -Ddefault-wallpaper=false
PKG_CONFIG_PATH="$TASKLAB/scene-build/meson-uninstalled" \
  meson compile -C "$TASKLAB/mosaic-build" -j 8
meson test -C "$TASKLAB/mosaic-build" mosaic-model --print-errorlogs
meson install -C "$TASKLAB/mosaic-build" --no-rebuild \
  --destdir "$TASKLAB/stage-static"
readelf -hW -dW -Ws -rW -VW "$TASKLAB/mosaic-build/sway/swayfx-mosaic"
nm --format=posix "$TASKLAB/mosaic-build/sway/swayfx-mosaic"

On trusted binaries only, retain loader --list and relocation/binding inspection in diagnostic mode (no compositor entry point), as in the preserved ABI fixture. Inspect complete stage entries with lstat, not just regular-file counts. Capture actual consumer/provider pairs; preserve package owners and complete root/generated-protocol notices. The existing historical-reuse audit intentionally refuses a different sealed identity; a new reproduction needs its own validated manifests and may use these standard diagnostics directly. Never execute the historical prepare.py full stock/shared chain just to obtain static symbol evidence. No bit reproducibility or legal clearance is implied.

Publication freeze

The historical verdict is unchanged. Subsequent decisions on private static linking, separate notices, project maintenance and exact-pair qualification authorize a distinct private runtime gate, not production integration. Verify the sealed manifests with verify-freeze.py LAB --snapshot-map MAP after publication wording changes. MAP is the external pre-freeze snapshot mapping recorded in the dossier; it must contain only entries whose exact original bytes still match the sealed manifest. No manifests are rewritten.