/** * Decode walker — interprets the shared descriptor tables (`descriptors.ts`) to READ a capture's * structs, mirroring `encode-walker.ts` field-for-field. Both read the SAME descriptors, so an * older/newer struct layout can't drift between the two sides. Runs in tooling, never on a user's page. */ import { FieldDecoder } from './field-decoder.js'; import { type StreamId } from '../registry.js'; import type { Manifest } from '../manifest.js'; import type { OverheadReport } from '../capture.js'; /** * Manifest: clock + the counted, self-describing per-stream record list + config (see encodeManifest * for the record frame). Tolerance rules, per FileFormat.md "Reading across versions": * - a record whose streamIndex this build doesn't know → skipped whole (its status is unreadable only * because the MODEL has nowhere to put an unknown stream); * - a known record's frame fields (status/schemaVersion) are ALWAYS decoded — their encoding is * frozen — and its tail (loss/provenance) is decoded strictly for same-or-older files, best-effort * for newer ones (a changed tail layout must consume exactly its length to be believed); * - a known stream the (older) writer had no record for is filled as `unsupported`/schemaVersion 0: * that writer could not have captured it, and the model's TOTAL manifest must stay total. */ export declare function decodeManifest(d: FieldDecoder, fileFormatVersion: number): Manifest; export declare function decodeOverhead(d: FieldDecoder): OverheadReport; /** Decode one stream's payload, fully descriptor-driven (STREAM_T is total, incl. navigation's NAV tag). */ export declare function decodeStream(d: FieldDecoder, id: StreamId): unknown; //# sourceMappingURL=decode-walker.d.ts.map