Why
The Semantic search bar (#79) covers the design's main column. The rest of the panel still differs from design §12 (lines 2937-3115).
Gaps
Layout
- Design splits into a 2-column grid: results main + 280px right sidebar with status/config cards. Current panel renders single-column with status above and config (excludes) at the bottom.
Missing index-status fields
Design's index-status card shows fields the current implementation either omits or renders less cleanly:
dim — vector dimension (e.g. 512). Not surfaced.
size — index file size in MB. Not surfaced.
stale chunks progress bar — % of index entries whose source files have changed since last build. Not tracked yet.
last build as "42m ago" — currently shown as ISO timestamp.
Style
- Current
.kv layout (key indent + value) doesn't match design's .rail-kv (key/value flex justify-between). Sidebar cards in design use rail-kv consistently.
- Setup checklist (install ollama / start daemon / pull model) reads as ad-hoc paragraphs; design treats each as a card with action button + status pill.
Button affordances
- Current Index / Rebuild / Stop buttons sit naked in a flex row. Design integrates them into the index-status card header / actions area for clearer ownership.
Plan
Stage 1 — server fields
- Add
dim, sizeBytes, lastBuiltMs to /api/semantic GET response (read from index meta on disk)
- Defer
stale chunks — needs a fast staleness probe (mtime walk vs. index meta), separate scope
Stage 2 — layout restructure
- Wrap content in design grid:
display:grid; grid-template-columns:minmax(0,1fr) 280px; gap:14px
- Move SemanticSearchSection into the left column
- Right column: index-status card → index-config card → setup card (when ollama not ready)
Stage 3 — formatting polish
- Switch status fields to
.rail-kv rows
last build via fmtRelativeTime
- Index/Rebuild/Stop become a button row inside the index-status card
Out of scope
stale chunks bar (separate; needs a worker that diffs file mtimes against index meta)
- Highlighting matched terms in result snippets (deferred — design uses
<mark>, would need server-side substring or client-side highlight)
Why
The Semantic search bar (#79) covers the design's main column. The rest of the panel still differs from design §12 (lines 2937-3115).
Gaps
Layout
Missing index-status fields
Design's index-status card shows fields the current implementation either omits or renders less cleanly:
dim— vector dimension (e.g. 512). Not surfaced.size— index file size in MB. Not surfaced.stale chunksprogress bar — % of index entries whose source files have changed since last build. Not tracked yet.last buildas "42m ago" — currently shown as ISO timestamp.Style
.kvlayout (key indent + value) doesn't match design's.rail-kv(key/value flex justify-between). Sidebar cards in design use rail-kv consistently.Button affordances
Plan
Stage 1 — server fields
dim,sizeBytes,lastBuiltMsto/api/semanticGET response (read from index meta on disk)stale chunks— needs a fast staleness probe (mtime walk vs. index meta), separate scopeStage 2 — layout restructure
display:grid; grid-template-columns:minmax(0,1fr) 280px; gap:14pxStage 3 — formatting polish
.rail-kvrowslast buildvia fmtRelativeTimeOut of scope
stale chunksbar (separate; needs a worker that diffs file mtimes against index meta)<mark>, would need server-side substring or client-side highlight)