You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Closes out the v0.1.1 discovery overhaul. Cached repos that disappear
from disk now grey out instead of silently returning empty timelines,
and a one-click ✕ lets the user tombstone a row so it doesn't keep
showing up.
Backend:
* discovery_orchestrator::verify_existing_repos — runs at the head of
each pipeline pass. Walks all cached rows whose user_state isn't
'removed', flips status to 'missing' for paths that don't exist on
disk, restores 'active' (clears missing_since) for paths that came
back. Cheap: just is_dir() per row, no git2 here — full
re-validation happens via the regular tier flow when a candidate
comes through.
* discovery_orchestrator::hide_repo — sets user_state='removed' AND
inserts into discovery_tombstones so the next prewarm doesn't auto-
rediscover. Manual add (commit 5) already removes the tombstone, so
the user can always bring a hidden repo back.
* cache::list_repos filters out user_state='removed' (tombstoned) rows
and now returns the status column so the UI can grey out 'missing'.
* commands::hide_repo Tauri wrapper.
* New event `timeline://repo-status` { canonicalPath, status } emitted
on every transition (active → missing, missing → active, * → removed)
so the frontend can patch state without a full reload.
Frontend:
* `Repo.status: "active" | "missing" | "removed"` added to types.
* `hideRepo` in lib/ipc.ts.
* RepoChip:
- Missing rows render with 0.45 opacity name+path plus a small
"· missing" suffix tag.
- Pin star (★) is swapped for a hide button (✕) on missing rows —
can't pin something that isn't there.
- Tooltip on missing rows explains "moved or deleted on disk; drop
the new path to relink, or click ✕ to hide".
* App.tsx:
- Listens to timeline://repo-status; patches allRepos in place
(greys / restores / drops the row) and adjusts discoveredCount on
removal. No full re-list_repos() round-trip needed.
- onHide handler does an optimistic local remove, then calls
hideRepo; on backend failure, falls back to a fresh list_repos()
so the UI re-syncs with truth.
- onRepoDiscovered now stamps status: "active" on the inserted Repo
(matching the new type shape).
CSS:
- .chip-item-row.missing greys name + path.
- .chip-item-missing-tag in muted red.
- .chip-hide as the per-row hide button (transparent until hover).
- Dark-mode pairs for all three.
Rust tests 34/34. TS type-check clean. Completes the v0.1.1
discovery + drop/paste + lifecycle arc end-to-end — ready to tag.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments