feat(explorer): hide erased + breadcrumb trail + auto-refresh (Carl explorer improvements)#175
Merged
Merged
Conversation
The Wissensbasis/CRM explorer listed tombstoned instances (members erased on user request) indistinguishably from live ones. Erasure is signalled by `status: erased` (members) / `status: revoked` (consent) in frontmatter — exactly what Carl's erase_member writes, keeping required keys so the page still parses. - InstanceSummary.erased + shared isErasedFrontmatter() (models.dart). - showErasedProvider (default false) + allInstancesRawProvider/allInstancesProvider split so the filter is a pure view filter (no refetch on toggle). The breadcrumb count + auto-focus now skip tombstones too. - Instances directory: a 'Gelöschte anzeigen' toggle; erased rows render struck-through/dimmed with a 'gelöscht' marker when revealed. No-mock widget + provider tests over a FixtureEscurelClient corpus (one live + one erased member): hidden by default, revealed + marked when toggled. Full kit suite green (89), analyze clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The top breadcrumb showed only the currently-focused entity, so the navigation history (already tracked in navBackStackProvider for the instance-pane Back button) was invisible. Now render the back-stack as clickable ancestor crumbs — `A › B › current` — scrollable so a deep trail never overflows the title row. - navigateToDepth(ref, index): focus stack[index], truncate history before it (preserves the trail left of the click, drops everything right). - CrmBreadcrumb: ancestors as _TrailCrumb (semantics 'crumb:<slug>'), the focused entity stays the final 'focused-entity' crumb. Complements (doesn't replace) the existing Back button. No-mock widget test: nav a→b→c renders crumb:a, crumb:b, focused-entity; tapping crumb:a refocuses a and empties the stack. Full kit suite green (90), analyze clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Read views were pull-once FutureProviders, so the knowledge base went stale until a manual reload. Add an AutoRefresher that invalidates the read providers on a timer (default ON, 15s) — watched views re-fetch, idle ones stay lazy. An operator toggle (sync icon in the breadcrumb) pauses/resumes; interval is configurable via autoRefreshIntervalProvider. This is the pragmatic v1; an event-driven path over Escurel's existing /ws (the client's awareness() stream) can replace the poll later without changing the provider seam. - auto_refresh.dart: autoRefreshEnabledProvider/IntervalProvider, refreshExplorerData(), AutoRefresher widget (re-arms on toggle/interval change, cancels on dispose). - Wired into CrmWorkspace; toggle in CrmBreadcrumb actions. No-mock widget test drives the fake clock with explicit pumps (never pumpAndSettle — a periodic timer never settles): one interval re-resolves a watched provider; disabling stops it. Full kit suite green (91), analyze clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… clean) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
Operator-requested improvements to the Carl/Wissensbasis knowledge-base explorer (
packages/escurel_explorer_kit). Consumed by Carl viavendor/escurel; one re-pin + dz-carl redeploy ships all of it. No-mock widget/provider tests throughout (FixtureEscurelClient); full kit suite 91 green,flutter analyzeclean.1 — Hide erased instances (default hidden, toggle to reveal)
Tombstones (members erased via
/delete-my-data) were listed like live records. Keyed on the real signal Carl writes (status: erased/status: revoked).InstanceSummary.erased;showErasedProvider(default false) + a raw/filtered provider split (toggle doesn't refetch); breadcrumb count + auto-focus skip tombstones; a "Gelöschte anzeigen" toggle reveals them struck-through.2 — Breadcrumb history trail + back
The back-stack + Back button already existed; the history was just invisible. The breadcrumb now renders the nav stack as clickable crumbs
A › B › current(scrollable), each jumping to that depth (navigateToDepth).3 — Auto-refresh (no manual F5)
Read views were pull-once providers.
AutoRefresherinvalidates them on a timer (default on, 15s) so the KB stays current; a sync-icon toggle in the breadcrumb pauses/resumes; interval configurable. Pragmatic polling v1 — an event-driven path over Escurel's existing/ws(awareness()) can replace it later behind the same seam.Resizable left pane (already present)
The kit already has a draggable divider (
_DragDivider+leftPaneFractionProvider, clamps 20–75%) — it ships the moment dz-carl is rebuilt from current main. Optional follow-up: persist the width across reloads (resets to 42% today) — not yet included (would add ashared_preferencesdep).🤖 Generated with Claude Code