Skip to content

BROWSE lookup dropdown + membership enforcement in grid-edit and REPLACE #60

Description

@DDecoene

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-open columnTypes 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions