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
+6 -8
View File
@@ -4,7 +4,7 @@ import { useEffect, useMemo, useRef, useState } from "react";
import { useRouter } from "next/navigation";
import { CornerDownLeftIcon, DumbbellIcon } from "lucide-react";
import { GraphView } from "@/components/graph-view";
import { ChainsHome } from "@/components/chains-home";
import { MinimalHome } from "@/components/minimal-home";
import { SetupDialog } from "@/components/setup-dialog";
import { useStrongKeyless, useZeroKeys, ZeroKeysPill } from "@/components/setup-cta";
import { DictationBar, joinDictation, useDictation } from "@/components/dictation";
@@ -163,8 +163,9 @@ export function Home({
padding on any side; it runs from the sidebar to the right edge
and from the bottom to the top, under everything else. With
rendering OFF (graph.rendering, owner 2026-10-06) it is the
CHAINS VIEW — the same table as the overlay, in flow; data,
extraction, and the pick flow are untouched. */}
MINIMAL HOME — a quiet knowledge-base summary + the graph
chrome's survivors; data, extraction, and the pick flow are
untouched, and the chain table stays behind its button. */}
<main className="absolute inset-0">
{rendering ? (
<GraphView
@@ -174,7 +175,7 @@ export function Home({
onChainSelectClose={() => setChainSelectOpen(false)}
/>
) : (
<ChainsHome
<MinimalHome
chainSelectOpen={chainSelectOpen}
practiceSelection={pickedIds}
onPracticeSelectionChange={setPracticeProps}
@@ -207,10 +208,7 @@ export function Home({
send consumes it). Practice mode with nothing picked
shows the pick HINT so the affordance is discoverable;
teaching mode with nothing picked renders nothing. */}
{/* While PICKING in the chains home the chip row hides
(owner, 2026-10-06): the floating bar above the composer
already carries count + Clear + Done — one voice, not two. */}
{(practiceProps.length > 0 || mode === "practice") && !(rendering === false && chainSelectOpen) && (
{(practiceProps.length > 0 || mode === "practice") && (
<div className="mb-2 flex items-center justify-start gap-1.5">
<button
type="button"