graph: the MINIMAL home — the no-graph home, take two (release polish 2.2)

The chains-as-home experiment is retired (owner, 2026-10-06): dragging
the table out of its overlay home caused every mess we saw — checkboxes
by default, the bar/pill collision, the clearance band. The eventual
plan is the DATA VIEW as home; until that is designed and built, the
rendering-off home is deliberately minimal:

- The SAME composer blob home already floats — teach/practice switcher
  and pick pill untouched.
- The graph chrome's survivors in the graph view's OWN places: the
  top-right column — actions row (Chains + Import, the same 36px band
  pills) with the cost pill BELOW it. Import always renders (the
  entry-point law). No node search, no render gear (canvas things).
- A quiet centered summary (KnowledgeSummary, a pure body — pinned by
  the render suite): propositions · chains, teaching · practice session
  counts, the imported-sources list as truncated muted rows; the empty
  knowledge base says so and names the import entry point. Biased up
  off the composer (pb-40), pointer-events-none.
- NO recent sessions (the sidebar owns that, owner ruling).

The chain table returns to overlay-only duty: ChainTableBody's
onClose-optional and topBarExtra experiment hooks are reverted, and
components/chains-home.tsx is deleted. MinimalHome renders the STANDARD
ChainTableOverlay behind its Chains button — the pick flow mirrors
GraphView's contract verbatim (chainSelectOpen raises the overlay in
select mode; Done reports the lifted pick set down).

Smoke-verified live, twice: the summary shows real counts (262 props ·
160 chains, 195 teaching · 17 practice, 4 source paths); overlay
open/close via button + X; pick flow — cluster check → bar "23 nodes →
17 chains · Clear · Done" → uncheck 2 props → Done → chip "21
propositions selected"; practice session starts from the composer;
settings restore returns the canvas home. (First run's "select mode
missing" was a tester artifact: the bar is selection-gated and prop
checkboxes render only when expanded — both confirmed working.)

1417 tests (new KnowledgeSummary pins); tsc, lint, build green.
This commit is contained in:
amosblomqvist
2026-10-06 09:47:26 +03:00
parent 83103062f5
commit 0cc108615b
6 changed files with 302 additions and 289 deletions
+4 -20
View File
@@ -114,7 +114,6 @@ export function ChainTableBody({
onClear,
onDelete,
onClose,
topBarExtra,
selectMode,
onSelect,
}: {
@@ -137,15 +136,7 @@ export function ChainTableBody({
onClear: () => void;
/** Opens the full-death confirm dialog (owner, 2026-09-29 night). */
onDelete: () => void;
/** Dismisses the overlay (top-bar X). ABSENT = the HOME variant
* (graph rendering off, owner 2026-10-06): the table is the page,
* there is nothing to close, and the X does not render. */
onClose?: () => void;
/** HOME VARIANT (owner, 2026-10-06 polish): extra controls injected
* into the shared TopBar, right cluster, LEFT of the search input —
* the chains home's Import-notes + cost pill live here instead of
* floating over the list (covering table content read badly). */
topBarExtra?: React.ReactNode;
onClose: () => void;
/** PRACTICE SELECT (2026-10-04): the floating bar's confirm becomes
* "Practice these" — no delete fence; the caller owns what the
* selection becomes. */
@@ -251,17 +242,12 @@ export function ChainTableBody({
chat surface. NO TITLE (owner round 11, 2026-10-05): the serif
title register is RESERVED — it always names a session; the
chain table names nothing, so its bar carries counts + search +
close only — plus, in the home variant, the injected
topBarExtra (import + cost, owner 2026-10-06). Search, close,
and the extra carve out with lh-no-drag (the mask law: later
in the DOM). */}
close only. Search + close carve out with lh-no-drag (the mask
law: later in the DOM). */}
<TopBar>
<span className="min-w-0 flex-1 truncate text-xs text-muted-foreground">
{chains.length} {chains.length === 1 ? "chain" : "chains"} · {nodes.length} {nodes.length === 1 ? "node" : "nodes"}
</span>
{topBarExtra && (
<div className="lh-no-drag flex shrink-0 items-center gap-2">{topBarExtra}</div>
)}
<div className="relative shrink-0">
<SearchIcon className="absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" />
<input
@@ -274,8 +260,7 @@ export function ChainTableBody({
className="lh-no-drag h-8 w-56 rounded-lg border bg-background pl-8 pr-3 text-xs outline-none placeholder:text-muted-foreground focus:border-ring"
/>
</div>
{onClose && (
<button
<button
type="button"
data-testid="chain-table-close"
onClick={onClose}
@@ -284,7 +269,6 @@ export function ChainTableBody({
>
<XIcon className="size-4" />
</button>
)}
</TopBar>
{/* The list: NO per-row lines (owner ruling) — the ONLY horizontal