Fix 3 bugs in privstack-datasets found during test coverage work
Details
1. DatasetColumnType::from_duckdb("DATETIME") mapped to Date instead of
Timestamp — the DATE branch matched before the TIMESTAMP/DATETIME
branch. Reorder match arms so Timestamp is checked first.
2. DatasetStore::delete() violated FK constraints by deleting the
_datasets_meta row before the _dataset_relations, _dataset_row_pages,
and _dataset_views rows that reference it. Reorder to delete
dependent rows first.
3. query_mutation_preview() panicked on DuckDB 1.4.4 because
column_count()/column_name() crash on un-executed prepared
statements. Use DESCRIBE to get column info instead.
Fix batch_ordering_by_list test prefix + auto-kill port conflicts in build.sh
Details
- cross_verify_integration.rs: list prefix was missing `users/` and
`workspaces/` path segments, so it matched 0 keys instead of 3
- build.sh: before starting test containers, kill any process already
bound to ports 9000 (MinIO) or 3307 (MySQL) to prevent docker
compose bind failures
Fix privstack-cloud test compilation errors
Details
Update test files to match current struct definitions:
- StsCredentials: add missing `prefix` and `endpoint` fields
- CloudSyncStatus: add `is_rate_limited`, `rate_limit_remaining_secs`,
`synced_entity_count`, `total_entity_count` fields
- PendingChanges: rename `entities` → `pending` field
- PendingEntity: rename `current_cursor` → `latest_cursor`, remove `batches`
Downgrade transient S3 errors to debug level in sync engine
Details
Add CloudError::is_transient() to detect 503s, connection resets, dispatch
failures, and timeouts. The sync engine now logs these at debug level with
a "(transient, will retry next cycle)" note instead of error/warn, reducing
log noise from normal S3 hiccups. Genuine failures remain at error/warn.
Fix overlapping form elements in Theme Editor preview
Details
Checkboxes and radio buttons were crammed into side-by-side *,* grid
columns and overflowing into each other. Replaced with full-width
stacked rows — each control type (inputs, checkboxes, radios, toggle,
progress bars) gets its own row with no overlap.
Get notified about new releases