Repository navigation
feat: clean up table reference type boundaries - #775
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds branded table-identity helpers in ChangesBranded Table Identity and Reference Migration
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (5)
packages/deck/__tests__/dashboard-ai-map.test.ts (1)
195-223: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd a regression for the new error paths.
These tests only lock in the happy path.
quoteDeckMapSqlTableReference(...)and the non-sqlQuerycreateDeckMapBoundsQuery(...)path now throw on invalid table sources, so a small assertion for those failures would protect the behavioral change too.Possible follow-up
+ it('throws for invalid bounds table sources', () => { + expect(() => + createDeckMapBoundsQuery({ + source: {}, + fitToData: { + dataset: 'events', + longitudeColumn: 'lon', + latitudeColumn: 'lat', + }, + }), + ).toThrow('Deck map fit-to-data requires a valid table source.'); + }); + + it('throws for invalid raw table references', () => { + expect(() => quoteDeckMapSqlTableReference('')).toThrow( + 'Invalid deck map table reference', + ); + });As per coding guidelines,
**/*.{js,ts,jsx,tsx}: Add or update tests when changing behavior or public API, when practical.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/deck/__tests__/dashboard-ai-map.test.ts` around lines 195 - 223, The current tests cover only the successful quoting behavior in createDeckMapBoundsQuery and quoteDeckMapSqlTableReference, but they miss the new invalid-table-source error paths. Add regression assertions in the existing dashboard-ai-map test suite that verify quoteDeckMapSqlTableReference throws for malformed table references and that the non-sqlQuery branch of createDeckMapBoundsQuery rejects invalid source/table input, using those function names to locate the cases.Source: Coding guidelines
apps/sqlrooms-cli-ui/src/__tests__/createWorksheetCommands.test.ts (1)
129-143: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd assertions for the other identity-returning worksheet commands.
This now covers the dashboard path, but
worksheet.add-data-table-blockandworksheet.add-map-blockinapps/sqlrooms-cli-ui/src/createWorksheetCommands.tsalso switched theirselectedTablepayloads to canonical identities. Please add those two regression checks here as well so the updated response contract is exercised end-to-end.As per coding guidelines,
**/*.{js,ts,jsx,tsx}: Add or update tests when changing behavior or public API, when practical.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/sqlrooms-cli-ui/src/__tests__/createWorksheetCommands.test.ts` around lines 129 - 143, Add regression assertions for the other identity-returning worksheet commands in the createWorksheetCommands test suite. The current test only verifies the dashboard path, but the behavior change in createWorksheetCommands means worksheet.add-data-table-block and worksheet.add-map-block should also be checked for canonical selectedTable payloads. Update apps/sqlrooms-cli-ui/src/__tests__/createWorksheetCommands.test.ts to assert the invokeCommand calls for those two commands using the same identity-returning values, alongside the existing dashboard.set-selected-table coverage.Source: Coding guidelines
packages/mosaic/src/mosaicTableReference.ts (1)
51-55: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd TSDoc for the public helper functions.
These helpers are now part of the package-facing table-reference API, but the changed exports still are undocumented. Please add brief docs so callers can distinguish the AST, raw-SQL, and vgplot boundaries. As per coding guidelines,
packages/**/*.{ts,tsx}: Add tsdoc to exported types and functions in@sqlrooms/*packages.Also applies to: 76-94
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/mosaic/src/mosaicTableReference.ts` around lines 51 - 55, The exported table-reference helpers and types in this module are undocumented, so add brief TSDoc to the public API symbols such as getMosaicSqlTableReference, getMosaicTableReferenceParts, and the related exported types so callers can tell how the AST, raw-SQL, and vgplot representations differ. Keep the docs concise but explicit about each helper’s boundary and input/output shape, and make sure all package-facing exports in this area follow the same TSDoc style.Source: Coding guidelines
packages/mosaic/src/data-table-explorer/types.ts (1)
91-91: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd TSDoc for this exported alias.
This narrows a public package type, so it should carry its own short contract doc. As per coding guidelines,
packages/**/*.{ts,tsx}: Add tsdoc to exported types and functions in@sqlrooms/*packages.Proposed doc block
+/** Canonical Mosaic SQL table reference used by data-table explorer queries. */ export type DataTableExplorerSqlTableReference = MosaicSqlTableReference;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/mosaic/src/data-table-explorer/types.ts` at line 91, Add a short TSDoc block for the exported type alias DataTableExplorerSqlTableReference in types.ts so the public contract is documented like other `@sqlrooms/`* exports. Keep the doc concise, describing that it is the DataTableExplorer-specific alias for MosaicSqlTableReference, and place it directly above the export so the symbol is documented even if the alias definition changes.Source: Coding guidelines
packages/pivot/src/sql.ts (1)
26-37: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd TSDoc to the exported raw-reference helpers.
These exports now define the pivot package's public
RawSqlTableReferenceboundary, but callers still have no inline contract explaining which helper should produce that type.Suggested doc shape
+/** + * Creates a pivot query source from a validated raw SQL table reference. + * Pass `getRawSqlTableReference(...)` or `quoteParsedRawSqlTableReference(...)`, + * not a persisted table identity. + */ export function createPivotQuerySource( tableRef: RawSqlTableReference, columns: PivotField[], ): PivotQuerySource { return {tableRef, columns}; } +/** + * Creates a pivot query source from a `DataTable` by deriving its raw SQL + * table reference. + */ export function createPivotQuerySourceFromTable( table: DataTable, ): PivotQuerySource {As per coding guidelines,
packages/**/*.{ts,tsx}should add tsdoc to exported types and functions in@sqlrooms/*packages, andpackages/**public exports should stay documented library APIs.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/pivot/src/sql.ts` around lines 26 - 37, Add TSDoc comments to the exported helpers in createPivotQuerySource and createPivotQuerySourceFromTable so the public RawSqlTableReference contract is documented inline. Explain that createPivotQuerySource accepts an existing RawSqlTableReference plus columns, while createPivotQuerySourceFromTable builds the reference from table.table via getRawSqlTableReference; keep the docs on these exported symbols so callers know which helper to use.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/cells/src/resultRelationPolicy.ts`:
- Around line 34-41: The relation-name handling in resultRelationPolicy should
normalize all inputs through quoteParsedRawSqlTableReference instead of
returning QualifiedTableName via toString() early. Update the logic around the
relationName branch so both string and non-string inputs use the same
quoting/validation path, and only fall back to an error when the helper rejects
the value. Keep the fix localized to the result relation policy flow so CREATE,
DROP, and RENAME all get consistent SQL-boundary behavior regardless of caller
type.
In `@packages/duckdb-core/src/duckdb-utils.ts`:
- Around line 177-180: `getFullTableIdentity` is branding unresolved
`QualifiedTableName` values as `FullTableIdentity`, which lets partial `{table}`
or `{schema, table}` inputs slip through. Update `getFullTableIdentity` in
`duckdb-utils.ts` to only accept or construct truly complete identities, and
reject incomplete shapes before calling `toFullString()` so the returned value
is always something `parseFullTableIdentity()` can successfully round-trip. Use
the `QualifiedTableName`, `FullTableIdentity`, and `parseFullTableIdentity`
symbols to align the validation with the new boundary type.
---
Nitpick comments:
In `@apps/sqlrooms-cli-ui/src/__tests__/createWorksheetCommands.test.ts`:
- Around line 129-143: Add regression assertions for the other
identity-returning worksheet commands in the createWorksheetCommands test suite.
The current test only verifies the dashboard path, but the behavior change in
createWorksheetCommands means worksheet.add-data-table-block and
worksheet.add-map-block should also be checked for canonical selectedTable
payloads. Update
apps/sqlrooms-cli-ui/src/__tests__/createWorksheetCommands.test.ts to assert the
invokeCommand calls for those two commands using the same identity-returning
values, alongside the existing dashboard.set-selected-table coverage.
In `@packages/deck/__tests__/dashboard-ai-map.test.ts`:
- Around line 195-223: The current tests cover only the successful quoting
behavior in createDeckMapBoundsQuery and quoteDeckMapSqlTableReference, but they
miss the new invalid-table-source error paths. Add regression assertions in the
existing dashboard-ai-map test suite that verify quoteDeckMapSqlTableReference
throws for malformed table references and that the non-sqlQuery branch of
createDeckMapBoundsQuery rejects invalid source/table input, using those
function names to locate the cases.
In `@packages/mosaic/src/data-table-explorer/types.ts`:
- Line 91: Add a short TSDoc block for the exported type alias
DataTableExplorerSqlTableReference in types.ts so the public contract is
documented like other `@sqlrooms/`* exports. Keep the doc concise, describing that
it is the DataTableExplorer-specific alias for MosaicSqlTableReference, and
place it directly above the export so the symbol is documented even if the alias
definition changes.
In `@packages/mosaic/src/mosaicTableReference.ts`:
- Around line 51-55: The exported table-reference helpers and types in this
module are undocumented, so add brief TSDoc to the public API symbols such as
getMosaicSqlTableReference, getMosaicTableReferenceParts, and the related
exported types so callers can tell how the AST, raw-SQL, and vgplot
representations differ. Keep the docs concise but explicit about each helper’s
boundary and input/output shape, and make sure all package-facing exports in
this area follow the same TSDoc style.
In `@packages/pivot/src/sql.ts`:
- Around line 26-37: Add TSDoc comments to the exported helpers in
createPivotQuerySource and createPivotQuerySourceFromTable so the public
RawSqlTableReference contract is documented inline. Explain that
createPivotQuerySource accepts an existing RawSqlTableReference plus columns,
while createPivotQuerySourceFromTable builds the reference from table.table via
getRawSqlTableReference; keep the docs on these exported symbols so callers know
which helper to use.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 2114ba69-d716-4251-8ad6-62ee8a1e952f
📒 Files selected for processing (41)
apps/sqlrooms-cli-ui/src/__tests__/createWorksheetCommands.test.tsapps/sqlrooms-cli-ui/src/components/useAssistantContextItems.tsapps/sqlrooms-cli-ui/src/context/getRunContext.tsapps/sqlrooms-cli-ui/src/createWorksheetCommands.tsapps/sqlrooms-cli-ui/src/store.tsapps/sqlrooms-cli-ui/src/workspace/sidebar/CliDataSidebarSection.tsxdev-docs/table-reference-type-boundary-inventory.mdpackages/ai/jest.config.jspackages/ai/src/tools/tableSchemaContext.tspackages/ai/src/tools/tables/tableIdentity.tspackages/cells/__tests__/resultRelationPolicy.test.tspackages/cells/src/resultRelationPolicy.tspackages/deck/__tests__/dashboard-ai-map.test.tspackages/deck/__tests__/dashboard.test.tspackages/deck/src/block.tsxpackages/deck/src/dashboardConfig.tspackages/deck/src/mapConfigUtils.tspackages/deck/src/useDeckMapFitToBounds.tspackages/duckdb-core/README.mdpackages/duckdb-core/__tests__/getUnqualifiedSqlIdentifier.test.tspackages/duckdb-core/src/duckdb-utils.tspackages/duckdb-core/src/index.tspackages/duckdb/src/index.tspackages/kepler/package.jsonpackages/kepler/src/KeplerSlice.tspackages/kepler/src/keplerTableSelection.tspackages/mosaic/src/charts/worksheet/ChartBlockRenderer.tsxpackages/mosaic/src/components/DataTableSelector.tsxpackages/mosaic/src/data-table-explorer/DataTableExplorerCategoryClient.tspackages/mosaic/src/data-table-explorer/DataTableExplorerCountClient.tspackages/mosaic/src/data-table-explorer/DataTableExplorerHistogramClient.tspackages/mosaic/src/data-table-explorer/DataTableExplorerPageClient.tspackages/mosaic/src/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.tspackages/mosaic/src/data-table-explorer/types.tspackages/mosaic/src/data-table-explorer/worksheet/DataTableBlockRenderer.tsxpackages/mosaic/src/index.tspackages/mosaic/src/mosaicTableReference.tspackages/pivot/__tests__/pivot-sql.test.tspackages/pivot/src/pivotCellRegistryEntry.tsxpackages/pivot/src/sql.tspackages/pivot/src/types.ts
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a6751661f9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| }): {tableName?: string; sqlQuery?: string} | undefined { | ||
| const datasetSource = options.dataset?.source; | ||
| const dashboardTable = stripCatalogPrefix(options.dashboard.selectedTable); | ||
| const dashboardTable = options.dashboard.selectedTable; |
There was a problem hiding this comment.
Normalize catalog-qualified map table identities
When dashboard.selectedTable is a full persisted identity such as "memory"."main"."events" or an attached-catalog table, this now passes the catalog through as the map data source. The map query builders below call quoteParsedRawSqlTableReference, which preserves all three parts, so dataset and fit-to-data SQL will use FROM "memory"."main"."events"; the surrounding Mosaic table-reference code intentionally drops the catalog for the active connector. This regresses dashboards/maps restored with full table identities or selected from non-default catalogs; the previous normalization avoided sending the catalog into Deck map runtime SQL.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/deck/src/dashboardConfig.ts (1)
112-131: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winNormalize
originalTablebefore comparing and building rewrite patterns.Line 112 strips the catalog from
dashboard.selectedTable, but Line 124 still compares against the unnormalizeddatasetSource.tableName. If the stored source is catalog-qualified while the SQL uses the runtime schema/table form, the dashboard table switch can skip the intendedFROMrewrite.Suggested direction
- const originalTable = datasetSource.tableName; + const originalTable = stripCatalogPrefix(datasetSource.tableName);Also build the quoted-original pattern from the same normalized reference helper so quoted dotted identifiers stay consistent with the new boundary helpers.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/deck/src/dashboardConfig.ts` around lines 112 - 131, Normalize the source table before comparing and rewriting in dashboardConfig so the SQL rewrite logic uses the same table form as stripCatalogPrefix does for the selected dashboard table. In dashboardConfig’s SQL branch, update the originalTable comparison and the quoted-original pattern generation to use a shared normalized reference instead of datasetSource.tableName directly, so catalog-qualified tables still trigger the intended FROM-clause rewrite and quoted dotted identifiers stay consistent with the existing boundary helpers.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@packages/deck/src/dashboardConfig.ts`:
- Around line 112-131: Normalize the source table before comparing and rewriting
in dashboardConfig so the SQL rewrite logic uses the same table form as
stripCatalogPrefix does for the selected dashboard table. In dashboardConfig’s
SQL branch, update the originalTable comparison and the quoted-original pattern
generation to use a shared normalized reference instead of
datasetSource.tableName directly, so catalog-qualified tables still trigger the
intended FROM-clause rewrite and quoted dotted identifiers stay consistent with
the existing boundary helpers.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 0c7a727b-3059-4255-887d-5e190968fa0a
📒 Files selected for processing (2)
packages/deck/__tests__/dashboard.test.tspackages/deck/src/dashboardConfig.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- packages/deck/tests/dashboard.test.ts
There was a problem hiding this comment.
🧹 Nitpick comments (1)
packages/deck/src/MapSettings.tsx (1)
170-170: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueOptional: dedupe
useDataTable(dashboardSelectedTable).
selectedDataTable(Line 170) andprimaryTable(Line 204) issue the sameuseDataTable(dashboardSelectedTable)call. Reusing a single value would avoid the redundant store read.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/deck/src/MapSettings.tsx` at line 170, `selectedDataTable` and `primaryTable` both call `useDataTable(dashboardSelectedTable)`, so the same store read is being duplicated. Update `MapSettings` to compute this value once and reuse it for both `selectedDataTable` and `primaryTable`, keeping the existing `useDataTable` result as the single source of truth.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/deck/src/MapSettings.tsx`:
- Line 170: `selectedDataTable` and `primaryTable` both call
`useDataTable(dashboardSelectedTable)`, so the same store read is being
duplicated. Update `MapSettings` to compute this value once and reuse it for
both `selectedDataTable` and `primaryTable`, keeping the existing `useDataTable`
result as the single source of truth.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: bc109df3-2403-4ab6-9e21-44828a890201
📒 Files selected for processing (13)
apps/sqlrooms-cli-ui/src/store.tspackages/deck/src/BlockMapSettings.tsxpackages/deck/src/DashboardMapSettings.tsxpackages/deck/src/MapSettings.tsxpackages/deck/src/block.tsxpackages/mosaic/src/charts/block-document/ChartBlockRenderer.tsxpackages/mosaic/src/charts/block-document/ChartBlockSettings.tsxpackages/mosaic/src/charts/dashboard/MosaicDashboardChartSettings.tsxpackages/mosaic/src/dashboard/MosaicDashboardSettings.tsxpackages/mosaic/src/data-table-explorer/block-document/DataTableBlockRenderer.tsxpackages/mosaic/src/data-table-explorer/block-document/DataTableBlockSettings.tsxpackages/mosaic/src/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerSettings.tsxpackages/mosaic/src/index.ts
🚧 Files skipped from review as they are similar to previous changes (3)
- packages/mosaic/src/index.ts
- apps/sqlrooms-cli-ui/src/store.ts
- packages/deck/src/block.tsx
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ac6be2b63a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| 'gi', | ||
| ), | ||
| `FROM ${quotedDashboard}`, | ||
| const originalTable = stripCatalogPrefix(datasetSource.tableName); |
There was a problem hiding this comment.
Preserve catalog-qualified source when rewriting map SQL
When a saved map has both dataset.source.tableName and its sqlQuery using the same catalog-qualified reference, such as FROM "memory"."main"."old_events", and the dashboard selected table changes, this strips the source to "main"."old_events" before building the match candidates. The replacement loop then never matches the 3-part FROM in the SQL but still returns the unchanged query, so the dashboard's selected table no longer takes precedence and the map can keep querying a stale or unavailable catalog-qualified source. Include the original unstripped source reference among the rewrite candidates before normalizing it for runtime SQL.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b8210ed190
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| if (originalTable) { | ||
| const quotedOriginal = quoteRuntimeTableReference(originalTable); | ||
| if (quotedOriginal && quotedOriginal !== quotedDashboard) { |
There was a problem hiding this comment.
Normalize matching catalog-qualified map SQL
When a saved map's dataset.source.tableName and sqlQuery already match the dashboard table but are catalog-qualified, e.g. selected/source table are "memory"."main"."events" and the SQL is SELECT * FROM "memory"."main"."events", originalTable and dashboardTable both normalize to "main"."events". This guard then skips the replacement loop entirely, so the runtime dataset and fit-to-data queries still use the catalog-qualified FROM, even though this path is supposed to strip catalogs before handing SQL to Mosaic. Even after adding the unstripped source candidate, the fresh failure is the equality check hiding the catalog difference.
Useful? React with 👍 / 👎.
Summary
@sqlrooms/duckdb-coreValidation
pnpm buildpnpm --filter @sqlrooms/duckdb-core test -- --runTestsByPath packages/duckdb-core/__tests__/getUnqualifiedSqlIdentifier.test.tspnpm --filter @sqlrooms/deck buildpnpm --filter @sqlrooms/cells buildpnpm --filter @sqlrooms/pivot buildpnpm --filter @sqlrooms/mosaic buildpnpm --filter @sqlrooms/pivot test -- --runTestsByPath packages/pivot/__tests__/pivot-sql.test.tspnpm --filter @sqlrooms/deck test -- --runTestsByPath packages/deck/__tests__/dashboard-ai-map.test.tspnpm --filter @sqlrooms/cells test -- --runTestsByPath packages/cells/__tests__/resultRelationPolicy.test.tspnpm --filter @sqlrooms/kepler test -- --runTestsByPath packages/kepler/__tests__/keplerTableSelection.test.tspnpm --filter @sqlrooms/ai testknip,turbo typecheck,turbo testNotes
pnpm --filter sqlrooms-cli-app buildattempt exposed existing unrelated app-wide declaration/type issues around missing package declarations and implicitanys; the final rootpnpm buildand full pre-push suite passed.Summary by CodeRabbit
New Features
Bug Fixes
Documentation
Tests