release: v1.15.3

Merged
GI
2mo ago
+888-165

Puts v1.15.3 on release, which is the branch production deploys from. Opened by the Release workflow.


Summary by cubic

Release v1.15.3: fixes URL param collisions in the app and makes enrichment status resilient to late/foreign task writes.

  • Old: the fields sheet used the query param "fields", which collided with table field filters; New: the fields sheet uses dedicated keys "manageFields" and "manageField", with a central SEARCH_PARAM registry; Side effect: deep links using "fields=" must be updated.

  • Old: completed enrichment could later read as failed when a different task wrote status (or when a late run arrived); New: status writes are guarded so only owning tasks can change them, and COMPLETE handling respects task timing; Side effect: API methods report whether a new task was actually queued.

  • API and app

    • AgentTriggerService.companyRequested and contactCreated now return boolean (queued or already present). companies.research, companies.enrich, and contacts.enrich return queued: boolean. Clients must handle false (no-op) and only set PENDING on true; UI toasts updated accordingly.
    • Centralizes query keys in apps/app/lib/search-param-keys.ts and applies them across the app to prevent collisions (record sheet, quick switcher, overview scope, list tables). Update any saved links: "…&fields=company" → "…&manageFields=company".
  • Agent and reliability

    • Guards enrichment writes with ownership and timing checks; tasks like "company-profile" or "portrait" no longer flip company/contact status. COMPLETE stamps enrichedAt even on rechecks and ignores stale completions when a newer request exists.
    • Brand task: domainless companies are SKIPPED only when a context dev key is set; keyless installs leave them PENDING for the next sweep.
  • Test infra

    • packages/db/scripts/test-db.ts rebuilds the test database if drift or foreign migrations are detected (or when run with --reset). Docs updated in docs/setup.md.