cjm-transcript-correction-core 0.0.6__tar.gz → 0.0.10__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 (35) hide show
  1. {cjm_transcript_correction_core-0.0.6/cjm_transcript_correction_core.egg-info → cjm_transcript_correction_core-0.0.10}/PKG-INFO +34 -3
  2. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/README.md +33 -2
  3. cjm_transcript_correction_core-0.0.10/cjm_transcript_correction_core/__init__.py +1 -0
  4. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/cli.py +975 -206
  5. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/graph.py +161 -15
  6. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/journal.py +2 -1
  7. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/models.py +39 -2
  8. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/pipeline.py +10 -6
  9. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/spine.py +92 -0
  10. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/state.py +3 -0
  11. cjm_transcript_correction_core-0.0.10/cjm_transcript_correction_core/strata.py +673 -0
  12. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10/cjm_transcript_correction_core.egg-info}/PKG-INFO +34 -3
  13. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core.egg-info/SOURCES.txt +3 -1
  14. cjm_transcript_correction_core-0.0.10/tests/test_cli.py +243 -0
  15. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/tests/test_gestures.py +50 -0
  16. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/tests/test_journal.py +33 -1
  17. cjm_transcript_correction_core-0.0.10/tests/test_strata.py +345 -0
  18. cjm_transcript_correction_core-0.0.6/cjm_transcript_correction_core/__init__.py +0 -1
  19. cjm_transcript_correction_core-0.0.6/tests/test_cli.py +0 -132
  20. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/LICENSE +0 -0
  21. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/MANIFEST.in +0 -0
  22. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/launch.py +0 -0
  23. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core/signals.py +0 -0
  24. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core.egg-info/dependency_links.txt +0 -0
  25. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core.egg-info/entry_points.txt +0 -0
  26. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core.egg-info/requires.txt +0 -0
  27. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/cjm_transcript_correction_core.egg-info/top_level.txt +0 -0
  28. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/pyproject.toml +0 -0
  29. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/setup.cfg +0 -0
  30. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/tests/test_bench.py +0 -0
  31. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/tests/test_graph.py +0 -0
  32. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/tests/test_models.py +0 -0
  33. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/tests/test_pipeline.py +0 -0
  34. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/tests/test_signals.py +0 -0
  35. {cjm_transcript_correction_core-0.0.6 → cjm_transcript_correction_core-0.0.10}/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.10
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
@@ -26,7 +26,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
26
26
 
27
27
  ## Modules
28
28
 
29
- - **`cjm_transcript_correction_core`**
29
+ - **`cjm_transcript_correction_core.__init__`**
30
30
  - **`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
31
  - **`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
32
  - **`cjm_transcript_correction_core.journal`** — Live append-through for the correction verbs — the workflow journal's domain half.
