pf_app/ui/src
Paul Trowbridge 07d92ccd74 Keep master data for a dim_group instead of re-deriving it from the source
Every question about a part -- what values exist, what attributes go with
one -- was answered by querying the source, and the source is the wrong
place to ask. It is a view over a transaction table, so the query is slow
(76s for one ILIKE against 6.9M rows), it describes only what was
transacted, and it cannot express intent: there is no way to say a part is
discontinued, or to name one that has not sold yet.

pf.dim_member holds the app's own list: one row per key value per group,
siblings in jsonb, keyed on (source_id, dim_group, key_value). Refresh is a
merge rather than a replace, so curation survives it -- members absent from
the source are marked source_seen = false, not deleted. Triggered from
Setup, next to Generate SQL, because it reads the whole source and the
answer only changes when the catalogue does.

A key can carry several attribute sets across history -- 11,290 parts
against 13,662 combinations on osm_skinny -- so the refresh takes the most
recent by the source's date column. That also fixes the sibling autofill,
which used to run a DISTINCT ... LIMIT 2 against the source and silently
fill nothing whenever a part came back ambiguous. A member row is one
definition by construction.

The client fetches each group's list once per source and does both
completion and autofill against it in memory, so neither costs a request.
Columns outside a group, or a group never refreshed, still fall back to the
version's values endpoint.

Run 01_schema.sql to create the table.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 00:19:39 -04:00
..
assets Scaffold React/Vite/Tailwind UI with 3-step Setup → Baseline → Forecast flow 2026-04-25 16:28:45 -04:00
components Keep master data for a dim_group instead of re-deriving it from the source 2026-09-17 00:19:39 -04:00
views Keep master data for a dim_group instead of re-deriving it from the source 2026-09-17 00:19:39 -04:00
App.css Scaffold React/Vite/Tailwind UI with 3-step Setup → Baseline → Forecast flow 2026-04-25 16:28:45 -04:00
App.jsx Stop loading the whole version twice on every page load 2026-09-16 22:42:38 -04:00
auth.jsx Put the app behind a login 2026-09-14 22:20:25 -04:00
index.css Fix period col dropdown dark mode: custom dropdown with theme-aware colors 2026-06-13 00:48:25 -04:00
main.jsx Re-apply row depth from the observer callback, not from window focus 2026-09-16 22:36:29 -04:00
observerShim.js Retry the depth re-apply, and let the shim see into the shadow root 2026-09-16 22:48:11 -04:00
theme.jsx Add light/dark mode with theme toggle 2026-04-25 23:29:25 -04:00