Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
0f8ec15
feat(db): add hlc columns to CRDT-eligible rows (V009)
utof Apr 21, 2026
df0f834
feat(db): reserve shared_doc table for post-v1 CRDT (V010)
utof Apr 21, 2026
414fe10
feat(core): add Hlc hybrid logical clock helper
utof Apr 21, 2026
c8b39d1
fix(core): correct Hlc pack layout to preserve Ord invariant
utof Apr 21, 2026
4c03634
feat(app): scaffold crates/app workspace member
utof Apr 21, 2026
6017581
feat(app): extract ScanUseCase from shell orchestration
utof Apr 21, 2026
43538c0
feat(app): extract SearchUseCase from shell orchestration
utof Apr 21, 2026
7bcc711
feat(app): extract TagUseCase from shell orchestration
utof Apr 21, 2026
f40578c
feat(app): extract VolumeUseCase from shell orchestration
utof Apr 21, 2026
c1c583c
feat(app): extract MetadataUseCase from shell orchestration
utof Apr 21, 2026
0a3c084
feat(app): add AppContainer + hoist CompositeEventBus (#69)
utof Apr 21, 2026
82dbbab
refactor(cli): delegate command handlers to AppContainer UseCases
utof Apr 21, 2026
c249ffc
refactor(cli): route watch.rs through AppContainer.events (fixes #69 …
utof Apr 21, 2026
8d71815
refactor(desktop): delegate Tauri commands to AppContainer UseCases
utof Apr 21, 2026
31332b7
refactor(app,cli,desktop): hoist LogEventHandler to crates/app::telem…
utof Apr 21, 2026
6f74e30
feat(db): scaffold SqliteWriter actor + r2d2 read pool (Batch C Task 1)
utof Apr 21, 2026
8ba3f04
refactor(db,app,cli,desktop): migrate VolumeRepository to writer acto…
utof Apr 21, 2026
52c75b6
chore(typos): exclude docs/superpowers/ from typos scan
utof Apr 22, 2026
178184e
refactor(db,app,cli,desktop): migrate TagRepository to writer actor +…
utof Apr 22, 2026
736b319
refactor(db,app,cli,desktop): migrate MetadataRepository to writer ac…
utof Apr 22, 2026
b32a7e4
refactor(db,app,cli,desktop): migrate FileRepository to writer actor …
utof Apr 22, 2026
9c9c66c
chore(db): fix doc drift + tighten concurrent test (Task 5 nits)
utof Apr 22, 2026
532ac2a
refactor(db,app,cli,desktop): migrate SearchRepository to writer acto…
utof Apr 22, 2026
20e9dfe
chore(test): add nextest slow-timeout config
utof Apr 22, 2026
3ff4c45
refactor(db,app,cli,desktop): wire SqliteWriter + ReadPool through Ap…
utof Apr 22, 2026
25296b1
docs: fix doc-drift residuals from Batch C Task 7
utof Apr 22, 2026
d097134
chore(core): add optional specta dep behind feature flag
utof Apr 22, 2026
b606e0e
feat(core): make CoreError serializable + clonable + IPC-discriminated
utof Apr 22, 2026
62b970f
fix(core,desktop): finish E2 CoreError::Io callsite migration + tight…
utof Apr 22, 2026
868baa8
feat(core): derive Serialize + cfg_attr specta::Type on 6 IPC types
utof Apr 22, 2026
f56b1ed
feat(core): derive Serialize + cfg_attr specta::Type on 4 IPC types
utof Apr 22, 2026
fda2246
chore(desktop): enable perima-core/specta + add specta-export feature
utof Apr 22, 2026
e3bfdc7
test(desktop): add tauri-specta bindings export sanity test
utof Apr 22, 2026
bc59690
refactor(desktop): gate bindings.ts export on specta-export feature
utof Apr 22, 2026
84640f6
refactor(desktop): flip 13 Tauri handlers to Result<T, CoreError>; de…
utof Apr 22, 2026
64fca5b
refactor(desktop): tighten E8 review nits — typed Io propagation + UU…
utof Apr 22, 2026
83f3dec
refactor(app): flip api.ts to ResultAsync<T, CoreError> + parseCoreError
utof Apr 22, 2026
67d0df4
docs(app): clarify api.test.ts kind-count title (7 string + 1 Io)
utof Apr 22, 2026
8f195d2
refactor(app): delete hand-mirror types.ts; bindings.ts is the single…
utof Apr 22, 2026
1ef689a
feat(app): StatusBar pattern-matches CoreError.kind discriminated union
utof Apr 22, 2026
ca722b6
ci(desktop): add bindings.ts drift check + just bindings recipe
utof Apr 22, 2026
ce142e8
chore(workspace,app): add async-broadcast + async-trait + futures deps
utof Apr 22, 2026
252eb8f
feat(core): introduce AppEvent + InvalidationReason; flip EventBus::e…
utof Apr 22, 2026
b00d1ad
fix(core,desktop): InvalidationReason flat serde shape + 4 missed Noo…
utof Apr 22, 2026
e7787da
fix(desktop,core): 2 more missed NoopBus signature flips + drop broke…
utof Apr 22, 2026
c55794a
feat(app): add Bus struct backed by async-broadcast 0.7.2
utof Apr 22, 2026
4e862af
fix(app): correct Bus backpressure-mode docs + drop broken intra-doc …
utof Apr 23, 2026
45efad2
feat(app): add EventHandler trait + recv_loop helper
utof Apr 23, 2026
2f9f077
refactor(app): add EventHandler impl on LogEventHandler (alongside Ev…
utof Apr 23, 2026
66a72cb
refactor(app): rewrite AppContainer::new with Bus + EventHandler spaw…
utof Apr 23, 2026
197fa30
fix(app): drop pub(crate) recv_loop intra-doc links + clean stale Bat…
utof Apr 23, 2026
04bfcad
refactor(db): consolidate 9 NoopBus copies into shared test_utils module
utof Apr 23, 2026
e82be39
feat(db): writer emits AppEvent::IndexInvalidated post-COMMIT per Wri…
utof Apr 23, 2026
ccefce9
feat(app): ScanUseCase emits ScanCompleted on successful scan
utof Apr 23, 2026
a414c16
refactor(cli): refactor DbEventHandler to async EventHandler + wire t…
utof Apr 23, 2026
7291631
docs(cli): repair Batch-E doc drift (CompositeEventBus → Bus)
utof Apr 23, 2026
0a3b0ed
refactor(desktop): refactor handlers to async EventHandler + rename T…
utof Apr 23, 2026
268a83e
docs(desktop): update post-Batch-E vocabulary in NoopBus WHY-comment
utof Apr 23, 2026
518ed69
refactor(app): subscribeToAppEvents + App.tsx kind-switch + AppEvent …
utof Apr 23, 2026
5fa25ab
fix(app): correct IndexInvalidated TS shape + clean up rename doc-drift
utof Apr 23, 2026
59b9151
docs(app): wire Bus rustdoc to ring-buffer deferral GH issue #129
utof Apr 23, 2026
74e3865
fix(desktop): switch Arc::clone(&_) → .clone() on coercion sites
utof Apr 23, 2026
d8e1561
fix(desktop): clear 11 latent clippy errors blocking CI
utof Apr 23, 2026
0f1db29
fix(desktop): scope bindings_compile assertions to command-graph types
utof Apr 23, 2026
04ecb43
fix(test): adopt cargo-nextest; ban cargo test in committed automation
utof Apr 23, 2026
466a41a
ci: install cargo-nextest on the 3-OS matrix runners
utof Apr 23, 2026
7db4266
chore(test): bump nextest slow-timeout for perima-desktop crate
utof Apr 23, 2026
74c228a
test(desktop): ignore 3 _inner tests deadlocking via SQLite #131
utof Apr 23, 2026
7e7c093
fix(desktop): backtick SQLite in test doc comments (clippy::doc_markd…
utof Apr 23, 2026
56fd5ce
test(desktop): ignore 4 more deadlocking _inner integration tests
utof Apr 23, 2026
548f06f
fix(scripts): make no-cargo-test.sh executable on CI runners
utof Apr 23, 2026
e53cb65
test(db): retry FTS5 proptests up to 2x on intermittent SQLite race
utof Apr 23, 2026
8c74f39
test(db): broaden retry override to all perima-db tests
utof Apr 23, 2026
8dc4156
fix(deps): bump rusqlite 0.38 → 0.39 to escape SQLite 3.51.1 deadlock
utof Apr 23, 2026
3fec391
chore(deny): allow refinery PR fork as git source
utof Apr 23, 2026
b603b1e
test: scope SQLite-deadlock workarounds to the still-affected surface
utof Apr 23, 2026
4bc301b
fix(desktop): drop all sender clones before writer.join() in scan _inner
utof Apr 23, 2026
4680561
fix(desktop): drop on_persist no-op clippy lint (closure is Copy)
utof Apr 23, 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
12 changes: 12 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# cargo-nextest configuration
# https://nexte.st/docs/configuration/

[profile.default]
# Flag a test as "slow" after 40s and terminate after two slow periods
# (80s total per test). Rationale: the slowest clean test in any crate
# is ~14s (fts proptest in perima-db). Past 40s is a sign of lock
# contention or deadlock, not legitimate compute. nextest 0.9.133 lacks
# a CLI `--slow-timeout` flag, but honors this config key — keeps
# `timeout NNN cargo nextest ...` wrappers from killing the whole suite
# on a single hang.
slow-timeout = { period = "40s", terminate-after = 2 }
46 changes: 42 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,17 @@ jobs:

- uses: taiki-e/install-action@just

# WHY: `just ci` runs `cargo deny check` and `typos`. Both are
# external binaries — neither ships with the Rust toolchain. Using
# taiki-e/install-action fetches prebuilt binaries (seconds) rather
# than `cargo install` (minutes), which matters on the 3-OS matrix.
# WHY: `just ci` runs `cargo deny check`, `typos`, and
# `cargo nextest run`. All three are external binaries — none ship
# with the Rust toolchain. Using taiki-e/install-action fetches
# prebuilt binaries (seconds) rather than `cargo install` (minutes),
# which matters on the 3-OS matrix. Nextest swap landed in commit
# adopting `cargo nextest run` workspace-wide (closes #121) — the
# SQLite lock-order inversion that `cargo test` reproduces ~20% is
# documented in CLAUDE.md + GH #131.
- uses: taiki-e/install-action@cargo-deny
- uses: taiki-e/install-action@typos
- uses: taiki-e/install-action@cargo-nextest

- uses: actions/setup-node@v4
with:
Expand All @@ -61,3 +66,36 @@ jobs:
- name: Run just ci
shell: bash
run: just ci

bindings-drift:
name: bindings.ts drift check
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2

- uses: taiki-e/install-action@just

# WHY: same Tauri Linux deps as the matrix job's Linux branch —
# tauri-build links against GTK3 + WebKit2GTK on Linux.
- name: Install Tauri Linux deps
run: |
sudo apt-get update -q
sudo apt-get install -yq \
libgtk-3-dev \
libwebkit2gtk-4.1-dev \
libappindicator3-dev \
librsvg2-dev \
patchelf

# 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,
# a specta-derived type, or a CoreError variant that wasn't paired
# with a bindings.ts commit.
- name: Bindings drift check
run: just bindings
186 changes: 171 additions & 15 deletions CLAUDE.md

Large diffs are not rendered by default.

Loading
Loading