Schema epoch inventory (1.0)¶
Status: implemented in 0.9.3 — public schema targets are integer 1 only (no dotted .x forms); data-root marker + remediation UX shipped
Programme: pre_release_roadmap_1_0.md §8
Package baseline: 0.9.3 (epoch implementation)
Approved: 2026-07-24 (owner clean-slate + integer-1 standardisation); cut: 2026-07-24 as v0.9.3
Locked convention¶
Classify every version-like value before changing it.
Public persisted schema versions are integers only — use
1, never"1.0","2.0", or other dotted.xforms.Canonical transcript / speaker-map / state envelopes that today use
"1.0"or"2.0"→ integer1in the epoch.Public persisted string schema IDs →
transcriptx.<domain>.v1(.v1suffix is an ID token, not a dotted schema number).Refuse or isolate pre-epoch artifacts; no long-lived compatibility adapters for wiped pre-public data.
Write
schema_epoch/ public-schema epoch marker at managed data-root; detect early; explain clearly in GUI and supported remediation surfaces (not a new public analysis CLI).Never renumber, reuse, or reset public schema IDs after 1.0.
Policy / prompt / algorithm-semantics / cache identity strings are not public
schema_versionnumbers — do not cosmetic-reset them unless the inventory row says so. Prefer leaving them unchanged across the epoch.
Retain / wipe decisions (approved)¶
Asset |
Decision |
|---|---|
Compatible managed transcripts (content) |
Retain (or reimport); schema stamp → integer |
Source recordings |
Retain — never touch for epoch neatness |
Speaker-map sidecars |
Owner clean-slate: backed up then removed from live trees for testing; restore from backup when needed. Live schema stamp → integer |
Speaker profiles / voice |
Owner clean-slate: backed up then removed from live |
Other incompatible derived state (run outputs, manifests/ |
Refuse / remove via supported reset path only |
Automatic deletion without user action |
Forbidden (owner-driven wipe for testing is explicit and separate) |
Backup location (2026-07-24)¶
Owner-local clean-slate backup (outside the git worktree; path not recorded in-repo):
Directory name:
epoch_clean_slate_2026-07-24/library_transcripts_speaker_maps/— from the live library speaker-maps tree (168 files)working_tree_speaker_maps/— from repodata/transcripts/**/*.speaker_map.jsonworking_tree_speaker_profiles/— from repodata/speaker_profiles
speaker_id_to_db_id¶
Treat as legacy / unused for current product (no DB-backed speaker features in 0.9.x). Sidecars may still contain an empty {} object. Do not invent new DB linkage in the epoch; safe to keep the field as an empty object for wire compatibility or drop in a later cleanup once readers tolerate absence.
Inventory rows¶
Paths abbreviated under src/transcriptx/.
Public persisted → integer 1 / rename string IDs¶
path |
current |
class |
action |
tests / fixtures |
notes |
|---|---|---|---|---|---|
|
|
public_persisted |
→ 1 |
run outcome / contract tests |
Highest impact |
|
|
public_persisted |
→ 1 |
cleanup tests |
|
|
|
public_persisted |
→ 1 |
layout store tests |
Drop dual-accept after wipe |
|
|
public_persisted |
keep |
config tests |
|
|
|
public_persisted |
keep |
speaker profile tests |
|
|
|
public_persisted |
keep |
voice tests |
|
|
|
public_persisted |
→ 1 |
corrections tests |
|
|
|
public_persisted |
→ |
state tests |
|
|
|
public_persisted |
keep |
import tests |
|
|
|
public_persisted |
keep |
admission tests |
|
|
|
public_persisted |
keep |
||
|
|
public_persisted |
keep |
||
|
|
public_persisted |
keep |
||
|
|
public_persisted |
keep |
||
|
|
public_persisted |
keep |
||
|
|
public_persisted |
keep |
||
|
|
public_persisted |
keep |
||
|
|
public_persisted |
keep |
||
|
|
public_persisted |
→ 1 |
group LLM tests |
|
|
|
public_persisted |
Rename to a single |
custom QA tests |
Dual live markers + |
Speaker-map wire |
|
public_persisted |
→ |
mapping service / fixtures |
Written by |
|
|
public_persisted |
→ |
emotion fixtures |
|
|
|
public_persisted |
→ |
||
|
|
public_persisted |
→ |
||
|
|
public_persisted |
→ |
||
|
|
public_persisted |
→ |
||
|
|
public_persisted |
→ |
||
|
|
public_persisted |
→ |
Canonical transcript → integer 1¶
path |
current |
class |
action |
notes |
|---|---|---|---|---|
|
|
canonical_transcript |
→ |
No dotted forms |
|
|
canonical_transcript |
→ |
Fixtures/goldens must follow |
Contract string IDs¶
path |
current |
action |
|---|---|---|
|
|
→ |
|
|
→ |
Already- |
|
keep |
|
|
→ |
|
|
→ |
|
|
→ |
Journal / policy / cache / semantics / prompt / package¶
path |
current |
class |
action |
|---|---|---|---|
|
|
journal |
→ |
|
|
journal |
keep |
|
|
policy |
keep (behaviour generation, not schema envelope) |
Other policy IDs |
various |
policy |
keep |
emotion_family / clip / voice excerpt cache versions |
v3 / 2 / 1 |
cache |
keep unless wipe invalidates caches deliberately |
algorithm / semantics / prompt versions |
various |
non-schema |
keep method fingerprints; see Public module ids below for |
|
|
package |
bump via normal release when epoch implementation ships |
Public analysis module ids (not schema envelopes)¶
Registry scan: semantic_similarity is the only public module id / package that embeds a _vN suffix. Older siblings still exist as unversioned legacy ids (not named _v1).
Module id |
Package |
Status today |
Epoch / 1.0 action |
|---|---|---|---|
|
|
Default / current product path; |
Rename → |
|
|
|
Retire / remove from public registry (no reason to keep a parallel legacy module for 1.0) |
|
same legacy package |
|
Retire / remove |
|
|
Public id already unversioned |
Keep module id; collapse dual commit-marker / schema-id writer symbols (see row above) |
Why not “keep _v2 as method identity” forever: same naming smell as COMMIT_MARKER_SCHEMA_VERSION_V2 — the product default should not look like a temporary upgrade path. Group aggregation already uses unversioned agg id semantic_similarity while preferring semantic_similarity payloads — rename aligns those.
Breakage surface if renamed without retiring legacy: config/presets collision on id semantic_similarity; must delete or archive legacy modules first. Owner clean-slate / pre-public wipe means no long-lived module-id alias map is required.
Near misses (not public module ids): artifact schema strings (transcriptx.emotion_result.v1), profile keys (fast_v2), voice output path voice/v1/ — handled under schema-id / layout rules, not module rename.
Compatibility helpers to archive/remove after reset¶
Location |
Role |
|---|---|
|
Update to epoch-1 only |
|
Drop pre-epoch after wipe |
|
Epoch-1 journal only after reset |
|
Remove after wipe |
|
Collapse to epoch-1 |
|
Replace with refuse/remediate for pre-epoch |
Readers accepting |
Accept integer |
Emotion/corrections legacy payload builders |
Remove or quarantine post-wipe |
Legacy semantic modules + |
Retire legacy; rename v2 → unversioned |
|
Single |
Transition UX design¶
Keep within existing public surfaces — no new public analysis CLI.
Proposed behaviour¶
Data-root marker: write
schema_epoch(or equivalent) at managed data root when creating/opening an epoch-1 store.GUI preflight: on app start / library open, detect missing or pre-epoch marker; block principal work with clear copy naming the incompatible root.
Remediation choices (no auto-delete):
Create fresh data directory (recommended default path)
Optional inventory/export of compatible transcripts before reset
Supported reset of incompatible derived state only (with reset report)
Backup guidance link to docs (owner backup path documented above)
Typed Python workflow / internal maintainer utility: same detection + remediation for automation; not advertised as analysis CLI.
Tests: recordings never touched; compatible transcripts retained by default; epoch-1 store opens in later 0.9.x / 1.0 candidates.
Checklist¶
GUI preflight detects incompatible roots before work begins
Typed Python workflow and/or internal maintainer utility
Optional inventory/export before reset path
Explicit “create fresh data directory” path
No automatic deletion of user data
Precise identification of which root is incompatible
Backup guidance in GUI/docs
Reset report when supported reset path is used
Tests proving unrelated source recordings are never touched
Retain decision for managed transcripts recorded (retain / reimport OK)
Validation that a 0.9 epoch-1 store opens unchanged later (epoch-1 marker + stamps frozen in 0.9.3; reconfirm on later 0.9.x / 1.0 candidates)
Doc / script locations referencing old versions¶
location |
what it encodes |
update in epoch PR? |
|---|---|---|
|
run_results schema_version 2; speaker_map |
yes → integer |
|
run truth / schema refs |
yes |
|
schema_ids |
yes if renamed |
|
event schema id |
yes if renamed |
Fixtures under |
wire values |
yes — regenerate |
Goldens / characterization dumps |
yes |
|
This inventory |
actions |
mark done after epoch |
Sign-off¶
Inventory rows drafted for known version-like constants
Retain/wipe decisions accepted (incl. owner clean-slate backup of maps/profiles)
Transition UX design proposed
Integer-only public schemas →
1(no dotted.xforms) standardisedHuman sign-off — ready for epoch implementation (2026-07-24)