feat(explorer): v0.8.7–v0.8.9 — workspace frame, command palette, live workspace - #60
Merged
Conversation
Implements rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.md. Scopes the Explorer visual overhaul: one persistent workspace frame (app bar, titled rounded panels, key-chip status line), a type-tagged navigation sidebar, an always-visible command bar, a tabbed artifact context that renders the document's Markdown, and the rac-lantern default theme derived from the mascot palette. Rewrites the explorer-visual-system design with the canonical frame, depth model, spacing, accent, focus, theme, and content rules; updates the command-surface design for the persistent bar.
Implements rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.md. Collapses the per-view screen stack into one MainScreen: app bar, type-tagged navigation sidebar (lazy Tree over the loaded model), a tabbed artifact context (Content renders the document's Markdown, read-only per ADR-024; Inspection, Links, and Findings absorb the old context, relationship, and per-artifact finding views), an always-visible command bar, and a key-chip status line. Views swap inside the context region via ContentSwitcher with history-backed Esc; the screen stack survives only for the confirm-write modal. Ships the rac-lantern theme (lantern amber on near-black, from the mascot palette) as the curated default — the theme preference still selects any Textual theme — and moves styling to a packaged TCSS stylesheet. The adapter gains one additive artifact_markdown accessor (ADR-015 boundary preserved); adapter routing, state, and the command registry are otherwise unchanged. The retired screens are deleted (clean break, ADR-023).
… bar [roadmap:v0.8.7] Implements rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.md. Reworks the headless app battery from screen-type assertions to view-presence on the persistent frame, keeping key sequences as the behaviour contract. New coverage: frame persistence across navigation, focus routing (slash from anywhere, Esc restoration, typed q/slash inside the bar), sidebar type tags, lazy groups, reveal sync and flat grouping, the tabbed context (Markdown content by default, Links traversal with history-backed Esc, text-bearing tab labels), results rendering in the context region, status-line chips per focused panel, the rac-lantern default theme and its preference override, the narrow-terminal sidebar, the packaged stylesheet, and tree scale at 1200 artifacts.
…map:v0.8.7] Implements rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.md. Updates the explorer section of docs/cli.md for the persistent frame: sidebar with type tags, the tabbed artifact context with rendered Markdown, the always-visible command bar, the new Esc/Tab focus model, and the rac-lantern default theme.
Implements rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.md.
Implements rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.md. The Content tab now renders the Markdown body only, splitting the leading YAML frontmatter with Core's parser. Identity metadata already lives in the panel title, the sidebar type tag, and the Inspection tab, so repeating it above the document was noise against the content-focus rule.
…dmap:v0.8.7] Implements rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.md. The sole screen-stack surface becomes a true modal: a titled rounded panel (accent border, 'Write <target>') centred over the dimmed frame, with a scrollable preview and the same inverse-video key chips the status line uses (extracted as a shared key_chips helper). The preview renderer drops its embedded heading and key-hint lines — hints now live in the chips and status line, never in panel text. Write semantics are unchanged: y confirms, never overwrites; Esc cancels (ADR-024).
Implements rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md. Scopes the follow-up milestone: the persistent command bar gives way to a summoned palette (input on top, navigable live suggestions below), settings become interactive with a default-editor preference and terminal-editor suspend, the mascot gains frame-sequence animation, the Content tab becomes scrollable with navigable artifact links, and a refinement pass lands (sidebar titles + validity markers, no Esc dead-ends, hint/border de-dup, calm states, identity details). Updates the command-surface, visual-system, editor-integration, and mascot-animation designs accordingly and marks the deferred editor follow-up as landing.
Implements rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md. The persistent command bar gives way to a summoned palette floating over the context region: an input on top and a live, navigable menu below it. Empty input lists the command registry; a command prefix filters it; any other text shows quick-open artifact matches plus a 'search all results' row. Up/down drive the menu while typing stays in the input; Enter completes argument-taking commands, runs argless ones, opens a highlighted match, or routes bare text as before; Esc dismisses and restores the previous focus. The idle frame carries no input chrome — the status line's / chip advertises the palette. Routing and the registry are unchanged; the command bar widget is deleted (clean break, ADR-023).
…oadmap:v0.8.8] Implements rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md. /settings (with 'preferences' kept as a routing alias) opens an interactive view that edits Explorer's own configuration in place: theme cycles the registered Textual themes with live preview, mascot and animations toggle, artifact grouping flips between type and flat (the sidebar follows immediately), and a new editor preference takes a typed command. Editor resolution becomes preference, then $VISUAL, then $EDITOR; terminal editors (vi, vim, nvim, emacs, nano, helix, micro) run in the foreground with the application suspended and resumed, falling back to guidance where the session cannot suspend. Explorer writes explorer.json only — never artifacts (ADR-024). Lands the deferred editor follow-up from the v0.8.x series.
Implements rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md. Each mascot state becomes a sequence of equal-width frames cycled on a slow timer by the home view, which now owns the mascot in its own widget above the summary panel. The searching sequence plays while the repository loads; welcome keeps discovery, empty repositories keep the empty state, and everything else hides the mascot. Frames only advance while the mascot is visible and animations are enabled; with animations off the first frame holds, and every figure still carries its text label (ADR-028). Artwork is data: future frames replace the FRAMES strings and nothing else.
…roadmap:v0.8.8] Implements rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md. Reading becomes first-class: the Content pane takes the keyboard on open and scrolls with j/k alongside the stock keys, the reading position resets per artifact, left/right switch tabs from anywhere in the context view, and the Markdown column is capped near 96 cells for readability. Artifact references inside the rendered document are walkable hypertext — activation resolves through the adapter (IDs, aliases, relative paths, then the file stem) and navigates with the same Esc-backed history as any open; unresolvable links report instead of failing. Links and Findings tabs carry count badges.
Implements rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md. Sidebar: rows lead with the human title (the opaque ID lives in the context panel and Inspection tab), invalid artifacts carry the ✗ marker beside the type tag, group counts align, expansion and cursor survive reloads, and e opens the highlighted artifact in the editor. Esc never dead-ends — with no history it returns home — and resume now restores the last view (health, recommendations) as well as the last artifact. Chip casing is one style everywhere (✓ Valid / ✗ Error / ! Warning); panel-text key hints and inner border titles the chips and region border already carry are gone; the results panel states its count and zero matches show the mascot's calm empty state; ? opens help. The app bar trims local-build version suffixes and contracts home paths to ~; the welcome and loading states compose centred; scrollbars go quiet — the accent never rides a scrollbar.
…dmap:v0.8.8] Implements rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md. Updates the explorer section of docs/cli.md for the summoned palette (live suggestions, completion, quick-open), interactive /settings with the editor preference and terminal-editor suspend, the reading flow (scrollable Content tab, navigable in-document references, tab badges), the refreshed sidebar, and the new Esc/? keys. The README gains a hero screenshot of the Explorer over RAC's own corpus.
Implements rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md.
Implements rac/roadmaps/v0.8.x-explorer/v0.8.9-explorer-live-workspace.md. Scopes: - live repository reload via stdlib mtime watching - validation drill-down on the Inspection tab - improvement suggestions on the Findings tab - schema command, palette recents, filterable results Defers /new (ADR-024 review) and the stats view to later items.
…0.8.9] Implements rac/roadmaps/v0.8.x-explorer/v0.8.9-explorer-live-workspace.md (Initiative 1). A 2-second interval compares a cheap path/mtime fingerprint (the same find_markdown_files discovery the loader uses, no parsing) against the last load's baseline and reloads on change, preserving the open artifact, its tab and scroll position, and the sidebar. The watcher never runs before the first successful load or after a load error, pauses while a terminal editor owns the screen, and rescans the moment it returns. An open artifact that disappears falls back home. Manual reload now also refreshes the visible view in place.
…v0.8.9] Implements rac/roadmaps/v0.8.x-explorer/v0.8.9-explorer-live-workspace.md (Initiative 2). A health attention item now opens its artifact on the Inspection tab, where the validation diagnostics already explain the problem; a recommendation opens on the artifact's Findings tab. The Inspection tab carries a diagnostics count badge alongside the Links and Findings badges, so an invalid artifact announces its reason before the tab is visited.
…v0.8.9] Implements rac/roadmaps/v0.8.x-explorer/v0.8.9-explorer-live-workspace.md (Initiative 3). Opening an artifact whose type the improve service supports adds an Improvement group to its Findings tab: one row per missing section, the schema's first guidance question as the action, and the Findings badge counting them with the review findings. Analysis runs on artifact open only — never during the repository load — and the Explorer renders suggestions without ever applying them (ADR-024).
Implements rac/roadmaps/v0.8.x-explorer/v0.8.9-explorer-live-workspace.md (Initiative 4). Adds three palette and results refinements: - /schema [type] — bare lists every registered artifact type with a structure summary; with a type it renders the expected sections from the core schema registry (ADR-015), so the 'what does a decision need' question never leaves the Explorer. - Recent artifacts — the workspace records the last eight artifacts opened per repository (additive JSON; older state files load unchanged), and the palette offers them above the command registry before a character is typed; Enter reopens one. - Filterable results — artifact results gain a type filter cycled with f (all → each type present → all), presentation state only over rows the search already returned, with a count line and a status-line chip.
…dmap:v0.8.9] Implements rac/roadmaps/v0.8.x-explorer/v0.8.9-explorer-live-workspace.md (documentation). Updates the explorer CLI reference for live reload, the validation drill-down, improvement suggestions, /schema, palette recents, and the results type filter; extends the command-surface, health-model, recommendations, and editor-integrations design artifacts to match.
…:v0.8.9] Annotates the parameters mypy flagged (schema reference, palette row, editor launcher widget, lookup state) and corrects the view-history annotation to the (view, path) tuples it has stored since v0.8.7. No behaviour change; CI lint gate is the driver.
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
Implements
rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.md,rac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.md, andrac/roadmaps/v0.8.x-explorer/v0.8.9-explorer-live-workspace.md. The branch carries three unmerged releases: v0.8.7 is the workspace frame, v0.8.8 the command surface and reading flow built on it, and v0.8.9 makes the workspace live — the Explorer follows the filesystem and invalid artifacts explain themselves in place.Adds:
Escunwinds history (v0.8.7)/— empty input lists the registry, a prefix filters and completes commands, other text quick-opens artifacts (v0.8.8)/settingseditingexplorer.jsonin place: theme with live preview, mascot, animations, grouping, and a neweditorpreference with terminal-editor suspend/resume (v0.8.8)rac improveon the Findings tab — one row per missing section with the schema's guidance question; rendered, never applied (v0.8.9)/schema [type], recent artifacts in the palette's empty state, and anf-cycled type filter on artifact results (v0.8.9)rac-lanterntheme as default; tests, fixtures, docs, and changelog for all three releasesRoadmap / ADR Trace
Roadmap:
rac/roadmaps/v0.8.x-explorer/v0.8.7-explorer-visual-overhaul.mdrac/roadmaps/v0.8.x-explorer/v0.8.8-explorer-command-palette.mdrac/roadmaps/v0.8.x-explorer/v0.8.9-explorer-live-workspace.mdRelevant ADRs:
rac/decisions/adr-015-explorer-as-consumer.md— every v0.8.9 surface consumes an existing Core service (validate,improve,core.schema,core.fs); the adapter remains the only boundary and no Core or service module changedrac/decisions/adr-023-clean-break-internal-refactors.md—widgets/commandbar.pydeleted, not shimmedrac/decisions/adr-024-rac-not-content-store.md— Explorer writes onlyexplorer.json; improvement suggestions are rendered, never appliedrac/decisions/adr-028-explorer-surface.md— every state keeps a text label under any paletteScope
Included
✗validity markers, expansion/cursor preserved across reloads,eopens in editorsave_preferences; editor resolution order is preference →$VISUAL→$EDITOR; known terminal editors run underApp.suspend()j/k/PgUp/PgDn scrolling, link resolution viaadapter.open_refwith unresolvable-link reportingralso refreshes the visible view in place now/schema, results type filter — the full v0.8.9 contractExcluded
/new) — deferred pending an ADR-024 write-boundary reviewwatchfiles, inotify) — the stdlib mtime scan is the pinned design point for repositories of this corpus's scaleProduct / Architecture Decisions
MainScreenwidget on a CSS layer (display: nonewhen idle), not a pushed screen — the screen stack still carries only the confirm-write modal/reclaims two content rowsfind_markdown_files— the loader's own discovery — so watch and load can never disagree about which files count; the baseline is snapshotted before each load, so a save landing mid-load is caught by the next tick and convergeslaunch_editorcalls duck-typedpause_watching/resume_watchingscreen hooks aroundApp.suspend()(aMainScreenimport there would be circular)Preferences.editordefaults to the empty string andWorkspace.recent_artifactsis an additive JSON key, so existing config and state files load unchangedUser-Facing Contract
CLI
No CLI command surface changes. Entry point remains:
Human Output (Explorer)
/summons the palette (recents above the registry when history exists);Escdismisses;?opens help/settings(aliaspreferences) edits theme, mascot, animations, grouping, editor in place/schemalists artifact types;/schema decision(any registered type) renders required/recommended/optional sections with descriptions and metadata valuesfcycles the type filter on artifact results (status-line chip added)✓ Valid,! Warning,✗ Error; default theme israc-lanternJSON Output
No JSON contract movement.
explorer.jsongains the additiveeditorfield;explorer-workspace.jsongains the additiverecent_artifactsmap (per repository, newest first, capped at 8). Files written by earlier versions load unchanged.Exit Codes
Unchanged.
Verification
Ran
tests/test_ingest.pywas excluded only in the development container, where a pre-existingcryptographywheel incompatibility breaks docx ingestion imports; the exclusion is unrelated to this diff.Covered
/schemaoverview and detail, unknown-type message; palette recents appear and Enter reopens;fcycles all → type → type → all with a live count line; registry contract re-pinned for v0.8.9Review Path
src/rac/explorer/screens/main.py— the watcher (tick → scan worker → debounced reload → in-place view refresh) and command routingsrc/rac/explorer/adapter.py—fingerprint,improvement_rows,schema_overview/schema_detail,recent_rowssrc/rac/explorer/widgets/views.py— drill-down landing tabs, Inspection badge, the filterableResultsView, watcher pause hooks inlaunch_editorsrc/rac/explorer/widgets/palette.pyandworkspace.py— recentstests/test_explorer_app.py(watcher, drill-down, command-surface sections) andtests/test_explorer_adapter.py/test_explorer_workspace.pydocs/cli.md, the four design artifacts,CHANGELOG.md, and the three roadmap contractsNotes For Reviewer
tests/test_explorer_app.pyis the single battery absorbing all three releases; the v0.8.9 sections are at the end of the filerepository-loadworker, so manualr, watch-triggered reloads, and load-error recovery share one code pathFRAMESdata and nothing elseImplementation Process
Implemented with AI assistance under the roadmap contracts. Final scope, review, and acceptance decisions were made by the maintainer.