@supacloud/cli 0.29.0 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -142,6 +142,9 @@ supacloud-cli release postgrest_status --ref abc123
142
142
  supacloud-cli release postgrest_restart --ref abc123
143
143
  supacloud-cli release release_canary_fixture_stage_replay --ref abc123 \
144
144
  --subject <central-subject-uuid> --request_id <stage-request-uuid>
145
+ supacloud-cli release release_canary_fixture_disable_replay --ref abc123 \
146
+ --fixture_id <fixture-uuid> --disable_request_id <disable-request-uuid> \
147
+ --issuer <issuer-url> --subject <central-subject-uuid>
145
148
  ```
146
149
 
147
150
  Backup creation reports success only after the CLI verifies exactly one new
@@ -171,6 +174,17 @@ reads the selected project's authoritative endpoint projection and requires the
171
174
  configured application origin to match its API origin or alias. Production
172
175
  confirmation is mandatory.
173
176
 
177
+ `release_canary_fixture_disable_replay` performs one non-retried call to the
178
+ fixed `fa_release_canary_fixture_disable` PostgREST RPC using the selected
179
+ project's application service-role origin. Its receipt must contain exactly
180
+ `fixtureId`, `state="disabled"`, and a boolean `idempotent`; both the first
181
+ disable (`idempotent=false`) and same-request replay (`idempotent=true`) are
182
+ valid. The CLI then calls the existing fixed
183
+ `fa_release_canary_fixture_pending` RPC with only the exact issuer and subject
184
+ query parameters and accepts only its authoritative JSON boolean `false`
185
+ read-back. The fixture binding comes from the validated disable receipt before
186
+ reporting success. Management endpoint projection is checked before and after.
187
+
174
188
  The legacy `.env` fallback is unclassified and therefore does not enable the
175
189
  production confirmation gate. Production automation must select a `prod` or
176
190
  `production` profile, or set `SUPACLOUD_ENV=production` together with a complete
@@ -218,6 +232,7 @@ supacloud-cli task_events inspect_webhook --ref abc123
218
232
  supacloud-cli database query --sql "select now()"
219
233
  supacloud-cli database query --ref abc123 --file ./queries/vector-search.sql
220
234
  supacloud-cli database migration_inventory --ref abc123
235
+ supacloud-cli database lint_migrations --dir supabase/migrations
221
236
  supacloud-cli database push_migrations --ref abc123 --dir supabase/migrations --dry_run
222
237
  supacloud-cli supabase migration_new --name add_accounts
223
238
  supacloud-cli supabase db_diff --schema public --name add_accounts
@@ -263,6 +278,11 @@ it never empties a bucket. Mutation receipts bind `project_ref`, `bucket_id`,
263
278
  name with another version, or a local version with another name, before either
264
279
  dry-run reporting or apply can continue. This keeps the preview consistent with
265
280
  the server conflict that would otherwise occur after deployment starts.
281
+ `push_migrations` requires canonical string migration identities; the narrower
282
+ `baseline_migrations` compatibility path also accepts historical safe-integer
283
+ versions and normalizes them before comparison. Repeated historical `cli_push`
284
+ names are treated as generic labels; version and exact content remain the
285
+ authority.
266
286
  Mutation failures use the release-control receipt schema and never include the
267
287
  server response body. `OUTCOME_UNKNOWN` requires a fresh migration inventory
268
288
  read before deciding whether a retry is safe. A migration push failure also
@@ -271,6 +291,43 @@ can reconcile a partially completed sequence without exposing SQL. Baseline
271
291
  success requires a bounded migration-inventory readback that confirms every
272
292
  requested version, name, baseline marker, and checksum.
273
293
 
294
+ `database lint_migrations` is local-only and works without Management API
295
+ credentials. Inspect one source with `--sql`, `--file`, or `--dir`; these inputs
296
+ are mutually exclusive. `--strict` (or `--fail_on_high`) exits non-zero for HIGH
297
+ findings, `--fail_on_medium` also fails on MEDIUM findings, and `--json` emits a
298
+ structured report. The analyzer detects destructive DDL (`DROP TABLE`,
299
+ `DROP COLUMN`, `TRUNCATE`, `RENAME`), table-locking risks, opaque `DO` blocks,
300
+ procedural definitions/calls that require manual review, and statements that
301
+ cannot run in the transactional migration executor. Empty migrations,
302
+ unterminated strings/comments/dollar quotes, role or cluster management,
303
+ external database access, server file/process access, transaction-boundary or
304
+ session-identity control, advisory locks, public-schema rename/removal, and
305
+ direct migration-ledger schema, table, recorder, or privilege mutation fail
306
+ before the first remote migration write. Ledger indexes, triggers, rules,
307
+ policies, comments, security labels, and table maintenance commands are covered
308
+ by the same fail-closed rule. Top-level `COPY` is also rejected
309
+ because the HTTP migration executor cannot provide a safe client stream and
310
+ server-file targets cross the project boundary. Unicode-escaped identifiers
311
+ (`U&"..."`) are rejected because the policy cannot safely canonicalize protected
312
+ schema and ledger names. One matching outer `BEGIN`/`COMMIT` wrapper is removed
313
+ because the platform owns the transaction.
314
+ Adding a `NOT NULL` column is assessed per top-level `ALTER TABLE` subcommand;
315
+ function-based defaults remain MEDIUM risk because they may rewrite the table.
316
+ Dry-run exits non-zero for statements the transactional executor cannot apply,
317
+ even when strict destructive-risk mode is not enabled.
318
+ `CREATE/DROP INDEX CONCURRENTLY`, `VACUUM`, and other non-transactional work must
319
+ run through an approved maintenance path outside `push_migrations`.
320
+
321
+ Migration applications and DDL executions send PostgREST schema reload
322
+ notifications (`NOTIFY pgrst_<ref>, 'reload schema'`) so schema changes become
323
+ visible without a manual PostgREST restart. Responses distinguish `notified`
324
+ from `notification_failed` and include `ddl_committed=true` when the platform
325
+ can prove the DDL committed. Admin SQL with explicit transaction control or
326
+ indirect `CALL`/`DO` execution omits `ddl_committed`; for
327
+ `database create_table_rls`, a committed DDL batch followed by a failed reload
328
+ returns `PARTIAL_SUCCESS` instead of claiming complete success or an unknown DDL
329
+ outcome.
330
+
274
331
  `edge_functions deploy --path` bundles local TypeScript and dependencies with
275
332
  Bun and runs a local syntax check before upload. The Management API validates and
276
333
  normalizes the final server-side artifact against the multi-tenant Edge Runtime