HT-14: PDF-lépés eltávolítva — csak HTML render
Build legal manifest / build-manifest (push) Successful in 22s
Build legal manifest / build-manifest (push) Successful in 22s
Az ÁSZF saját 3.2. pontja "megismerhető, megjeleníthető és letölthető" szöveget kér — ezt egy önálló (külső CSS/JS-függőség nélküli) HTML oldal is teljesíti (böngészőből menthető/nyomtatható), külön PDF-render nélkül. Ez NEM ugyanaz, mint a HRF-33/34 ajánlat-szerződés PDF-je — az egy ténylegesen elfogadott, hash-elt clickwrap-példány, más indokkal; azt nem érinti ez a változás. Egyszerűsödött CI-környezet: WeasyPrint + natív libek (pango/cairo) törölve, csak pandoc + python3 kell. A manifest "pdf" mezője megszűnt. A rendereletHTML immár kicsi (nincs PDF), ezért a teljes dist/ kimenet visszacommitolódik "manifest/" néven (nem csak a JSON) — a fogyasztók ugyanazzal a git clone-nal a HTML-t is megkapják, nem csak a metaadatot.
This commit is contained in:
+15
-17
@@ -1,14 +1,23 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Builds dist/legal-manifest.json (HT-14): renders each project's markdown legal documents
|
||||
to HTML+PDF and computes a content_hash, producing the single canonical manifest every
|
||||
consumer backend imports at deploy time (HT-15) instead of hashing independently.
|
||||
to HTML and computes a content_hash, producing the single canonical manifest every consumer
|
||||
backend imports at deploy time (HT-15) instead of hashing independently.
|
||||
|
||||
HTML only, no PDF: the ÁSZF's own 3.2. clause requires the text to be "megismerhető,
|
||||
megjeleníthető és letölthető" (accessible, viewable, downloadable) before acceptance — a
|
||||
self-contained HTML page (no external CSS/JS) satisfies that on its own (savable/printable
|
||||
from the browser) without a separate render step. Unlike HRF-33/34's offer-contract PDF —
|
||||
that one is a *formally accepted, hashed instance* via clickwrap, a genuinely different
|
||||
requirement — nothing here is "accepted" as a fixed artifact, so there's no reason to add a
|
||||
second render toolchain (pandoc's PDF path needs a LaTeX/wkhtmltopdf/WeasyPrint engine) just
|
||||
to reproduce what the browser already does with an HTML page opened in a new tab.
|
||||
|
||||
content_hash source (interim, per the HT-3 "Design döntés" comment): the source markdown's
|
||||
git blob hash (`git hash-object`), NOT the rendered artifact's hash yet — that requires a
|
||||
proven byte-for-byte-deterministic render, which this pandoc+WeasyPrint combination hasn't
|
||||
been tested for (ResidentFirst's HRF-34 proved a *different* render pipeline deterministic,
|
||||
not this one). Switching later doesn't invalidate old receipts, since a receipt is bound to
|
||||
document_version, not content_hash alone.
|
||||
proven byte-for-byte-deterministic render, which hasn't been tested for the pandoc HTML step
|
||||
(ResidentFirst's HRF-34 proved a *different* pipeline deterministic, not this one). Switching
|
||||
later doesn't invalidate old receipts, since a receipt is bound to document_version, not
|
||||
content_hash alone.
|
||||
|
||||
effective_from source: parsed from each document's own "Hatálybalépés napja: <dátum>" line —
|
||||
the one human-controlled field carrying the legally relevant date. A document whose date is
|
||||
@@ -78,14 +87,6 @@ def render_html(markdown_path: Path, html_path: Path) -> None:
|
||||
)
|
||||
|
||||
|
||||
def render_pdf(html_path: Path, pdf_path: Path) -> None:
|
||||
from weasyprint import HTML
|
||||
|
||||
# full_fonts=True: WeasyPrint's default font subsetting is not byte-for-byte
|
||||
# deterministic (confirmed empirically while building HRF-34) — full embedding is.
|
||||
HTML(filename=str(html_path)).write_pdf(str(pdf_path), full_fonts=True)
|
||||
|
||||
|
||||
def build_manifest_for_project(project_dir: Path) -> dict:
|
||||
manifest = {}
|
||||
for md_path in sorted(project_dir.glob("*.md")):
|
||||
@@ -95,17 +96,14 @@ def build_manifest_for_project(project_dir: Path) -> dict:
|
||||
out_dir = OUTPUT_DIR / project_dir.name
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
html_path = out_dir / f"{doc_type}.html"
|
||||
pdf_path = out_dir / f"{doc_type}.pdf"
|
||||
|
||||
render_html(md_path, html_path)
|
||||
render_pdf(html_path, pdf_path)
|
||||
|
||||
manifest[doc_type] = {
|
||||
"version": last_commit_hash(md_path),
|
||||
"effective_from": parse_effective_from(markdown),
|
||||
"content_hash": git_blob_hash(md_path),
|
||||
"html": f"{project_dir.name}/{doc_type}.html",
|
||||
"pdf": f"{project_dir.name}/{doc_type}.pdf",
|
||||
}
|
||||
return manifest
|
||||
|
||||
|
||||
Reference in New Issue
Block a user