Back to the changelog

v0.15

June 2, 2026

Security hardening, flow-scoped API keys and Flow Agent polish

  • Security

    Full security hardening (codebase audit)

    Closed a security audit with 9 fixes on the product's "side" boundaries. In short: deactivating a tenant now really blocks every machine-to-machine integration (API keys, extension tokens, MCP keys, n8n callbacks), not just UI access; the Chrome extension's CORS is restricted to an explicit allowlist of official IDs instead of accepting any extension; super-admin impersonation is blocked on deactivated tenants; item creation via MCP now follows the same rules as REST (activation mode, start policy); the legacy task-complete route now validates that the task belongs to the item and the caller is assigned; the production deploy is aligned (mandatory secrets on every service, demo seed off by default); dependencies updated to clear known advisories.

  • Security

    Flow-scoped API keys

    API keys generated from a flow's designer are now valid only for that flow, no longer for every published flow in the tenant. The trigger endpoint rejects a key used on an unauthorised flow. Keys created from Settings → API remain tenant-wide (clearly stated). Every key creation/revocation is now recorded in the audit log.

  • Security

    Events: who can raise them

    Each event definition can now restrict which roles may raise it via the API (/events/raise), using system roles or custom roles. The default is unchanged (any Operator or above), so existing configurations keep working.

  • Improvement

    Flow folders: two fixes

    Moving a flow into a folder now works (it previously failed with "Move error") and the folder's flow counter updates immediately, without a page reload. Also fixed the "move to folder" menu, which was being clipped inside the card.

  • Improvement

    Flow Agent: today's date and multilingual messages

    The agent now knows today's date: asking for "by tomorrow" yields the correct date (it could previously propose old dates taken from the model). The agent's generated messages (start confirmation, missing data, started) are now in the interface language (Italian/English), with no extra AI calls — so no added cost or latency.