# Transcript review without index-editing scripts

1. Use `speech_transcribe { ..., compact: true }` to get the generation ID, artifact path/hash, duration and counts. The default response remains unchanged. Compact mode does not change generation records or rerun the provider.
2. Read `speech_transcript_get { path: "asr.json", view: "words", offset: 0, limit: 100 }`. Each word includes a stable `wordId`; total/hasMore refer to words. `view: "sentences"` returns sentence summaries without nesting all words. Read the pages needed for the review; do not invent IDs or assume a page offset is a sentence index.
3. Apply local corrections:

```js
speech_transcript_correct {
  path: "asr.json",
  expectedSha256: "<actual artifact sha256 from speech_transcript_get>",
  outputPath: "asr-reviewed-v1.json",
  corrections: [
    { wordId: "word-000042", expectedText: "码", text: "Apple", reason: "该句品牌语境", basis: "context" }
  ]
}
```

Supply text and/or punctuation. A reason and `basis: "listening" | "context"` are mandatory. Context is inference, not a claim to have heard the word. Keep semantic decisions with the Agent; the tool only applies deterministic changes. It never grants listening/visual approval.

The tool checks the entire input hash and expected word text, preserves word IDs/order/timestamps and unknown provider fields, then rebuilds words, sentence text and full text together. It writes one new artifact atomically with optional `correctionProvenance` metadata, including the source reference and exact edits. A later correction links to the previous artifact by hash without expanding all historical metadata. The raw ASR and its generation record are unchanged; correction does not call an ASR model or add provider billing.

Supported inputs are normalized pi-speech sentences with word timestamps or a top-level words array. If both are present, they must agree. Sentence-only ASR, missing/overlapping/non-monotonic timestamps, empty word deletion and unknown IDs fail explicitly. This tool does not invent alignment, split or merge ASR words, or trim word ends to fit a video. For display-only grouping, use pi-subtitles word groups/patches.

Pass the NEW artifact path to talking-head/subtitle project creation. Existing projects remain bound to the old transcript hash; do not overwrite their source to force a refresh.
