dorfteich/apps/api/src
Claude Opus 4.8 aaa9a253ae
Some checks failed
CD / Deploy to Test (push) Blocked by required conditions
CD / Smoke tests against Test (push) Blocked by required conditions
CD / Promote to Int (push) Blocked by required conditions
CD / Build and push images (push) Failing after 27m51s
CI / Lint, typecheck, test (push) Successful in 3m11s
CI / Auth e2e pack (push) Successful in 4m0s
CI / Import/export fidelity gate (push) Failing after 36s
CI / Build container images (push) Has been skipped
Add import/export fidelity gate to CI (#69)
Make the "structure-true best effort" fidelity contract (ADR 0009) an
objective, pipeline-gated suite so "best effort" cannot erode silently.

- New CI job "Import/export fidelity gate" (.gitea/workflows/ci.yml) runs
  the corpus suites against the pinned sidecar images the stages use
  (pandoc/core:3.6, gotenberg/gotenberg:8), started via docker run and
  reached over the host gateway. Small and separate so it stays well under
  five minutes; the suites self-skip in the main checks job (no sidecars).
- Export fidelity: fixtures/export corpus + gen-export-fixtures.mjs +
  export.fidelity.test.ts — exports Markdown to docx/odt through the real
  pinned pandoc and reads it back, snapshotting the round trip so a writer
  drift (ours or a version bump) fails the gate.
- PDF smoke: pdf.fidelity.test.ts renders a page through real Gotenberg and
  asserts the extracted text and a sane page count (pdf-parse, dev-only).
- Fidelity contract doc: fixtures/README.md defines "corpus green = fidelity
  acceptable" and the fixture-first bug process; per-corpus READMEs updated.

Because the snapshots are byte-exact and generated with the pinned tools,
bumping a sidecar without regenerating shifts the output and fails the suite
(AC3). The import corpus (#63) is folded into the same gate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
2026-07-10 13:59:10 +02:00
..
admin Add Site-Admin user management (#59) 2026-07-10 00:31:41 +02:00
auth Add Site-Admin user management (#59) 2026-07-10 00:31:41 +02:00
common Add page trash: soft delete, restore, and purge job (#31) 2026-07-08 12:48:17 +02:00
compaction Fix compaction test Bytes typing for strict typecheck (#40) 2026-07-09 08:23:55 +02:00
config Add NestJS API skeleton with config, logging, and /healthz 2026-07-04 19:10:07 +02:00
files Add pond ZIP + per-page docx/odt export (#65) 2026-07-10 10:31:19 +02:00
grants Add effective-permissions inspector (#57) 2026-07-10 00:00:27 +02:00
health Add PDF export via Gotenberg (#67) 2026-07-10 12:11:12 +02:00
i18n Add mail outbox with SMTP delivery worker and templates 2026-07-05 00:46:12 +02:00
import-export Add import/export fidelity gate to CI (#69) 2026-07-10 13:59:10 +02:00
inspector Add effective-permissions inspector (#57) 2026-07-10 00:00:27 +02:00
labels Wire real permissions into collab tokens and revocation (#53) 2026-07-09 18:48:42 +02:00
links Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
mail Add mail outbox with SMTP delivery worker and templates 2026-07-05 00:46:12 +02:00
members Add pond member management UI (#54) 2026-07-09 20:22:52 +02:00
pages Import .docx and .odt documents as new pages (#63) 2026-07-10 07:34:43 +02:00
permissions Wire real permissions into collab tokens and revocation (#53) 2026-07-09 18:48:42 +02:00
ponds Add per-pond fonts: catalog, build, application, and admin UI (#66) 2026-07-10 11:16:29 +02:00
prisma Add Prisma with PostgreSQL, automatic migrations, and /readyz 2026-07-04 19:16:44 +02:00
public Add public read access and server-rendered page HTML (#56) 2026-07-09 23:46:25 +02:00
quotas Quota foundation: overrides, resolution, race-safe consumption (#22) 2026-07-05 20:55:59 +02:00
rate-limit Add DB-backed rate limiting with guard and decorator 2026-07-05 00:43:54 +02:00
scheduler Add page trash: soft delete, restore, and purge job (#31) 2026-07-08 12:48:17 +02:00
search Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
settings Add non-image attachments with allowlist, SVG policy, and file managers (#61) 2026-07-10 02:52:40 +02:00
testing Add conversion job queue and pandoc sidecar integration (#62) 2026-07-10 04:06:27 +02:00
trash Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
users Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
versions Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
app.module.ts Add conversion job queue and pandoc sidecar integration (#62) 2026-07-10 04:06:27 +02:00
main.ts Add page CRUD and Yjs state persistence (#23) 2026-07-05 22:25:41 +02:00