Skip to content

chore: reconcile sdk-compliance.yaml with capability matrix renames and splits - #1667

Merged
spydon merged 4 commits into
mainfrom
sdk-1439-supporting-symbols
Aug 7, 2026
Merged

chore: reconcile sdk-compliance.yaml with capability matrix renames and splits#1667
spydon merged 4 commits into
mainfrom
sdk-1439-supporting-symbols

Conversation

@spydon

@spydon spydon commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Reconciles sdk-compliance.yaml with three upstream changes that have now landed in supabase/sdk:

Renames and merges

  • auth.sign_in.reset_passwordauth.sign_in.send_password_reset_email
  • realtime.channel.sendrealtime.channel.broadcast
  • storage.file_buckets.list_files_paginated merged into list_files
  • storage.analytics.iceberg_namespace split into create_namespace / list_namespaces / delete_namespace
  • storage.analytics.iceberg_table split into create_table / list_tables / load_table / update_table / rename_table / delete_table

New capabilities declared

load_namespace_metadata, namespace_exists, update_namespace_properties, register_table, table_exists.

Why the Iceberg entries look the way they do

Splitting two bundled entries into fifteen raises the question of which symbols belong where. The Iceberg surface is 352 symbols, only 18 of which are catalog entry points; the rest are option types, result types, the schema and type model, and the exception hierarchy.

symbols now holds only the methods a caller invokes, because the drift check treats every name in it as evidence the capability exists. Everything else sits under supporting_symbols, which counts for new-symbol coverage without claiming to implement anything.

Owners for the supporting types are derived from the source rather than assigned by hand: build the type graph from packages/storage_client/lib/src/iceberg/, including subtype edges since a signature naming a sealed base reaches every variant a caller can pass, then ask which entry points reach each type. A type reachable from exactly one feature belongs to that feature.

count
Sole natural owner 37 of 67
Genuinely shared across several features 20
Reachable from no entry point (thrown, not passed) 10

So all 28 *Update and Assert* classes land on update_table, ListTablesOptions/ListTablesResult on list_tables, RegisterTableRequest on register_table. The schema and type model and the exception hierarchy stay in the top-level supporting_symbols list, which is the honest answer rather than a coin flip.

