Load feedback record directories in dashboard detail page and thread them through dashboard detail and control bar components so chart dialogs no longer crash with an undefined directories reference.
Made-with: Cursor
Add hub-backed feedback record actions and UI flows under Unify so workspaces can list and manage feedback records from a dedicated drawer and table experience.
Made-with: Cursor
Integrate feedback record directory selection into workspace settings and creation flows while updating workspace navigation components to expose the new workspace-level destinations.
Made-with: Cursor
Rework the feedback sources flow with new source form helpers, question selection components, and a canonical feedback-sources route while retiring the legacy survey selector.
Made-with: Cursor
Replace legacy formbricks type checks with formbricks_survey across source setup flows so TypeScript and connector creation paths stay consistent.
Made-with: Cursor
Normalize imported response timestamps to ISO and fall back from createdAt to updatedAt so collected_at is always valid for time-series charts.
Made-with: Cursor
Add missing hub field mappings for csat and ces survey elements and guard against unmappable selected elements so connector setup fails with a clear validation error instead of a Prisma crash.
Made-with: Cursor
Normalize legacy formbricks connector payloads to formbricks_survey during connector creation so client flows continue working while UI migrations roll out.
Made-with: Cursor
Rename connector type usage from formbricks to formbricks_survey across Prisma schema, shared types, and connector service logic to keep enum contracts consistent.
Made-with: Cursor
Replace the async job queue + Redis polling pattern with a direct
server action call. The translation now runs synchronously inside
translateSurveyFieldsAction, removing the need for BullMQ job
definitions, processors, cache keys, and client-side polling logic.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace remaining environment wording with workspace terminology across setup flows, API key permissions, and email preview text, and switch the email Tailwind config to ESM so formatting hooks run under the current Node runtime.
Made-with: Cursor
- Reuse ZAITranslationField from @formbricks/jobs instead of duplicating
the schema locally in actions.ts; tighten sourceLanguage/targetLanguage
validators with .min(1) to match the downstream job schema
- Guard against undefined translations in getAITranslationResultAction
instead of using the unsafe `translations!` assertion — return
"pending" status for malformed cache entries
- Use createCacheKey.custom("ai-translation", jobId) instead of raw
template strings to follow cache key conventions
- Improve JSON parsing robustness: strip markdown code fences before
attempting JSON.parse, log raw response on parse failures
- Add stale-request guard and error handling to the AI availability
useEffect in language-view.tsx
- Replace shared pollingCancelledRef boolean with per-invocation Symbol
token to prevent stale polling loops from clobbering state when the
modal is reopened
- Track timeout explicitly with a timedOut flag so the "timed out" toast
doesn't fire when polling was actually cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add userId verification in getAITranslationResultAction (security)
- Use OperationNotAllowedError for auth failures
- Store failure marker in cache on last BullMQ attempt
- Make JSON parsing more robust (extract first {...} block)
- Add "keep modal open" hint to translating toast
- Add test coverage for process-ai-translation-job
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolve merge conflicts to combine AI translation and survey scheduling
features in jobs package, instrumentation, and tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a "Translate with AI" button to the Manage Translations modal that
auto-populates empty translation fields using the configured AI provider.
Translation runs as a BullMQ background job with results cached in Redis
and polled by the client.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix broken API URLs in docs-feedback.mdx (remove /workspaces segment, fix https://, remove stray };)
- Add missing workspaceId path params to v2 spec (responses, displays, user)
- Remove environmentId from required arrays in v2 request schemas
- Fix stale terminology: environment→workspace in database-model, tenant-separation, tags, actions
- Fix broken link to removed test-environment page in webhooks.mdx
- Fix redundant "codebase" in naming-conventions description
- Use neutral hostname in audit-logging example
- Hyphenate "open-source" in license.mdx
- Consistent workspaceId formatting in wordpress.mdx
- Update link text to match anchor in actions.mdx
- Remove dual environmentId/workspaceId in headless-surveys example
- Fix stale <project_id> placeholder in headless-surveys
- Fix awkward Next.js card copy in framework-guides.mdx
- Clarify BC wording in v2 introduction.mdx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>