What's New
Bulk Unshare: Retry, Verification & Neo4j Cleanup
- Retry logic — Automatic retry on Graph API 429 (throttling) with
Retry-Aftersupport and 5xx exponential backoff (max 4 retries) - Post-delete verification — Re-fetches permissions after deletion to confirm they were actually removed
- Neo4j cleanup — Removes
SHARED_WITHrelationships on verified success so files disappear on page refresh - Inter-file throttle delay — 0.5s delay between files to avoid triggering rate limits
Structured Error Reasons & Result Dialog
- 5 error categories —
ACCESS_DENIED,NOT_FOUND,THROTTLED,VERIFICATION_FAILED,UNKNOWN— each with a user-facing message and suggested action - Result dialog — Replaces the auto-hiding toast with a persistent dialog showing per-file outcomes:
- Color-coded reason chips (red for Access Denied, orange for Rate Limited, blue for Not Found)
- File paths resolved from cache
- Suggested actions for each failure
- "Retry Failed" button for throttled files
Files Changed
Backend
src/shared/neo4j_client.py— newremove_shared_with()methodsrc/webapp/graph_unshare.py—_request_with_retry(),_classify_error(), verification step, structured errorssrc/webapp/routes_unshare.py— wired Neo4j client fromapp.state
Frontend
frontend/src/api/types.ts—UnshareFailure/UnshareReasontypesfrontend/src/components/UnshareResultDialog.tsx— new componentfrontend/src/components/UnshareButton.tsx— replaced toast with result dialog
Full Changelog: v0.5.3...v0.6.0