Skip to content

ui: identify password columns by field type, add password Cell - #1016

Merged
borisno2 merged 1 commit into
mainfrom
claude/focused-rubin-upsjwd
Aug 22, 2026
Merged

ui: identify password columns by field type, add password Cell#1016
borisno2 merged 1 commit into
mainfrom
claude/focused-rubin-upsjwd

Conversation

@borisno2

Copy link
Copy Markdown
Member

Summary

  • Default column derivation excludes password columns by field type rather than by matching the field name "password", in all three places that curated default columns: ListViewClient (main list view), the standalone ListTable, and deriveItemView's Relationship-table column derivation. A field declared secret: password() is now excluded from default columns; a field merely named password that isn't password()-typed (e.g. password: text()) is no longer excluded.
  • Registered a password Cell in the cell registry (cellComponentRegistry) that renders a fixed •••••••• mask, ignoring the value entirely. A password-typed column shown deliberately via an explicit columns prop now renders the mask instead of falling through to the default text Cell (previously [object Object], saved only incidentally by HashedPassword.toJSON() redaction).
  • Removed the dead getFieldDisplayValue export from @opensaas/stack-ui — it had zero callers in the actual rendering path (Cells render each field type directly) and disagreed with what was actually rendered.
  • Added a changeset (minor, per pre-1.0 convention) documenting the removed export as a breaking change even though it ships as minor.

Test plan

  • Added/updated unit tests covering: password-typed columns excluded by default regardless of name (ListViewClient, ListTable, deriveItemView), a field merely named password is not excluded when it isn't password-typed, and the new PasswordCell (direct render + via CellRenderer type resolution) renders a fixed mask ignoring the raw value.
  • pnpm test in packages/ui — 594/594 passing
  • pnpm build in packages/ui (typecheck via tsc) — passes
  • pnpm lint — no new warnings/errors
  • pnpm manypkg fix / pnpm format — clean

Closes #982


Generated by Claude Code

- Default column derivation in ListViewClient, standalone ListTable, and
  deriveItemView's Relationship-table columns now excludes a password
  column by field type instead of matching the field name "password".
- Register a password Cell in the cell registry that renders a fixed
  mask regardless of value, so an explicitly-shown password column no
  longer depends on HashedPassword.toJSON() redaction for safety.
- Remove the dead, uncalled getFieldDisplayValue export.

Closes #982
@changeset-bot

changeset-bot Bot commented Aug 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: aa6c6c6

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 9 packages
Name Type
@opensaas/stack-ui Minor
@opensaas/stack-tiptap Minor
@opensaas/stack-auth Minor
@opensaas/stack-cli Minor
@opensaas/stack-core Minor
@opensaas/stack-rag Minor
@opensaas/stack-storage-s3 Minor
@opensaas/stack-storage-vercel Minor
@opensaas/stack-storage Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented Aug 22, 2026

Copy link
Copy Markdown

Deployment failed for project stack-docs with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/open-saas?upgradeToPro=build-rate-limit

Copy link
Copy Markdown
Member Author

Code review

Ran a full review pass (line-by-line diff, removed-behavior audit, cross-file tracing, reuse/simplification/efficiency/altitude, CLAUDE.md conventions).