@@ -36,6 +36,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
36
36
  - **`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.
37
37
  - **`cjm_transcript_correction_core.spine`**
38
38
  - **`cjm_transcript_correction_core.state`** — Sidecar view-state + spine-picker helpers — the correction TUI's pure
39
+ - **`cjm_transcript_correction_core.strata`** — Strata — the filtering lane's domain half (DECs 304fd984 + 9d4c0a38; work items
39
40
 
40
41
  ## API
41
42
 
@@ -43,19 +44,28 @@ A frontend-agnostic core for the transcript correction workflow — the first do
43
44
 
44
45
  - `bench_command` _function_ — Execute the `bench` subcommand: the reserved-tail verdict join.
45
46
  - `build_parser` _function_ — Build the CLI parser (subcommands: run, review).
47
+ - `commit_wordless_transfer` _function_ — COMMIT a planned transfer — the engine's second half. One
46
48
  - `export_command` _function_ — Execute `export-wordless-propset`: write one spine's effective wordless
47
49
  - `extract_command` _function_ — Execute the `extract` subcommand: fold the gated overlay into a manifested dataset.
50
+ - `filter_confirm_command` _function_ — Execute `filter-confirm`: the HEADLESS HITL worklist (bc8dbbdd pass-1
51
+ - `filter_ingest_command` _function_ — Execute `filter-ingest`: validate proposer rows against their pack and
52
+ - `filter_pack_command` _function_ — Execute `filter-pack`: write one spine window's effective text-bearing
48
53
  - `gate_command` _function_ — Execute the `gate` subcommand: show or assert per-spine extraction gates.
49
54
  - `load_capabilities` _function_ — Discover manifests + load each capability, passing per-capability config (CR-2 caller-wins).
50
55
  - `main` _function_ — CLI entry point (console script: `cjm-transcript-correction-core`).
51
56
  - `overlay_event_rows` _function_ — Overlay span records -> dataset event rows for ONE spine (pure).
57
+ - `plan_transfer_rows` _function_ — Place wordless donors on the destination (pure) — the event half of
58
+ - `plan_wordless_export` _function_ — PLAN an export (reads only) — the `export-wordless-propset` engine's
59
+ - `plan_wordless_transfer` _function_ — PLAN a wordless transfer (reads only) — the `transfer-wordless`
60
+ - `resolve_source_node` _function_ — Resolve the --source selector the respine verbs share: exactly ONE
52
61
  - `review_command` _function_ — Execute the `review` subcommand: interactive text corrections over the flagged worklist.
53
62
  - `run_command` _function_ — Execute the `run` subcommand: correct a decomp manifest's committed spine.
54
63
  - `run_extract` _function_ — The extract fold on an ALREADY-OPEN graph seat (flywheel build leg 2,
55
64
  - `scan_command` _function_ — Execute `scan-mishomed`: flag authoritative FA words stranded outside
56
65
  - `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.
