tranpro 0.1.0a1__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 (50) hide show
  1. tranpro-0.1.0a1/CHANGELOG.md +24 -0
  2. tranpro-0.1.0a1/LICENSE +21 -0
  3. tranpro-0.1.0a1/MANIFEST.in +2 -0
  4. tranpro-0.1.0a1/PKG-INFO +171 -0
  5. tranpro-0.1.0a1/README.md +133 -0
  6. tranpro-0.1.0a1/docs/ARCHITECTURE.md +98 -0
  7. tranpro-0.1.0a1/docs/DATABASE.md +62 -0
  8. tranpro-0.1.0a1/docs/RELEASING.md +55 -0
  9. tranpro-0.1.0a1/docs/ROADMAP.md +72 -0
  10. tranpro-0.1.0a1/docs/TRANSCRIPTION.md +119 -0
  11. tranpro-0.1.0a1/docs/archived_overview.md +56 -0
  12. tranpro-0.1.0a1/pyproject.toml +76 -0
  13. tranpro-0.1.0a1/setup.cfg +4 -0
  14. tranpro-0.1.0a1/src/tranpro/__init__.py +10 -0
  15. tranpro-0.1.0a1/src/tranpro/__main__.py +6 -0
  16. tranpro-0.1.0a1/src/tranpro/cli.py +412 -0
  17. tranpro-0.1.0a1/src/tranpro/config.py +106 -0
  18. tranpro-0.1.0a1/src/tranpro/library/__init__.py +6 -0
  19. tranpro-0.1.0a1/src/tranpro/library/cli.py +255 -0
  20. tranpro-0.1.0a1/src/tranpro/library/database.py +169 -0
  21. tranpro-0.1.0a1/src/tranpro/library/fingerprint.py +19 -0
  22. tranpro-0.1.0a1/src/tranpro/library/models.py +97 -0
  23. tranpro-0.1.0a1/src/tranpro/library/repository.py +680 -0
  24. tranpro-0.1.0a1/src/tranpro/library/schema.py +228 -0
  25. tranpro-0.1.0a1/src/tranpro/paths.py +41 -0
  26. tranpro-0.1.0a1/src/tranpro/transcription/__init__.py +6 -0
  27. tranpro-0.1.0a1/src/tranpro/transcription/factory.py +73 -0
  28. tranpro-0.1.0a1/src/tranpro/transcription/models.py +89 -0
  29. tranpro-0.1.0a1/src/tranpro/transcription/parakeet.py +261 -0
  30. tranpro-0.1.0a1/src/tranpro/transcription/probe.py +29 -0
  31. tranpro-0.1.0a1/src/tranpro/transcription/render.py +117 -0
  32. tranpro-0.1.0a1/src/tranpro/transcription/service.py +174 -0
  33. tranpro-0.1.0a1/src/tranpro/transcription/whisper_cpp.py +146 -0
  34. tranpro-0.1.0a1/src/tranpro.egg-info/PKG-INFO +171 -0
  35. tranpro-0.1.0a1/src/tranpro.egg-info/SOURCES.txt +48 -0
  36. tranpro-0.1.0a1/src/tranpro.egg-info/dependency_links.txt +1 -0
  37. tranpro-0.1.0a1/src/tranpro.egg-info/entry_points.txt +2 -0
  38. tranpro-0.1.0a1/src/tranpro.egg-info/requires.txt +15 -0
  39. tranpro-0.1.0a1/src/tranpro.egg-info/top_level.txt +1 -0
  40. tranpro-0.1.0a1/tests/test_cli.py +86 -0
  41. tranpro-0.1.0a1/tests/test_config.py +64 -0
  42. tranpro-0.1.0a1/tests/test_database.py +130 -0
  43. tranpro-0.1.0a1/tests/test_fingerprint.py +24 -0
  44. tranpro-0.1.0a1/tests/test_library_cli.py +148 -0
  45. tranpro-0.1.0a1/tests/test_parakeet.py +162 -0
  46. tranpro-0.1.0a1/tests/test_repository.py +187 -0
  47. tranpro-0.1.0a1/tests/test_transcript_render.py +67 -0
  48. tranpro-0.1.0a1/tests/test_transcription_cli.py +155 -0
  49. tranpro-0.1.0a1/tests/test_transcription_service.py +248 -0
  50. tranpro-0.1.0a1/tests/test_whisper_cpp.py +77 -0
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+
3
+ All notable changes to tranpro are documented here. Versions follow
4
+ [Semantic Versioning](https://semver.org/).
5
+
6
+ ## 0.1.0a1 - 2026-11-02
7
+
8
+ First public alpha.
9
+
10
+ ### Added
11
+
12
+ - One-shot local transcription with Parakeet MLX on Apple Silicon.
13
+ - Animated terminal progress and optional live timestamped output.
14
+ - A persistent SQLite transcript library with immutable transcript runs.
15
+ - Recording fingerprinting, reuse, full-text search, and recording-ID input.
16
+ - Timestamped Markdown output and recoverable source-file trashing.
17
+ - Provider boundaries for Parakeet MLX and whisper.cpp.
18
+
19
+ ### Deferred
20
+
21
+ - Summarization and saved prompt templates.
22
+ - Hosted OpenAI providers.
23
+ - Google Docs publishing.
24
+ - Speaker diarization.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Will Barmby
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ include CHANGELOG.md
2
+ recursive-include docs *.md
@@ -0,0 +1,171 @@
1
+ Metadata-Version: 2.4
2
+ Name: tranpro
3
+ Version: 0.1.0a1
4
+ Summary: A local-first transcript library and one-shot transcription CLI
5
+ Author: Will Barmby
6
+ License-Expression: MIT
7
+ Project-URL: Changelog, https://github.com/WillBarmby/transcriber/blob/main/CHANGELOG.md
8
+ Project-URL: Homepage, https://github.com/WillBarmby/transcriber
9
+ Project-URL: Issues, https://github.com/WillBarmby/transcriber/issues
10
+ Project-URL: Repository, https://github.com/WillBarmby/transcriber.git
11
+ Keywords: audio,cli,summarization,transcription
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: End Users/Desktop
15
+ Classifier: Operating System :: MacOS :: MacOS X
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
22
+ Requires-Python: >=3.11
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: parakeet-mlx<0.7,>=0.6; sys_platform == "darwin" and platform_machine == "arm64"
26
+ Requires-Dist: platformdirs<5,>=4.3
27
+ Requires-Dist: rich<16,>=13.8
28
+ Requires-Dist: Send2Trash<2,>=1.8
29
+ Requires-Dist: typer<1,>=0.15
30
+ Provides-Extra: dev
31
+ Requires-Dist: build<2,>=1.2; extra == "dev"
32
+ Requires-Dist: mypy<2,>=1.14; extra == "dev"
33
+ Requires-Dist: pytest<10,>=8.3; extra == "dev"
34
+ Requires-Dist: ruff<1,>=0.9; extra == "dev"
35
+ Requires-Dist: twine<7,>=6; extra == "dev"
36
+ Requires-Dist: types-Send2Trash<2,>=1.8; extra == "dev"
37
+ Dynamic: license-file
38
+
39
+ # tranpro
40
+
41
+ `tranpro` is becoming a local-first transcript library with a straightforward
42
+ one-shot command-line workflow:
43
+
44
+ ```text
45
+ audio -> durable transcript -> optional summary -> optional Google Doc
46
+ ```
47
+
48
+ The Python distribution and import package are named `tranpro`; the command is
49
+ the shorter `tp`.
50
+
51
+ The current release provides local transcription and the persistent transcript
52
+ library. Summarization and Google Docs publication remain roadmap milestones.
53
+
54
+ ## Installation
55
+
56
+ tranpro currently targets Python 3.11 or newer on Apple Silicon Macs. Install
57
+ the CLI and its local Parakeet backend with one command:
58
+
59
+ ```shell
60
+ python3 -m pip install tranpro
61
+ tp --version
62
+ tp recording.m4a
63
+ ```
64
+
65
+ The first transcription downloads the model from Hugging Face and caches it for
66
+ later runs. Parakeet MLX is installed automatically only on Apple Silicon;
67
+ other platforms receive the portable CLI and database without that dependency.
68
+
69
+ This is an alpha release: the transcript database is designed to persist, but
70
+ commands and configuration may still change before 1.0.
71
+
72
+ ## Current commands
73
+
74
+ After installation:
75
+
76
+ ```shell
77
+ tp --help
78
+ tp --version
79
+ tp recording.m4a
80
+ tp recording.m4a --output -
81
+ tp recording.m4a --no-save
82
+ tp recording.m4a --retranscribe
83
+ tp 2 --retranscribe
84
+ tp recording.m4a --retranscribe --live
85
+ tp recording.m4a --no-progress
86
+ tp recording.m4a --trash-source
87
+ tp paths
88
+ tp config show
89
+ tp config init
90
+ tp config edit
91
+ tp library init
92
+ tp library status
93
+ tp list
94
+ tp show RECORDING_ID
95
+ tp search "budget constraints"
96
+ tp forget RECORDING_ID
97
+ tp restore RECORDING_ID
98
+ ```
99
+
100
+ Library commands use an embedded SQLite database with automatic schema
101
+ migrations and pre-migration backups. `forget` is a recoverable soft deletion:
102
+ it does not remove source audio, transcripts, or summaries. Full-text search uses
103
+ SQLite FTS5 across timestamped transcript segments and summary sections. See the
104
+ [database design](docs/DATABASE.md) for identity, versioning, and safety details.
105
+
106
+ Transcription is the default operation. The equivalent explicit form is also
107
+ available:
108
+
109
+ ```shell
110
+ tp recording.m4a
111
+ tp transcribe recording.m4a
112
+ ```
113
+
114
+ By default, tranpro saves a versioned library record and writes
115
+ `recording.transcript.md` beside the source. `--output -` prints Markdown to
116
+ stdout, while `--no-save` skips SQLite. Existing equivalent runs are reused;
117
+ `--retranscribe` creates another immutable version. `--trash-source`/`-d` moves
118
+ the source to the operating-system Trash only after output succeeds.
119
+ Parakeet's `--live` mode prints finalized timestamped sentences as they become
120
+ available while retaining the complete saved library and Markdown outputs.
121
+ Interactive terminals show an animated progress bar by default. `--no-progress`
122
+ disables it; redirected and non-interactive output disables it automatically.
123
+
124
+ See the [transcription guide](docs/TRANSCRIPTION.md) and
125
+ [roadmap](docs/ROADMAP.md).
126
+
127
+ ## Development setup
128
+
129
+ tranpro requires Python 3.11 or newer. From a clone:
130
+
131
+ ```shell
132
+ python3 -m venv .venv
133
+ source .venv/bin/activate
134
+ python -m pip install --upgrade pip
135
+ python -m pip install -e '.[dev]'
136
+ tp --version
137
+ ```
138
+
139
+ On Apple Silicon, the normal installation includes Parakeet MLX. Its model
140
+ downloads to the Hugging Face cache on first use.
141
+
142
+ Run the same checks used in continuous integration:
143
+
144
+ ```shell
145
+ ruff check .
146
+ ruff format --check .
147
+ mypy src/tranpro
148
+ pytest
149
+ python -m build
150
+ twine check dist/*
151
+ ```
152
+
153
+ Maintainers can find the tagged-release process in
154
+ [docs/RELEASING.md](docs/RELEASING.md).
155
+
156
+ The first supported local runtime target is macOS on Apple Silicon. The core,
157
+ database, and hosted-provider abstractions are intended to remain portable;
158
+ Linux and Windows are best-effort until they are tested in CI and on real hosts.
159
+
160
+ ## Project principles
161
+
162
+ - Local and free by default; hosted providers are explicit opt-ins.
163
+ - Transcription is the default action; summarization is explicit.
164
+ - SQLite is the source of truth. Markdown and Google Docs are rendered outputs.
165
+ - Provider boundaries keep model selection out of the core workflow.
166
+ - Source media is never deleted permanently by a normal command.
167
+ - No server, account system, or telemetry is required.
168
+
169
+ ## License
170
+
171
+ [MIT](LICENSE)
@@ -0,0 +1,133 @@
1
+ # tranpro
2
+
3
+ `tranpro` is becoming a local-first transcript library with a straightforward
4
+ one-shot command-line workflow:
5
+
6
+ ```text
7
+ audio -> durable transcript -> optional summary -> optional Google Doc
8
+ ```
9
+
10
+ The Python distribution and import package are named `tranpro`; the command is
11
+ the shorter `tp`.
12
+
13
+ The current release provides local transcription and the persistent transcript
14
+ library. Summarization and Google Docs publication remain roadmap milestones.
15
+
16
+ ## Installation
17
+
18
+ tranpro currently targets Python 3.11 or newer on Apple Silicon Macs. Install
19
+ the CLI and its local Parakeet backend with one command:
20
+
21
+ ```shell
22
+ python3 -m pip install tranpro
23
+ tp --version
24
+ tp recording.m4a
25
+ ```
26
+
27
+ The first transcription downloads the model from Hugging Face and caches it for
28
+ later runs. Parakeet MLX is installed automatically only on Apple Silicon;
29
+ other platforms receive the portable CLI and database without that dependency.
30
+
31
+ This is an alpha release: the transcript database is designed to persist, but
32
+ commands and configuration may still change before 1.0.
33
+
34
+ ## Current commands
35
+
36
+ After installation:
37
+
38
+ ```shell
39
+ tp --help
40
+ tp --version
41
+ tp recording.m4a
42
+ tp recording.m4a --output -
43
+ tp recording.m4a --no-save
44
+ tp recording.m4a --retranscribe
45
+ tp 2 --retranscribe
46
+ tp recording.m4a --retranscribe --live
47
+ tp recording.m4a --no-progress
48
+ tp recording.m4a --trash-source
49
+ tp paths
50
+ tp config show
51
+ tp config init
52
+ tp config edit
53
+ tp library init
54
+ tp library status
55
+ tp list
56
+ tp show RECORDING_ID
57
+ tp search "budget constraints"
58
+ tp forget RECORDING_ID
59
+ tp restore RECORDING_ID
60
+ ```
61
+
62
+ Library commands use an embedded SQLite database with automatic schema
63
+ migrations and pre-migration backups. `forget` is a recoverable soft deletion:
64
+ it does not remove source audio, transcripts, or summaries. Full-text search uses
65
+ SQLite FTS5 across timestamped transcript segments and summary sections. See the
66
+ [database design](docs/DATABASE.md) for identity, versioning, and safety details.
67
+
68
+ Transcription is the default operation. The equivalent explicit form is also
69
+ available:
70
+
71
+ ```shell
72
+ tp recording.m4a
73
+ tp transcribe recording.m4a
74
+ ```
75
+
76
+ By default, tranpro saves a versioned library record and writes
77
+ `recording.transcript.md` beside the source. `--output -` prints Markdown to
78
+ stdout, while `--no-save` skips SQLite. Existing equivalent runs are reused;
79
+ `--retranscribe` creates another immutable version. `--trash-source`/`-d` moves
80
+ the source to the operating-system Trash only after output succeeds.
81
+ Parakeet's `--live` mode prints finalized timestamped sentences as they become
82
+ available while retaining the complete saved library and Markdown outputs.
83
+ Interactive terminals show an animated progress bar by default. `--no-progress`
84
+ disables it; redirected and non-interactive output disables it automatically.
85
+
86
+ See the [transcription guide](docs/TRANSCRIPTION.md) and
87
+ [roadmap](docs/ROADMAP.md).
88
+
89
+ ## Development setup
90
+
91
+ tranpro requires Python 3.11 or newer. From a clone:
92
+
93
+ ```shell
94
+ python3 -m venv .venv
95
+ source .venv/bin/activate
96
+ python -m pip install --upgrade pip
97
+ python -m pip install -e '.[dev]'
98
+ tp --version
99
+ ```
100
+
101
+ On Apple Silicon, the normal installation includes Parakeet MLX. Its model
102
+ downloads to the Hugging Face cache on first use.
103
+
104
+ Run the same checks used in continuous integration:
105
+
106
+ ```shell
107
+ ruff check .
108
+ ruff format --check .
109
+ mypy src/tranpro
110
+ pytest
111
+ python -m build
112
+ twine check dist/*
113
+ ```
114
+
115
+ Maintainers can find the tagged-release process in
116
+ [docs/RELEASING.md](docs/RELEASING.md).
117
+
118
+ The first supported local runtime target is macOS on Apple Silicon. The core,
119
+ database, and hosted-provider abstractions are intended to remain portable;
120
+ Linux and Windows are best-effort until they are tested in CI and on real hosts.
121
+
122
+ ## Project principles
123
+
124
+ - Local and free by default; hosted providers are explicit opt-ins.
125
+ - Transcription is the default action; summarization is explicit.
126
+ - SQLite is the source of truth. Markdown and Google Docs are rendered outputs.
127
+ - Provider boundaries keep model selection out of the core workflow.
128
+ - Source media is never deleted permanently by a normal command.
129
+ - No server, account system, or telemetry is required.
130
+
131
+ ## License
132
+
133
+ [MIT](LICENSE)
@@ -0,0 +1,98 @@
1
+ # Architecture
2
+
3
+ ## Product boundary
4
+
5
+ tranpro is a local command-line application and library, not a hosted service.
6
+ It owns metadata, transcripts, summaries, prompts, and publication records in an
7
+ embedded SQLite database. Audio stays outside the database and is identified by
8
+ a streaming content fingerprint.
9
+
10
+ SQLite is canonical. Markdown files and Google Docs are projections that can be
11
+ recreated from stored artifacts.
12
+
13
+ ## Dependency direction
14
+
15
+ The finished backend will follow these boundaries:
16
+
17
+ ```text
18
+ CLI -> application workflows -> domain models
19
+ | ^
20
+ v |
21
+ provider/repository ports ----+
22
+ ^
23
+ |
24
+ SQLite, Parakeet, Ollama, OpenAI, Google adapters
25
+ ```
26
+
27
+ - **Domain models** describe recordings, timestamped transcript segments,
28
+ transcript runs, prompt versions, summaries, and publications. They do not
29
+ import a model SDK, Typer, or SQLite.
30
+ - **Application workflows** implement use cases such as transcribe, summarize,
31
+ search, publish, forget, and restore.
32
+ - **Ports** define the capabilities workflows need: transcription,
33
+ summarization, persistence, rendering, and publication.
34
+ - **Adapters** contain provider-specific APIs and filesystem/database details.
35
+ - **CLI** translates user intent into workflow calls and renders results.
36
+
37
+ Provider model names belong in profiles, not workflow code. A workflow receives
38
+ a selected provider through a registry and consumes normalized domain objects.
39
+
40
+ ## Application data
41
+
42
+ On macOS, `platformdirs` resolves the application state to:
43
+
44
+ ```text
45
+ ~/Library/Application Support/tranpro/
46
+ ├── config.toml
47
+ ├── library.sqlite3
48
+ └── backups/
49
+
50
+ ~/Library/Caches/tranpro/
51
+ ```
52
+
53
+ User-facing Markdown remains beside the source audio unless `--output` says
54
+ otherwise. Provider-managed model caches remain provider-managed. OAuth secrets
55
+ will be stored in the operating-system keychain rather than SQLite or TOML.
56
+
57
+ The database will use explicit, ordered schema migrations. Before a migration,
58
+ tranpro will make a timestamped SQLite backup. Records are soft-deleted by
59
+ default. A normal delete flag moves source media to the operating-system Trash
60
+ only after every requested output succeeds.
61
+
62
+ ## Versioned artifacts
63
+
64
+ A recording is stable identity; processing results are immutable runs:
65
+
66
+ ```text
67
+ Recording
68
+ ├── Transcript run 1 (provider, model, settings)
69
+ │ ├── Summary run 1 (prompt version, model, settings)
70
+ │ └── Summary run 2
71
+ └── Transcript run 2
72
+ ```
73
+
74
+ A repeated fingerprint plus equivalent transcription settings may reuse a
75
+ successful transcript. Retranscription creates a run instead of overwriting
76
+ history. Summaries always point to the exact transcript and prompt versions used.
77
+
78
+ ## Context planning
79
+
80
+ Summary providers expose their effective runtime context budget. Before a call,
81
+ the planner accounts for the system contract, rendered prompt, transcript,
82
+ reserved output, and a safety margin. Whole-transcript summarization is preferred
83
+ when it fits. Otherwise the planner creates coherent timestamped sections,
84
+ summarizes each under the same user instructions, and synthesizes the section
85
+ notes. The calculation and intermediate artifacts are persisted for auditability.
86
+
87
+ Summary evidence refers to stable transcript segment IDs. Renderers turn those
88
+ IDs into timestamps and links after validation, so models never invent display
89
+ timestamps.
90
+
91
+ ## Explicit non-goals for version 1
92
+
93
+ - A server, web UI, accounts, or telemetry
94
+ - Folder watching
95
+ - Storing audio blobs in SQLite
96
+ - Two-way Google Docs synchronization
97
+ - A separate vector database
98
+ - Permanent deletion as a convenience flag
@@ -0,0 +1,62 @@
1
+ # Transcript library
2
+
3
+ tranpro uses one application-owned SQLite database as the canonical record of
4
+ processing history. The source audio remains an external file; the database
5
+ stores its path, metadata, and a streaming SHA-256 content fingerprint.
6
+
7
+ ## Identity and versions
8
+
9
+ ```text
10
+ recordings
11
+ ├── transcript_runs
12
+ │ ├── transcript_segments
13
+ │ └── summary_runs
14
+ │ └── summary_sections
15
+ └── publication records (planned)
16
+ ```
17
+
18
+ A recording is identified by audio content rather than filename. Registering the
19
+ same bytes at another path returns the existing recording. A different provider,
20
+ model, or explicit retranscription creates another transcript run instead of
21
+ overwriting an earlier result.
22
+
23
+ Transcript segments receive stable references such as `s000001`. Summary
24
+ sections preserve the segment references used as evidence, allowing renderers to
25
+ add grounded timestamps later without asking a language model to invent them.
26
+
27
+ ## Schema changes and backups
28
+
29
+ The SQLite `user_version` pragma records the current ordered migration. Before
30
+ tranpro modifies an existing older schema, it creates a consistent backup using
31
+ SQLite's online backup API:
32
+
33
+ ```text
34
+ ~/Library/Application Support/tranpro/backups/
35
+ └── library-20261102T030405006789Z-v0.sqlite3
36
+ ```
37
+
38
+ The database carries a tranpro application identifier. Migration refuses a file
39
+ marked as another application's database, an unmarked database containing
40
+ unknown tables, or a schema newer than the installed tranpro version. These
41
+ checks turn likely path mistakes and downgrade attempts into explicit errors.
42
+
43
+ ## Search
44
+
45
+ SQLite FTS5 indexes transcript segment text, speaker names, summary headings, and
46
+ summary bodies. Search results retain the recording, artifact version, stable
47
+ segment or section location, and transcript start time. Normal search excludes
48
+ soft-deleted recordings; `--all` includes them.
49
+
50
+ FTS is intentionally lexical in this milestone. The future semantic index will
51
+ be derived from versioned transcript passages and combined with FTS results; it
52
+ will not replace canonical transcript storage.
53
+
54
+ ## Deletion semantics
55
+
56
+ `tp forget ID` timestamps the recording as deleted. It does not remove database
57
+ rows or touch source and output files. `tp restore ID` reverses that state. A
58
+ future permanent-purge operation will be separate, explicit, and confirmed.
59
+
60
+ The later `--trash-source` transcription option will use the operating-system
61
+ Trash only after all requested outputs succeed. That is independent of forgetting
62
+ a library record.
@@ -0,0 +1,55 @@
1
+ # Releasing tranpro
2
+
3
+ Releases are built by GitHub Actions from the repository and published with
4
+ PyPI Trusted Publishing. No long-lived PyPI token belongs in GitHub secrets.
5
+
6
+ ## One-time setup
7
+
8
+ Create pending Trusted Publishers on PyPI and TestPyPI with these values:
9
+
10
+ | Setting | Value |
11
+ | --- | --- |
12
+ | PyPI project | `tranpro` |
13
+ | GitHub owner | `WillBarmby` |
14
+ | Repository | `transcriber` |
15
+ | Workflow | `release.yml` |
16
+ | Environment | `pypi` on PyPI; `testpypi` on TestPyPI |
17
+
18
+ Create matching `pypi` and `testpypi` environments in the GitHub repository.
19
+ The environments may require approval if an extra release confirmation is
20
+ desired.
21
+
22
+ ## Rehearse on TestPyPI
23
+
24
+ 1. Update the version in `pyproject.toml` and the entry in `CHANGELOG.md`.
25
+ 2. Merge the release preparation pull request into `main`.
26
+ 3. Run the **Release** workflow manually from the `main` branch.
27
+ 4. Inspect the TestPyPI project and download its wheel artifact.
28
+
29
+ The manual workflow publishes only to TestPyPI. Re-running the same version is
30
+ safe: an already uploaded file is skipped.
31
+
32
+ ## Publish to PyPI
33
+
34
+ After the TestPyPI rehearsal succeeds, tag the exact tested commit and push the
35
+ tag:
36
+
37
+ ```shell
38
+ git switch main
39
+ git pull --ff-only
40
+ git tag v0.1.0a1
41
+ git push origin v0.1.0a1
42
+ ```
43
+
44
+ A `v*` tag makes the workflow rebuild the distributions, verify a clean wheel
45
+ installation, publish to PyPI, and create a GitHub release containing the wheel
46
+ and source distribution. The tag version must match the package version without
47
+ the leading `v`.
48
+
49
+ Finally, verify the public installation in a fresh virtual environment:
50
+
51
+ ```shell
52
+ python3 -m venv /tmp/tranpro-release-check
53
+ /tmp/tranpro-release-check/bin/python -m pip install tranpro
54
+ /tmp/tranpro-release-check/bin/tp --version
55
+ ```
@@ -0,0 +1,72 @@
1
+ # Roadmap
2
+
3
+ Work is intentionally divided into reviewable pull requests. Each pull request
4
+ must install independently, keep the command usable, and include tests for its
5
+ behavior.
6
+
7
+ ## 1. Application foundation
8
+
9
+ - Package `tranpro` with the `tp` console command
10
+ - Establish platform-native paths and versioned TOML configuration
11
+ - Document architecture, support policy, and project vision
12
+ - Add linting, typing, tests, build validation, and CI
13
+
14
+ ## 2. Transcript library
15
+
16
+ - SQLite migrations and pre-migration backups
17
+ - Recording fingerprints and versioned artifact records
18
+ - Stable transcript segment representation
19
+ - Soft delete, restore, list, show, and FTS5 search
20
+
21
+ ## 3. Local transcription
22
+
23
+ - Parakeet MLX as the Apple Silicon default
24
+ - Accelerated whisper.cpp fallback
25
+ - Provider/model selection through profiles
26
+ - Deduplication, `--retranscribe`, Markdown output, and `--no-save`
27
+ - Trash source media only after successful completion
28
+ - Retire the legacy watcher/archive pipeline
29
+
30
+ ## 4. Public alpha distribution
31
+
32
+ - Publish `tranpro` to PyPI with the `tp` console command
33
+ - Verify wheel installation in a clean environment
34
+ - Rehearse on TestPyPI and publish through short-lived trusted credentials
35
+ - Attach built distributions to a tagged GitHub release
36
+
37
+ ## 5. Summaries and prompts
38
+
39
+ - Ollama with Gemma 4 12B as the local default
40
+ - Built-in detailed-notes preset and versioned user prompts
41
+ - Explicit `--summarize` and standalone summarize commands
42
+ - Context feasibility planning and hierarchical fallback
43
+ - Grounded segment references and Markdown rendering
44
+
45
+ ## 6. OpenAI profile
46
+
47
+ - Hosted transcription with `gpt-transcribe`
48
+ - Hosted summaries with `gpt-6.1-terra`
49
+ - Usage and estimated-cost records
50
+ - Mocked provider tests; no network calls in the test suite
51
+
52
+ ## 7. Google Docs publication
53
+
54
+ - Bring-your-own desktop OAuth credentials and Keychain token storage
55
+ - Polished native Google Docs styles
56
+ - Immutable publication snapshots, reuse, and explicit updates
57
+ - Transcript-only and transcript-plus-summary publication
58
+
59
+ ## 8. Release polish
60
+
61
+ - Optional fzf-based interactive browsing
62
+ - Doctor/setup commands and shell completion
63
+ - Clean-environment wheel and source-distribution installation checks
64
+ - Migration notes and TestPyPI release rehearsal
65
+
66
+ Semantic search is a planned extension after the core library stabilizes. Its
67
+ passage index will be versioned and derived from canonical transcript segments so
68
+ it can coexist with SQLite FTS without changing recording identity.
69
+
70
+ Speaker diarization is also planned as an optional second pass over timestamped
71
+ segments. It will remain provider-independent so local diarizers can be compared
72
+ without coupling speaker labels to the transcription model.