fix(frontend): drop deprecated tsconfig baseUrl (unblocks TypeScript 6)#16
Merged
Conversation
TypeScript 6 turns the baseUrl deprecation into a hard error (TS5101). The path mappings are already relative (./src/*), so baseUrl is unnecessary — TS resolves paths against the tsconfig location. Verified tsc + vite build pass on TS 5.9 (current) and unblocks the TS 6 bump (#6).
WolfTasks
added a commit
that referenced
this pull request
Jul 13, 2026
…oling) (#58) * docs(specs): #15 i18n full-rollout master spec (scanner-driven, per-namespace) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(plans): #15 i18n full-rollout Session 0 (tooling) plan + spec scanner correction Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(i18n): hardcoded-string scanner core + tests * feat(i18n): scanner CLI + baseline allowlist + npm scripts Adds the CLI wrapper around findViolations (Task 1) that walks frontend/src/**/*.tsx, skips allowlisted files, and exits non-zero on violations; --init regenerates the baseline allowlist. Also wires up the scan:i18n / scan:i18n:init / check:i18n / test:i18n / lint:i18n npm scripts. AppLayout.tsx (one of the 8 already-localized pilot files) surfaced as an offender during --init: the "TaskWolf" brand/logo text in the sidebar. Marked it with an i18n-ignore comment since a brand name is non-UI content, not translatable copy. Re-ran --init afterward; all 8 pilot files are now absent from the allowlist and scan:i18n is green (0 hardcoded strings, 66 files still allowlisted). * feat(i18n): en/de key-parity core + tests * feat(i18n): en/de key-parity CLI gate * ci(i18n): gate frontend build on i18n coverage + key parity * docs(i18n): correct #13 status, register #15/#16, add per-session migration checklist * fix(i18n): close scanner detection gaps (template literals + JSX-expr string children) + tests --------- Co-authored-by: Wolfgang Kozian <kozian.wolfgang@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 18, 2026
#13 + #15 Internationalization full rollout — the entire React frontend is localized in German and English (react-i18next, per-user + browser language preference, English fallback, locale-aware dates/relative times). Coverage enforced by a CI scanner + en/de parity gate; allowlist now empty. Backend MessageSource remains separate backlog #16. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 18, 2026
Full backend rollout: server-side MessageSource for API errors (84 throw-sites → keys), Bean-Validation, emails, and in-app notification titles. Request locale via Accept-Language (frontend interceptor); async (email/notif) via recipient user.language. en/de, fallback en; en/de parity CI gate. Phased 1-3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 18, 2026
7 TDD tasks: MessageSource catalog (en/de), LocalizedMessages helper, LocalizedException + handler resolution, validator wired to MessageSource (LocaleContextMessageInterpolator for per-request locale), frontend Accept-Language interceptor, issues-module pilot, en/de parity CI gate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
added a commit
that referenced
this pull request
Jul 19, 2026
* feat(i18n): add MessageSource catalog scaffolding (en/de) * fix(i18n): escape German catalog non-ASCII as \uXXXX (per plan) Task 1 review: messages_de.properties used literal UTF-8; the plan mandates ISO-8859-1 + \uXXXX escaping. Escaped ü/ß so values decode correctly via both ResourceBundleMessageSource and Properties.load (parity test). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(i18n): add LocalizedMessages resolution helper * feat(i18n): resolve keyed exceptions via MessageSource in GlobalExceptionHandler * feat(i18n): wire Bean-Validation to MessageSource + localize project key pattern - LocaleConfig: AcceptHeaderLocaleResolver (en/de, default en) + a defaultValidator LocalValidatorFactoryBean whose message interpolation routes through the MessageSource, wrapped in LocaleContextMessageInterpolator so interpolation uses the per-request locale instead of Locale.getDefault(). - Key CreateProjectRequest.key's @pattern message to {project.key.pattern}. - Add root messages.properties (English fallback bundle). Without it, Spring Boot's MessageSourceAutoConfiguration.ResourceBundleCondition (which only probes for the exact `<basename>.properties`, not locale-suffixed variants) never matches, so no MessageSource bean is registered and the app silently falls back to the empty DelegatingMessageSource — every MessageSource-backed lookup throws NoSuchMessageException at runtime. This was masked because existing unit tests construct their own ResourceBundleMessageSource directly, bypassing Spring Boot's autoconfiguration. - Fix brief's MessageSourceResourceBundleLocator import: it lives in org.springframework.validation.beanvalidation, not org.springframework.context.support, in this Spring Framework version. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(i18n): consolidate English catalog into base messages.properties Task 4 review: messages.properties and messages_en.properties were byte-identical. Drop messages_en.properties; the base bundle is the English master (ResourceBundle falls English + unknown locales back to it), removing the duplicate-catalog drift risk. German stays in messages_de.properties. * feat(i18n): send active UI language as Accept-Language header * feat(i18n): localize issues module error messages (pilot) * test(i18n): en/de message catalog parity gate * fix(i18n): make keyed exceptions unambiguous via keyed() factory Final review Critical: NotFoundException("key") bound to the free-text constructor (single-String overload), leaking the raw key for arg-less keyed sites (e.g. project.noWorkflow). Replace the vararg keyed constructor with an Array one + a companion keyed() factory so the keyed path is unambiguous for zero-or-more args. Update the three issues keyed sites + handler test; add an arg-less keyed regression test. --------- Co-authored-by: Wolfgang Kozian <kozian.wolfgang@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 19, 2026
WolfTasks
pushed a commit
that referenced
this pull request
Jul 19, 2026
WolfTasks
added a commit
that referenced
this pull request
Jul 19, 2026
* feat(i18n): harden MessageSource — typo safety net + placeholder & keyed-reference gates
* feat(i18n): localize auth module error messages
* feat(i18n): complete auth slice (orElseThrow sites) + harden keyed-reference gate
Swap the 7 auth orElseThrow { NotFoundException("User not found") }
sites in AuthService/UserAccountService to NotFoundException.keyed("user.notFound"),
missed by the earlier throw-keyword-only sweep. Add shared user.notFound
key (en/de), extend AuthMessagesTest, and harden KeyedReferenceIntegrityTest
against a vacuous pass (empty sourceRoot / zero scanned references).
* docs: Phase 2 scope correction — full construct inventory (orElseThrow/error/ResponseStatusException) + issues/servicedesk slices
---------
Co-authored-by: Wolfgang Kozian <kozian.wolfgang@gmail.com>
This was referenced Jul 19, 2026
WolfTasks
added a commit
that referenced
this pull request
Jul 20, 2026
…phase2-session2 #16 Backend i18n Phase 2 — Session 2 (projects/boards + workflow)
WolfTasks
added a commit
that referenced
this pull request
Jul 20, 2026
…phase2-session3 #16 Backend i18n Phase 2 — Session 3 (agile-reports + issues)
WolfTasks
added a commit
that referenced
this pull request
Jul 20, 2026
…ssion4 #16 Backend i18n Phase 2 — Session 4 (integrations + orgs + content)
WolfTasks
pushed a commit
that referenced
this pull request
Jul 20, 2026
…p close-out) Task 9 (servicedesk 6x 500->404 + 2 RSE->400 localized) plus a durable NoUnkeyedUserFacingThrowTest guard (catches bare AND fully-qualified un-keyed user-facing throws — the AttachmentController blind spot) and the widened Phase-2 final verification. Stops before manual smoke + release. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 20, 2026
…ow guard) Single-task plan: Task 9 servicedesk conversions (6x 500->404, 2x RSE->400 localized) + NoUnkeyedUserFacingThrowTest guard (catches bare AND FQ-prefixed un-keyed throws) in one commit, TDD-ordered so the guard's RED phase proves it catches exactly the 11 sites being fixed. Widened final verification appended. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
added a commit
that referenced
this pull request
Jul 21, 2026
…ws (#90) Task 9 of the #16 Phase-2 sweep: 6x 500->404 (project/service-desk not-found), 2x ResponseStatusException->BadRequestException.keyed (invalid priority/severity, now localized 400). New keys serviceDesk.notEnabled/invalidPriority + incident.invalidSeverity (en/de). Adds NoUnkeyedUserFacingThrowTest, a static gate that fails on any un-keyed user-facing throw (bare OR fully-qualified) — closing the FQ-prefix blind spot that hid the AttachmentController throw. Co-authored-by: Wolfgang Kozian <kozian.wolfgang@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 21, 2026
Recipient-locale rendering for EmailService (subject+body) and NotificationService (title; + the 2 templated createDirect bodies). Decisions: E1 localize Incident/SLA template bodies (not just titles), E2 centralize createDirect rendering + user-language lookup in NotificationService (keyed signature), E3 Incident notification uses issue.key instead of raw UUID in title/body/link. One session, PR to main, stops before smoke + release. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 21, 2026
3 TDD tasks: (1) catalog keys en/de + resolution test, (2) EmailService recipient-locale rendering + EmailServiceTest, (3) NotificationService keyed createDirect + 2 listener titles + 3 thin callers (IncidentService w/ IssueRepository + issue.key fix, SlaMonitorJob, ActionExecutor) + test updates. One commit per task; PR to main; stops before smoke + release. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
added a commit
that referenced
this pull request
Jul 22, 2026
* feat(i18n): add email + notification catalog keys (en/de) Phase 3 of #16: 11 new keys for email subject/body and notification titles + the 2 templated notification bodies (incident, SLA). German \uXXXX-escaped. Resolution test asserts en/de rendering incl. issue-key and numeric-as-string args. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(i18n): render mention/assigned emails in recipient language Phase 3 of #16: EmailService resolves localeOf(recipient) and renders subject + body via email.mention.* / email.assigned.* keys. New unit test asserts de/en/null->en rendering with a real ResourceBundleMessageSource. Note: EmailServiceTest.kt pre-existed this task (from the original EmailService feature); the pre-existing guard-condition tests (blank SMTP host, non-assignee field, disabled preference) were retained alongside the brief's new locale-rendering tests rather than being dropped by a verbatim file replacement. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(i18n): render notification titles in recipient language Phase 3 of #16: NotificationService localizes mention/assigned titles via localeOf(recipient); createDirect converted to a keyed signature that renders title (+ optional templated body) after looking up user.language, with EN fallback. IncidentService injects IssueRepository and uses issue.key (not the raw UUID) in title/body/link. SlaMonitorJob + ActionExecutor migrated to keyed args; user-content bodies (comment excerpt, issue title, automation message) stay untranslated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(deps): bump postgresql 42.7.11 -> 42.7.12 (CVE-2026-54291) Unblocks the backend-docker Trivy gate on this PR: CVE-2026-54291 (HIGH) was disclosed against the org.postgresql:postgresql 42.7.11 JDBC driver after main last passed, flipping the previously-green image scan red (unrelated to the Phase 3 i18n changes; main will hit the same failure on its next run). Fixed version is 42.7.12. Overrides the Spring Boot 3.5.16 BOM-managed postgresql.version property (same idiom as commons-lang3 / logback overrides) and regenerates the lockfile pin. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Wolfgang Kozian <kozian.wolfgang@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 23, 2026
Backend internationalization (#16, all three phases) + jackson-databind security patch. - #16 Backend i18n: API errors, emails (subject+body) and in-app notifications are now localized de/en in the recipient's language via Spring MessageSource (English fallback). Phases 1-2 API-error sweep, Phase 3 emails + notifications; guarded by 3 CI gates. - Security: jackson-bom 2.21.4 -> 2.21.5 (#93) fixes @JSONVIEW bypass CVEs GHSA-mhm7-754m-9p8w and GHSA-5gvw-p9qm-jgwh / CVE-2026-59889. - Maintenance: backend-deps #89 (postgresql 42.7.12), actions #88. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WolfTasks
pushed a commit
that referenced
this pull request
Jul 23, 2026
- #16 backend i18n: 🟩 GEMERGT → ✅ AUSGELIEFERT (Release v1.0.15). - New M2 row: jackson-databind 2.21.5 @JsonView-bypass CVE fix (PR #93) + Dependabot batches #88/#89, shipped in v1.0.15. - Resolve the stale "jackson deferred, no patch" note in the #12 section (2.21.5 shipped; BOM override; alerts #80/#81 closed). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TypeScript 6 promotes the
baseUrldeprecation to a hard error (TS5101), which breakstsc && vite buildin the pending frontend-deps bump (#6).The
pathsmappings are already relative (./src/*), sobaseUrlis unnecessary — TypeScript resolves relativepathsagainst the tsconfig location. Verified locally thattsc --noEmitandnpm run buildpass on the current TS 5.9.3; this also unblocks the TS 6.0.3 bump in #6.🤖 Generated with Claude Code