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.
7.6 KiB
Optional C3 saved diagnostic — EXPERIMENTAL
This fixture is a separate fixed saved-diagnostic-A experiment. Core
step20c-targeted final sources, plans, freeze and review are immutable.
A/G saved runs remain INCONCLUSIVE: their actual serial39 636x573→636x513
was held, but the old absent-IPC-ws.gaps predicate aborted before target
captures and natural timeout. No qualification transfers to the new binary.
STEP20C remains NEXT; production cross-output support is NOT YET SUPPORTED.
Contract and source
saved-passive.patch applies only to the historical A private
mosaic-source/sway/tree/view.c; base/new/patch hashes are recorded under
same LAB diagnostic/source-provenance.json. The full source is private.
Sway view saved-copy creation/removal owns all normal references and scene
mutations. The patch observes existing lock counts before/after the existing
set-buffer call; it adds no buffer lock, unlock, copy retention, ACK, timeout,
scheduler, rendering, readback or timeline waiting. No public ABI changes.
One calloc sidecar per actual saved copy observes output_sample, node destroy,
source release and source destroy. It detaches sample on node destruction,
nulls whichever object dies first, and frees exactly after both die. A NULL
source needs only node destruction. Stable scalar addresses remain labels,
never dereferenced after destruction. Source buffer destruction may precede
node destruction because SceneFX retains its texture. Native release/destroy
and a release timeline pointer/point do not prove GPU completion.
Logging causes CPU timing overhead; instrumentation neutrality is NOT PROVEN.
Native saved tree logs bind owner/container ID, scene parent and content tree.
Creation logs distinguish saved-node, original scene-node and raw source-buffer
addresses, source crop, destination size and transform. output_sample logs the
actual saved node global geometry, viewport, enable state and each applied
ancestor clip at that sample (sample_ns). Existing unmodified SceneFX
OPT_BUFFER_DRAW records bind that same node/output to actual draw extents.
The validator measures the intersection of that saved node, its viewport
and observed clips; another node's rectangle cannot substitute for it.
Gate and global budget extension
diagnostic.py adds exactly the fixed fourteenth spec in memory only during
this process's original gate.locked, action_debit and shared Session use.
Original gate.verify runs before registration and after unregistering.
diagnostic-registration.json persists the exact spec; final_budget(lab)
requires it for extended reconciliation. It never edits the frozen module,
original review or previous tokens/events. The original review does not accept
this extension. Independent preparation review and a separate runtime review
bind exact original freeze/review, diagnostic source/patch/tests, private source,
clients, wlroots, the original A SceneFX static archive and uninstalled pc.
The runtime freeze additionally binds the staged new binary.
Only the same LAB is accepted. All13 original tokens must precede diagnostic
build/stage/run. One build token and one stage token are O_EXCL/fsynced before
the action under a flock; diagnostic/budget.json is separate from runtime
captures. Failed actions still consume their token. No retries/refunds/reset.
Only one known saved-diagnostic-A runtime token is appended under the original
global flock/fsynced reconciliation. Limits remain global14 runs/174 PNG,
saved3 runs/30 PNG, per-run16 maximum; C3 itself uses at most10 PNG,2 clicks,
1 camera,150 seconds. Session supplies isolated sockets, maps and cleanup.
A final caller must use this extension's final_budget, since the frozen
original validator intentionally knows only its thirteen original specs.
Review and execution protocol
prepare.py --lab /home/fy59/swayfx-mosaic-targeted-7gge6h8bruns offline tests, persists registration and seals preparation bytes. It requires the C17 syntax receipt. It does not accept its own result.- Independent review must write preparation-review.json with scope, ACCEPTED status, independent=true, blockers=[], exact freeze_sha256/files, report_file/report_sha256. No compositor build before that acceptance.
- Parent reserves
reserve_build_stage(lab,'build')before the ONE Mosaic private build. Reuse exactly HIST/scene-build/libscenefx-0.5.a and HIST/scene-build/meson-uninstalled/scenefx-0.5-uninstalled.pc. Zero SceneFX builds or edits. Parent reserves stage before ONE DESTDIR stage and verifies its manifest. No install, live IPC, second lab or system library change. - Parent seals runtime-freeze.json (scope/spec/files=bindings(lab,True)), then independent runtime-review.json with analogous exact-byte acceptance.
- Only then
run.py --lab SAME_LABmay consume the optional token once. H1=-800,H2=0, normal scale1; real SHM crossing and at most one camera; beforehold applied state; gaps inner current set30; pending workspace rectangle/owner identity and actual held wire dimensions; native saved create/draw/sample before2500ms; held H1/H2 pair; natural2500ms timeout with client alive and unACKed serial; requested live geometry/saved node gone; stable H1/H2 pair; normal protocol close; final H1/H2 pair. Ten PNG total including two H2 static references. No held-serial ACK during cleanup. - Postrun analysis uses the same pending_geometry, held_configure, saved_identity, saved_removal and native_pairs predicates as offline/runtime. Final global budget must use final_budget. Any missing required native evidence fails closed; partial observations cannot become GPU-lifetime qualification.
Offline native trace fixture in test_diagnostic.py is explicitly synthetic; wire/IPC positive and negative tests use actual saved-A/G consumed logs and snapshots read-only. No synthetic native test is runtime evidence. Complete intermediate damage, GPU/CPU completion, atomic generation, other output geometries, and instrumentation neutrality remain NOT PROVEN/NOT TESTED.
Refused preparation correction C3
The previous preparation was refused for C3-CREATE-WINDOW and C3-REMOVE-WINDOW. Its exact source bytes, aliases, receipts and review are preserved in LAB/diagnostic/superseded-preparation-review-refused-v3. Creation must follow the requested command, precede unique owner/tree activation, and identify an unreused actual saved node. Every sample must follow activation and bind its exact node/source/output.
Natural removal uses the same saved_removal predicate in the wait, before live captures and in final/postrun validation. It requires the unmodified positive-waiter transaction timeout RAW line after activation, then the exact SD_REMOVE owner/tree/content, then each measured saved-node/source destruction. SD_REMOVE is emitted before synchronous node destruction in the unchanged passive C patch. Destruction must follow creation and precede the first live capture boundary and normal explicit-close request. The native timeout line has no monotonic ns; destruction occurs before the runner observes timeout, so runner observation is not a lower bound. The audited single queued transaction gives this fixed experiment its raw-order association; it is not a general transaction-generation or GPU-completion claim.
prepare.py copies current diagnostic sources into diagnostic/diagnostic-source, reuses unchanged passive C and its existing C17 receipt, writes source-bound offline results and creates a new O_EXCL preparation freeze after the refused receipts have been archived. It never creates an accepted review. The C3 runner journals named private runtime, run, log and socket paths after Session creation and startup without changing the frozen core.