2025-09-06
- Added local Ehcache 3 (JCache) configuration and Spring Cache wiring for high‑value hot paths.
- Introduced
sidByUsernamecache forAclSidlookups viaAclSidLookupService. - Added micro‑TTL
permissionDecisionscache forAclService.hasPermission(...)decisions. - Reduced
KMSSecureFieldAspectlogging to WARN by default in production settings. - Included unit test for
AclSidLookupServicecaching behavior.
2025-09-07
- Fix: LLM Chat SYSTEM principal crash
- Updated
thorapiACL to handle non-UUID principals safely. ValkyrACL.resolveAuthenticatedPrincipalIdnow treatsSYSTEM/anonymousUsercase-insensitively and only parses UUID-looking strings.- Prevents
Invalid UUID string: SYSTEMduring LLM chat secure-field reads when running as SYSTEM.
- Updated
- Hardening: SystemSidInitializer idempotency
- Both
thorapiandvalkyraiSystemSidInitializerset deterministic UUIDs and check by ID and name before saving. - Prevents duplicate
SYSTEM/ADMIN/EVERYONE/AUTHENTICATEDSIDs if both initializers are active.
- Both
2025-09-08
-
Fix: Replace javax.servlet with jakarta.servlet in OpenAPI templates
- Updated
apiDelegate.mustacheto usejakarta.servlet.http.HttpServletRequest. - Updated
modelTest.mustacheimports tojakarta.servlet.http.HttpServletRequest. - Regenerated API code for
valkyrai; compile errors referencingjavax.servlet.httpresolved. - Added defensive null checks in
ApiUtil.setExampleResponseand now passHttpServletResponseviaServletRequestAttributesto avoid NPE during example response rendering.
- Updated
-
Feature: Lightweight per-entity stats endpoint and secured repository convenience queries
- Added derived Spring Data methods to every
*PageableRepository:count(),countByOwnerId(UUID ownerId),countByCreatedDateAfter(OffsetDateTime),countByLastModifiedDateAfter(OffsetDateTime),findTopByOrderByCreatedDateDesc()
- Added
GET /v1/<Entity>/statsendpoint per API interface returning JSON stats:count,ownedCount,createdLast24h,modifiedLast24h,latestCreatedAt
- Implemented in delegates with
@PreAuthorize("hasRole('EVERYONE') or hasRole('ADMIN')")and user-scoped cache keys.
- Added derived Spring Data methods to every
-
Change: Relationship fetch based on requiredness
- In generated JPA models, associations now use:
fetch = EAGERwhen the property isrequiredfetch = LAZYwhen the property is optional
- For
@ManyToOne,optionaland@JoinColumn(nullable=...)mirrorrequired. - Keeps payloads lean while eagerly resolving mandatory links.
- In generated JPA models, associations now use:
-
Fix: Stable JSON for Hibernate lazy proxies
- Added
jackson-datatype-hibernate5and configuredHibernate5Module. - Disabled forced lazy loading; serialize identifiers for uninitialized proxies.
- Added Jackson mixins to ignore
hibernateLazyInitializer/handleron proxies. - Resolves ByteBuddy proxy serialization failures on
Application.openAPISpec.
- Added
-
Feature: Pimped ExecModules (Email + Stripe)
- Added comprehensive Javadoc for
MailtrapSendModule,EmailModule, andStripeCheckoutModule(inputs, outputs, env, error codes). - New docs page:
Execution-Modules/stripe-module.mdxcovering setup and usage. - UI: Palette icons now include Stripe via
react-icons/si (SiStripe). - UI: Palette fetch hardened to accept API responses as either
["Class"]or[{ className: "Class" }]. - UI: Module picker shows friendly names for Stripe and Email modules when
nameis unset. - Tests: Added
StripeCheckoutModuleTestcovering input validation and error branches.
- Added comprehensive Javadoc for