Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
3e3cb57
docs(claude): recognize feat(transcribe) commit scope
utof May 2, 2026
267d860
chore: gitignore CLAUDE.md and docs/ — local-only by user policy
utof May 2, 2026
409d953
chore: gitignore .claude/ directory
utof May 2, 2026
03f69ac
feat(core): Transcriber trait + types + CoreError::Transcription
utof May 2, 2026
f2a397b
test(core): tighten transcription test assertions + add WHY for Arc<d…
utof May 2, 2026
4a1a32a
feat(db): V012 transcripts schema + WriteCmd::Transcript handler
utof May 2, 2026
0dbf2db
polish(db): T2 code-quality fixes (dedupe tokio-util, tighten proptes…
utof May 2, 2026
62f27d2
feat(transcribe): scaffold crate + audio pipeline + provider presets
utof May 2, 2026
5b68ee1
polish(transcribe): T3 review fixes (cfg(unix) tests, Arc WHY, provid…
utof May 2, 2026
db57303
feat(transcribe): OpenAICompatibleTranscriber adapter
utof May 2, 2026
45bda93
polish(transcribe): T4 spec-review fixes (XApiKey via with_header, pr…
utof May 2, 2026
9ce654f
polish(transcribe): T4 code-quality fixes (rename do_transcribe, TODO…
utof May 2, 2026
49511ba
feat(app): TranscriptionUseCase + queue + AppContainer wiring
utof May 3, 2026
957c2ba
polish(app): T5 review fix — emit live queue_size from worker
utof May 3, 2026
b9756eb
feat(cli): transcribe + auth subcommands
utof May 3, 2026
31ab6de
polish(cli): T6 review fixes — doc/code consistency + KEYRING_SERVICE…
utof May 3, 2026
c012910
feat(desktop): T7 transcription Tauri commands + tauri-plugin-shell w…
utof May 3, 2026
44b81b9
polish(desktop): T7 review fixes — sidecar target-triple + observability
utof May 3, 2026
eeb5df8
feat(desktop/web): T8 transcription slice + queries + api wrappers + …
utof May 3, 2026
89f8749
feat(desktop/web): <TranscribeButton /> + sidebar wiring
utof May 3, 2026
3a393cd
polish(desktop/web): T9 review fix — thread absolute_path through Fil…
utof May 3, 2026
e1b596a
feat(desktop/web): <TranscribeSettingsModal /> + sidebar wiring
utof May 3, 2026
b18a0d0
polish(desktop/web): T10 review fix — replace 🔑 emoji with text
utof May 3, 2026
e9a2204
polish(desktop/web): T10 review fixes — gate Save on config + name
utof May 3, 2026
7e93e18
polish(desktop/web): T10 review fix — add CoreError import + restore …
utof May 3, 2026
a1936b3
feat(desktop/web): <TranscriptionPill /> in StatusBar
utof May 3, 2026
4a70ba2
feat(desktop): T12 ffmpeg sidecar bundling (Linux v1)
utof May 3, 2026
5049fdd
chore(deps): unblock pre-push — publish=false on perima-transcribe + …
utof May 3, 2026
e10e5db
chore(deps): patch 3 RUSTSEC advisories via lockfile bumps
utof Jul 31, 2026
24a5087
fix(app,cli): satisfy clippy 1.95 lints in transcription tests
utof Jul 31, 2026
1e7ce6e
chore(lint): allow clippy::doc_markdown workspace-wide
utof Jul 31, 2026
966310a
fix(ci): mark shell scripts executable in the index
utof Jul 31, 2026
ce80eda
fix(ci): retry ffmpeg sidecar fetch on throttled short responses
utof Jul 31, 2026
e750d04
fix(ci): add GitHub-hosted mirror for the ffmpeg sidecar fetch
utof Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,24 @@ jobs:
librsvg2-dev \
patchelf

# WHY (T12): tauri-build validates `bundle.externalBin` paths
# during EVERY cargo compile of `perima-desktop` (not just
# `tauri build` — issue tauri-apps/tauri#14602). With
# `externalBin = ["binaries/ffmpeg"]` declared in tauri.conf.json,
# `cargo {build,clippy,test} -p perima-desktop` fails immediately
# without `crates/desktop/binaries/ffmpeg-{target-triple}` on
# disk. The fetch script downloads a pinned static build on Linux
# (johnvansickle.com release-amd64-static) and writes a
# zero-byte stub on macOS+Windows so the compile passes; runtime
# transcription on those platforms surfaces a clear
# `BinaryNotFound` until the T12-followup macOS+Windows fetchers
# land. The script is idempotent (skips download if the binary is
# already present) so Swatinem/rust-cache hits don't redo work.
# MUST run BEFORE `just ci` — otherwise tauri-build aborts.
- name: Fetch ffmpeg sidecar
shell: bash
run: just sidecar

- name: Run just ci
shell: bash
run: just ci
Expand Down Expand Up @@ -129,6 +147,13 @@ jobs:
librsvg2-dev \
patchelf

# WHY (T12): same rationale as the matrix job's sidecar fetch —
# `just bindings` runs `cargo build -p perima-desktop --features
# specta-export`, which compiles tauri-build, which validates the
# externalBin path. Must run before `just bindings`.
- name: Fetch ffmpeg sidecar
run: just sidecar

# WHY: regenerate bindings.ts via the specta-export feature and
# fail the job if `git diff` shows the committed copy is stale.
# Catches every Rust-side change to a #[tauri::command] signature,
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/mutants.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,18 @@ jobs:
librsvg2-dev \
patchelf

# WHY (T12): cargo-mutants' baseline-build pass compiles the
# WHOLE workspace including perima-desktop (exclude_globs only
# filters mutation generation, not baseline compile). tauri-build
# validates `bundle.externalBin` paths during compile (issue
# tauri-apps/tauri#14602), so the binary must exist on disk
# before any cargo invocation.
- uses: taiki-e/install-action@v2
with:
tool: just
- name: Fetch ffmpeg sidecar
run: just sidecar

# WHY `| tee git.diff` (vs `> git.diff`): tee echoes the diff into
# the CI log so reviewers can see what cargo-mutants will operate
# on without downloading the artifact. Matches the canonical
Expand Down
28 changes: 21 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
# =============================================================================
# DO NOT RE-ENABLE TRACKING FOR CLAUDE.md OR docs/.
#
# CLAUDE.md and docs/ are LOCAL-ONLY by intentional decision (autonomous-mode
# user preference). Both files have been `git rm --cached` and remain on disk
# for local agent state. Do not add `!CLAUDE.md` or `!docs/...` exception
# lines below. Do not "helpfully" re-track these so cloud agents can read
# them. The user has reverted that pattern repeatedly. This rule is final.
# =============================================================================

**/*.md
!CHANGELOG.md
!CLAUDE.md
# WHY exception for docs/superpowers + CLAUDE.md: cloud agents
# (scheduled remote triggers) clone the repo fresh and need spec/plan
# artifacts + binding rules to continue autonomous work across
# sessions. Local WIP .md files elsewhere in the repo remain gitignored.
!docs/superpowers/**/*.md
!docs/routines/**/*.md
CLAUDE.md
docs/
.claude
!.claude/**/*.md
# WHY: issue templates (.yml) and any future workflow docs live under
# .github/; the blanket **/*.md rule would otherwise exclude markdown
Expand All @@ -23,3 +29,11 @@ node_modules/
apps/desktop/dist/
apps/desktop/dist-types/
.codex
# WHY: Tauri externalBin sidecar binaries (ffmpeg + future helpers) are
# fetched at CI build time, named per-target-triple (e.g.
# `ffmpeg-x86_64-unknown-linux-gnu`), and can be 50-100 MB. Never commit
# them — they are platform-specific, large, and CI provisions them
# fresh each run. The `.gitkeep` is preserved so the directory exists
# at clone time (Tauri's externalBin resolver expects the path).
crates/desktop/binaries/*
!crates/desktop/binaries/.gitkeep
252 changes: 0 additions & 252 deletions CLAUDE.md

This file was deleted.

Loading
Loading