Validate timeline activity manifest references locally (#24661)
## Summary - validate timeline activity type names are unique inside an application manifest - resolve custom renderer references against the application's front components - require emitters targeting another application's object to declare the type they replace - validate through relations and trigger fields against the source object's manifest fields - reject through fields that are not direct MANY_TO_ONE or junction-backed ONE_TO_MANY relations These checks run in the SDK manifest build, so app developers see actionable errors before a sync reaches server-side metadata validation. ## Stack Base: `codex/timeline-remove-metadata-metrics` (#24660) ## Validation - `npx vitest run src/cli/utilities/build/manifest` (from `packages/twenty-sdk`) — passed, 13 files / 97 tests - `npx vitest run --config vitest.integration.config.ts src/cli/__tests__/apps/rich-app/__integration__/app-dev` — passed, 1 file / 13 tests - `npx nx build twenty-sdk --skip-nx-cache --excludeTaskDependencies` — passed - `npx tsgo -p packages/twenty-sdk/tsconfig.json --noEmit` — passed - `npx oxlint -c packages/twenty-sdk/.oxlintrc.json packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-validate.ts packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts` — passed - `git diff --check` — passed `oxfmt` does not select these files because the repository-wide `**/build/**` ignore pattern also matches the SDK's source directory named `utilities/build`; no formatter result is claimed. <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/24661?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. --> ## Review follow-up The timeline-specific validation now lives in a dedicated utility with typed relation discriminants. It also covers replacement UUID/action compatibility, trigger-array shape and uniqueness, and the English app-development docs now document application-scoped name uniqueness. The complete SDK unit suite passes: 93 files / 626 tests; direct SDK typecheck, lint, and build also pass. Cross-application replacement existence remains server-authoritative because another application’s metadata is unavailable in an offline manifest build.
F
Félix Malfait committed
8e13029c9991a83153383fbbda38b71d1c532e03
Parent: 27b15cc
Committed by GitHub <noreply@github.com>
on 8/24/2026, 8:17:04 AM