Vol. IX · Functory Quarterly№ 001 · Edition 2026
I
The changelog

What shipped.

Monthly release notes for the platform.

New primitives, composition patterns, CDC and projection improvements, CLI verbs, deprecations. Reverse-chronological.

  1. 01v0.37.0

    Two new composition patterns land in the App Config Tool, and the Neo4j projection gains incremental CDC.

    • a

      App Config Tool: two new composition patterns

      tenant-billing-rollup and audit-by-retention-class. The Config Tool now suggests both during step 04 when an archetype matches a finance- or compliance-shaped application.

    • b

      Neo4j projection: incremental CDC

      Previously the Neo4j replica rebuilt the graph nightly from a DynamoDB export. It now consumes the same CDC stream as Aurora and OpenSearch, with convergence measured in seconds rather than hours.

      Neo4jProjectionConfig.scala
      val config = Neo4jProjectionConfig(
        mode      = ProjectionMode.Incremental,
        batchSize = 500,
        relations = Seq(
          GraphEdge(from = "User",    to = "Organization", via = "memberOf"),
          GraphEdge(from = "Payment", to = "Invoice",       via = "settles"),
        ),
      )
    • c

      ExpiryRule on lifecycle transitions

      LifecycleConfig gains an ExpiryRule primitive. A transition that has not fired after a declared duration is advanced automatically. Used by the reservation and cart primitives; available to all entities.

  2. 02v0.36.0

    OpenSearch projection learns hybrid vector + keyword search. EventBridge archive retention becomes tenant-scoped.

    • a

      OpenSearch: hybrid vector search

      The OpenSearch projection can now index an entity field through an embedding model and expose hybrid keyword + vector queries via the same EntityQuery API. Configuration is declarative; no new runtime surface.

      ProductConfig.scala
      val productConfig = EntityConfig(
        name      = "Product",
        fragments = Seq("category"),
      ).withSearch(
        SearchConfig(
          textFields      = Seq("title", "description"),
          vectorFields    = Seq(VectorField("description", model = "titan-v2", dim = 1024)),
          hybridFusion    = Reciprocal(rrfK = 60),
        ),
      )
    • b

      EventBridge archive: per-tenant retention

      Archive retention is now a tenant config, defaulting to 90 days. Regulated customers can extend their own tenant to 7 years without affecting others on the same bus. No code changes required in application code.

    • c

      CLI: functory diff

      A new CLI verb prints the concrete AWS resource diff a deploy would produce, grouped by stack. Useful when reviewing a PR that touches EntityConfig before infrastructure cost committing.

  3. 03v0.35.0

    Configuration Assistant reaches GA. Two new primitives for marketplace workflows.

    • a

      Configuration Assistant: general availability

      Single-entity generation moves out of preview. The assistant produces an EntityConfigDTO plus a Scala EntityConfig file, committed directly to your repository. Refusal behavior is documented for prompts that would produce unsafe GSI key layouts.

    • b

      Dispute primitive

      MarketplaceDispute joins the marketplace primitive family. Lifecycle covers Open → UnderReview → Resolved / Escalated, with a built-in guard that prevents resolution while a parent Payment is still in Authorized state.

    • c

      PriceAlert primitive

      A TENANT-scoped alert entity for marketplace listings. Subscribers receive a notification via the standard Notification primitive when a Listing crosses a configured price threshold. Polling is backed by the Task primitive, not a standalone service.

    • d

      Deprecation

      The legacy EntityConfig.withCustomValidation(f: Any => Boolean) signature is deprecated in favor of MvelRuleRegistry. Removal scheduled for 0.38.

Release notes are published on the first business day of each month. The full CHANGELOG lives in the Functory/platform repository — this page is a curated summary.