Skip to content

AI Workspace Search (ai 1.3.0) — Production Readiness Audit

FieldValue
Date2026-08-31
StatusEng Ready / Go — remediations closed on feature/ai-workspace-search; operator deploy + PR merge remaining
ScopeCross-module Ask EloSync tool search_workspace (Wave A+B+C providers), resilient fan-out, citation deep links, Search workspace starter chip; catalog ai 1.2.0 → 1.3.0; lead create assignee eligibility fix
Branchfeature/ai-workspace-search (Backend / Frontend / Mobile / Docs); Website roadmap sync on same milestone
CompanionAI deployment · AI production readiness (platform) · AI tools · Tenant AI API · User guide · CHANGELOG

PRs: open from feature/ai-workspace-search (not yet merged to main at audit time).


Executive summary

Additive AI tools depth: one read-only agent tool fans out SQL/LIKE search across 20 entitled + permitted modules (Wave A+B CRM/sales/billing/purchasing/people/products plus Wave C documents, knowledge-base, activities, meetings). Existing specialized tools stay registered. Provider failures are isolated (modules_failed) so one module error cannot fail the whole tool. No RAG/embeddings, no schema changes beyond catalog version bump, no new permissions.

Go / No-Go: Go (engineering ready). Production cutover requires migrate-only catalog bump to 1.3.0, SPA + Mobile deploy in the same window, and staging smoke of Search workspace.

GateResult
Platform freeze (AIGateway + AIToolRegistry only)Pass
search_workspace module(): null; providers enforce entitlement + *.viewPass
Tenant isolation (BelongsToTenant via domain services)Pass
Hit payload: id + uuid + path for citationsPass
Limits clamped (limit_per_module ≤ 10, limit_total ≤ 50)Pass
Per-provider try/catch → modules_failedPass
Wave C providers (documents, knowledge-base, activities, meetings)Pass
Catalog bump migrate-only ai 1.3.0 + CatalogSeeder syncPass
System prompt prefers workspace search; citation paths include Wave CPass
Web + Mobile citation maps Wave A+B+C + Search workspace starter (ai + ai.use)Pass
Lead create does not default assignee to ineligible ownerPass
Docs (tools, API, user, mobile, deployment, roadmap, changelog, website)Pass
Pest AiWorkspaceSearchTest + auth registryPass — 18/18 workspace search + auth (2026-08-31 remediations)
Playwright test:e2e:ai serialPass — 8/8 (2026-08-31; includes Search workspace starter)

Locked-decision matrix

DecisionBackendFrontendMobileDocs
One search_workspace tool (not N new search_* tools)PassPass
Wave A+B+C providers (CRM… + Docs/KB/Activities/Meetings)PassPass (citations)PassPass
SQL via existing *Service::paginatePassPass
Provider isolation (try/catch; sequential fan-out)PassPass
Starter chip gated by ai + ai.usePassPassPass
Same-app citations only (isSafeRedirectPath / entity routes)PromptPassPassPass
Catalog MINOR 1.3.0 (additive)PassPass

Findings

Closed during delivery / remediations

IDSeverityFindingResolution
W1MediumPlaywright entitle path spawnSync php ENOENT on Windows HerdResolve Herd php.exe in e2e/helpers/verify-tenant-email.ts
W2MediumLead Copilot e2e create via UI failed assignee validation on demo (owner auto-assigned)Root cause fixed: create form only defaults assigned_to when isEligibleLeadAssigneeCandidate (owners / excluded / suspended stay Unassigned)
W3LowCatalogSeeder / ensureAiModuleCatalog lagged at 1.1.0Synced to 1.3.0 with bump migration
R1LowWave C not searchedClosed — documents, knowledge-base, activities, meetings providers + citations
R2LowSequential fan-out / no resilienceClosed (resilience) — per-provider try/catch + modules_failed; sequential kept (tenancy-safe; limits remain low)

Accepted residual (ops / out of engineering scope)

IDSeverityNotes
R3OpsPlatform AI still needs Central ai_api_key + FPM timeouts (unchanged from AI platform readiness)
R4OpsFull 300+ Playwright suite not a release gate for this milestone

Remaining (operator)

#ActionOwnerStatus
1Merge Backend / Frontend / Mobile / Docs (+ Website roadmap) PRs from feature branches → mainEngTodo
2Deploy Backend from mainOpsTodo
3php artisan migrate --force (central) — apply 2026_08_31_200000_bump_ai_module_version_to_1_3_0no db:seedOpsTodo
4Confirm catalog ai.version = 1.3.0OpsTodo
5Deploy Frontend SPA + Mobile (same window)OpsTodo
6Staging smoke — Search workspace (below)Ops / QATodo
7Production cutover per release processOpsTodo

Migrations to apply (step 3)

  1. 2026_08_31_200000_bump_ai_module_version_to_1_3_0

No new tenant schema tables. No new Spatie permissions.


Done (engineering)

GateResult
Provider registry + 20 Wave A+B+C providers + resilient AiWorkspaceSearchServicePass
SearchWorkspaceTool registered first in AIToolRegistryPass
EloSyncSystemPrompt citation paths + search preferencePass
Frontend / Mobile citation maps + starterPass
Lead assignee eligibility on createPass
Pest workspace search + authorization (+ Wave C + failure isolation)Pass — 18/18
Playwright AI serial (Search workspace + settings validation + Copilot)Pass — 8/8
Docs + Website roadmap delivery notePass

Test evidence (reference)

bash
# Backend
php artisan test --compact \
  tests/Feature/Tenant/Ai/AiWorkspaceSearchTest.php \
  tests/Feature/Tenant/Ai/AiAuthorizationTest.php

# Frontend unit
npx vitest run src/lib/ai-reference-href.test.ts

# Frontend e2e (Vite up; Herd PHP on PATH or E2E_PHP_BIN)
npm run test:e2e:ai -- --workers=1
# → 8 passed (2026-08-31)

Staging smoke (human)

  1. Confirm Central AI key / Test connection (platform mode) or tenant BYOK
  2. Workspace with ai entitled + ai.use
  3. Open Ask EloSync → Search workspace starter visible
  4. Ask: “Find Acme across my workspace” (or click starter) → assistant uses tools; citations only same-app paths
  5. Entitle only a subset of modules → hits omit non-entitled modules
  6. User without invoices.view → no invoice hits even if Invoices installed
  7. Entitle Documents / KB / Activities / Meetings → Search workspace can cite those paths
  8. As workspace owner, create a lead via UI → assignee stays Unassigned (not forced to owner)
  9. Lead Copilot Summarize still works on a lead the user can view
  10. Settings → AI → invalid preferred language → validation; save with valid values

Rollback

LayerAction
Frontend / MobileRedeploy previous build (hides Search workspace starter; citations fall back to prior entity map)
Backend codeRedeploy previous release; keep bump migration (catalog version alone is harmless)
CatalogOptional: bumpVersion('ai', '1.2.0') only if ops must match old marketing copy — not required for safety
SchemaNo tenant tables to roll back

Monitoring

  • Unchanged AI platform signals: wallet burns, HTTP 402, ai_usage_events, ai.chat_completed
  • Watch tool-call latency / FPM timeouts when search_workspace fans out many entitled modules
  • ai.workspace_search.provider_failed warnings when a single provider throws

Verdict

Eng Ready / Go for merge. Operator checklist above is the only remaining production gate.

Official documentation for the EloSync SaaS Platform.