Findings: none.

  • All three default-column call sites (ListViewClient, standalone ListTable, deriveItemView's Relationship-table columns) consistently switched from name-based to type-based password exclusion.
  • Confirmed getFieldDisplayValue has zero remaining callers repo-wide before removing it.
  • Confirmed no other stray name-based 'password' filters exist outside the three sites fixed here.
  • The new PasswordCell respects the existing ui.cellui.fieldTypefield.type override priority in CellRenderer.
  • Tests cover both directions of the type-vs-name distinction (a secret: password() field is excluded; a password: text() field is not) across all three sites, plus the Cell rendering a fixed mask independent of the raw value.

pnpm test (594/594), pnpm build, pnpm lint, pnpm manypkg fix, and pnpm format all pass clean.


Generated by Claude Code

Copy link
Copy Markdown
Member Author

The Vercel status check is failing with "Deployment rate limited — retry in 24 hours" (api-deployments-free-per-day quota on the stack-docs project) — an external free-tier limit unrelated to this diff, not something a code change here can fix. The real CI checks (test, e2e) are still running; will follow up once they complete.


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report for Core Package Coverage (./packages/core)

Status Category Percentage Covered / Total
🟢 Lines 94.05% (🎯 65%) 1631 / 1734
🟢 Statements 92.32% (🎯 65%) 1768 / 1915
🟢 Functions 97.41% (🎯 62%) 264 / 271
🟢 Branches 86.18% (🎯 50%) 1279 / 1484
File CoverageNo changed files found.
Generated in workflow #1789 for commit aa6c6c6 by the Vitest Coverage Report Action

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report for UI Package Coverage (./packages/ui)

Status Category Percentage Covered / Total
🔵 Lines 78.45% 244 / 311
🔵 Statements 77.95% 251 / 322
🔵 Functions 69.81% 74 / 106
🔵 Branches 66.94% 160 / 239
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
packages/ui/src/lib/utils.ts 12.5% 0% 11.11% 15.38% 10-19, 30-62
Generated in workflow #1789 for commit aa6c6c6 by the Vitest Coverage Report Action

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report for CLI Package Coverage (./packages/cli)

Status Category Percentage Covered / Total
🔵 Lines 78.98% 1545 / 1956
🔵 Statements 78.79% 1613 / 2047
🔵 Functions 86.11% 217 / 252
🔵 Branches 69.5% 752 / 1082
File CoverageNo changed files found.
Generated in workflow #1789 for commit aa6c6c6 by the Vitest Coverage Report Action

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report for Auth Package Coverage (./packages/auth)

Status Category Percentage Covered / Total
🔵 Lines 99.4% 166 / 167
🔵 Statements 97.8% 178 / 182
🔵 Functions 100% 43 / 43
🔵 Branches 89.83% 159 / 177
File CoverageNo changed files found.
Generated in workflow #1789 for commit aa6c6c6 by the Vitest Coverage Report Action

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report for Storage Package Coverage (./packages/storage)

Status Category Percentage Covered / Total
🔵 Lines 78.57% 220 / 280
🔵 Statements 80.06% 245 / 306
🔵 Functions 86.07% 68 / 79
🔵 Branches 75.88% 214 / 282
File CoverageNo changed files found.
Generated in workflow #1789 for commit aa6c6c6 by the Vitest Coverage Report Action

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report for RAG Package Coverage (./packages/rag)

Status Category Percentage Covered / Total
🔵 Lines 47.97% 355 / 740
🔵 Statements 48.14% 377 / 783
🔵 Functions 54.26% 70 / 129
🔵 Branches 42.55% 180 / 423
File CoverageNo changed files found.
Generated in workflow #1789 for commit aa6c6c6 by the Vitest Coverage Report Action

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report for Storage S3 Package Coverage (./packages/storage-s3)

Status Category Percentage Covered / Total
🔵 Lines 100% 40 / 40
🔵 Statements 100% 40 / 40
🔵 Functions 100% 9 / 9
🔵 Branches 100% 19 / 19
File CoverageNo changed files found.
Generated in workflow #1789 for commit aa6c6c6 by the Vitest Coverage Report Action

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report for Storage Vercel Package Coverage (./packages/storage-vercel)

Status Category Percentage Covered / Total
🔵 Lines 100% 68 / 68
🔵 Statements 100% 71 / 71
🔵 Functions 100% 15 / 15
🔵 Branches 97.87% 46 / 47
File CoverageNo changed files found.
Generated in workflow #1789 for commit aa6c6c6 by the Vitest Coverage Report Action

@borisno2
borisno2 merged commit 98465a5 into main Aug 22, 2026
4 of 5 checks passed
@borisno2
borisno2 deleted the claude/focused-rubin-upsjwd branch August 22, 2026 09:52
@github-actions github-actions Bot mentioned this pull request Aug 22, 2026
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.

ui: password columns are curated by field name, no password Cell is registered, and getFieldDisplayValue is dead code

2 participants