Skip to content

AIOHM platform 2.9.0 ​

A white-label core. The founder's own brand site left the platform as a separate Composer package, and nothing in the core names it any more. A brand plugs in through extension points instead of edits to shared code.

For brand packages ​

  • Approval handlers: ApprovalHandlerRegistry hands approve and reject decisions to a handler registered per tool name. A failing handler puts the request back to pending.
  • Workflow engine: ExecuteWorkflowJob::registerServiceClass() beside the static allowlist; WorkflowQueueResolver picks a queue from metadata.dispatch_queue or registered rules.
  • Video: HyperFramesVideoService::registerTemplate(); the generic avatar_presenter template takes avatar, background and logo from options.
  • Mautic journey rules: config/journey_rules.php (points, log type, segments, stage owner, custom fields, tags per lead source). The core ships no rules.
  • Question catalogue: echo_intake.questions and current_question, or a registered source.
  • CSRF: a package exempts its own public endpoints with ValidateCsrfToken::except().

Platform features under their own names ​

  • Audience echo at /echo for every tenant in ECHO_INTAKE_TENANTS; brand line from ECHO_INTAKE_BRAND_NAME/_TAGLINE or the tenant name; review gate ECHO_REVIEW_ENABLED.
  • Echo moderation: EchoModerationAgent (agent name echo_review), ReviewEchoAnswer, EchoApprovalHandler (tool echo_human_answer). Older approvals keep working through legacy names a package registers.
  • Living answer: echo:synthesize-question hourly for every tenant with the intake enabled, in a voice from ECHO_SYNTHESIS_VOICE or the Brand Book.
  • Follower barometer at /barometer with config/barometer.php (BAROMETER_*), milestones and the AIOHM Social scoreboard.

Settings that moved from code to config ​

  • WHITE_LABEL_FACEBOOK_PAGE: the Facebook page the white-label proof post goes to. Blank leaves it as a draft. admin.aiohm.org must set it.
  • WHITE_LABEL_SCOUT_FALLBACK_CSV: optional fallback lead CSV.
  • MAUTIC_SEGMENT_ALIAS_* for the journey lead sources default to blank; the brand package that uses them sets them.

Migrations ​

  • Tenant: the founder brand's legacy daily-journey table is dropped on installs without the brand package. It is empty on every client tenant.

Upgrade notes ​

  • A per-agent model override saved under the previous moderation agent name does not carry over to echo_review.
  • Servers that run a brand package install it after the core sync; the fleet script ships the package as a Composer artifact built from its checkout.
  • bella-luna stays on 2.6.1 until its host runs PHP 8.4.