Prove the deploy by digest, not by tag
The preceding commit stops `set image` being a silent no-op. This asserts the outcome: after the rollout, the tag is resolved to a digest at the registry and th...
A rebuild of the same commit deployed nothing and reported success
The image is tagged with the commit SHA, so rebuilding the same commit produces an identical image reference. `kubectl set image` then changes nothing, the Depl...
Stop working on translations whose caller has already given up
Three attempts of ninety seconds plus backoff is up to 274 seconds of work per translation, and every caller we have gives up long before that β KBService's cli...
Let a rollout finish what the old pod was doing
Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...
Size the pod above its own JVM heap ceiling [skip ci]
The image starts the JVM with -XX:MaxRAMPercentage=70 -XX:+AlwaysPreTouch, so the heap alone may take 70% of the container limit and pre-touch keeps every commi...
Route translations INTO English, not just out of it
Both providers gated supports() on "en".equals(sourceLang), so every inbound pair was decoderd before a provider was ever asked. ProviderRouter treats "no provi...
Harden the kubectl download against flaky egress [skip ci]
dl.k8s.io over the runner's egress intermittently drops mid-transfer: curl: (56) OpenSSL SSL_read: decryption failed or bad record mac which fails the deploy ...
Constant-time internal-auth secret compare (timing oracle)
Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...
Bump LibreTranslate per-call timeout to 90s; keep single-translate backward-compat
Two follow-ups to the retry/failedKeys change: 1. Per-call request timeout was 30s. Production has runtime callers (chat, notifications, etc.) hitting the s...
Retry transient errors and surface failed keys (don't fake passthrough)
Two failure modes were indistinguishable in the response, so the script couldn't tell them apart and kept "translating" the same keys to English on every sync r...
Alias zh -> zh-Hans so en->zh actually translates
LibreTranslate's /languages endpoint advertises Chinese under the region-specific codes "zh-Hans" and "zh-Hant" (never bare "zh"), even though POST /translate a...
Drive supported targets from /languages, not stale list
The hardcoded SUPPORTED_TARGETS claimed sw/ta/etc. were supported, but no public argos packages exist for those, so every en->sw / en->ta translation request hi...
Fall through to next provider when translation equals source text
Bergamot was returning the source text unchanged for single-word nav items, acronym phrases (API, CRM), and compound words (Change Log) while reporting success ...
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.
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...
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...
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, ...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.