Changelog

Notable changes on the Aroovo platform. Grouped by sprint where the sprint plan applies; entries link the short merge SHA so a reader can chase the exact commit in the public repo.

For the full per-commit log: GitHub commits on main. For the sprint roadmap: docs/sprint-plan-2026-05-25.md.

Sprint 2-3 · 2026-05-25 (Sprint 3 cont.)

Marketing surface + agent templates

  • Marketing site at aroovo.techb1dc7a9

    Homepage / features / for-resellers / contact pages ported into the console at /about /features /for-resellers /contact. Sign-in CTA + demo-request flow live.

  • Pre-built agent template browser9f97e54

    Reseller-facing template marketplace at /marketplace so a Brand-Owner can preview an agent persona before provisioning it. Lift for the design partner motion.

  • Agent instructions content (first pass)6804f1a

    Matt-authored agent persona instructions checked in under docs/. Drives the system-prompt defaults the agent loader reads on Tenant onboarding.

Sprint 1 · 2026-05-25 (Sprint 1)

Tech-debt cleanup + DB durability

  • Drop legacy Entra-only columns19eddbd

    After ADR-004 alt-auth Phase 5 backfilled all Brands onto the multi-provider columns, the legacy entraOid / entraTenantId / entraClientId User columns were dropped.

  • DB backups + tested restore drillb8223a9

    Nightly Postgres dump + a quarterly restore drill that exercises the actual restore path against a staging Postgres. Ungated by the Azure-hosting decision.

  • Sentry semver-major bumpcfd3fc4

    @sentry/nextjs 8.x → 10.x. Validated against the deploy pipeline before any tenant-touching work landed on top.

Sprint 0 · 2026-05-25 (Sprint 0)

Sprint planning + ADR landing

  • ADR-007 External OpenClaw agents150575b

    Proposes a runtime indirection that lets a Brand register an Agent row that runs on OpenClaw, not Aroovo. Sprint 5 motion; expands the moat beyond per-Brand white-label.

  • ADR-006 Team presetsc328ba7

    Proposes five role-based agent team presets (marketing-agency, sales-b2b, tech-services, ops-coo, support-only) plus full-stack. Replaces 28 onboarding checkboxes with one preset picker.

  • Brand + domain decisions locked

    Keep platform name "Aroovo", canonical domain aroovo.tech, console subdomain agents.aroovo.tech. Zero rename work — frees Sprint 2.

  • Sprint plan + competitor analysis8c1a128

    Locked the order of the 22 pending roadmap items; competitor + gap analysis identifies multi-tenant + Brand layer + BYO identity / LLM / ingress / MCP-native as the defensible wedge.

  • Azure hosting migration dropped9febcdc

    Cash-conservation call: stay on Hostinger + Caddy + GitHub Actions. ADR-002 marked superseded. Frees Sprint 1 of migration-blocked items.

Sprint 0 · 2026-05-25 (mid-week)

Slack ingress

  • Slack ingress shipped end-to-endc932dd8

    Five phases (interface + Teams relocation, inbound + signing verify, outbound + dispatcher, admin UI, channel-to-tenant mapping). Per-Brand BYO Slack App mandatory; DM + thread + @mention supported.

  • ADR-005 Slack ingress38c54e6

    Ingress abstraction so Teams + Slack + future Discord share a common dispatch path.

Sprint 0 · 2026-05-25 (early week)

Alternative auth providers (Google / Okta / Auth0)

  • Alt-auth shipped end-to-end662fc53

    Five phases (schema + interface, Google/Okta/Auth0 OIDC validators, console sign-in dispatch, admin UI, backfill + read-switch). One AuthProvider interface, four implementations; each Brand picks one.

  • ADR-004 Alternative auth providers608743c

    Extends ADR-003 §3.6 to Google Workspace, Okta, and Auth0 as first-class providers. Facebook and GitHub deferred; SAML federated through Okta/Auth0.

Pre-Sprint · 2026-05-24

Brand layer (white-label / reseller architecture)

  • Brand layer Phase 1 + 218935df

    Schema (Brand model + brandId FK), Phase 1 read APIs, Phase 2 CRUD + admin UI at /admin/brands. aroovo Brand seeded by boot hook.

  • Brand layer Phase 3 (theming + hostname)2a7db8a

    Per-Brand themeJson + primaryDomain + DNS-TXT verification; edge middleware attaches x-brand-id; per-Brand CSS injection at SSR.

  • Brand layer Phase 4 (BrandOwner + BYO Entra)402362a

    BrandOwner role; per-Brand entraTenantId + entraClientId; per-Brand Bot Framework app registrations.

  • Brand layer Phase 5 (offboarding)077beff

    30-day soft-delete window with bundle export of every audit row, tenant config, KB file, and secret reference.

  • Brand layer Phase 6 (per-Brand model routing)69710e7

    providerConfigJson with encrypted secret references for Anthropic / OpenAI / OpenRouter / OpenClaw keys.

  • Brand layer Phase 7 (analytics)3e65776

    Brand-Owner analytics — request count + latency rollups per Brand.

  • Security hardening C1-C7 + H1-H7 + M1-M6

    Multi-issuer JWT validator, AUDIT_HMAC_SECRET required in prod, encrypted secrets vault, MCP arg validation, per-tenant rate-limit + spend cap, SSRF protection on MCP bootstrap, BrandOwner tenant carve-out.

  • ADR-003 Brand layer

    Adds a Brand layer above Tenant. Each Brand has its own hostname, theme, IdP, LLM provider config, and Bot Framework / Slack app registrations.

Pre-Sprint · 2026-05-23

Self-hosted runtime + MCP

  • ADR-001 shipped (phases 1-6)

    In-process agent loop replacing Managed Agents; MCP as integration layer; provider-pluggable across Anthropic / OpenAI / OpenRouter / OpenClaw; multi-tenant scaffolding; legacy Managed Agents path removed.

  • Multi-tenant scaffolding

    Tenant model + tenantId on 13+ tables; per-tenant audit chain, rate-limit, spend cap, vault, standups, broadcast; /admin/tenants/new wizard.

See also: Architecture decisions (ADRs) — the canonical engineering record per load-bearing decision.