···6677## [Unreleased]
8899+## [0.8.7] - 2026-07-15
1010+911### Added
10121111-- observer journals with old same-start duplicate segment ladders can now be pruned safely with a dry-run-first `journal observer prune` command.
1313+- older journals with repeated copies of the same segment can now preview and safely remove only proven duplicates, including copies filed under different start times.
12141315### Changed
14161515-- pdf import and pdf export now have separate extras: `pdf-import` adds the new pypdfium2 worker with no system packages, while `pdf-export` carries weasyprint and pango for newsletter and reflection downloads.
1616-- document import now reads each pdf page by page through the pypdfium2 worker, labels model-generated text clearly, and retires the legacy pypdf/pdf2image document-import path.
1717+- pdf imports now handle each page separately, keep extracted text distinct from model-assisted text, and preserve a page image anywhere a model helps.
1818+- dated journal views now use one in-page date control, with day, month, and year zoom plus week-by-week movement for reflections.
17191820### Fixed
19212020-- observer uploads now recognize already-held files from the segment folder itself, so retrying the same media no longer creates duplicate sibling segments or a 507 ladder; reported by Dave Smith.
2121-- days with image files may run through one extra catchup pass once, because image files now count in the raw-input fingerprint.
2222+- when sol sends the same moment again, your journal now reuses what it already has instead of creating extra copies.
2323+- text, markdown, and document imports that produce nothing now say so clearly and can be retried without a false "already imported" result.
2424+- private-network errors now stay contained, so one failed request no longer drops the whole link or forces repeat pairing.
22252326## [0.8.6] - 2026-07-14
2427
···99name = "solstone-journal-cuda"
1010description = "the journal with the NVIDIA CUDA transcription runtime — the memory sol keeps for you, on a computer you choose. Installs the journal service and includes sol."
1111readme = {text = "the journal with the NVIDIA CUDA transcription runtime — the memory sol keeps for you, on a computer you choose. Installs the journal service and includes sol.\n\n pip install solstone-journal-cuda\n\nSee https://github.com/solpbc/solstone-journal.", content-type = "text/markdown"}
1212-version = "0.8.6"
1212+version = "0.8.7"
1313requires-python = ">=3.12"
1414dependencies = [
1515- "solstone[journal-host]==0.8.6",
1515+ "solstone[journal-host]==0.8.7",
1616 # GPU ONNX runtime (NVIDIA / Linux x86_64): the GPU wheel supplies the
1717 # `onnxruntime` namespace (incl. CPU providers) for VAD, diarization, and
1818 # WeSpeaker. Never co-install with the CPU `solstone-journal` leaf — both own
···99name = "solstone-journal"
1010description = "the journal — the memory sol keeps for you, on a computer you choose. Installs the journal service and includes sol."
1111readme = {text = "the journal — the memory sol keeps for you, on a computer you choose. Installs the journal service and includes sol.\n\n pip install solstone-journal\n\nSee https://github.com/solpbc/solstone-journal.", content-type = "text/markdown"}
1212-version = "0.8.6"
1212+version = "0.8.7"
1313requires-python = ">=3.12"
1414dependencies = [
1515- "solstone[journal-host]==0.8.6",
1515+ "solstone[journal-host]==0.8.7",
1616 # CPU ONNX runtime: covers VAD, diarization, and the WeSpeaker embedder;
1717 # !=1.24.1 across the board (known-bad wheel).
1818 "onnxruntime>=1.20.0,!=1.24.1",