Skip to content

fix(workbook): preserve stable column IDs across display aliases - #66

Open
rudycelekli wants to merge 3 commits into
debpalash:mainfrom
rudycelekli:validation/workbook-stable-id-precedence-20261008
Open

rudycelekli wants to merge 3 commits into
debpalash:mainfrom
rudycelekli:validation/workbook-stable-id-precedence-20261008

Conversation

@rudycelekli

Copy link
Copy Markdown
Contributor

Summary

Preserve workbook stable column IDs when another column's display name collides with them.

  • Read input fields from an immutable copy of the stored row while keeping the original alias assignment order and failed computed-value invalidation.
  • Build condition aliases separately, so a display name cannot overwrite a stable ID.
  • Add ten cases through the real public HTTP routes and persisted SQLite rows: eight stable-ID cases plus two controls preserving intentional ambiguous-name rejection.

Native verification

The existing four CI jobs are unchanged.

  • Original BEFORE: three assertion failures reproduced the two affected paths; five controls passed. SQLite: 3 failed, 2097 passed, 134 skipped, 3 deselected.
  • Corrected ten-case BEFORE: the same three failures; both ambiguous-reference rejection controls passed. SQLite: 3 failed, 2099 passed, 134 skipped, 3 deselected.
  • Current AFTER at 4644882: all four jobs succeeded. SQLite: 2102 passed, 134 skipped, 3 deselected; PostgreSQL: 18 passed; frontend: 63 passed plus lint/build; browser regressions: 3 passed. All ten added cases and the 2092 original SQLite cases pass.

The original eight assertions were preserved throughout. An earlier supplemental fixture incorrectly expected successful ambiguous-name resolution; its two failures were rejected as fixture errors and add no defect evidence. The final two controls freeze the actual typed rejection contract. The earlier two-pass source was superseded by the immutable input snapshot; its passing run is not used as current-head qualification.

Scope and review

This changes only two workbook source files and their existing HTTP test owner. PR #65 changes the numeric comparator in a separate hunk; that comparator is byte-identical here, and no unmerged source from #65 is included. No workflow, provider call, tenancy or application execution behavior is added.

Prepared with AI assistance; source and native evidence were independently reviewed. All three candidate commits have verified signatures and DCO signoffs.

Upstream CI is pending for this newly submitted pull request; the results above are from the exact current head in the author fork.

Add eight public HTTP and SQLite fixture cases without production changes.

Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
Hydrate stored inputs before failed computed snapshots invalidate materialized values. Keep condition IDs authoritative over display aliases.

Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
Read input values from an immutable raw-data snapshot while preserving the original single-loop alias assignment order. Retain separate condition aliases so stable IDs take precedence. Freeze two intentional public ambiguous-name rejection controls after their native baseline pass; original eight stable-ID assertions remain unchanged. Supersedes the held two-pass hydration change without rewriting its evidence.

Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
@rudycelekli
rudycelekli requested a review from debpalash as a code owner October 8, 2026 23:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant