QA: import/export fidelity gate #69
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#69
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
The fidelity contract (structure-true best effort) needs an objective, executable definition to keep 'best effort' from eroding.
Scope
Consolidate the corpus into a pipeline-gated suite: import snapshots (#63), export snapshots (#65), a documented process for adding a fidelity bug as a new corpus fixture (the contract: corpus green = fidelity acceptable), and a PDF smoke check (pdf contains expected text strings, page count sanity).
Acceptance criteria
Technical notes
Dependencies
Depends on #63, #65, #67.
Size: ~1 day
Conventions: English code/comments, clear human-readable code, no hard-coded UI strings (ADR 0012, add
deanden), permission checks only via the shared guard (docs/architecture/permissions.md). Read the referenced ADRs before starting.Implemented across
aaa9a25(gate) +4e85942(sidecar cleanup) +756d062(Int toggle) +ec469e1(CI networking fix). Pipeline green: all 8 CI/CD contexts onec469e1, including the new Import/export fidelity gate.The "structure-true best effort" fidelity contract (ADR 0009) is now an objective, pipeline-gated suite.
The gate — a small, separate CI job (
.gitea/workflows/ci.yml, Import/export fidelity gate) that runs against the pinned sidecar images the stages use (pandoc/core:3.6,gotenberg/gotenberg:8), well under five minutes. The same suites self-skip in the mainchecksjob (no sidecars there):import.fixtures.test.ts, #63 folded in):.docx/.odt→ Markdown over thefixtures/importcorpus.export.fidelity.test.ts, new): Markdown →.docx/.odt→ Markdown round trip overfixtures/export, so an office-writer drift fails the gate.pdf.fidelity.test.ts, new): renders a page through real Gotenberg and asserts the extracted text + a sane page count (pdf-parse, dev-only).The contract, documented —
fixtures/README.md: "corpus green ⇒ fidelity acceptable", plus the fixture-first bug process (a fidelity bug enters the corpus as a fixture first, snapshot regenerated with the pinned tool, committed together). Per-corpus READMEs updated.Acceptance criteria
fidelityjob, sidecars pinned.fixtures/README.md.Notes for future contributors
iproute2; the gate attaches the sidecars to the job container's own network namespace (--network container:…) and reaches them atlocalhost(pandoc-server needs theserverarg, which Actionsservices:can't pass — hencedocker run). Sidecars are torn down withif: always()so nothing leaks on the shared runner host.RUN_INT_DEPLOYActions variable (setfalseto keep Int down; it does not affect the CI quality gates).