v0.15.0: sync pushes user attachments verbatim - #28
Merged
Conversation
session/attachments/* -> meeting folder attachments/, names intact, bypassing PUSH_SUFFIXES and the suffix-keyed rename map (slides.pdf became transcript.pdf; images/office/video were dropped). Copy loop mkdirs dest.parent. Symlinks, dotfiles, subdirs skipped; count and byte caps. Upstream half of vezir's attachment workflow. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
pretyflaco
approved these changes
Aug 15, 2026
pretyflaco
approved these changes
Aug 15, 2026
pretyflaco
left a comment
Owner
There was a problem hiding this comment.
Approved — squash-merging.
Clean design: _collect_attachments() bypasses the rename map instead of hacking suffixes into the allowlist, is_symlink() checked before is_file(), count+byte caps, version bumped in both pyproject.toml and __init__.py. Tests cover it.
One scope note (no change requested): "nothing more needed on vezir" is true for the sync→git leg only — the scribe folder, pre-upload prompt, upload, and TUI display from #16 are still open.
Thanks k9ert, great contribution.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Files a user drops next to a meeting — slides, agendas, screenshots — have nowhere to go today.
_collect_files()is allowlist-based and renames by suffix, so putting them where sync looks would:slides.pdftotranscript.pdf(or force the real transcript to keep its raw name), and.png,.jpg,.pptx,.docxand video — most of what people actually attach.This is the upstream half of vezir's attachment-folder workflow: vezir stores attachments in the session directory it already hands to
millet sync, so with this change nothing more is needed on that side to get them into the team repo.What
_collect_attachments()collects<session>/attachments/*asattachments/<name>, bypassing bothPUSH_SUFFIXESand the descriptive-rename map — attachment names are the user's and survive verbatim.sync_session()'s copy loop now doesdest.parent.mkdir(parents=True, exist_ok=True)so the subdirectory prefix works.git addneeded no change.MAX_ATTACHMENTS(50) andMAX_ATTACHMENTS_BYTES(100 MB) caps.attachments/dir collect exactly what they did before.Tests
6 new tests in
tests/test_sync_core.py: verbatim names / allowlist bypass, symlink+dotfile+subdir skipping, unchanged behavior without the dir, both caps, and an end-to-endsync_sessionpush assertingattachments/slides.pdfarrives intact and notranscript.pdfappears.tests/test_sync_core.py33 passed. Full suite 405 passed; the 3test_transcribe.pyfailures are pre-existing onmainin this environment (torch/whisperx version mismatch), unrelated to this change.🤖 Generated with Claude Code