You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
BROWSE lookup dropdown + membership enforcement in grid-edit and REPLACE #60
Part of the v1.3.0 lookup feature. Design: docs/superpowers/specs/2026-07-10-lookup-columns-design.md (on release/v1.3.0). Builds on the LOOKUP qualifier issue.
Scope
grid-opencolumnTypes entries gain lookup + resolved options
Grid.ts: lookup columns edit via <select>; static cells keep showing the stored value (labels only inside the dropdown — the grid must not disagree with LIST/report output)
cellValidation.ts: membership check (exact, case-sensitive), running client-side and in Session's authoritative grid-edit re-check — the established two-sided pattern
REPLACE enforces membership on columns that declare a lookup (additive: no existing column declares one, so no existing program changes behavior)
Server re-resolves table lookups at write time (client lists may be stale)
Unresolvable/over-ceiling lookup: free text + warn, membership not enforced; APPEND RECORD still leaves NULL
Tests
Vitest: membership accept/reject via grid-edit and REPLACE; degradation cases (dropped source table must not lock the column)
Playwright: grid dropdown asserted with toBeInViewport() (the demos/overtime.prg — Overtime Tracking demo #46 clipping trap — a <select> inside an overflow: hidden cell); a rejected off-list REPLACE; screenshot inspected before believing it works
Merged in PR #64 (feature/60-grid-enforcement → release/v1.3.0). REPLACE/grid-edit enforce lookup membership; BROWSE renders a dropdown. Forms still pending — #59.
Activity
Merge pull request #64 from DDecoene/feature/60-grid-enforcement
DDecoene commentedon Jul 12, 2026
Merged in PR #64 (feature/60-grid-enforcement → release/v1.3.0). REPLACE/grid-edit enforce lookup membership; BROWSE renders a dropdown. Forms still pending — #59.