The alternative was to replicate the full 330-symbol list across all six table IDs and the 22-symbol list across all three namespace IDs (+1729 lines, as in the now-closed #1666). That inflates what the file claims is implemented, fans drift findings across features that do not own the symbol, and leaves attribution arbitrary, since buildSymbolIndex last-wins on collision. Under that shape only 2 of 9 split features resolved to their own entry point; here it is 9 of 9.

Test plan

Validated against current supabase/sdk@main, with #74, #75 and #76 all merged:

  • validate-compliance: OK — compliance file is valid. Two features remain undeclared (postgres_changes_multiple_filters, error_codes); both are pre-existing and out of scope here.
  • check-drift against symbols extracted with the real Dart extractor: ✅ No capability matrix drift detected.
  • check-api-symbols: all public API accounted for; 887 symbols covered, unchanged from before this PR.
  • Verified no unintended edits: every feature outside the rename and split scope is byte-identical to main after re-serialization.
  • CI re-run after the upstream merges: Validate compliance file and Check public API against capability matrix both green.

No SDK code changes, only capability declarations.

Context: SDK-1439

Summary by CodeRabbit

  • Improvements
    • Standardized capability names for password reset and realtime broadcast functionality.
    • Clarified storage file listing capabilities, including pagination and sorting support.
    • Added more granular capability definitions for Iceberg namespaces and tables.
    • Consolidated shared Iceberg models, errors, catalog access, and supporting symbols for more consistent capability descriptions.

Alternative to #1666, for comparison. Applies the same five renames from
supabase/sdk#74, but splits the Iceberg entries using the entry-point and
supporting-symbol distinction proposed in supabase/sdk#75 instead of
replicating one symbol list across every new feature id.

- auth.sign_in.reset_password -> auth.sign_in.send_password_reset_email
- realtime.channel.send -> realtime.channel.broadcast
- storage.file_buckets.list_files_paginated merged into list_files
- storage.analytics.iceberg_namespace split into create/list/delete
- storage.analytics.iceberg_table split into create/list/load/update/rename/delete

`symbols` now holds only the methods a caller invokes, which is what the
drift check verifies. Option and result types sit under the feature's
`supporting_symbols`. The Iceberg type model, the exception hierarchy and
the operations the canonical matrix has no id for are listed once at the
top level rather than attributed to a verb they do not belong to.

Depends on supabase/sdk#74 and supabase/sdk#75.
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e3202370-ae3e-4387-9aed-5504f23f7309

📥 Commits

Reviewing files that changed from the base of the PR and between 3c82d03 and abac5cc.

📒 Files selected for processing (1)
  • sdk-compliance.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • sdk-compliance.yaml

📝 Walkthrough

Walkthrough

The SDK compliance matrix renames canonical capability IDs, consolidates storage listing symbols, splits Iceberg namespace and table operations, and moves shared Iceberg symbols into a top-level supporting_symbols section.

Changes

Compliance matrix alignment

Layer / File(s) Summary
Capability identifiers and storage listing
sdk-compliance.yaml
Auth and realtime capability IDs use canonical names. Pagination, sorting, and supporting symbols are consolidated under storage.file_buckets.list_files.
Iceberg operation capabilities
sdk-compliance.yaml
Iceberg namespace and table operations use separate capabilities with operation-specific methods, request/result models, and update symbols.
Shared Iceberg supporting symbols
sdk-compliance.yaml
Shared Iceberg models, metadata structures, credentials, catalog access, and exception classes are moved to supporting_symbols.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

  • supabase/supabase-flutter#1666: Both PRs update sdk-compliance.yaml with capability renames, storage listing consolidation, and Iceberg capability decomposition.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the reconciliation of sdk-compliance.yaml with capability matrix renames and splits.
Linked Issues check ✅ Passed The PR updates all renamed, merged, and split capability IDs while preserving symbol coverage and avoiding SDK code changes [#1666].
Out of Scope Changes check ✅ Passed The changes remain within sdk-compliance.yaml and address only the capability renames, merges, splits, and symbol coverage.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sdk-1439-supporting-symbols

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

spydon added 2 commits August 7, 2026 11:38
Derives each supporting type's owner from the source rather than by hand:
a type reachable from exactly one feature's entry points belongs to that
feature. 35 of 67 Iceberg types now have a single natural owner. Types
reachable from several features (the schema and type model) or from none
because they are thrown rather than passed (the exception hierarchy) stay
at the top level.
Every Iceberg catalog operation now has a feature id, so loadNamespaceMetadata,
namespaceExists, updateNamespaceProperties, registerTable and tableExists move
out of the top-level supporting bucket into entries of their own. That also
gives RegisterTableRequest and UpdateNamespacePropertiesResult a real owner,
leaving nothing at the top level but genuinely shared types.
@spydon
spydon marked this pull request as ready for review August 7, 2026 12:31
@spydon
spydon requested a review from a team as a code owner August 7, 2026 12:31

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 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 `@sdk-compliance.yaml`:
- Line 767: The YAML incorrectly places paginated file-listing symbols under
storage.file_buckets.list_files. Add a separate
storage.file_buckets.list_files_paginated capability, move
StorageFileApi.listPaginated and its pagination options/result symbols there,
and keep StorageFileApi.list mapped only to storage.file_buckets.list_files.
🪄 Autofix

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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 92cc57ad-86ee-4877-a772-65477aae3ac4

📥 Commits

Reviewing files that changed from the base of the PR and between 7a04241 and 3c82d03.

📒 Files selected for processing (1)
  • sdk-compliance.yaml

Comment thread sdk-compliance.yaml Outdated
@spydon spydon changed the title chore: update sdk-compliance.yaml for renamed capability matrix IDs chore: reconcile sdk-compliance.yaml with capability matrix renames and splits Aug 7, 2026
The merged list_files entry kept every symbol from the old paginated
entry under `symbols`, so the option, result and sort types counted as
evidence the capability exists. Only StorageFileApi.list and
listPaginated are entry points; the rest move to supporting_symbols.

Also restores the note to its usual position after status, where the
serializer had appended it to the end of the entry.
@spydon
spydon merged commit 8b6a634 into main Aug 7, 2026
27 checks passed
@spydon
spydon deleted the sdk-1439-supporting-symbols branch August 7, 2026 13:26
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.

2 participants