# Chronicle Audio Source Record Contract v2

Status: **specified for #736; no runtime emits this record yet**

This contract adds `voice_audio` without changing [Source Record v1](source-record-v1.md). A v1 `voice_transcript` remains a text source forever. One v2 source identity names one exact Ogg Opus file that a person intentionally Kept. Its transcript, review passages, and edits are derivations; none is `content` of the audio source. A source is valid while transcription is pending.

## Shape and meaning

[`source-record-v2.schema.json`](../schemas/source-record-v2.schema.json) is the machine-readable shape. Required fields are `schemaVersion: 2`, lowercase UUID `id`, `captureSource: "voice_audio"`, `sourceCapturedAt`, `createdAt`, `preservation: "explicit_approval"`, `preservedBy` (a human actor), `fidelity: "original_audio"`, and `audio`. Times are UTC RFC 3339 with exactly three fractional digits. `sourceCapturedAt` is the capture event, not the time a thought formed; `createdAt` is durable acceptance. An audio source has no text `content`.

`audio` contains `mediaType: "audio/ogg; codecs=opus"`, `byteLength` (positive integer), `sha256` (lowercase hex SHA-256 of **every plaintext Ogg file byte, including its container**, before storage encryption), and `encoding`. `encoding` records `codec: "opus"`, `container: "ogg"`, `sampleRateHz` (the PCM input rate supplied to the encoder, **not** the Opus decode clock or an inference from the Ogg header), `channels`, `bitrateMode`, `targetBitrateBps`, and `encoder: {name, version}`. The initial runtime profile is 16 kHz mono VBR with a 32 kbps target under ADR-0038. These per-entry values are committed so later, explicitly accepted parameter changes can describe new entries without rewriting old commitments. A different codec/container or a changed field meaning needs a later contract version. `preservedBy`, optional `author`, optional `captureActor`, and optional `custodyRef` have v1 meanings; they are not commitment inputs or proof of a speaker's identity.

The source ID and exact bytes survive storage encryption, migration, transcription retries, and passage editing. No transcript completion condition may be added to source validity. A transcription failure after source durability leaves the source Kept with no fabricated transcript.

The digest binds bytes, not codec correctness. `mediaType`, input sample rate, target bitrate, and encoder identity/version are committed producer claims. A digest match does not independently establish that the file decodes as valid Ogg Opus or that it was encoded at the claimed parameters. A runtime should validate container/codec at capture; an independent verifier may perform a separate media validation, but must not imply that the content commitment alone performed it.

## Passage relationships

Review passages and their text are derivations outside the source record. A passage references one or more **ordered** source IDs. Merge groups several existing, unchanged audio sources in order; it does not create a stitched recording or a new audio source. Split may produce several review passages referencing the same original source ID. It does not cut or duplicate the audio, and it cannot claim word-to-audio alignment without separately established timing evidence. Respeak creates a new capture and, if Kept, a new source ID; Discard creates no source. Group membership is not itself attested by a source's audio commitment. A derivation carries its own identity, content, source references, and derivation kind, and a user edit points to the preceding derivation rather than mutating the audio.

## Compatibility

V1 text sources, their seven-field commitments, and historical export bytes retain their meanings. A v2 audio source cannot be coerced to `voice_transcript` or `typed_text` for compatibility. A runtime that has only text dictation may offer the separate, explicit typed-equivalent fallback; it may not emit an audio source without original Ogg Opus bytes. Web and Pocket may use different physical encryption and deletion policies while producing this same logical source.
