Skip to content

fix(frontend): drop deprecated tsconfig baseUrl (unblocks TypeScript 6)#16

Merged
WolfTasks merged 1 commit into
mainfrom
fix/tsconfig-drop-baseurl
Jul 1, 2026
Merged

fix(frontend): drop deprecated tsconfig baseUrl (unblocks TypeScript 6)#16
WolfTasks merged 1 commit into
mainfrom
fix/tsconfig-drop-baseurl

Conversation

@WolfTasks

Copy link
Copy Markdown
Owner

TypeScript 6 promotes the baseUrl deprecation to a hard error (TS5101), which breaks tsc && vite build in the pending frontend-deps bump (#6).

The paths mappings are already relative (./src/*), so baseUrl is unnecessary — TypeScript resolves relative paths against the tsconfig location. Verified locally that tsc --noEmit and npm run build pass on the current TS 5.9.3; this also unblocks the TS 6.0.3 bump in #6.

🤖 Generated with Claude Code

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
WolfTasks merged commit c01e802 into main Jul 1, 2026
11 checks passed
@WolfTasks
WolfTasks deleted the fix/tsconfig-drop-baseurl branch July 1, 2026 18:16
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 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>
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 22, 2026
…lease pending

Phase 3 (emails + in-app notifications, PR #92 squash 00665f5) completes
the #16 backend-i18n rollout on main. Updates the backlog-overview status
from Backlog to GEMERGT — Release ausstehend.

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant