Skip to content

Release Notes

All notable changes to MetaOne Platform, organized by version.

For the full diff, see CHANGELOG.md in the repository root.


[Unreleased]

✨ New Features

Dynamic Extension Configuration

Extensions declare a configuration schema (ConfigManifest) in their manifest. The platform stores per-workspace config values in the database, encrypts secrets using AES-256-GCM, and validates required fields before allowing an extension to be enabled.

  • New PENDING_CONFIG extension status for extensions with unconfigured required fields
  • REST API: GET/PUT /admin/workspaces/{wsId}/extensions/{extKey}/config and POST .../validate
  • Secret values masked as •••••••• in API responses
  • ExtensionConfigProvider SDK interface for plugins to read config at runtime

Chatwoot IN_PROCESS Plugin

The Chatwoot extension has been converted from a standalone Spring Boot application to a PF4J plugin. Chat capabilities now route through the platform's capability system.

New capabilities:

  • chat.conversation.* — Conversation management
  • chat.message.* — Message operations
  • chat.member.* — Team member management
  • chat.widget.* — Widget config and identity token

Additional features:

  • Webhook handler with HMAC-SHA256 signature validation
  • platform.notification event handler — routes cross-extension notifications to Chatwoot messages
  • Conversation mapping with race condition handling (DataIntegrityViolationException retry)
  • Frontend widget integration (chatwoot-widget.js)

Generic Webhook Controller

POST /api/webhooks/{extensionKey} routes incoming webhooks to the matching WebhookHandler plugin. Returns HTTP 401 on signature validation failure.

New SDK Interfaces

  • WebhookHandler — Extension point for receiving authenticated external webhooks
  • WebhookAuthenticationException — Throw to signal signature validation failure (→ HTTP 401)
  • ChatwootUnavailableException — Thrown when the Chatwoot API is unreachable

🔄 Changed

  • Chatwoot extension runtime type changed: EXTERNAL_SERVICEIN_PROCESS
  • Chatwoot configuration moved from environment variables to dynamic per-workspace config via ExtensionConfigProvider
  • Chatwoot manifest updated: serviceBaseUrl removed; widget capabilities added

⚠️ Deprecated

  • chat-extension — Replaced by chatwoot-extension. Source is preserved in chat-extension/ with DEPRECATED.md. Removed from Maven reactor build.

🗑 Removed

  • Standalone Spring Boot application class from chatwoot-extension
  • REST controllers from chatwoot-extension (capabilities now route via PF4J)
  • chat-extension from parent pom.xml modules list

Known Issues (Current)

IssueSeverityWorkaround
Full mvn test fails on Spring context startupP1Run mvn -pl metaone-core -Dtest=ExtensionInstallerServiceTest test
Stale CRM manifest permissions in MarketplaceServiceStubP2Documentation/informational only — no runtime impact for in-process extensions
tenantId / workspaceId naming inconsistency in SDKP2Treat as equivalent; cleanup planned
Plugin DB schemas use ddl-auto: update (not Flyway)P2Acceptable for development; production deployment should use proper migrations
requiresPlatformVersion not strictly enforcedP2Manifest field is parsed; enforcement planned

Planned (Next Release)

FeaturePriorityNotes
Fix mvn test context startup failureP1Add missing CapabilityException to metaone-sdk
Fix stale CRM manifest in MarketplaceServiceStubP2Permission list cleanup
Unit tests: CRM event publishing + Chat notification handlingP2Zero coverage currently
Enforce requiresPlatformVersion compatibility checkP2Wire up CompatibilityService
tenantIdworkspaceId SDK naming cleanupP2With deprecation alias
Extract getOrCreateSystemChannel helper in ChatServiceP3~70 lines of duplicated code
Maven archetype for extension scaffoldingP3mvn archetype:generate to scaffold a new extension
Flyway/Liquibase for plugin database schemasP2Replace ddl-auto: update
Per-workspace Chatwoot configurationP3Allow different Chatwoot instances per workspace
Chatwoot API rate limiting / circuit breakerP3Retry-after parsing + circuit breaker

MetaOne Platform Documentation