Back to WorkflowBench
🏒Twenty CRMTypeScript24.5k starsSaaS & B2B Platforms (CRM)

5 verified test gaps in a 24.5k-star CRM's i18n system

A 4-file PR fixing locale-sensitive label persistence had 50% of its requirements completely untested β€” including the core user-facing behavior.

10
Requirements Extracted
5
Verified Gaps
20%
Coverage Before
80%
Coverage After
Trace Matrix

Requirement-to-Test Traceability

Every requirement extracted from the PR, mapped to existing tests and verified against the codebase. Click any row to see the search evidence.

Coverage Distribution

10
5 Gaps
3 Partial
2 Covered

Requirement Coverage

Before20%
β†’
After OrangePro80%
+60% coverage improvement
10 requirements traced|5 gaps|3 partial|2 covered
R1PARTIAL

Object labels persist after locale switch

resolveObject
R2PARTIAL

Field labels persist after locale switch

resolveField
R3COVERED

Uncustomized objects show translation

resolveObject
R4GAP

Custom names in record list headers

R5GAP

Customization persists globally

R6GAP

API returns custom label in any locale

R7COVERED

Empty override doesn't blank label

resolveField
R8GAP

Filter/sort show custom names

R9GAP

Bulk customizations survive round-trip

R10PARTIAL

Removing customization restores translation

resolveField
Critical Findings

Top 3 Verified Gaps

These gaps were verified by searching the repository's test directories. Each finding includes the exact search query and result so you can reproduce it yourself.

1

Custom names NOT tested in any UI surface

search evidence

Searched twenty-front tests + twenty-e2e-testing β†’ 0 results for locale + data model. ExperienceSection POM has selectLanguage() but no spec uses it.

2

API metadata endpoint NOT tested with customized labels

search evidence

object-metadata-i18n.integration-spec.ts only tests standard labels (Company→Entreprise). No test for customized labels via API.

3

No scalability test for bulk customizations

search evidence

All existing tests use single object/field. No test validates 5+ customized objects surviving locale round-trip.

Before vs. After

Coverage Comparison

RequirementBeforeAfter
Object labels persist after locale switchβœ“ Unitβœ“ Unit + E2E
Field labels persist after locale switchβœ“ Unitβœ“ Unit + E2E
Uncustomized objects show translationβœ“ Integrationβœ“ Integration
Custom names in record list headersβœ— Noneβœ“ E2E
Customization persists globally (all locales)βœ— Noneβœ“ Integration + E2E
API returns custom label in any localeβœ— Noneβœ“ Integration
Empty override doesn't blank labelβœ“ Unitβœ“ Unit
Filter/sort show custom namesβœ— Noneβœ“ E2E
Bulk customizations survive round-tripβœ— Noneβœ“ E2E
Removing customization restores translation~ Partialβœ“ Unit + E2E
Verifiable Evidence

Don't take our word for it. Verify it yourself.

Every finding in this analysis is based on a public GitHub repository. Clone the repo, run the searches we documented, and see the same results. No black boxes.