cjm-transcript-correction-core 0.0.6__tar.gz → 0.0.30__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. {cjm_transcript_correction_core-0.0.6/cjm_transcript_correction_core.egg-info → cjm_transcript_correction_core-0.0.30}/PKG-INFO +105 -5
  2. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/README.md +100 -3
  3. cjm_transcript_correction_core-0.0.30/cjm_transcript_correction_core/__init__.py +1 -0
  4. cjm_transcript_correction_core-0.0.30/cjm_transcript_correction_core/cleanread.py +220 -0
  5. cjm_transcript_correction_core-0.0.30/cjm_transcript_correction_core/cli.py +3293 -0
  6. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core/graph.py +403 -40
  7. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core/journal.py +4 -2
  8. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core/models.py +84 -3
  9. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core/pipeline.py +10 -6
  10. cjm_transcript_correction_core-0.0.30/cjm_transcript_correction_core/respine_transfer.py +243 -0
  11. cjm_transcript_correction_core-0.0.30/cjm_transcript_correction_core/signals.py +684 -0
  12. cjm_transcript_correction_core-0.0.30/cjm_transcript_correction_core/spans.py +868 -0
  13. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core/spine.py +166 -0
  14. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core/state.py +6 -2
  15. cjm_transcript_correction_core-0.0.30/cjm_transcript_correction_core/strata.py +1076 -0
  16. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30/cjm_transcript_correction_core.egg-info}/PKG-INFO +105 -5
  17. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core.egg-info/SOURCES.txt +10 -1
  18. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core.egg-info/entry_points.txt +3 -0
  19. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core.egg-info/requires.txt +5 -1
  20. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/pyproject.toml +7 -1
  21. cjm_transcript_correction_core-0.0.30/tests/test_cleanread.py +134 -0
  22. cjm_transcript_correction_core-0.0.30/tests/test_cli.py +249 -0
  23. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/tests/test_gestures.py +50 -0
  24. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/tests/test_graph.py +153 -0
  25. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/tests/test_journal.py +34 -1
  26. cjm_transcript_correction_core-0.0.30/tests/test_respine_transfer.py +175 -0
  27. cjm_transcript_correction_core-0.0.30/tests/test_signals.py +190 -0
  28. cjm_transcript_correction_core-0.0.30/tests/test_spans.py +408 -0
  29. cjm_transcript_correction_core-0.0.30/tests/test_speaker_picker.py +106 -0
  30. cjm_transcript_correction_core-0.0.30/tests/test_strata.py +587 -0
  31. cjm_transcript_correction_core-0.0.6/cjm_transcript_correction_core/__init__.py +0 -1
  32. cjm_transcript_correction_core-0.0.6/cjm_transcript_correction_core/cli.py +0 -1581
  33. cjm_transcript_correction_core-0.0.6/cjm_transcript_correction_core/signals.py +0 -341
  34. cjm_transcript_correction_core-0.0.6/tests/test_cli.py +0 -132
  35. cjm_transcript_correction_core-0.0.6/tests/test_signals.py +0 -90
  36. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/LICENSE +0 -0
  37. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/MANIFEST.in +0 -0
  38. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core/launch.py +0 -0
  39. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core.egg-info/dependency_links.txt +0 -0
  40. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/cjm_transcript_correction_core.egg-info/top_level.txt +0 -0
  41. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/setup.cfg +0 -0
  42. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/tests/test_bench.py +0 -0
  43. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/tests/test_models.py +0 -0
  44. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/tests/test_pipeline.py +0 -0
  45. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.30}/tests/test_state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cjm-transcript-correction-core
3
- Version: 0.0.6
3
+ Version: 0.0.30
4
4
  Summary: A frontend-agnostic core for the transcript correction workflow — the first downstream graph-extension core; composes the graph-storage capability worker into a headless pipeline that applies unified, non-destructive corrections (text, punctuation, segmentation) as a supersede-able overlay on a committed decomposition spine, recomputes the review worklist from deterministic signals, and exposes a CLI as its first driver.
5
5
  Author-email: "Christian J. Mills" <9126128+cj-mills@users.noreply.github.com>
6
6
  License: Apache-2.0
@@ -14,8 +14,11 @@ Requires-Dist: cjm_substrate>=0.0.61
14
14
  Requires-Dist: cjm_context_graph_primitives>=0.0.15
15
15
  Requires-Dist: cjm-capability-primitives>=0.0.12
16
16
  Requires-Dist: cjm-context-graph-layer>=0.0.11
17
- Requires-Dist: cjm-transcript-graph-schema>=0.0.7
17
+ Requires-Dist: cjm-transcript-graph-schema>=0.0.11
18
18
  Requires-Dist: numpy
19
+ Provides-Extra: test
20
+ Requires-Dist: soundfile; extra == "test"
21
+ Requires-Dist: pytest; extra == "test"
19
22
  Dynamic: license-file
20
23
 
21
24
  # cjm-transcript-correction-core
@@ -26,36 +29,65 @@ A frontend-agnostic core for the transcript correction workflow — the first do
26
29
 
27
30
  ## Modules
28
31
 
