Nine layout defects were fixed in the generator so the delivery package is
reproducible from `scripts/build-sdlc-delivery.sh`.
CSS (scripts/sdlc-delivery/assets/sdlc-delivery.css):
- table-layout: fixed -> auto, so columns fit their content instead of each
taking an equal share of the page width
- overflow-wrap: anywhere -> break-word, removing mid-word breaks such as
"Representativ|es" and "communicati|on"
- break-inside: avoid on cells; text-align: left on th so headers match body
- new .a-right/.a-center/.tight column classes; ul/ol/li and code rules
- trimmed padding: @page bottom 28->20mm, h2 9->6mm, h3 6->4mm, cells
2->1.6mm, .approval-fields; .document-control th shrinks to its label
Renderer (scripts/sdlc-delivery/render-sdlc.mjs):
- ordered lists emit <ol> instead of collapsing into a run-on paragraph
- column alignment read from the Markdown separator row (:---, ---:, :---:)
- columns whose longest cell is <= 12 chars marked "tight" to shrink to content
- underscore runs become styled signature rules
- each signatory's heading and fields wrapped so they cannot split across pages
- backslash escapes such as \* are unescaped
Regenerated sdlc-delivery/ with the fixed pipeline: 46 PDFs, 163 pages, both
content-coverage and A4-format verification passing. Work Schedule 14 -> 9
pages, Correction Register 11 -> 10, Acceptance Report 7 -> 6. The four
Meeting Records are included for the first time, and PDFs for renamed sources
follow their new paths.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Single-command deploy: docker compose up -d --build brings up the LEMP
stack plus the Node realtime/scheduler service. app/config.php and DB
secrets are generated from .env at container start, never baked into
the image or committed.