Include parent org in /org/domain response
The getOrganizationByDomain endpoint manually builds a response map but never included the parent organization reference. This prevented the frontend from knowi...
Add parentId and parent to OrgProviderProps type
The Organization props interface was missing parentId and parent fields, causing them to be dropped during TypeScript compilation even though the backend sends ...
Purge incomplete model directories in init container
The service crashes on startup if it finds a directory in /models that has missing or partial model files. Add a sweep at init start that removes any directory ...
Remove GitHub LFS downloads, use only data.statmt.org models
GitHub raw URLs return LFS pointer files, not actual binaries. Drop enru/enar downloads entirely — LibreTranslate handles those locales. Only download the 4 pai...
Narrow bergamot to es/fr/de/pl, restore bergamot-first order
GitHub LFS files can't be downloaded with plain curl (raw URL returns the pointer not the content). Removing enru/enar from bergamot scope; those locales fall t...
Narrow BergamotProvider targets to 6 pairs with available models
pt, it, uk, tr, ro, id, vi have no bergamot model source — LibreTranslate handles them. bergamot now claims: es, fr, de, pl, ru, ar.
Scale bergamot to 0, update image to mozilla/translation-service
The Google Cloud Storage model download bucket (bergamot-models-sandbox) returns 404 for all files and the firefox-translations-models repo was archived Dec 202...
Route all translations through LibreTranslate while bergamot is offline
BergamotProvider is moved to fallback position. LibreTranslate supports all 13 locales bergamot was handling **************** so this eliminates the flood of "C...
Proxy *** challenge through login server for multi-domain support
Replaces direct cross-origin fetch to capcha.{domain}/api/challenge with a same-origin proxy at /api/capcha/challenge. The previous approach required a valid TL...
Scale bergamot back to 1 replica — translation failures caused by missing pod
Bergamot was at 0 replicas with its service still registered. The ProviderRouter in TranslateService had no circuit breaker, so every request for es/fr/de/pt/it...
Don't let null translated description hide the English original in changelog
The translation lookup for non-en locales was unconditionally overwriting description with **************** which is null when: - the translation was saved befo...
Resolve 23 compilation errors from controller-service signature mismatches
Controllers were built by a separate agent from services, causing method name and parameter type mismatches. Fixed all controllers to match actual service signa...
Update kamo-shared-library version from 1.0.0 to 1.1.0
Needed to resolve the new billing entities in the commerce.billing package added to shared library 1.1.0.
Update kamo-shared-library version from 1.0.0 to 1.1.0
The shared library is published as 1.1.0, not 1.0.0. This was causing the Docker build to fail with "artifact not found" since Maven could not resolve the depen...
Add -U flag to maven build steps to resolve shared library from local repo
The dependency:go-offline step was trying Maven Central first, getting a cached failure for kamo-shared-library (which is local-only), and that poisoned the sub...
Reduce translation chunk size to 50 keys with exponential backoff
150 keys still too large for some providers (long paragraph values in privacy/terms/GDPR). Now: 50 keys per chunk, 4 retries with exponential backoff (2s→4s→8s→...
Chunk translation requests to prevent fetch timeouts on large payloads
With 1500+ keys, the single batch request payload was causing connection timeouts for some translation providers. Now splits into chunks of 150 keys with 3 retr...
Re-login to registry immediately before build to prevent auth expiry after long translation step
Force re-translation and commit locale files back to repo after translate step
Use UUID-based repo methods for subscription plan translations, avoid lazy-load in scheduler
Use UUID for SubscriptionPlanTranslation FK to match BaseUuidEntity PK type
Resolve DYNAMIC_SERVER_USAGE 500 errors and missing calculator route
- Add force-dynamic to [locale]/layout.tsx (getMessages() uses headers() internally) - Remove generateStaticParams from [kbSection]/page.tsx (KB content is dyna...
Remove --load-only restriction from LibreTranslate
All needed language packages are pre-installed on the hostPath volume. --load-only was preventing some packages from loading. Without the flag, LibreTranslate l...
Use startupProbe for LibreTranslate to handle long model downloads
startupProbe with 60 attempts x 30s = 30min startup window for initial model downloads. After startup completes, normal liveness and readiness probes take over ...
Restrict LibreTranslate to only load supported language models
Use --load-only with the 22 supported language codes instead of downloading all available models (~hundreds of GB). Removes --update-models flag which would dow...
Remove invalid --load-awesome-ai-models flag from LibreTranslate
Flag does not exist in current libretranslate image. Replace with --update-models to ensure language packs are downloaded on startup.
Add LibreTranslate permission init container, scale Bergamot to 0
LibreTranslate was crashing with PermissionError on packages subdir. Added busybox init container to mkdir + chmod 777 the mounted hostPath before the main cont...
Fall through to LibreTranslate when Bergamot is unavailable
ProviderRouter now catches exceptions per provider and tries the next. BergamotProvider throws on failure instead of silently returning original text, so LibreT...
Widen language selector dropdown to prevent horizontal scrollbar
260px was too narrow for entries like 'Bahasa Indonesia'. Increase to 310px and add overflow-x: hidden to eliminate the scrollbar entirely.
Port-forward TranslateService to reach it from CI runner
The Forgejo runner runs on k0m1 which cannot resolve .svc.cluster.local DNS. Use kubectl port-forward to tunnel kamowstranslate-service:80 to localhost:18080 du...
Remove pre-i18n app/(pages)/ and app/page.tsx
These were accidentally restored by git checkout -- app/ during a previous vendor fix. Both old and new route structures existing caused Next.js to try generati...
Exclude ****************
Excluding SecurityAutoConfiguration leaves Actuator's **************** without an HttpSecurity bean, crashing startup. Exclude it explicitly.
Add autoconfigure exclusions to k8s configmap
application.yml is for local only — k8s uses the configmap. Move the Spring autoconfiguration exclusions for JPA, Redis, Security, and OAuth2 into k8s/configmap...
Exclude all transitive Spring autoconfiguration from shared library
kamo-shared-library pulls in JPA, Redis, Security, and OAuth2 starters which cause Spring Boot to attempt autoconfiguring DataSource, Hibernate, Redis/Lettuce, ...
Exclude DataSource autoconfiguration
kamo-shared-library transitively pulls in JPA which causes Spring Boot to attempt DataSource autoconfiguration. TranslateService is stateless with no database, ...
Replace removed DocumentNotFoundException with ImagingException in ImageService
DocumentNotFoundException was deleted as part of the Document entity removal but ImageService still referenced it in 9 places. Replaced with the existing Imagin...
Gracefully cancel superseded reconversion jobs on rapid saves
When a document is saved multiple times quickly, each save registers its ImgDat UUID in a ConcurrentHashMap. The async reconversion task checks this at 6 checkp...
Replace paginated count loop with single backend today-count endpoint call
Chat *** — fix verify timing and improve banner copy
- ***Provider: triggerVerify effect now depends on challengeUrl so verify() is only called after the widget is mounted; uses rAF to ensure the DOM has paint...
Remove totalPages dependency in today count — paginate until empty page or older entry found
Remove memberType field entirely to prevent Hibernate duplicate column
The previous fixes (@Transient on field, @Access(AccessType.FIELD) on class) were insufficient. Bytecode inspection revealed Lombok's @Setter generated a public...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