66
+ - `transfer_command` _function_ — Execute `transfer-wordless`: replay wordless event inserts (and speaker-
58
67
  - `wordless_donors` _function_ — The EFFECTIVE wordless layer of a spine: labeled, effectively wordless
68
+ - `write_wordless_propset` _function_ — WRITE a planned export as a proposal set — the engine's write half.
59
69
 
60
70
  ### `cjm_transcript_correction_core.graph`
61
71
 
@@ -77,6 +87,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
77
87
  - `build_reject_review` _function_ — Build a review Correction that REJECTS a prior correction (reject-as-supersede).
78
88
  - `build_speaker_assign_correction` _function_ — Build a speaker Correction — the assignment op envelope (DEC d6df3a8e).
79
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
80
91
  - `build_text_correction` _function_ — Build a text_content Correction + its CORRECTS (+ optional SUPERSEDES) edges.
81
92
  - `build_time_nudge_correction` _function_ — Build a timing Correction that nudges segment boundary TIMES (node + CORRECTS edges).
82
93
  - `commit_boundary_shift_correction` _function_ — Commit a boundary-shift correction (node + CORRECTS x2 [+ SUPERSEDES]) + REVIEWED markers on both segments.
@@ -93,6 +104,8 @@ A frontend-agnostic core for the transcript correction workflow — the first do
93
104
  - `commit_speaker_entity` _function_ — Mint a source-spanning Entity into the shared registry (DEC 4ec6a49c).
94
105
  - `commit_speech_overlay_correction` _function_ — Commit a speech overlay (node + CORRECTS [+ SUPERSEDES]).
95
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
96
109
  - `commit_text_correction` _function_ — Commit a text_content correction (node + CORRECTS [+ SUPERSEDES]) + a REVIEWED marker.
97
110
  - `commit_time_nudge_correction` _function_ — Commit a time-nudge correction (node + CORRECTS per touched segment).
98
111
  - `correction_stats` _function_ — Fold one Source's ACTIVE overlay into flywheel-accounting counts (pure).
@@ -203,11 +216,13 @@ A frontend-agnostic core for the transcript correction workflow — the first do
203
216
  - `plan_chunk_insert` _function_ — Plan a chunk insertion into the seam after the cursor (the i gesture unit; pure).
204
217
  - `plan_chunk_split` _function_ — Plan a chunk split at a caret position (the S gesture unit; pure).
205
218
  - `plan_gate` _function_ — Plan an extraction-gate assertion (the F gesture unit; pure — DEC 8e05b87b).
219
+ - `plan_split_rows` _function_ — Place speaker-split boundaries on a destination spine (pure) — the
206
220
  - `plan_time_nudge` _function_ — Plan a boundary-time nudge (the ,/. and </> gesture unit; pure).
207
221
  - `resolve_mark_class_token` _function_ — Resolve a leading digit token to its menu class (the M picker; pure).
208
222
  - `segment_word_tokens` _function_ — Tokenize a segment's text into words WITH character offsets (pure).
209
223
  - `snap_word_span` _function_ — Derive a word range's TIME span from FA word timestamps (pure; fc42614d).
210
224
  - `source_status` _function_ — Correction-status-at-a-glance for one Source (the picker's detail row).
225
+ - `split_donors` _function_ — The SPEAKER-SPLIT layer of a spine (pure) — the DoD rider 54aac7d3 on
211
226
 
212
227
  ### `cjm_transcript_correction_core.state`
213
228
 
@@ -216,6 +231,22 @@ A frontend-agnostic core for the transcript correction workflow — the first do
216
231
  - `selector_for_spine` _function_ — The selector value a picker choice persists (pure): the full skeleton
217
232
  - `spine_label` _function_ — One picker row's config summary for a skeleton spine (pure).
218
233
 
234
+ ### `cjm_transcript_correction_core.strata`
235
+
236
+ - `active_strata` _function_ — The live strata: stratum corrections neither superseded (reclassified /
237
+ - `bench_filter_proposals` _function_ — Derive the filtering verdicts (DEC 8e05b87b, the bench_event_proposals
238
+ - `build_filter_pack` _function_ — Build the proposer's input: one source window's text-bearing effective
239
+ - `exclude_strata` _function_ — The per-consumer filtered projection (DEC 9d4c0a38): "filtered" is a
240
+ - `load_filter_proposal_sets` _function_ — Every filtering proposal set for a source (and optionally one spine),
241
+ - `new_pack_id` _function_ — Generate a unique, sortable pack id.
242
+ - `pack_digest` _function_ — Digest the READ content (source binding + window + numbered segments) —
243
+ - `pending_filter_proposals` _function_ — The headless worklist: proposals with NO live stratum carrying their id and
244
+ - `proposals_from_rows` _function_ — Resolve validated rows to proposal-set rows: proposal id, category, source
245
+ - `render_filter_pack` _function_ — Render a pack as the brief a proposer reads: identity + window, the class
246
+ - `strata_index` _function_ — Segment-keyed view of the live strata (the consumer query's index).
247
+ - `validate_proposal_rows` _function_ — Validate + normalize proposer rows against their pack — loud on the first
248
+ - `write_filter_propset` _function_ — Write one filtering proposal set: `<out_root>/<set_id>/manifest.json` +
249
+
219
250
  ## Dependencies
220
251
 
221
252
  **Depends on:** `cjm-capability-primitives`, `cjm-context-graph-layer`, `cjm-context-graph-primitives`, `cjm-substrate`, `cjm-transcript-graph-schema`, `numpy`
@@ -6,7 +6,7 @@ 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
10
  - **`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
11
  - **`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
12
  - **`cjm_transcript_correction_core.journal`** — Live append-through for the correction verbs — the workflow journal's domain half.
@@ -16,6 +16,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
16
16
  - **`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.
17
17
  - **`cjm_transcript_correction_core.spine`**
18
18
  - **`cjm_transcript_correction_core.state`** — Sidecar view-state + spine-picker helpers — the correction TUI's pure
19
+ - **`cjm_transcript_correction_core.strata`** — Strata — the filtering lane's domain half (DECs 304fd984 + 9d4c0a38; work items
19
20
 
20
21
  ## API
21
22
 
@@ -23,19 +24,28 @@ A frontend-agnostic core for the transcript correction workflow — the first do
23
24
 
24
25
  - `bench_command` _function_ — Execute the `bench` subcommand: the reserved-tail verdict join.
25
26
  - `build_parser` _function_ — Build the CLI parser (subcommands: run, review).
27
+ - `commit_wordless_transfer` _function_ — COMMIT a planned transfer — the engine's second half. One
26
28
  - `export_command` _function_ — Execute `export-wordless-propset`: write one spine's effective wordless
27
29
  - `extract_command` _function_ — Execute the `extract` subcommand: fold the gated overlay into a manifested dataset.
30
+ - `filter_confirm_command` _function_ — Execute `filter-confirm`: the HEADLESS HITL worklist (bc8dbbdd pass-1
31
+ - `filter_ingest_command` _function_ — Execute `filter-ingest`: validate proposer rows against their pack and
32
+ - `filter_pack_command` _function_ — Execute `filter-pack`: write one spine window's effective text-bearing
28
33
  - `gate_command` _function_ — Execute the `gate` subcommand: show or assert per-spine extraction gates.
29
34
  - `load_capabilities` _function_ — Discover manifests + load each capability, passing per-capability config (CR-2 caller-wins).
30
35
  - `main` _function_ — CLI entry point (console script: `cjm-transcript-correction-core`).
31
36
  - `overlay_event_rows` _function_ — Overlay span records -> dataset event rows for ONE spine (pure).
37
+ - `plan_transfer_rows` _function_ — Place wordless donors on the destination (pure) — the event half of
38
+ - `plan_wordless_export` _function_ — PLAN an export (reads only) — the `export-wordless-propset` engine's
39
+ - `plan_wordless_transfer` _function_ — PLAN a wordless transfer (reads only) — the `transfer-wordless`
40
+ - `resolve_source_node` _function_ — Resolve the --source selector the respine verbs share: exactly ONE
32
41
  - `review_command` _function_ — Execute the `review` subcommand: interactive text corrections over the flagged worklist.
33
42
  - `run_command` _function_ — Execute the `run` subcommand: correct a decomp manifest's committed spine.
34
43
  - `run_extract` _function_ — The extract fold on an ALREADY-OPEN graph seat (flywheel build leg 2,
35
44
  - `scan_command` _function_ — Execute `scan-mishomed`: flag authoritative FA words stranded outside
36
45
  - `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.
46
+ - `transfer_command` _function_ — Execute `transfer-wordless`: replay wordless event inserts (and speaker-
38
47
  - `wordless_donors` _function_ — The EFFECTIVE wordless layer of a spine: labeled, effectively wordless
48
+ - `write_wordless_propset` _function_ — WRITE a planned export as a proposal set — the engine's write half.
39
49
 
40
50
  ### `cjm_transcript_correction_core.graph`
41
51
 
@@ -57,6 +67,7 @@ A frontend-agnostic core for the transcript correction workflow — the first do
57
67
  - `build_reject_review` _function_ — Build a review Correction that REJECTS a prior correction (reject-as-supersede).
58
68
  - `build_speaker_assign_correction` _function_ — Build a speaker Correction — the assignment op envelope (DEC d6df3a8e).
59
69
  - `build_speech_overlay_correction` _function_ — Build a NON-MUTATING speech-overlay Correction (check fc42614d, DEC 4e05a066).
70
+ - `build_stratum_correction` _function_ — Build a NON-MUTATING stratum Correction (DECs 304fd984 + 9d4c0a38: the
60
71
  - `build_text_correction` _function_ — Build a text_content Correction + its CORRECTS (+ optional SUPERSEDES) edges.
61
72
  - `build_time_nudge_correction` _function_ — Build a timing Correction that nudges segment boundary TIMES (node + CORRECTS edges).
62
73
  - `commit_boundary_shift_correction` _function_ — Commit a boundary-shift correction (node + CORRECTS x2 [+ SUPERSEDES]) + REVIEWED markers on both segments.
@@ -73,6 +84,8 @@ A frontend-agnostic core for the transcript correction workflow — the first do
73
84
  - `commit_speaker_entity` _function_ — Mint a source-spanning Entity into the shared registry (DEC 4ec6a49c).
74
85
  - `commit_speech_overlay_correction` _function_ — Commit a speech overlay (node + CORRECTS [+ SUPERSEDES]).
75
86
  - `commit_speech_overlay_removal` _function_ — Remove a speech overlay WITHOUT a replacement (reject-as-supersede).
87
+ - `commit_stratum_correction` _function_ — Commit a stratum (node + CORRECTS per covered segment [+ SUPERSEDES]).
88
+ - `commit_stratum_retraction` _function_ — Retract a live stratum WITHOUT replacing it (reject-as-supersede, the
76
89
  - `commit_text_correction` _function_ — Commit a text_content correction (node + CORRECTS [+ SUPERSEDES]) + a REVIEWED marker.
77
90
  - `commit_time_nudge_correction` _function_ — Commit a time-nudge correction (node + CORRECTS per touched segment).
78
91
  - `correction_stats` _function_ — Fold one Source's ACTIVE overlay into flywheel-accounting counts (pure).
@@ -183,11 +196,13 @@ A frontend-agnostic core for the transcript correction workflow — the first do
183
196
  - `plan_chunk_insert` _function_ — Plan a chunk insertion into the seam after the cursor (the i gesture unit; pure).
184
197
  - `plan_chunk_split` _function_ — Plan a chunk split at a caret position (the S gesture unit; pure).
185
198
  - `plan_gate` _function_ — Plan an extraction-gate assertion (the F gesture unit; pure — DEC 8e05b87b).
199
+ - `plan_split_rows` _function_ — Place speaker-split boundaries on a destination spine (pure) — the
186
200
  - `plan_time_nudge` _function_ — Plan a boundary-time nudge (the ,/. and </> gesture unit; pure).
187
201
  - `resolve_mark_class_token` _function_ — Resolve a leading digit token to its menu class (the M picker; pure).
188
202
  - `segment_word_tokens` _function_ — Tokenize a segment's text into words WITH character offsets (pure).
189
203
  - `snap_word_span` _function_ — Derive a word range's TIME span from FA word timestamps (pure; fc42614d).
190
204
  - `source_status` _function_ — Correction-status-at-a-glance for one Source (the picker's detail row).
205
+ - `split_donors` _function_ — The SPEAKER-SPLIT layer of a spine (pure) — the DoD rider 54aac7d3 on
191
206
 
192
207
  ### `cjm_transcript_correction_core.state`
193
208
 
@@ -196,6 +211,22 @@ A frontend-agnostic core for the transcript correction workflow — the first do
196
211
  - `selector_for_spine` _function_ — The selector value a picker choice persists (pure): the full skeleton
197
212
  - `spine_label` _function_ — One picker row's config summary for a skeleton spine (pure).
198
213
 
214
+ ### `cjm_transcript_correction_core.strata`
215
+
216
+ - `active_strata` _function_ — The live strata: stratum corrections neither superseded (reclassified /
217
+ - `bench_filter_proposals` _function_ — Derive the filtering verdicts (DEC 8e05b87b, the bench_event_proposals
218
+ - `build_filter_pack` _function_ — Build the proposer's input: one source window's text-bearing effective
219
+ - `exclude_strata` _function_ — The per-consumer filtered projection (DEC 9d4c0a38): "filtered" is a
220
+ - `load_filter_proposal_sets` _function_ — Every filtering proposal set for a source (and optionally one spine),
221
+ - `new_pack_id` _function_ — Generate a unique, sortable pack id.
222
+ - `pack_digest` _function_ — Digest the READ content (source binding + window + numbered segments) —
223
+ - `pending_filter_proposals` _function_ — The headless worklist: proposals with NO live stratum carrying their id and
224
+ - `proposals_from_rows` _function_ — Resolve validated rows to proposal-set rows: proposal id, category, source
225
+ - `render_filter_pack` _function_ — Render a pack as the brief a proposer reads: identity + window, the class
226
+ - `strata_index` _function_ — Segment-keyed view of the live strata (the consumer query's index).
227
+ - `validate_proposal_rows` _function_ — Validate + normalize proposer rows against their pack — loud on the first
228
+ - `write_filter_propset` _function_ — Write one filtering proposal set: `<out_root>/<set_id>/manifest.json` +
229
+
199
230
  ## Dependencies
200
231
 
201
232
  **Depends on:** `cjm-capability-primitives`, `cjm-context-graph-layer`, `cjm-context-graph-primitives`, `cjm-substrate`, `cjm-transcript-graph-schema`, `numpy`