diff --git a/CHANGELOG.md b/CHANGELOG.md index 9579e4bcb..ac784312d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,13 @@ All notable changes to this project are documented in this file. The format is b including delegated share management: a role implying `ACTION_SHARE` may list, grant and revoke shares on that resource. Default view/edit roles remain unchanged; no migration (#707). +- Tenant-scoped sync file worker contracts (`store_path`, `open_local`, and + `presigned_url`), reusing worker settings/pools, upload validation and hashing, + with commit compensation and `FileUploaded` publication after commit (#708). +- **Behaviour change:** S3 server-side uploads (including browser single-request + ones) above `direct_upload_threshold_bytes` now use bounded multipart, including + unknown-length streams, with size/part bounds and abort on failure; the S3 + credentials need `s3:AbortMultipartUpload` (#708). - Users auth emails support ordered host template directories through the restart-required DB setting `mail_template_dirs`, with per-file bundled fallback and optional autoescaped HTML alternatives (#712). @@ -43,6 +50,11 @@ All notable changes to this project are documented in this file. The format is b most 32 characters now fail at registration (#707). ### Fixed +- `file_storage_stored_file.size_bytes` is now `BIGINT` (migration `f5b1c3e8a207`, + which also gives `file_storage` its own branch label): on PostgreSQL it was a + 32-bit `INTEGER`, so a file of 2 GiB or more failed on insert (#708). +- A cancelled one-shot upload's metadata write now also deletes the uploaded + object (#708). - **Behaviour change:** bare UI borders now use the theme border colour in light and dark themes, including pseudo-elements. Use `border-current` to retain the previous foreground-coloured look; explicit border colour utilities still win (#714). diff --git a/CLAUDE.md b/CLAUDE.md index 265690d07..3a8147407 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -313,7 +313,7 @@ development and testing (`session_cookie_secure`). four roots (`77162e7b184b` initial schema, `e36ab09c4a92` tenants, `f733c7938fd1` sharing, `d263ea727663` the framework's `sm_lease`) and six heads (`audit_log`, `tenants`, `keycloak`, `sharing`, `leases`, and the users - trunk, which Alembic reports as `api_tokens` and, since #536, + trunk, which Alembic reports as `api_tokens`, `users`, `file_storage` and, since #536, `background_tasks`). Apply with `upgrade heads` (what `make migrate` does); plain `revision --autogenerate` refuses with "Multiple heads", so name the branch: diff --git a/docs/database/migrations.md b/docs/database/migrations.md index 096f18cfd..c1f54896e 100644 --- a/docs/database/migrations.md +++ b/docs/database/migrations.md @@ -21,7 +21,7 @@ The history is **not** a single linear chain. It has several roots and several h | Head | Owning module | Label Alembic reports | |---|---|---| -| `b31a70971001` | background_tasks (resource references) | `api_tokens`, `background_tasks`, `users` | +| `f5b1c3e8a207` | file_storage (`size_bytes` BIGINT) | `api_tokens`, `background_tasks`, `file_storage`, `users` | | `a7c2e91d4b58` | audit_log | `audit_log` | | `f1a9c3d7b2e4` | tenants | `tenants` | | `d263ea727663` | framework (`sm_lease`) | `leases` | @@ -34,11 +34,11 @@ A module's first migration sets `branch_labels = ("",)`. Alembic ** ### Known mislabels -The declared `branch_labels` are `audit_log`, `api_tokens`, `background_tasks`, `keycloak`, `tenants`, `sharing`, `leases` and `users` (added by `a625f0b7c912`). The graph carries these defects; they are documented rather than rewritten, because changing labels on revisions that installed databases already applied is not worth the risk: +The declared `branch_labels` are `audit_log`, `api_tokens`, `background_tasks`, `keycloak`, `tenants`, `sharing`, `leases`, `users` (added by `a625f0b7c912`) and `file_storage` (added by `f5b1c3e8a207`). The graph carries these defects; they are documented rather than rewritten, because changing labels on revisions that installed databases already applied is not worth the risk: - `51b2058d8afd_api_tokens_initial` sits in the middle of the trunk, so every revision above it (file_storage, background_tasks including the outbox, and the users revisions through `c8e4f1a2b6d9`) reports the `api_tokens` label. The `api_tokens` head is therefore really a users revision. - `keycloak` branches off a users revision, so a Keycloak-only install still builds the users schema. -- `users`, `file_storage`, `background_tasks`, `settings`, `permissions` and `feature_flags` have no label of their own. +- `settings`, `permissions` and `feature_flags` have no label of their own. `users` and `file_storage` gained labels late (`a625f0b7c912`, `f5b1c3e8a207`), so their earlier revisions stay unlabelled and report `api_tokens`. Guidance: give an unlabelled module a `branch_labels` on its **next** revision. Adding a label to an existing revision file is technically possible, because `alembic_version` stores revision ids and never labels, but it also relabels every descendant and changes what `