29
- - **`cjm_transcript_correction_core`**
32
+ - **`cjm_transcript_correction_core.__init__`**
33
+ - **`cjm_transcript_correction_core.cleanread`** — The clean read — L1 of the reading ladder (design 6752db0a; the subtraction
30
34
  - **`cjm_transcript_correction_core.cli`** — The CLI driver — the correction core's first (and currently only) frontend. run <decomp-manifest> corrects the committed spine in the decomp graph DB, pointing the graph worker at that shared DB via load-time config, with optional session resume/reopen; review runs the interactive text-correction loop (the cross-transcriber diff is intra-graph since stage 5).
31
35
  - **`cjm_transcript_correction_core.graph`** — The correction overlay's graph I/O: targeted (scale-shaped) reads of a committed spine via the graph-storage query action, construction of Correction / CorrectionSession nodes + CORRECTS / SUPERSEDES / DERIVED_FROM / REVIEWED edges, the in-core effective-spine projection (layer-0 + applied corrections), and commit through the job queue. Hand-rolled (revolution-1) = direct CR-18 spec material; append-only on layer-0 (never update/delete a Segment).
32
36
  - **`cjm_transcript_correction_core.journal`** — Live append-through for the correction verbs — the workflow journal's domain half.
33
37
  - **`cjm_transcript_correction_core.launch`** — The shared launch surface every correction shell drives through: the
34
38
  - **`cjm_transcript_correction_core.models`** — Overlay data shapes for the transcript-correction workflow: the Correction / CorrectionSession graph nodes + their relation registry, the read view of a committed spine segment, the worklist item, run configuration, and the correction run manifest (proto-bundle that chains decomp -> correction).
35
39
  - **`cjm_transcript_correction_core.pipeline`** — The headless correction workflow: load a decomp run manifest, resolve the shared graph DB, start/resume/reopen a CorrectionSession, recompute the worklist from deterministic signals + persisted review state, run the D14 empty-segment prune (first operation), and record a chainable correction run manifest — with a cheapest-form HITL approval seam.
40
+ - **`cjm_transcript_correction_core.respine_transfer`** — The chunk-scoped transfer a chunk respine calls (work item 7a5e9c84; ruling 0b4d5cfa (5),
36
41
  - **`cjm_transcript_correction_core.signals`** — Pure deterministic Tier-1 signal functions (no capability calls): empty-segment detection, bidirectional boundary punctuation/capitalization heuristics, forced-alignment coverage flags, positional cross-transcriber diff, phonetic + edit-distance variant clustering, and the event-proposal overlay (leg 4: the finetuned detector's spans anchored onto the spine). The worklist is recomputed from these each session; revolution-1 builds ZERO new capabilities.
42
+ - **`cjm_transcript_correction_core.spans`** — Spans — the overlay-proposal lane's domain half (design bbf8bafd, extending the
37
43
  - **`cjm_transcript_correction_core.spine`**
38
44
  - **`cjm_transcript_correction_core.state`** — Sidecar view-state + spine-picker helpers — the correction TUI's pure
45
+ - **`cjm_transcript_correction_core.strata`** — Strata — the filtering lane's domain half (DECs 304fd984 + 9d4c0a38; work items
39
46
 
40
47
  ## API
41
48
 
49
+ ### `cjm_transcript_correction_core.cleanread`
50
+
51
+ - `clean_read` _function_ — L1 — the clean read (pure). Kept lines in spine order; each carries its
52
+ - `clean_read_pack_read` _function_ — The `read` record an L1 pack carries: the layer, the marker, the
53
+ - `clean_read_segments` _function_ — Project the clean read back onto SpineSegments (clean text, same
54
+ - `clean_read_summary` _function_
55
+ - `repeat_survivor` _function_ — Locate the last repeating unit of a word-repeat span (pure): the
56
+ - `subtract_spans` _function_ — Cut the ranges out of the text, leaving `marker` at each seam (pure).
57
+
42
58
  ### `cjm_transcript_correction_core.cli`
43
59
 
60
+ - `attention_command` _function_ — Execute `attention`: the walk-lane ATTENTION TIER (item 3758f6cb, ruling f400d2c3)
44
61
  - `bench_command` _function_ — Execute the `bench` subcommand: the reserved-tail verdict join.
45
62
  - `build_parser` _function_ — Build the CLI parser (subcommands: run, review).
63
+ - `commit_wordless_transfer` _function_ — COMMIT a planned transfer — the engine's second half. One
46
64
  - `export_command` _function_ — Execute `export-wordless-propset`: write one spine's effective wordless
47
65
  - `extract_command` _function_ — Execute the `extract` subcommand: fold the gated overlay into a manifested dataset.
66
+ - `filter_confirm_command` _function_ — Execute `filter-confirm`: the HEADLESS HITL worklist (bc8dbbdd pass-1
67
+ - `filter_ingest_command` _function_ — Execute `filter-ingest`: validate proposer rows against their pack and
68
+ - `filter_merge_command` _function_ — Execute `filter-merge`: fold several proposal sets over one spine into
69
+ - `filter_pack_command` _function_ — Execute `filter-pack`: write one spine window's effective text-bearing
48
70
  - `gate_command` _function_ — Execute the `gate` subcommand: show or assert per-spine extraction gates.
49
71
  - `load_capabilities` _function_ — Discover manifests + load each capability, passing per-capability config (CR-2 caller-wins).
50
72
  - `main` _function_ — CLI entry point (console script: `cjm-transcript-correction-core`).
51
73
  - `overlay_event_rows` _function_ — Overlay span records -> dataset event rows for ONE spine (pure).
74
+ - `plan_transfer_rows` _function_ — Place wordless donors on the destination (pure) — the event half of
75
+ - `plan_wordless_export` _function_ — PLAN an export (reads only) — the `export-wordless-propset` engine's
76
+ - `plan_wordless_transfer` _function_ — PLAN a wordless transfer (reads only) — the `transfer-wordless`
77
+ - `resolve_source_node` _function_ — Resolve the --source selector the respine verbs share: exactly ONE
52
78
  - `review_command` _function_ — Execute the `review` subcommand: interactive text corrections over the flagged worklist.
53
79
  - `run_command` _function_ — Execute the `run` subcommand: correct a decomp manifest's committed spine.
54
80
  - `run_extract` _function_ — The extract fold on an ALREADY-OPEN graph seat (flywheel build leg 2,
55
81
  - `scan_command` _function_ — Execute `scan-mishomed`: flag authoritative FA words stranded outside
82
+ - `span_confirm_command` _function_ — Execute `span-confirm`: the HEADLESS HITL worklist over one span
83
+ - `span_ingest_command` _function_ — Execute `span-ingest`: resolve a proposer's quoted-word rows against
84
+ - `span_lexicon_command` _function_ — Execute `span-lexicon`: the pattern tier (design bbf8bafd (g)) — bare
85
+ - `span_merge_command` _function_ — Execute `span-merge`: fold several span sets over one spine into ONE
86
+ - `span_pack_command` _function_ — Execute `span-pack`: the filter pack's lines as a SPEECH-OVERLAY pack
56
87
  - `stats_command` _function_ — Execute the `stats` subcommand: flywheel accounting over the shared graph.
57
- - `transfer_command` _function_ — Execute `transfer-wordless`: replay wordless event inserts across sibling spines.
88
+ - `transfer_command` _function_ — Execute `transfer-wordless`: replay wordless event inserts (and speaker-
58
89
  - `wordless_donors` _function_ — The EFFECTIVE wordless layer of a spine: labeled, effectively wordless
90
+ - `write_wordless_propset` _function_ — WRITE a planned export as a proposal set — the engine's write half.
59
91
 
60
92
  ### `cjm_transcript_correction_core.graph`
61
93
 
@@ -63,6 +95,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
63
95
  - `active_speaker_assignments` _function_ — Project the ACTIVE speaker assignment per segment (latest-wins).
64
96
  - `active_speech_overlays` _function_ — The surviving speech-overlay corrections (supersession applied; pure).
65
97
  - `aggregate_session_purposes` _function_ — Fold sessions into a per-source purpose mix (pure; d915d545 picker rung).
98
+ - `annotate_retired` _function_ — Mark spine rows with their retirement state (pure).
66
99
  - `apply_chunk_inserts` _function_ — Synthesize inserted chunks into the effective spine (DEC 3d3fa2a8).
67
100
  - `apply_time_nudges` _function_ — Apply timing corrections onto segment times (latest-wins per edge).
68
101
  - `bench_event_proposals` _function_ — The reserved-tail bench join (leg 4, DECs 8e05b87b + 8cf12c22) — pure.
@@ -77,6 +110,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
77
110
  - `build_reject_review` _function_ — Build a review Correction that REJECTS a prior correction (reject-as-supersede).
78
111
  - `build_speaker_assign_correction` _function_ — Build a speaker Correction — the assignment op envelope (DEC d6df3a8e).
79
112
  - `build_speech_overlay_correction` _function_ — Build a NON-MUTATING speech-overlay Correction (check fc42614d, DEC 4e05a066).
113
+ - `build_stratum_correction` _function_ — Build a NON-MUTATING stratum Correction (DECs 304fd984 + 9d4c0a38: the
80
114
  - `build_text_correction` _function_ — Build a text_content Correction + its CORRECTS (+ optional SUPERSEDES) edges.
81
115
  - `build_time_nudge_correction` _function_ — Build a timing Correction that nudges segment boundary TIMES (node + CORRECTS edges).
82
116
  - `commit_boundary_shift_correction` _function_ — Commit a boundary-shift correction (node + CORRECTS x2 [+ SUPERSEDES]) + REVIEWED markers on both segments.
@@ -93,11 +127,15 @@ A frontend-agnostic core for the transcript correction workflow — the first do
93
127
  - `commit_speaker_entity` _function_ — Mint a source-spanning Entity into the shared registry (DEC 4ec6a49c).
94
128
  - `commit_speech_overlay_correction` _function_ — Commit a speech overlay (node + CORRECTS [+ SUPERSEDES]).
95
129
  - `commit_speech_overlay_removal` _function_ — Remove a speech overlay WITHOUT a replacement (reject-as-supersede).
130
+ - `commit_stratum_correction` _function_ — Commit a stratum (node + CORRECTS per covered segment [+ SUPERSEDES]).
131
+ - `commit_stratum_retraction` _function_ — Retract a live stratum WITHOUT replacing it (reject-as-supersede, the
96
132
  - `commit_text_correction` _function_ — Commit a text_content correction (node + CORRECTS [+ SUPERSEDES]) + a REVIEWED marker.
97
133
  - `commit_time_nudge_correction` _function_ — Commit a time-nudge correction (node + CORRECTS per touched segment).
98
134
  - `correction_stats` _function_ — Fold one Source's ACTIVE overlay into flywheel-accounting counts (pure).
99
135
  - `corrections_to_edits` _function_ — Map this core's Correction payloads onto the layer's spine-edit vocabulary.
100
136
  - `count_source_segments` _function_ — Count a Source's segments server-side under its chosen rendition + skeleton (typed count mode).
137
+ - `default_spine` _function_ — Which spine opens by default (pure; ruling a7617bd4 rule (c)): preference is a
138
+ - `discharge_mark` _function_ — Discharge an open mark BY THE CORRECTION THAT ADDRESSED IT — the closure
101
139
  - `extract_spine_dataset` _function_ — Fold ONE spine's overlay into its v1 insert-span dataset slice (pure).
102
140
  - `fa_words_for_transcript` _function_ — One transcript's FA words in source coordinates (the scan-mishomed join,
103
141
  - `find_active_text_correction` _function_ — Single-segment convenience over the batch read (cross-session; latest wins).
@@ -130,6 +168,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
130
168
  - `set_session_status` _function_ — Update a session's status + updated_at.
131
169
  - `skeleton_hash_for` _function_ — Resolve a skeleton selector to the chosen spine's HASH (pure) — the gate's
132
170
  - `source_audio_segment_ids` _function_ — The Source's coarse spine (one small typed read; ordered by index).
171
+ - `speaker_assignment_sources` _function_ — Where each speaker Entity has been assigned — the picker's COLLECTION
133
172
  - `speech_overlay_spans` _function_ — Fold the ACTIVE speech overlays into extraction-facing span records (pure).
134
173
  - `spine_where_for` _function_ — Resolve a skeleton selector against the observed spine set (pure).
135
174
  - `start_session` _function_ — Create + commit a new CorrectionSession node.
@@ -173,8 +212,22 @@ A frontend-agnostic core for the transcript correction workflow — the first do
173
212
  - `run_correction` _function_ — Correct every source in a decomp run manifest (prune + worklist surfacing).
174
213
  - `run_review` _function_ — Interactive review pass over a decomp manifest's flagged worklist (text corrections).
175
214
 
215
+ ### `cjm_transcript_correction_core.respine_transfer`
216
+
217
+ - `chunk_respine_transfer` _function_ — The registered chunk-scoped transfer (the entry point decomp-core discovers).
218
+ - `group_speaker_rows` _function_ — Fold per-segment rows into turn-shaped commits (pure): contiguous same-entity
219
+ - `live_neighbour` _function_ — The live segment right before the chunk — the flank a donor that starts before
220
+ - `load_segments_by_ids` _function_ — Segments by id — the ONE read that bypasses the live predicate on purpose: the
221
+ - `plan_speaker_carry` _function_ — Which new segment takes which speaker (pure; 4a7ec4f8 (2)/(3)): a segment whose
222
+ - `speaker_spans` _function_ — The per-span speaker map the carry reads (pure).
223
+
176
224
  ### `cjm_transcript_correction_core.signals`
177
225
 
226
+ - `attention_boundary_marks` _function_ — The boundary signals of the attention tier (item 3758f6cb signals 1+3 and the folded
227
+ - `attention_divergence_marks` _function_ — The two-transcriber disagreement signal of the attention tier (item 3758f6cb signal
228
+ - `attention_fa_marks` _function_ — The forced-alignment signals of the attention tier (item 3758f6cb signal 1), pure.
229
+ - `attention_marks` _function_ — Compose the attention tier (item 3758f6cb): every enabled signal's mark rows,
230
+ - `attention_speaker_marks` _function_ — The next-speaker-change landmark of the folded item 65791933, pure: `speaker-change`
178
231
  - `boundary_punct_caps_flags` _function_ — Bidirectional boundary punctuation/capitalization heuristics (in-segment only).
179
232
  - `cluster_variants` _function_ — Cluster word variants by phonetic key + edit distance (fix-one-fix-all).
180
233
  - `compute_signal_flags` _function_ — Combine all deterministic Tier-1 signals into per-segment flags.
@@ -187,14 +240,36 @@ A frontend-agnostic core for the transcript correction workflow — the first do
187
240
  - `speaker_turn_proposals` _function_ — Dominant diarization cluster per segment — the assign lane's proposal paint.
188
241
  - `variant_divergence` _function_ — Within-segment cross-transcriber divergence (stage 5: intra-graph).
189
242
 
243
+ ### `cjm_transcript_correction_core.spans`
244
+
245
+ - `bench_span_proposals` _function_ — Derive the span verdicts (design bbf8bafd (f), the bench_filter_proposals
246
+ - `build_span_pack` _function_ — Build the span proposer's input: the filter pack's numbered lines with
247
+ - `find_token_span` _function_ — Resolve quoted words to WHOLE word tokens of a line (pure): the quote is
248
+ - `is_span_pack` _function_
249
+ - `lexicon_span_rows` _function_ — The LEXICON TIER (design bbf8bafd (g)): a bare um / uh token is a
250
+ - `load_span_proposal_sets` _function_ — Every SPAN proposal set for a source (and optionally one spine), newest
251
+ - `locate_span_tokens` _function_ — Where a proposal's words sit on the CURRENT line, as a character range
252
+ - `merge_span_proposals` _function_ — Fold several SPAN sets over one spine into one walkable set — the
253
+ - `overlay_label_slate` _function_ — The slate a span pack carries: every label with its gloss and whether a
254
+ - `pending_span_proposals` _function_ — The headless worklist: proposals with NO active overlay carrying their id
255
+ - `render_span_pack` _function_ — Render a span pack as the brief a proposer reads: identity + window, the
256
+ - `render_span_propset_markdown` _function_ — Project a span set for a human: one line per proposal — tier, label,
257
+ - `segment_word_tokens` _function_
258
+ - `snap_span_proposal` _function_ — Resolve a proposal against the CURRENT line at accept (design bbf8bafd
259
+ - `span_proposals_from_rows` _function_ — Resolve validated rows to span proposal-set rows: proposal id, label
260
+ - `validate_span_rows` _function_ — Validate + resolve proposer rows against their span pack — loud on the
261
+ - `write_span_propset` _function_ — Write one SPAN proposal set — the filter set's layout under the span
262
+
190
263
  ### `cjm_transcript_correction_core.spine`
191
264
 
192
265
  - `ChunkRef` _class_ — Where one Segment's VAD-chunk audio lives: the model-input WAV + the chunk-local span.
193
266
  - `SeamRef` _class_ — A source-coordinate audio span across one fine-spine boundary (the g/G
194
267
  - `SpineView` _class_ — One Source's effective correction spine, cursor-windowed for the TUI.
268
+ - `layer_speaker_menu` _function_ — Layer the assign-lane digit menu (pure; DEC 774dbe40). Tier 1 = the
195
269
  - `list_sources` _function_ — Enumerate the graph's Source nodes (the discovery corpus, 2ce81638).
196
270
  - `load_source_slice` _function_ — Decode a source-coordinate slice of the ORIGINAL media to playable samples.
197
271
  - `match_sources` _function_ — The --source selector (pure; shared by direct open and the picker's seed).
272
+ - `match_speaker_query` _function_ — Narrow the registry by a typed query (pure; DEC 774dbe40 (4)). Rank 0 =
198
273
  - `neighbor_word_bound` _function_ — The adjacent word's FA boundary facing an overlay span (pure).
199
274
  - `open_stack` _function_ — Bootstrap the graph capability stack, resolving the db path (2ce81638).
200
275
  - `parse_entity_input` _function_ — Parse the new-speaker editor line (pure). A leading `?` marks the entity
@@ -203,11 +278,13 @@ A frontend-agnostic core for the transcript correction workflow — the first do
203
278
  - `plan_chunk_insert` _function_ — Plan a chunk insertion into the seam after the cursor (the i gesture unit; pure).
204
279
  - `plan_chunk_split` _function_ — Plan a chunk split at a caret position (the S gesture unit; pure).
205
280
  - `plan_gate` _function_ — Plan an extraction-gate assertion (the F gesture unit; pure — DEC 8e05b87b).
281
+ - `plan_split_rows` _function_ — Place speaker-split boundaries on a destination spine (pure) — the
206
282
  - `plan_time_nudge` _function_ — Plan a boundary-time nudge (the ,/. and </> gesture unit; pure).
207
283
  - `resolve_mark_class_token` _function_ — Resolve a leading digit token to its menu class (the M picker; pure).
208
284
  - `segment_word_tokens` _function_ — Tokenize a segment's text into words WITH character offsets (pure).
209
285
  - `snap_word_span` _function_ — Derive a word range's TIME span from FA word timestamps (pure; fc42614d).
210
286
  - `source_status` _function_ — Correction-status-at-a-glance for one Source (the picker's detail row).
287
+ - `split_donors` _function_ — The SPEAKER-SPLIT layer of a spine (pure) — the DoD rider 54aac7d3 on
211
288
 
212
289
  ### `cjm_transcript_correction_core.state`
213
290
 
@@ -216,7 +293,30 @@ A frontend-agnostic core for the transcript correction workflow — the first do
216
293
  - `selector_for_spine` _function_ — The selector value a picker choice persists (pure): the full skeleton
217
294
  - `spine_label` _function_ — One picker row's config summary for a skeleton spine (pure).
218
295
 
296
+ ### `cjm_transcript_correction_core.strata`
297
+
298
+ - `active_strata` _function_ — The live strata: stratum corrections neither superseded (reclassified /
299
+ - `bench_filter_proposals` _function_ — Derive the filtering verdicts (DEC 8e05b87b, the bench_event_proposals
300
+ - `build_filter_pack` _function_ — Build the proposer's input: one source window's text-bearing effective
301
+ - `exclude_strata` _function_ — The per-consumer filtered projection (DEC 9d4c0a38): "filtered" is a
302
+ - `load_filter_proposal_sets` _function_ — Every filtering proposal set for a source (and optionally one spine),
303
+ - `materialized_fix_ids` _function_ — The fidelity-edit apply path's materialization: a proposer row whose
304
+ - `materialized_mark_ids` _function_ — Class-family routing's other half: a proposer's mark-family row (an ASR
305
+ - `merge_filter_proposals` _function_ — Fold several proposal sets over ONE spine into one walkable set (design
306
+ - `new_pack_id` _function_ — Generate a unique, sortable pack id.
307
+ - `pack_digest` _function_ — Digest the READ content (source binding + window + numbered segments) —
308
+ - `pending_filter_proposals` _function_ — The headless worklist: proposals with NO live stratum carrying their id and
309
+ - `plan_pack_windows` _function_ — Cut a spine into `count` windows of near-equal TEXT-segment count at
310
+ - `proposals_from_rows` _function_ — Resolve validated rows to proposal-set rows: proposal id, category, source
311
+ - `render_filter_pack` _function_ — Render a pack as the brief a proposer reads: identity + window, the class
312
+ - `render_filter_propset_markdown` _function_ — Project a proposal set for a HUMAN to check against the source in the
313
+ - `resolve_slate` _function_ — Resolve a NAMED class slate (ruling c5b6cf42) to the two vocabularies a
314
+ - `select_span_segments` _function_ — The span-EDIT gesture's resolver (agreed 2026-09-01 on the ch04 confirm
315
+ - `strata_index` _function_ — Segment-keyed view of the live strata (the consumer query's index).
316
+ - `validate_proposal_rows` _function_ — Validate + normalize proposer rows against their pack — loud on the first
317
+ - `write_filter_propset` _function_ — Write one filtering proposal set: `<out_root>/<set_id>/manifest.json` +
318
+
219
319
  ## Dependencies
220
320
 
221
321
  **Depends on:** `cjm-capability-primitives`, `cjm-context-graph-layer`, `cjm-context-graph-primitives`, `cjm-substrate`, `cjm-transcript-graph-schema`, `numpy`
222
- **Used by:** `cjm-transcript-correction-qt`, `cjm-transcript-correction-tui`, `cjm-transcription-core`, `cjm-workflow-hub-qt`, `cjm-workflow-hub-tui`
322
+ **Used by:** `cjm-context-graph-projection`, `cjm-transcript-correction-qt`, `cjm-transcription-core`, `cjm-workflow-hub-qt`
@@ -6,36 +6,65 @@ A frontend-agnostic core for the transcript correction workflow — the first do
6
6
 
7
7
  ## Modules
8
8
 
9
- - **`cjm_transcript_correction_core`**
9
+ - **`cjm_transcript_correction_core.__init__`**
10
+ - **`cjm_transcript_correction_core.cleanread`** — The clean read — L1 of the reading ladder (design 6752db0a; the subtraction
10
11
  - **`cjm_transcript_correction_core.cli`** — The CLI driver — the correction core's first (and currently only) frontend. run <decomp-manifest> corrects the committed spine in the decomp graph DB, pointing the graph worker at that shared DB via load-time config, with optional session resume/reopen; review runs the interactive text-correction loop (the cross-transcriber diff is intra-graph since stage 5).
11
12
  - **`cjm_transcript_correction_core.graph`** — The correction overlay's graph I/O: targeted (scale-shaped) reads of a committed spine via the graph-storage query action, construction of Correction / CorrectionSession nodes + CORRECTS / SUPERSEDES / DERIVED_FROM / REVIEWED edges, the in-core effective-spine projection (layer-0 + applied corrections), and commit through the job queue. Hand-rolled (revolution-1) = direct CR-18 spec material; append-only on layer-0 (never update/delete a Segment).
12
13
  - **`cjm_transcript_correction_core.journal`** — Live append-through for the correction verbs — the workflow journal's domain half.
13
14
  - **`cjm_transcript_correction_core.launch`** — The shared launch surface every correction shell drives through: the
14
15
  - **`cjm_transcript_correction_core.models`** — Overlay data shapes for the transcript-correction workflow: the Correction / CorrectionSession graph nodes + their relation registry, the read view of a committed spine segment, the worklist item, run configuration, and the correction run manifest (proto-bundle that chains decomp -> correction).
15
16
  - **`cjm_transcript_correction_core.pipeline`** — The headless correction workflow: load a decomp run manifest, resolve the shared graph DB, start/resume/reopen a CorrectionSession, recompute the worklist from deterministic signals + persisted review state, run the D14 empty-segment prune (first operation), and record a chainable correction run manifest — with a cheapest-form HITL approval seam.
17
+ - **`cjm_transcript_correction_core.respine_transfer`** — The chunk-scoped transfer a chunk respine calls (work item 7a5e9c84; ruling 0b4d5cfa (5),
16
18
  - **`cjm_transcript_correction_core.signals`** — Pure deterministic Tier-1 signal functions (no capability calls): empty-segment detection, bidirectional boundary punctuation/capitalization heuristics, forced-alignment coverage flags, positional cross-transcriber diff, phonetic + edit-distance variant clustering, and the event-proposal overlay (leg 4: the finetuned detector's spans anchored onto the spine). The worklist is recomputed from these each session; revolution-1 builds ZERO new capabilities.
19
+ - **`cjm_transcript_correction_core.spans`** — Spans — the overlay-proposal lane's domain half (design bbf8bafd, extending the
17
20
  - **`cjm_transcript_correction_core.spine`**
18
21
  - **`cjm_transcript_correction_core.state`** — Sidecar view-state + spine-picker helpers — the correction TUI's pure
22
+ - **`cjm_transcript_correction_core.strata`** — Strata — the filtering lane's domain half (DECs 304fd984 + 9d4c0a38; work items
19
23
 
20
24
  ## API
21
25
 
26
+ ### `cjm_transcript_correction_core.cleanread`
27
+
28
+ - `clean_read` _function_ — L1 — the clean read (pure). Kept lines in spine order; each carries its
29
+ - `clean_read_pack_read` _function_ — The `read` record an L1 pack carries: the layer, the marker, the
30
+ - `clean_read_segments` _function_ — Project the clean read back onto SpineSegments (clean text, same
31
+ - `clean_read_summary` _function_
32
+ - `repeat_survivor` _function_ — Locate the last repeating unit of a word-repeat span (pure): the
33
+ - `subtract_spans` _function_ — Cut the ranges out of the text, leaving `marker` at each seam (pure).
34
+
22
35
  ### `cjm_transcript_correction_core.cli`
23
36
 
37
+ - `attention_command` _function_ — Execute `attention`: the walk-lane ATTENTION TIER (item 3758f6cb, ruling f400d2c3)
24
38
  - `bench_command` _function_ — Execute the `bench` subcommand: the reserved-tail verdict join.
25
39
  - `build_parser` _function_ — Build the CLI parser (subcommands: run, review).
40
+ - `commit_wordless_transfer` _function_ — COMMIT a planned transfer — the engine's second half. One
26
41
  - `export_command` _function_ — Execute `export-wordless-propset`: write one spine's effective wordless
27
42
  - `extract_command` _function_ — Execute the `extract` subcommand: fold the gated overlay into a manifested dataset.
43
+ - `filter_confirm_command` _function_ — Execute `filter-confirm`: the HEADLESS HITL worklist (bc8dbbdd pass-1
44
+ - `filter_ingest_command` _function_ — Execute `filter-ingest`: validate proposer rows against their pack and
45
+ - `filter_merge_command` _function_ — Execute `filter-merge`: fold several proposal sets over one spine into
46
+ - `filter_pack_command` _function_ — Execute `filter-pack`: write one spine window's effective text-bearing
28
47
  - `gate_command` _function_ — Execute the `gate` subcommand: show or assert per-spine extraction gates.
29
48
  - `load_capabilities` _function_ — Discover manifests + load each capability, passing per-capability config (CR-2 caller-wins).
30
49
  - `main` _function_ — CLI entry point (console script: `cjm-transcript-correction-core`).
31
50
  - `overlay_event_rows` _function_ — Overlay span records -> dataset event rows for ONE spine (pure).
51
+ - `plan_transfer_rows` _function_ — Place wordless donors on the destination (pure) — the event half of
52
+ - `plan_wordless_export` _function_ — PLAN an export (reads only) — the `export-wordless-propset` engine's
53
+ - `plan_wordless_transfer` _function_ — PLAN a wordless transfer (reads only) — the `transfer-wordless`
54
+ - `resolve_source_node` _function_ — Resolve the --source selector the respine verbs share: exactly ONE
32
55
  - `review_command` _function_ — Execute the `review` subcommand: interactive text corrections over the flagged worklist.
33
56
  - `run_command` _function_ — Execute the `run` subcommand: correct a decomp manifest's committed spine.
34
57
  - `run_extract` _function_ — The extract fold on an ALREADY-OPEN graph seat (flywheel build leg 2,
35
58
  - `scan_command` _function_ — Execute `scan-mishomed`: flag authoritative FA words stranded outside
59
+ - `span_confirm_command` _function_ — Execute `span-confirm`: the HEADLESS HITL worklist over one span
60
+ - `span_ingest_command` _function_ — Execute `span-ingest`: resolve a proposer's quoted-word rows against
61
+ - `span_lexicon_command` _function_ — Execute `span-lexicon`: the pattern tier (design bbf8bafd (g)) — bare
62
+ - `span_merge_command` _function_ — Execute `span-merge`: fold several span sets over one spine into ONE
63
+ - `span_pack_command` _function_ — Execute `span-pack`: the filter pack's lines as a SPEECH-OVERLAY pack
36
64
  - `stats_command` _function_ — Execute the `stats` subcommand: flywheel accounting over the shared graph.
37
- - `transfer_command` _function_ — Execute `transfer-wordless`: replay wordless event inserts across sibling spines.
65
+ - `transfer_command` _function_ — Execute `transfer-wordless`: replay wordless event inserts (and speaker-
38
66
  - `wordless_donors` _function_ — The EFFECTIVE wordless layer of a spine: labeled, effectively wordless
67
+ - `write_wordless_propset` _function_ — WRITE a planned export as a proposal set — the engine's write half.
39
68
 
40
69
  ### `cjm_transcript_correction_core.graph`
41
70
 
@@ -43,6 +72,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
43
72
  - `active_speaker_assignments` _function_ — Project the ACTIVE speaker assignment per segment (latest-wins).
44
73
  - `active_speech_overlays` _function_ — The surviving speech-overlay corrections (supersession applied; pure).
45
74
  - `aggregate_session_purposes` _function_ — Fold sessions into a per-source purpose mix (pure; d915d545 picker rung).
75
+ - `annotate_retired` _function_ — Mark spine rows with their retirement state (pure).
46
76
  - `apply_chunk_inserts` _function_ — Synthesize inserted chunks into the effective spine (DEC 3d3fa2a8).
47
77
  - `apply_time_nudges` _function_ — Apply timing corrections onto segment times (latest-wins per edge).
48
78
  - `bench_event_proposals` _function_ — The reserved-tail bench join (leg 4, DECs 8e05b87b + 8cf12c22) — pure.
@@ -57,6 +87,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
57
87
  - `build_reject_review` _function_ — Build a review Correction that REJECTS a prior correction (reject-as-supersede).
58
88
  - `build_speaker_assign_correction` _function_ — Build a speaker Correction — the assignment op envelope (DEC d6df3a8e).
59
89
  - `build_speech_overlay_correction` _function_ — Build a NON-MUTATING speech-overlay Correction (check fc42614d, DEC 4e05a066).
90
+ - `build_stratum_correction` _function_ — Build a NON-MUTATING stratum Correction (DECs 304fd984 + 9d4c0a38: the
60
91
  - `build_text_correction` _function_ — Build a text_content Correction + its CORRECTS (+ optional SUPERSEDES) edges.
61
92
  - `build_time_nudge_correction` _function_ — Build a timing Correction that nudges segment boundary TIMES (node + CORRECTS edges).
62
93
  - `commit_boundary_shift_correction` _function_ — Commit a boundary-shift correction (node + CORRECTS x2 [+ SUPERSEDES]) + REVIEWED markers on both segments.
@@ -73,11 +104,15 @@ A frontend-agnostic core for the transcript correction workflow — the first do
73
104
  - `commit_speaker_entity` _function_ — Mint a source-spanning Entity into the shared registry (DEC 4ec6a49c).
74
105
  - `commit_speech_overlay_correction` _function_ — Commit a speech overlay (node + CORRECTS [+ SUPERSEDES]).
75
106
  - `commit_speech_overlay_removal` _function_ — Remove a speech overlay WITHOUT a replacement (reject-as-supersede).
107
+ - `commit_stratum_correction` _function_ — Commit a stratum (node + CORRECTS per covered segment [+ SUPERSEDES]).
108
+ - `commit_stratum_retraction` _function_ — Retract a live stratum WITHOUT replacing it (reject-as-supersede, the
76
109
  - `commit_text_correction` _function_ — Commit a text_content correction (node + CORRECTS [+ SUPERSEDES]) + a REVIEWED marker.
77
110
  - `commit_time_nudge_correction` _function_ — Commit a time-nudge correction (node + CORRECTS per touched segment).
78
111
  - `correction_stats` _function_ — Fold one Source's ACTIVE overlay into flywheel-accounting counts (pure).
79
112
  - `corrections_to_edits` _function_ — Map this core's Correction payloads onto the layer's spine-edit vocabulary.
80
113
  - `count_source_segments` _function_ — Count a Source's segments server-side under its chosen rendition + skeleton (typed count mode).
114
+ - `default_spine` _function_ — Which spine opens by default (pure; ruling a7617bd4 rule (c)): preference is a
115
+ - `discharge_mark` _function_ — Discharge an open mark BY THE CORRECTION THAT ADDRESSED IT — the closure
81
116
  - `extract_spine_dataset` _function_ — Fold ONE spine's overlay into its v1 insert-span dataset slice (pure).
82
117
  - `fa_words_for_transcript` _function_ — One transcript's FA words in source coordinates (the scan-mishomed join,
83
118
  - `find_active_text_correction` _function_ — Single-segment convenience over the batch read (cross-session; latest wins).
@@ -110,6 +145,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
110
145
  - `set_session_status` _function_ — Update a session's status + updated_at.
111
146
  - `skeleton_hash_for` _function_ — Resolve a skeleton selector to the chosen spine's HASH (pure) — the gate's
112
147
  - `source_audio_segment_ids` _function_ — The Source's coarse spine (one small typed read; ordered by index).
148
+ - `speaker_assignment_sources` _function_ — Where each speaker Entity has been assigned — the picker's COLLECTION
113
149
  - `speech_overlay_spans` _function_ — Fold the ACTIVE speech overlays into extraction-facing span records (pure).
114
150
  - `spine_where_for` _function_ — Resolve a skeleton selector against the observed spine set (pure).
115
151
  - `start_session` _function_ — Create + commit a new CorrectionSession node.
@@ -153,8 +189,22 @@ A frontend-agnostic core for the transcript correction workflow — the first do
153
189
  - `run_correction` _function_ — Correct every source in a decomp run manifest (prune + worklist surfacing).
154
190
  - `run_review` _function_ — Interactive review pass over a decomp manifest's flagged worklist (text corrections).
155
191
 
192
+ ### `cjm_transcript_correction_core.respine_transfer`
193
+
194
+ - `chunk_respine_transfer` _function_ — The registered chunk-scoped transfer (the entry point decomp-core discovers).
195
+ - `group_speaker_rows` _function_ — Fold per-segment rows into turn-shaped commits (pure): contiguous same-entity
196
+ - `live_neighbour` _function_ — The live segment right before the chunk — the flank a donor that starts before
197
+ - `load_segments_by_ids` _function_ — Segments by id — the ONE read that bypasses the live predicate on purpose: the
198
+ - `plan_speaker_carry` _function_ — Which new segment takes which speaker (pure; 4a7ec4f8 (2)/(3)): a segment whose
199
+ - `speaker_spans` _function_ — The per-span speaker map the carry reads (pure).
200
+
156
201
  ### `cjm_transcript_correction_core.signals`
157
202
 
203
+ - `attention_boundary_marks` _function_ — The boundary signals of the attention tier (item 3758f6cb signals 1+3 and the folded
204
+ - `attention_divergence_marks` _function_ — The two-transcriber disagreement signal of the attention tier (item 3758f6cb signal
205
+ - `attention_fa_marks` _function_ — The forced-alignment signals of the attention tier (item 3758f6cb signal 1), pure.
206
+ - `attention_marks` _function_ — Compose the attention tier (item 3758f6cb): every enabled signal's mark rows,
207
+ - `attention_speaker_marks` _function_ — The next-speaker-change landmark of the folded item 65791933, pure: `speaker-change`
158
208
  - `boundary_punct_caps_flags` _function_ — Bidirectional boundary punctuation/capitalization heuristics (in-segment only).
159
209
  - `cluster_variants` _function_ — Cluster word variants by phonetic key + edit distance (fix-one-fix-all).
160
210
  - `compute_signal_flags` _function_ — Combine all deterministic Tier-1 signals into per-segment flags.
@@ -167,14 +217,36 @@ A frontend-agnostic core for the transcript correction workflow — the first do
167
217
  - `speaker_turn_proposals` _function_ — Dominant diarization cluster per segment — the assign lane's proposal paint.
168
218
  - `variant_divergence` _function_ — Within-segment cross-transcriber divergence (stage 5: intra-graph).
169
219
 
220
+ ### `cjm_transcript_correction_core.spans`
221
+
222
+ - `bench_span_proposals` _function_ — Derive the span verdicts (design bbf8bafd (f), the bench_filter_proposals
223
+ - `build_span_pack` _function_ — Build the span proposer's input: the filter pack's numbered lines with
224
+ - `find_token_span` _function_ — Resolve quoted words to WHOLE word tokens of a line (pure): the quote is
225
+ - `is_span_pack` _function_
226
+ - `lexicon_span_rows` _function_ — The LEXICON TIER (design bbf8bafd (g)): a bare um / uh token is a
227
+ - `load_span_proposal_sets` _function_ — Every SPAN proposal set for a source (and optionally one spine), newest
228
+ - `locate_span_tokens` _function_ — Where a proposal's words sit on the CURRENT line, as a character range
229
+ - `merge_span_proposals` _function_ — Fold several SPAN sets over one spine into one walkable set — the
230
+ - `overlay_label_slate` _function_ — The slate a span pack carries: every label with its gloss and whether a
231
+ - `pending_span_proposals` _function_ — The headless worklist: proposals with NO active overlay carrying their id
232
+ - `render_span_pack` _function_ — Render a span pack as the brief a proposer reads: identity + window, the
233
+ - `render_span_propset_markdown` _function_ — Project a span set for a human: one line per proposal — tier, label,
234
+ - `segment_word_tokens` _function_
235
+ - `snap_span_proposal` _function_ — Resolve a proposal against the CURRENT line at accept (design bbf8bafd
236
+ - `span_proposals_from_rows` _function_ — Resolve validated rows to span proposal-set rows: proposal id, label
237
+ - `validate_span_rows` _function_ — Validate + resolve proposer rows against their span pack — loud on the
238
+ - `write_span_propset` _function_ — Write one SPAN proposal set — the filter set's layout under the span
239
+
170
240
  ### `cjm_transcript_correction_core.spine`
171
241
 
172
242
  - `ChunkRef` _class_ — Where one Segment's VAD-chunk audio lives: the model-input WAV + the chunk-local span.
173
243
  - `SeamRef` _class_ — A source-coordinate audio span across one fine-spine boundary (the g/G
174
244
  - `SpineView` _class_ — One Source's effective correction spine, cursor-windowed for the TUI.
245
+ - `layer_speaker_menu` _function_ — Layer the assign-lane digit menu (pure; DEC 774dbe40). Tier 1 = the
175
246
  - `list_sources` _function_ — Enumerate the graph's Source nodes (the discovery corpus, 2ce81638).
176
247
  - `load_source_slice` _function_ — Decode a source-coordinate slice of the ORIGINAL media to playable samples.
177
248
  - `match_sources` _function_ — The --source selector (pure; shared by direct open and the picker's seed).
249
+ - `match_speaker_query` _function_ — Narrow the registry by a typed query (pure; DEC 774dbe40 (4)). Rank 0 =
178
250
  - `neighbor_word_bound` _function_ — The adjacent word's FA boundary facing an overlay span (pure).
179
251
  - `open_stack` _function_ — Bootstrap the graph capability stack, resolving the db path (2ce81638).
180
252
  - `parse_entity_input` _function_ — Parse the new-speaker editor line (pure). A leading `?` marks the entity
@@ -183,11 +255,13 @@ A frontend-agnostic core for the transcript correction workflow — the first do
183
255
  - `plan_chunk_insert` _function_ — Plan a chunk insertion into the seam after the cursor (the i gesture unit; pure).
184
256
  - `plan_chunk_split` _function_ — Plan a chunk split at a caret position (the S gesture unit; pure).
185
257
  - `plan_gate` _function_ — Plan an extraction-gate assertion (the F gesture unit; pure — DEC 8e05b87b).
258
+ - `plan_split_rows` _function_ — Place speaker-split boundaries on a destination spine (pure) — the
186
259
  - `plan_time_nudge` _function_ — Plan a boundary-time nudge (the ,/. and </> gesture unit; pure).
187
260
  - `resolve_mark_class_token` _function_ — Resolve a leading digit token to its menu class (the M picker; pure).
188
261
  - `segment_word_tokens` _function_ — Tokenize a segment's text into words WITH character offsets (pure).
189
262
  - `snap_word_span` _function_ — Derive a word range's TIME span from FA word timestamps (pure; fc42614d).
190
263
  - `source_status` _function_ — Correction-status-at-a-glance for one Source (the picker's detail row).
264
+ - `split_donors` _function_ — The SPEAKER-SPLIT layer of a spine (pure) — the DoD rider 54aac7d3 on
191
265
 
192
266
  ### `cjm_transcript_correction_core.state`
193
267
 
@@ -196,7 +270,30 @@ A frontend-agnostic core for the transcript correction workflow — the first do
196
270
  - `selector_for_spine` _function_ — The selector value a picker choice persists (pure): the full skeleton
197
271
  - `spine_label` _function_ — One picker row's config summary for a skeleton spine (pure).
198
272
 
273
+ ### `cjm_transcript_correction_core.strata`
274
+
275
+ - `active_strata` _function_ — The live strata: stratum corrections neither superseded (reclassified /
276
+ - `bench_filter_proposals` _function_ — Derive the filtering verdicts (DEC 8e05b87b, the bench_event_proposals
277
+ - `build_filter_pack` _function_ — Build the proposer's input: one source window's text-bearing effective
278
+ - `exclude_strata` _function_ — The per-consumer filtered projection (DEC 9d4c0a38): "filtered" is a
279
+ - `load_filter_proposal_sets` _function_ — Every filtering proposal set for a source (and optionally one spine),
280
+ - `materialized_fix_ids` _function_ — The fidelity-edit apply path's materialization: a proposer row whose
281
+ - `materialized_mark_ids` _function_ — Class-family routing's other half: a proposer's mark-family row (an ASR
282
+ - `merge_filter_proposals` _function_ — Fold several proposal sets over ONE spine into one walkable set (design
283
+ - `new_pack_id` _function_ — Generate a unique, sortable pack id.
284
+ - `pack_digest` _function_ — Digest the READ content (source binding + window + numbered segments) —
285
+ - `pending_filter_proposals` _function_ — The headless worklist: proposals with NO live stratum carrying their id and
286
+ - `plan_pack_windows` _function_ — Cut a spine into `count` windows of near-equal TEXT-segment count at
287
+ - `proposals_from_rows` _function_ — Resolve validated rows to proposal-set rows: proposal id, category, source
288
+ - `render_filter_pack` _function_ — Render a pack as the brief a proposer reads: identity + window, the class
289
+ - `render_filter_propset_markdown` _function_ — Project a proposal set for a HUMAN to check against the source in the
290
+ - `resolve_slate` _function_ — Resolve a NAMED class slate (ruling c5b6cf42) to the two vocabularies a
291
+ - `select_span_segments` _function_ — The span-EDIT gesture's resolver (agreed 2026-09-01 on the ch04 confirm
292
+ - `strata_index` _function_ — Segment-keyed view of the live strata (the consumer query's index).
293
+ - `validate_proposal_rows` _function_ — Validate + normalize proposer rows against their pack — loud on the first
294
+ - `write_filter_propset` _function_ — Write one filtering proposal set: `<out_root>/<set_id>/manifest.json` +
295
+
199
296
  ## Dependencies
200
297
 
201
298
  **Depends on:** `cjm-capability-primitives`, `cjm-context-graph-layer`, `cjm-context-graph-primitives`, `cjm-substrate`, `cjm-transcript-graph-schema`, `numpy`
202
- **Used by:** `cjm-transcript-correction-qt`, `cjm-transcript-correction-tui`, `cjm-transcription-core`, `cjm-workflow-hub-qt`, `cjm-workflow-hub-tui`
299
+ **Used by:** `cjm-context-graph-projection`, `cjm-transcript-correction-qt`, `cjm-transcription-core`, `cjm-workflow-hub-qt`