115 lines
6.5 KiB
Markdown
115 lines
6.5 KiB
Markdown
# Static SceneFX distribution contract fixture
|
|
|
|
**EXPERIMENTAL / PRESERVED HISTORICAL EVIDENCE / not production or a package recipe.**
|
|
Read the [contract dossier](../../../docs/design/STEP20C_SCENEFX_STATIC_DISTRIBUTION_CONTRACT.md).
|
|
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](../step20c-scenefx-abi-package/README.md), 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.
|
|
|
|
```sh
|
|
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**:
|
|
|
|
```sh
|
|
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.
|