dorfteich/packages/shared/i18n/de
Claude Opus 4.8 4755c18ef5
All checks were successful
CD / Build and push images (push) Successful in 4m9s
CI / Lint, typecheck, test (push) Successful in 2m50s
CI / Auth e2e pack (push) Successful in 3m44s
CI / Build container images (push) Has been skipped
CD / Deploy to Test (push) Successful in 8s
CD / Smoke tests against Test (push) Successful in 1m15s
CD / Promote to Int (push) Successful in 11s
Add conversion job queue and pandoc sidecar integration (#62)
Import/export conversions run asynchronously against an internal pandoc-server
sidecar with limits and graceful failure (ADR 0009). This is the plumbing;
the import (#63) and export (#65) features enqueue jobs onto it.

Sidecar & config:
- pandoc/core:3.6 in HTTP server mode added to the Compose stack, internal
  network only, with a wget healthcheck on /version; the api depends on it
  healthy and reaches it via the new PANDOC_URL env (default http://pandoc:3030).
- readyz gains a warning-level `converter` check: an unreachable sidecar
  degrades import/export but never flips the instance to unready (new `warn`
  status on ReadinessCheck).

Conversion flow (apps/api/src/import-export/):
- ConversionJob table (per-request work queue, distinct from the name-keyed
  maintenance Job table): owner, formats, input/result bytes, status, attempts,
  lockedAt. Migration + owner cascade.
- PandocConverter (abstract) + PandocServerConverter: POST / with
  {text,from,to,standalone}; binary input formats (docx/odt/…) are base64-encoded
  in `text`; 60 s AbortController timeout; input/output size caps. Failures map
  to distinct localized codes — converter_unavailable / converter_timeout
  (retryable) and conversion_failed (final).
- ConversionWorker: claims one job at a time with `FOR UPDATE SKIP LOCKED`
  (safe against overlapping sweeps and a second process), recovers a stale
  RUNNING lock, retries transient failures up to 3 attempts then fails. A 2 s
  sweep plus wake-on-enqueue means a queued job survives an API restart.
- ConversionJobService.enqueue (size-limited) + owner-scoped GET /jobs/:id
  (poll) and GET /jobs/:id/result (stream the output); a foreign/unknown id is
  404. ConversionJobView in @dorfteich/shared.

Tests:
- conversion-job.e2e.db.test.ts (fake converter injected via a new createTestApp
  override hook): enqueue→convert→poll→result; foreign/unknown job 404; a
  persisted PENDING job picked up by a fresh app's worker (restart survival);
  sidecar-down fails after 3 retries while the API stays healthy.
- pandoc.converter.test.ts: success, non-200→conversion_failed, refused→
  converter_unavailable, and a delay-injecting server→converter_timeout.
- Verified locally against a real pandoc/core:3.6 container: markdown→html,
  markdown→docx (valid PK/OOXML bytes), and a docx→markdown round-trip.

Local: typecheck, lint, i18n:check, build all green; api 193 tests
(9 new), shared 121, web 50.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
2026-07-10 04:06:27 +02:00
..
access.json Add effective-permissions inspector (#57) 2026-07-10 00:00:27 +02:00
auth.json Add auth, settings, and admin UI to the SPA 2026-07-05 05:35:56 +02:00
common.json Add manual page ordering with drag-and-drop (#45) 2026-07-09 12:18:44 +02:00
editor.json Add wikilink node with autocomplete (#46) 2026-07-09 12:42:01 +02:00
errors.json Add conversion job queue and pandoc sidecar integration (#62) 2026-07-10 04:06:27 +02:00
files.json Add non-image attachments with allowlist, SVG policy, and file managers (#61) 2026-07-10 02:52:40 +02:00
labels.json Add label UI: tree management, page assignment, and sidebar filter (#44) 2026-07-09 11:41:42 +02:00
links.json Add backlinks panel and phantom-pages view (#48) 2026-07-09 13:05:32 +02:00
mails.json Add mail outbox with SMTP delivery worker and templates 2026-07-05 00:46:12 +02:00
members.json Add pond member management UI (#54) 2026-07-09 20:22:52 +02:00
public.json Add public read access and server-rendered page HTML (#56) 2026-07-09 23:46:25 +02:00
quotas.json Add Site-Admin quota override management UI (#58) 2026-07-10 00:14:28 +02:00
search.json Add search UI with scoping and snippets (#50) 2026-07-09 13:36:06 +02:00
settings.json Add auth, settings, and admin UI to the SPA 2026-07-05 05:35:56 +02:00
users.json Fix de users i18n key parity broken by a greedy translation (#59) 2026-07-10 00:43:01 +02:00