Compare commits

..
11 Commits
Author SHA1 Message Date
CI aed2762650 Bump version to 1.2.0-RC.4 [skip ci] 2026-11-12 17:29:38 +00:00
james.maes 08654c7e0d Merge pull request 'fix(targets): ask whether a table is readable as a query (release/1.2 port of #69)' (#70) from fix/target-read-asked-as-query-1.2 into release/1.2
maven / build (push) Successful in 6m50s
build / maven (push) Successful in 6m50s
2026-11-12 17:22:56 +00:00
james.maesandClaude Fable 5.2 a1c856b8be fix(targets): ask whether a table is readable as a query, not with an untyped input
maven / build (push) Successful in 7m15s
build / maven (push) Successful in 7m15s
TargetResolver.canReadTable asked PermissionsHelper.hasTablePermission with a
bare AbstractActionInput. Core hands a table's custom permission checker the
action input and not the permission asked, so a checker that tells a read
from a write by the input's type (a query, a get or a count reads; anything
else is refused) refused the question. For such a table every recents and
favorites call answered "Not found" for people the checker lets read it:
the UI sends POST /recents on every list and record screen, so each of them
showed "Resource not found POST /qqq/v1/qbit/collaboration/recents (HTTP
404)".

The read is now asked with a QueryInput for the table, the read it stands
for; ParentRecordAccess already asks with a GetInput. Who may read a table
does not change: the checker still decides, and a person it refuses is
still answered "Not found" (RecentsServiceTest
.tableWithAnInputTypedPermissionCheckerIsATarget, which failed before with
QNotFoundException on the first call).

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-12 11:07:04 -06:00
CI 83d80c1305 Bump version to 1.2.0-RC.3 [skip ci] 2026-11-10 21:46:15 +00:00
james.maes 38d54231a5 Merge pull request 'perf: skip tag lookups for tables with no tag assignments' (#67) from fix/read-path-statements-1.2 into release/1.2
maven / build (push) Successful in 7m9s
build / maven (push) Successful in 7m9s
2026-11-10 21:39:08 +00:00
james.maesandClaude Fable 5.2 b9137b3379 perf(security): authorize each distinct parent once per child result page
maven / build (push) Successful in 6m40s
build / maven (push) Successful in 6m40s
ParentRowCustomizer and AttachmentPreviewCustomizer read the parent of
every child row to decide whether the row is visible, so rows that share a
parent repeated the same read: 61 tasks on two parents ran 61 parent reads
(TagLookupStatementBudgetTest), now 2. The answer is kept only for the one
postQuery call, where the session and transaction cannot change.

Also correct the README: the Tags field is selectable.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-10 15:24:58 -06:00
james.maesandClaude Fable 5.2 50226fbabc perf(tags): no assignment lookup for tables that have no tags
maven / build (push) Successful in 7m38s
build / maven (push) Successful in 7m38s
Core selects the Tags virtual field for every query or get that names no
fields, so every such read of a TAGS-enabled table ran one
collaboration_record_tag statement, including reads made one record at a
time and tables that were never tagged. Measured with 600 added parents
(TagLookupStatementBudgetTest): a 602-row list ran 2 statements, 600 gets
ran 600 and 100 single-record updates ran 100; now 1 probe, then 0.

TaggedTables remembers, per node and per table, whether any assignment
exists (core Memoization registered with ClusterCaches, 30 s by default,
withTagLookupCacheSeconds, 0 disables). Writing an assignment clears it at
once and after commit and publishes memo-invalidate. The probe ignores row
locks and returns no data, so the answer is the same for every session.
Tables with assignments are read as before: one lookup per 500 parents.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-10 15:22:19 -06:00
CI 5673962a89 Bump version to 1.2.0-RC.2 [skip ci] 2026-11-10 15:34:52 +00:00
james.maes 84b92eec34 Merge pull request 'fix(upload-journal): accept Amazon Aurora PostgreSQL (full_page_writes=off) [release/1.2]' (#66) from fix/aurora-full-page-writes-1.2 into release/1.2
maven / build (push) Successful in 7m7s
build / maven (push) Successful in 7m7s
2026-11-10 15:27:47 +00:00
james.maesandClaude Fable 5.2 7874e6edb6 fix(upload-journal): accept Amazon Aurora PostgreSQL (full_page_writes=off)
maven / build (push) Successful in 6m39s
build / maven (push) Successful in 6m39s
The PostgreSQL 17 journal qualification refused every call on Amazon Aurora
PostgreSQL, which reports full_page_writes=off and does not expose the
parameter in its cluster parameter group.

- The settings query gains an eleventh column,
  to_regprocedure('aurora_version()') IS NOT NULL, which is true on Aurora,
  false on stock PostgreSQL 17 and never raises.
- full_page_writes=off is accepted only when that column is true. Stock
  PostgreSQL with full_page_writes=off is still refused, and synchronous_commit,
  fsync, recovery, isolation, time zone and lock timeout are unchanged on Aurora.
- The decision is the pure function tornPagesPrevented, covered by an always-on
  unit test. The opt-in real PostgreSQL 17 suite simulates Aurora with a
  function named aurora_version() and full_page_writes=off on the server.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-10 09:12:11 -06:00
CI 4df3f17498 Bump version to 1.2.0-RC.1 [skip ci] 2026-11-07 18:16:34 +00:00
+1 -1
View File
@@ -21,7 +21,7 @@
<!-- Only the published Redis API package is a permitted cross-qbit boundary. -->
<qbit.guardrails.allowedApiPackages>com.kingsrook.qbits.objectstorage.api,com.kingsrook.qbits.email.api,com.kingsrook.qbits.redis.api</qbit.guardrails.allowedApiPackages>
<qbit.guardrails.allowedQbitArtifacts>com.kingsrook.qbits:qbit-object-storage,com.kingsrook.qbits:qbit-email,com.kingsrook.qbits:*-api,com.kingsrook.qbits:qbit-redis</qbit.guardrails.allowedQbitArtifacts>
<revision>1.2.0-SNAPSHOT</revision>
<revision>1.2.0-RC.4</revision>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<jacoco.version>0.8.15</jacoco.version>