Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/designs/DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ check enforces the mechanical half. Full rationale:
| DL-208 | Both Solid-2 blocker deps are FORKED into the RigelBuild org and consumed as externalized pinned artifacts, never vendored into the compass tree (matching the org-wide fork-externalization ruling): `@tanstack/solid-virtual` is forked with Solid-2 support + an upstream PR to TanStack/virtual (a 136-line thin wrapper over the framework-agnostic `@tanstack/virtual-core`, likely to land), consumed via a `package.json` git ref (`github:RigelBuild/virtual`) until upstream merges then dropped; `solid-markdown` (effectively abandoned upstream) is forked-and-owned, published as `@rigelbuild/solid-markdown` with the `solid-js` 2.x peer bump + Solid-2 codemods (imports + effect lifecycle, no algorithmic rewrite, no in-repo AST renderer). Overrides this record's earlier adapter-over-core virtualizer recommendation | Active (Matt, 2026-08-18) / solid-markdown clause superseded by DL-218 (Matt, 2026-08-19) | [solid v2 migration §Resolved decisions](ui/compass-ui-solid-v2/design.md#resolved-decisions) |
| DL-209 | The Wails packaged-shell seam under Solid 2 is low-risk-but-verified (no automation): the seam is Solid-free plain TS (`daemon-transport.ts` string-name `Call`/`Events`; `MarkdownText.tsx:1` `Browser.openExternal`), so effect-flush timing is the lesser risk; the packaged shell is the first place the babel-preset-solid 2 / vite-plugin-solid 3 / `@solidjs/web` production-build compilation and v2's render-root-owned delegated events run outside dev/happy-dom, so S7's manual packaged-shell smoke (RPC round-trip + openExternal) stays the mandatory gate — no automation justified for a one-shot migration | Active (Matt, 2026-08-18) | [solid v2 migration §Resolved decisions](ui/compass-ui-solid-v2/design.md#resolved-decisions) |
| DL-218 | The owned `RigelBuild/solid-markdown` fork adopts upstream `andi23rosca/solid-markdown` #44 (the react-markdown-10 API rewrite — a third-party draft, upstream effectively inactive on it) + #45 (the bundle-deps jsdom-compat fix), re-ported to Solid 2 via a fork-local `src/jsx-runtime.ts` `jsx`/`jsxs`/`Fragment` triple over `createComponent`/`merge` + `@solidjs/web` `Dynamic` (solid-jsx dropped as Solid-1-bound), published as a clean `@rigelbuild/solid-markdown@3.0.0` (no `-rigel.N` suffix — the fork is ours and sets its own versions); this retires the fork's in-repo AST renderer in favor of the maintained `hast-util-to-jsx-runtime`. The apps/ui consumer injects @mention chips via a consumer-side rehype plugin over the existing `mentionRuns` splitter (the removed `text` component override), derives inline-vs-block code structurally via a `pre`/`code` override split (the removed `inline` prop), keeps `renderingStrategy="reconcile"` (un-deprecated in the owned fork), and adds a synchronous consumer-side `(lang, code)` highlight cache that `CodeBlock` reads at initial render (seeding highlighted HTML and bypassing the debounce + async `createResource` on a hit) to suppress the code-highlight flash caused by #44's per-tick component teardown (accepting marginal within-stream selection loss; the fine-grained-walker re-port is the escalation if it bites). Supersedes DL-208's `solid-markdown` clause ONLY (no-algorithmic-rewrite/no-in-repo-AST-renderer) — DL-208's `@tanstack/solid-virtual` clause and its org-wide fork-externalization stance stay Active | Active (Matt, 2026-08-19) | [markdown react10 §Approach](ui/compass-ui-markdown-react10/design.md#approach) |
| DL-346 | Compass global search is a SERVER-side corpus reached over the wire, not a client-held index: a persistent center-of-top-bar input coexists with the D5-frozen Cmd+K palette (both feed one provider set), issues/PRs search the WHOLE board rather than the caller's assigned slice, and chat search reaches the already-shipped-but-UI-unreachable `rpc SearchMessages`. Issue search is new server work — an `issues.search_tsv` GENERATED ALWAYS … STORED column + GIN index + `SearchIssues` RPC, mirroring the messages pipeline. Two schema constraints are load-bearing and measured on PostgreSQL 18.4. (1) The labels term MUST route through a `compass_labels_text` SQL wrapper declared IMMUTABLE with a pinned `search_path`: bare `array_to_string` (and `labels::text`) is only STABLE and fails the migration with "generation expression is not immutable", while the IMMUTABLE `array_to_tsvector` alternative compiles but bypasses the parser so label search silently matches nothing. (2) The column labels its four fields with `setweight` (title A, body/summary B, labels C) and queries pass the matching `{0.1,0.2,0.4,1.0}` weights array to `ts_rank` — a flat concatenation ranks a short-title hit and a hit buried in a 10 KB body EXACTLY equal (0.06079 vs 0.06079 measured; weighted 0.60793 vs 0.24317), so relevance ordering is unachievable without it, and the column is STORED so this cannot be deferred without a table rewrite. PR results stay a client-side `prRows()` derivation over `Issue.prs` and are FIXTURE-ONLY at v1 — the field has zero Go writers — so no live-mode PR assertion may gate the release | Active (Matt, 2026-09-07) | [global search](ui/compass-global-search/design.md) |

## Threading & rendering

Expand Down
Loading
Loading