All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 3m5s
L0 quality detection layer to catch translation failures BEFORE they
reach users. Pure Python/TypeScript, zero new dependencies, no API calls.
Backend (Python — services/quality/):
- Script detection: 145 langs mapped to 23 scripts (Latin, Cyrillic,
Greek, Arabic, Hebrew, CJK, Hangul, Kana, Devanagari, Bengali, etc.)
- Language confusion detection (e.g. Arabic text for French target)
- Arabic-script variant discrimination (Persian/Urdu/Pashto/Kurdish
confusion — e.g. Persian text returned when Arabic was requested)
- Length sanity check (with numeric/short-source exemptions)
- Prompt leak detection (Translation: / Voici la traduction: / 翻译:)
- Repetition hallucination detection (token + character level)
- File text extraction for .docx/.xlsx/.pptx/.pdf (no translator
changes needed)
- Defensive pipeline that never raises (L0 must NEVER break a job)
Frontend (TypeScript — wordly.art---traduction-de-documents/src/utils/):
- Exact 1:1 mirror of the Python module
- Zero dependencies, works in browser AND Node.js
- Native Unicode regex (\\p{L}/u) and codePoint iteration
- 63 tests using Node's built-in test runner
Integration:
- Feature-flagged: QUALITY_L0_ENABLED=false (default)
- Observation only: logs structured events, never modifies files
- try/except wrapped: impossible to break a translation job
- Lazy imports: only loaded when flag is on
- Zero impact on existing tests / behavior
Tests:
- 111 Python tests covering all paths (config, script, length, leak,
pipeline, file_extractor) — 100% pass
- 63 TypeScript tests (Node --test) — 100% pass
- 174/174 total tests for the L0 layer
Bug fixes in script mapping:
- yi (Yiddish) -> hebrew (was incorrectly mapped to arabic)
- dv (Maldivian) -> thaana (was incorrectly mapped to arabic)
- ja (Japanese) -> hiragana_katakana (distinguishes from Chinese CJK)
Phase 1 (backend) + Phase 2 (frontend) of Track A complete.
Next: Track B1 (Word/Excel format preservation quick wins).
Closes Track A phase 1+2 of the dev plan.
40 lines
1.0 KiB
JSON
40 lines
1.0 KiB
JSON
{
|
|
"name": "react-example",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite --port=3000 --host=0.0.0.0",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"clean": "rm -rf dist server.js",
|
|
"lint": "tsc --noEmit",
|
|
"test:quality": "node --experimental-strip-types --test tests/utils/scriptDetector.test.ts"
|
|
},
|
|
"dependencies": {
|
|
"@google/genai": "^1.29.0",
|
|
"@tailwindcss/vite": "^4.1.14",
|
|
"@vitejs/plugin-react": "^5.0.4",
|
|
"dotenv": "^17.2.3",
|
|
"express": "^4.21.2",
|
|
"i18next": "^26.2.0",
|
|
"i18next-browser-languagedetector": "^8.2.1",
|
|
"lucide-react": "^0.546.0",
|
|
"motion": "^12.23.24",
|
|
"react": "^19.0.1",
|
|
"react-dom": "^19.0.1",
|
|
"react-i18next": "^17.0.8",
|
|
"vite": "^6.2.3"
|
|
},
|
|
"devDependencies": {
|
|
"@types/express": "^4.17.21",
|
|
"@types/node": "^22.14.0",
|
|
"autoprefixer": "^10.4.21",
|
|
"esbuild": "^0.25.0",
|
|
"tailwindcss": "^4.1.14",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "~5.8.2",
|
|
"vite": "^6.2.3"
|
|
}
|
|
}
|