fix: make Home meeting reveal/delete robust to stale row paths#1134
Draft
r3dbars wants to merge 1 commit into
Draft
fix: make Home meeting reveal/delete robust to stale row paths#1134r3dbars wants to merge 1 commit into
r3dbars wants to merge 1 commit into
Conversation
The per-meeting overflow (⋯) menu's "Show transcript in Finder" and
"Show audio in Finder" actions called
NSWorkspace.activateFileViewerSelecting(_:) directly on the URLs captured
when the Home dashboard was last scanned. Those URLs go stale between scan
and click:
- the post-save restyle renames a meeting transcript (and its
audio/<stem>_audio/ bundle)
- retained audio is recompressed from WAV to M4A after save
activateFileViewerSelecting silently no-ops on a missing path, which is the
"Show … in Finder does nothing / works on one machine but not another"
report. "Delete meeting" had the same root cause: a stale path means the
deletion plan removes nothing, the row is optimistically hidden, then
reappears on refresh with no explanation.
Fix:
- Add HomeArtifactRevealResolver (Foundation-pure, unit-tested): reveal the
files that still exist; else stem-rematch in the same directory (catches
WAV→M4A); else fall back to the enclosing folder; else report
.unavailable so the caller surfaces an error instead of a dead click.
- Route the transcript, meeting-audio, and failed-meeting-audio reveal
actions through a shared revealMeetingArtifact(...) helper that presents a
failure alert when nothing can be revealed.
- deleteMeeting now surfaces a failure when it removed nothing while the
transcript is still on disk (stale path), instead of silently re-showing
the row.
Tests:
- HomeArtifactRevealResolverTests covers direct hit, partial existence,
WAV→M4A stem rematch, renamed-transcript directory fallback, and the two
unavailable cases.
- Source-contract guards in UIAutomationSurfaceContractTests and
RepoCommandContractTests pin the resilient wiring.
The greyed-out "Run AI summary" and "Re-transcribe with speaker ID" items
are disabled by design (gated on the local-summary beta provider being set
up / app-busy state and on retained split audio + no pending speaker
review); they are not broken. "Report issue" already works. No behavior
change to those.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 16, 2026
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.
Summary
Fixes the per-meeting overflow (⋯) menu on the Home dashboard. The reveal-in-Finder and delete actions failed in the field because the row holds the file URLs captured when the dashboard was last scanned, and background work moves those files afterwards:
audio/<stem>_audio/bundle)NSWorkspace.activateFileViewerSelecting(_:)silently no-ops on a missing path — that is the "Show … in Finder does nothing / works on one machine but not another" report. "Delete meeting" shared the root cause: a stale path means the deletion plan removes nothing, the row is optimistically hidden, then reappears on the next refresh with no explanation.Per-action findings
activateFileViewerSelecting([transcriptURL])silently no-ops when the transcript was renamed by the restyle after scan. Now resolved + falls back to the meetings folder + surfaces an error.HomeMeetingDeletionTests). Added: surface a failure when the delete removed nothing while the file is still on disk (stale path) instead of silently re-showing the row.localMeetingSummaryUnavailableReason != nil: app busy, or the local-summary beta provider isn't set up (Gemma needs uv + enough memory, or Apple on-device model unavailable). Whole item is also behind the beta opt-in.Fix
HomeArtifactRevealResolver(new, Foundation-pure, unit-tested): reveal files that still exist → else stem-rematch in the same directory (catches WAV→M4A) → else fall back to the enclosing folder → else.unavailable.revealMeetingArtifact(...)helper that presents a failure alert when nothing can be revealed.deleteMeetingsurfaces a failure on a no-op stale delete.Tests
HomeArtifactRevealResolverTests— direct hit, partial existence, WAV→M4A stem rematch, renamed-transcript directory fallback, both unavailable cases. (6 cases, passing.)UIAutomationSurfaceContractTestsandRepoCommandContractTestspin the resilient wiring.build.sh --no-open).Reveal and delete are real-app behaviors that tests alone cannot prove. On a running build, on a real meeting, a human should click:
.md(or its folder if renamed)..md,.summary.md, andaudio/<stem>_audio/are removed.Notes
com.apple.security.app-sandbox = false), so this was never a security-scoped-bookmark problem.🤖 Generated with Claude Code