fix(reports): running header timestamp and German word-break (#1937, #1938) - #1982
Conversation
#1938) - merge.test.ts: update the header-callback assertion to expect the interpolated "Generated At: 01/15/2026" string (labels.generatedAt + separator + generatedAtText), not the bare i18n key — pins AC8 so the value cannot silently disappear again (#1938) - realRender.test.ts: - HIGH1 budget-overview: 'Auftragnehmer'→'Firma', 'Rechnungsbetrag'→ 'Betrag'; assert single-line render (positions.length === 1) since both short labels fit their 45pt/48pt columns without wrapping - HIGH1 claim (6-col): same label updates - Production singleton describe: 'Auftragnehmer'→'Firma' to match the updated de/budget.json translation - New '#1937 AC7' describe: length-bound assertions (≤ 8 / ≤ 9 chars, derived from 5.19pt/char measured Roboto average advance) plus exact value pins for DE ('Firma', 'Betrag') and EN stability checks ('Vendor', 'Invoice Amount') Fixes #1937 Fixes #1938 Co-Authored-By: Claude qa-integration-tester <noreply@anthropic.com>
…#1937, #1938) - merge.ts: pass `labels.generatedAt + ': ' + generatedAtText` to buildPageHeader so pages 2+ show the label and value (AC1-5, #1938). Previously only the bare label was passed, leaving the timestamp blank on every page after the first. - de/budget.json: shorten `sourceReports.table.vendor` from "Auftragnehmer" (67.5pt > 45pt column) to "Firma" (5 chars, ~26pt) and `sourceReports.table.invoiceAmount` from "Rechnungsbetrag" (78.7pt > 48pt column) to "Betrag" (6 chars, ~27pt), eliminating mid-word breaks on German reports (#1937). Fixes #1938 Fixes #1937 Co-Authored-By: Claude frontend-developer <noreply@anthropic.com> Co-Authored-By: Claude translator <noreply@anthropic.com>
|
[ux-designer] Design review for PR #1982 — two PDF pipeline bug fixes (#1937, #1938). ScopeBoth fixes live entirely in #1938 — Running Header Text ContentFinding: Correct. The I cross-checked this against The format strings are byte-for-byte identical. Pages 2+ now match page 1's output — the bug was the running header previously discarding the value and showing only the bare translated label string. #1937 — German PDF Column Header LabelsFinding: Correct. The two DE translation changes in
Verified against the AC7 column-capacity math (5.19pt/char average at 10pt Roboto Bold): "Firma" is well within the 8-char floor and "Betrag" is well within the 9-char floor for their respective columns. The The adjacency of "Betrag" (invoiceAmount) alongside the unchanged "Zugeordneter Betrag" (allocatedAmount, 75pt column) is noted: the translator's rationale is that column context (adjacent to "Rechnungsnr." and actual numeric amounts) makes "Betrag" unambiguous. No UX objection.
No Findings
Verdict: APPROVED. Both fixes are minimal, well-targeted, and correctly verified by the existing real-render test suite. |
|
[product-architect] Architecture review — APPROVED (no critical/high findings) Both fixes are minimal, contract-consistent, and pinned by tests I ran locally against this branch: Verified#1938 (
#1937 (
No schema, API-contract, or architecture-page change is implied by this PR. Findings (all non-blocking)M1 — M2 — the new AC7 length-bound tests introduce a second, weaker width model than production's.
The load-bearing guard is the M3 — stale cross-references, now that the two DE strings no longer exist. No behavioural impact,
M4 — glossary divergence is undocumented where a future audit will look (product-owner's AC3 L5 — L6 — follow-up worth filing: Mine to do (no action for this PR): ADR-034's generalizable-rules list should gain a B-rule for |
…and harness drift - client-pdf-pipeline.md: fixed-width columns impose a per-locale character budget on sourceReports.table.* header keys; break-all is the fallback, a shorter DE label is the fix; running header/footer must resolve through reportT/reportFormatters (merge.ts:134 footer still violates this) - recurring-patterns.md: realRender.test.ts forks merge.ts's docDefinition callbacks; a test-derived width bound looser than the production threshold greenlights the regression it guards - story-reviews.md: PR #1982 verdict, findings, and the owed ADR-034 B-rule Co-Authored-By: Claude product-architect <noreply@anthropic.com>
|
🎉 This PR is included in version 2.13.1-beta.5 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Summary
buildPageHeader, leaving the timestamp blank on every multi-page report.sourceReports.table.vendorshortened fromAuftragnehmer(67.5pt, overflows 45pt column) toFirma;sourceReports.table.invoiceAmountshortened fromRechnungsbetrag(78.7pt, overflows 48pt column) toBetrag. Both fit their columns with no mid-word break.Fixes #1938
Fixes #1937
Test plan
🤖 Generated with Claude Code