Skip to main content

2025-10-26

  • Feature: Integration Account Console
    • Added /integration-accounts LCARS dashboard that aggregates hero metrics, Thor-generated IntegrationAccountTable, and template-driven creation w/ ExecModule linking.
    • Auto-computed templates for every Thor ExecModule metadata entry plus curated one-click providers (OpenAI, Gemini, Gmail, Stripe, Twilio, Slack, HubSpot, Salesforce, SecureKey).
    • Inline linking updates ExecModules through updateExecModuleMutation, closing credential gaps for Workflow Studio, billing flows, and GitHub automations.
    • Surfaced SecureKey-backed usage stats and category filters to mirror workflow coverage dashboards.
  • Tests & Docs
    • Added IntegrationAccountConsole.test.tsx with RTL coverage for hero render, category filtering, and modal orchestration.
    • Authored Workflow Engine/integration-account-console.mdx detailing setup, security posture, and related workflow artifacts.

2025-09-06

  • Added local Ehcache 3 (JCache) configuration and Spring Cache wiring for high‑value hot paths.
  • Introduced sidByUsername cache for AclSid lookups via AclSidLookupService.
  • Added micro‑TTL permissionDecisions cache for AclService.hasPermission(...) decisions.
  • Reduced KMSSecureFieldAspect logging to WARN by default in production settings.
  • Included unit test for AclSidLookupService caching behavior.

2025-09-07

  • Fix: LLM Chat SYSTEM principal crash
    • Updated thorapi ACL to handle non-UUID principals safely.
    • ValkyrACL.resolveAuthenticatedPrincipalId now treats SYSTEM/anonymousUser case-insensitively and only parses UUID-looking strings.
    • Prevents Invalid UUID string: SYSTEM during LLM chat secure-field reads when running as SYSTEM.
  • Hardening: SystemSidInitializer idempotency
    • Both thorapi and valkyrai SystemSidInitializer set deterministic UUIDs and check by ID and name before saving.
    • Prevents duplicate SYSTEM/ADMIN/EVERYONE/AUTHENTICATED SIDs if both initializers are active.

2025-10-21

  • Feature: One-click digital product publishing pipeline

    • Added DigitalProductWorkflowProvisioner to seed a default workflow chaining DigitalFulfillmentModule, new DigitalDownloadNotificationModule, and MailtrapSendModule for automated delivery email.
    • DigitalFulfillmentService.prepareDigitalProduct now auto-attaches the workflow, marks products available immediately, and returns automation metadata for the UI.
    • Introduced refreshDownloadLink helper used by notification workflows to rotate tokens without creating duplicate access rows.
    • Created DigitalDownloadNotificationModule ExecModule to compose email payloads and forward download access IDs to downstream mail modules.
  • Feature: Digital product quick publish UX

    • Added DigitalProductQuickCreatePanel to the File Record console for single-click promotion of scanned uploads to the product catalog.
    • Added RTK Query DigitalProductService + UI tests; integrates automation summary in success state so operators understand the workflow chain.
  • Tests

    • New unit suites for DigitalProductWorkflowProvisioner and DigitalDownloadNotificationModule plus RTL coverage for the quick create panel.

2025-09-08

  • Fix: Replace javax.servlet with jakarta.servlet in OpenAPI templates

    • Updated apiDelegate.mustache to use jakarta.servlet.http.HttpServletRequest.
    • Updated modelTest.mustache imports to jakarta.servlet.http.HttpServletRequest.
    • Regenerated API code for valkyrai; compile errors referencing javax.servlet.http resolved.
    • Added defensive null checks in ApiUtil.setExampleResponse and now pass HttpServletResponse via ServletRequestAttributes to avoid NPE during example response rendering.
  • 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>/stats endpoint 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.
  • Change: Relationship fetch based on requiredness

    • In generated JPA models, associations now use:
      • fetch = EAGER when the property is required
      • fetch = LAZY when the property is optional
    • For @ManyToOne, optional and @JoinColumn(nullable=...) mirror required.
    • Keeps payloads lean while eagerly resolving mandatory links.
  • Fix: Stable JSON for Hibernate lazy proxies

    • Added jackson-datatype-hibernate5 and configured Hibernate5Module.
    • Disabled forced lazy loading; serialize identifiers for uninitialized proxies.
    • Added Jackson mixins to ignore hibernateLazyInitializer/handler on proxies.
    • Resolves ByteBuddy proxy serialization failures on Application.openAPISpec.
  • Feature: Pimped ExecModules (Email + Stripe)

    • Added comprehensive Javadoc for MailtrapSendModule, EmailModule, and StripeCheckoutModule (inputs, outputs, env, error codes).
    • New docs page: Execution-Modules/stripe-module.mdx covering 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 name is unset.
    • Tests: Added StripeCheckoutModuleTest covering input validation and error branches.