/** * AnimationSamplingProbe — P2-0 substrate probe. * * Scope honesty: P2-0's implemented claim is same-process * reproducibility for a frozen scalar clip-sampling fixture. `AnimClip` * now supports isolated quaternion tracks, but portable runtime pose * application and cross-backend identity remain future gates. This probe * deliberately validates only the narrower scalar path. * * Read this as: "before evaluating portable retargeting, confirm * same-process clip-sampling repeatability." The current test compares * repeated invocations; it does not pin a published digest or prove a * cross-machine result. Full retargeting benchmarks belong in a later * probe once the missing substrate ships. * * Reusable: paper test suite calls `runAnimationSamplingProbe(spec)` * and returns `Uint8Array` of concatenated sample outputs. The * DeterminismHarness hashes those bytes. * * @see NORTH_STAR DT-14. @see Program 2 scoping memo P2-0 entry. */ import { type ScalarInterpolationMode } from '../AnimationClip'; export interface AnimationSamplingProbeOptions { /** * Fixed spec for the animation clip being sampled. Each track is * a sequence of keyframes the probe should sample from. Paper * canonical spec (see PAPER_P2_0_CANONICAL_SPEC) freezes one such * configuration for replication. */ clipSpec: { id: string; name: string; duration: number; interpolation: ScalarInterpolationMode; tracks: Array<{ id: string; targetPath: string; property: string; component?: string; keyframes: Array<{ time: number; value: number; inTangent?: number; outTangent?: number; }>; }>; }; /** * Sample times at which the clip is evaluated. Output bytes are * concatenated in track-order × sample-time order, deterministic * regardless of Map iteration quirks. */ sampleTimes: readonly number[]; } /** * Run the probe. Returns a `Uint8Array` view over IEEE-754 f32 * samples, concatenated in a fixed order: * * for sample_time in sampleTimes: * for track in clipSpec.tracks: (preserved order) * emit sampled_value_at(track, sample_time) as f32 * * The fixed emission order is critical — `AnimClip.sample()` returns * a `Map` whose iteration order is insertion-order in JS but the * harness's hash must not depend on that; iterating tracks in the * spec-supplied order keeps the hash stable across any AnimClip * internal refactor. */ export declare function runAnimationSamplingProbe(options: AnimationSamplingProbeOptions): Uint8Array; /** * P2-0 canonical probe spec. * * Freezes the exact clip + sample schedule that any paper * benchmark or replication attempt uses. Changing this constant * invalidates every hash reference to it — keep frozen in lockstep * with the paper's reported numbers. * * Contents: a 4-track clip (position.x, position.y, rotation.z, * scale.y) sampled at 100 times uniformly over 2.0 seconds with * linear interpolation. 400 f32 samples total → 1600 output bytes * hashed by the harness. */ export declare const PAPER_P2_0_CANONICAL_SPEC: Readonly; //# sourceMappingURL=AnimationSamplingProbe.d.ts.map