4.1 KiB
Phase 0 GC3–GC5 shared contract evidence
Result: Passed for Phase 0 shared resolution, clock/PRNG, and ownership/failure contracts
Scope: Deterministic contract models and validation; not production runtime, real-time audio integration, or soak acceptance
Format specification: Revision 0.3
Contract reconciliation
The GC2 draft schema used from, to, and transform for ordinary bindings, while PRD section 32 already defined source, target, scale, offset, and clamp. No production runtime exists and no released exhibit depends on the draft vocabulary. Revision 0.3 adopts the PRD fields, sets smoothing default to 0ms, rejects the draft names as unknown fields, and migrates the conformance fixtures. The complete GC2 matrix still passes.
GC3 — resolution semantics
The normative contract now defines:
- shared target capabilities and safety clamps;
- same-tick topological dependency evaluation;
- exact binding transformation, conditional disabling, and one-pole smoothing;
- override scope, priority, activation sequence, runtime IDs, and masking;
- easing equations, attack/release behavior, interruption, and dynamic release destinations;
- diagnostics for conflicts, cycles, unsupported targets, invalid transitions, and bounds.
The executable model and trace fixture verify direct bus overrides, parameter overrides feeding downstream bindings, preserved user edits, priority/scope competition, masked automation, post-override modulation, safety clamping, smoothing, interruption, conflicts, cycles, unsupported targets, and rejected draft aliases.
GC4 — time and reproducibility
The normative contract fixes a 1/60s logical step, eight ticks per browser turn, a 250ms accepted wall-time limit, a 100ms audio horizon, composable pause reasons, and unlock/resume alignment. Earlier one-shots are skipped at unlock; still-owned continuous audio aligns to current logical state with a 20ms ramp.
Seed derivation is fixed to FNV-1a-32 plus SplitMix32 state expansion and xoshiro128**. Known vectors lock the implementation. Tests compare 60 Hz and 120 Hz render drivers, bound a one-second stall, preserve explicit pause across visibility restoration, verify unlock scheduling decisions, isolate manual sampling, and use a deterministic audio-analysis fixture.
The audio unlock test is a scheduling-decision model. It does not claim that future Web Audio nodes already implement the mapping or anti-click ramp. The GC1 browser evidence separately establishes user-unlocked audio and AudioContext suspend/resume in the direct-file environment. Combined synchronization must be repeated during audio integration.
GC5 — ownership and failure
The normative contract fixes inherited scenario ownership, termination hook selection and allowed actions, persistent-state behavior, a five-logical-second cleanup bound, condition rearming, one deferred request per definition, five-minute default expiry, deterministic deferred ordering, a 1024-unit ordinary dispatch budget, and a separate 256-action termination-hook limit.
The lifecycle model verifies nested ownership, bounded override release, persistent state after critical failure, startup and termination-hook failures, condition rearming, deferred deduplication/expiry/eligibility ordering, bounded feedback, cleanup outside the ordinary budget, and 30 repeated completion/cancellation/failure cycles returning resource counts to zero.
Verification performed
node --test test/gc2-runner.test.mjs test/gc3-resolution.test.mjs test/gc4-time-random.test.mjs test/gc5-lifecycle.test.mjs prototypes/phase0/audio-probe.test.mjs
Result: 27 tests passed, 0 failed.
Artifacts:
tools/gc3-resolution-model.mjstest/fixtures/gc3/resolution-traces.jsontest/gc3-resolution.test.mjstools/gc4-time-model.mjstest/fixtures/gc4/deterministic-signals.jsontest/gc4-time-random.test.mjstools/gc5-lifecycle-model.mjstest/gc5-lifecycle.test.mjs
These are Phase 0 contract oracles. Production implementations must pass equivalent traces with their actual resolver, scheduler, Web Audio nodes, event/scenario director, and resource counters.