yes: ConfigSync and most runtime; presign TTLs were NOT read back (fixed)
no: written from code
yes
object_storage_bucket_capability
yes: CapabilityStore
no: runtime probe
yes
object_storage_folder
yes: FolderIndex
no: index
yes
object_storage_object
yes: ObjectIndex and processes
no: index
yes
object_storage_object_version
NO: nothing reads or writes it (indexer lists current versions only)
no
yes, says "Not used yet"
object_storage_object_reference
yes: ReferenceScan
no: needs a host reference provider
yes
object_storage_header_rule
yes: DefaultObjectHeaderPolicy
yes: disabled default-mutable
yes
object_storage_protection_rule
yes: ProtectionRules
no: a rule needs a bucket (host-specific)
yes
object_storage_operation
yes: OperationLog
no: log
yes
object_storage_usage_daily
yes: StorageJobs
no: nightly job
yes
Changed
Wiring fix: the bucket row's maxPresignGetSeconds / maxPresignPutSeconds are now read at runtime (ConfigSync.withBucketOverrides, called from ObjectStorageRuntime.bucketConfig and ActionSupport.config), so they cap presigned links and the download-link action. publicBaseUrl, trashBucketAlias and trashPrefix are identity: rewritten from code on every sync and read-only in the UI, so they are not read back (test proves a tampered row is ignored and rewritten).
Help bundle plus ObjectStorageHelp (STAND-IN core=qqq#1198), Setup card on the Storage home (StorageSetupStatus; a host's own header policy counts as set up).
object-storage-defaults.changelog.sql: a disableddefault-mutable header rule (**, public, max-age=3600, priority 1000). Inserted disabled so no existing host changes on deploy. Only the sql-check precondition form is used.
README, CHANGELOG, UPGRADE (includes the behavior note about edited presign rows).
Db.java and ObjectStorageSchema are untouched (#18, #19).
Tests
BucketRowOverridesTest (row edit changes the presigned URL's X-Amz-Expires; identity stays code-owned), DefaultsChangelogTest (real Liquibase on H2/PostgreSQL mode: seeds, second run no-op, edit survives, existing rule and missing table are MARK_RAN, enabling the rule changes headers), ObjectStorageTablesGuardrailTest, StorageSetupStatusTest. ./mvnw verify green (138 tests, checkstyle, JaCoCo). Test deps added: h2 2.3.232, liquibase-core 4.33.0.
Not done
object_storage_object_version is not wired: indexing version history needs ListObjectVersions in the scanner and write-through (more than a day). The table and its Versions tab are labeled "Not used yet" in help and the guardrail lists it in NOT_USED_YET.
## Audit per table
| table | used? | seeded? | help |
|---|---|---|---|
| object_storage_connection | yes: ConfigSync (sync, `withOverrides` reads limits/timeouts) | no: written from code | yes |
| object_storage_connection_capability | yes: CapabilityStore | no: runtime probe | yes |
| object_storage_bucket | yes: ConfigSync and most runtime; presign TTLs were NOT read back (fixed) | no: written from code | yes |
| object_storage_bucket_capability | yes: CapabilityStore | no: runtime probe | yes |
| object_storage_folder | yes: FolderIndex | no: index | yes |
| object_storage_object | yes: ObjectIndex and processes | no: index | yes |
| object_storage_object_version | NO: nothing reads or writes it (indexer lists current versions only) | no | yes, says "Not used yet" |
| object_storage_object_reference | yes: ReferenceScan | no: needs a host reference provider | yes |
| object_storage_header_rule | yes: DefaultObjectHeaderPolicy | yes: disabled `default-mutable` | yes |
| object_storage_protection_rule | yes: ProtectionRules | no: a rule needs a bucket (host-specific) | yes |
| object_storage_operation | yes: OperationLog | no: log | yes |
| object_storage_usage_daily | yes: StorageJobs | no: nightly job | yes |
## Changed
- **Wiring fix:** the bucket row's `maxPresignGetSeconds` / `maxPresignPutSeconds` are now read at runtime (`ConfigSync.withBucketOverrides`, called from `ObjectStorageRuntime.bucketConfig` and `ActionSupport.config`), so they cap presigned links and the download-link action. `publicBaseUrl`, `trashBucketAlias` and `trashPrefix` are identity: rewritten from code on every sync and read-only in the UI, so they are not read back (test proves a tampered row is ignored and rewritten).
- Help bundle plus `ObjectStorageHelp` (STAND-IN core=qqq#1198), Setup card on the Storage home (`StorageSetupStatus`; a host's own header policy counts as set up).
- `object-storage-defaults.changelog.sql`: a **disabled** `default-mutable` header rule (`**`, `public, max-age=3600`, priority 1000). Inserted disabled so no existing host changes on deploy. Only the sql-check precondition form is used.
- README, CHANGELOG, UPGRADE (includes the behavior note about edited presign rows).
- Db.java and ObjectStorageSchema are untouched (#18, #19).
## Tests
`BucketRowOverridesTest` (row edit changes the presigned URL's `X-Amz-Expires`; identity stays code-owned), `DefaultsChangelogTest` (real Liquibase on H2/PostgreSQL mode: seeds, second run no-op, edit survives, existing rule and missing table are MARK_RAN, enabling the rule changes headers), `ObjectStorageTablesGuardrailTest`, `StorageSetupStatusTest`. `./mvnw verify` green (138 tests, checkstyle, JaCoCo). Test deps added: h2 2.3.232, liquibase-core 4.33.0.
## Not done
- `object_storage_object_version` is not wired: indexing version history needs ListObjectVersions in the scanner and write-through (more than a day). The table and its Versions tab are labeled "Not used yet" in help and the guardrail lists it in `NOT_USED_YET`.
- No protection-rule seed (needs a bucket).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Audit per table
withOverridesreads limits/timeouts)default-mutableChanged
maxPresignGetSeconds/maxPresignPutSecondsare now read at runtime (ConfigSync.withBucketOverrides, called fromObjectStorageRuntime.bucketConfigandActionSupport.config), so they cap presigned links and the download-link action.publicBaseUrl,trashBucketAliasandtrashPrefixare identity: rewritten from code on every sync and read-only in the UI, so they are not read back (test proves a tampered row is ignored and rewritten).ObjectStorageHelp(STAND-IN core=qqq#1198), Setup card on the Storage home (StorageSetupStatus; a host's own header policy counts as set up).object-storage-defaults.changelog.sql: a disableddefault-mutableheader rule (**,public, max-age=3600, priority 1000). Inserted disabled so no existing host changes on deploy. Only the sql-check precondition form is used.Tests
BucketRowOverridesTest(row edit changes the presigned URL'sX-Amz-Expires; identity stays code-owned),DefaultsChangelogTest(real Liquibase on H2/PostgreSQL mode: seeds, second run no-op, edit survives, existing rule and missing table are MARK_RAN, enabling the rule changes headers),ObjectStorageTablesGuardrailTest,StorageSetupStatusTest../mvnw verifygreen (138 tests, checkstyle, JaCoCo). Test deps added: h2 2.3.232, liquibase-core 4.33.0.Not done
object_storage_object_versionis not wired: indexing version history needs ListObjectVersions in the scanner and write-through (more than a day). The table and its Versions tab are labeled "Not used yet" in help and the guardrail lists it inNOT_USED_YET.🤖 Generated with Claude Code