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.