Skip to content

feat(legal): Impressum + Legal Notice pages (Phase B.2)#8

Merged
larsweiser merged 1 commit into
mainfrom
dev
Apr 28, 2026
Merged

feat(legal): Impressum + Legal Notice pages (Phase B.2)#8
larsweiser merged 1 commit into
mainfrom
dev

Conversation

@larsweiser
Copy link
Copy Markdown
Collaborator

Summary

  • DE /impressum (legally authoritative) + EN /en/legal (courtesy translation), with copy verbatim from docs/BASELINE_COPY.md §7 / §8 (six sections post-G2.5 Stream A: Kontakt · Umsatzsteuer · USt-IdNr. · Haftungsausschluss · Haftung für Links · Urheberrecht).
  • Layout mirrors design/handoff-bundle/design/jsx/impressum.jsx + styles/impressum.css — semantic markup (h1, lede paragraph, address block, six h3+p sections), not a <pre> block. Standard color tokens used per bundle CSS; no -hc variants needed (G0 item 2.3 verification).
  • SiteFooter gains the Impressum / Legal entry between Contact and GitHub. footer.legal i18n keys, counterpart map (/impressum ↔ /en/legal), and hreflang were already provisioned in earlier phases.

Bundle/BASELINE conflict resolved by following bundle for structure, BASELINE for content: the bundle's older five-section list (with § 18 Abs. 2 MStV, no Haftung für Links) is superseded by post-G2.5 BASELINE.

Test plan

  • astro check — 0 errors, 0 warnings
  • astro build — both /impressum/index.html and /en/legal/index.html emitted
  • HTML inspection: <title>, canonical, hreflang both sides, og:locale per language, language-switcher counterpart wiring, footer ordering (About / Contact / Legal / GitHub), skip-link copy per locale
  • Visual walk on staging (dev.blackbrowedlabs.com/impressum, /en/legal) — light + dark, desktop + mobile, DE↔EN round-trip
  • Production smoke after merge: https://blackbrowedlabs.com/impressum + /en/legal + footer link + lang round-trip

🤖 Generated with Claude Code

DE /impressum (legally authoritative) + EN /en/legal (courtesy
translation). Copy held inline (per OQ-1: legal pages stay as
.astro, not in the editorial collection) and verbatim from
docs/BASELINE_COPY.md §7 / §8 — six sections in BASELINE order
(Kontakt, Umsatzsteuer, USt-IdNr., Haftungsausschluss, Haftung
für Links, Urheberrecht / their EN counterparts).

Layout mirrors design/handoff-bundle/design/jsx/impressum.jsx +
styles/impressum.css — semantic markup (h1, lede paragraph,
address block, six h3+p sections), not a pre-formatted code
block. The bundle's older five-section list (with § 18 Abs. 2
MStV, no Haftung für Links) is superseded by BASELINE post-
G2.5 Stream A; structure follows bundle, content follows
BASELINE.

SiteFooter gains the Impressum / Legal entry between Contact
and GitHub. footer.legal i18n keys were already provisioned
in Phase A.2. Counterpart map (/impressum ↔ /en/legal) and
hreflang already covered both routes; verified in built HTML.

Text-color verification (G0 item 2.3): the bundle's
impressum.css uses standard tokens (--color-text,
--color-heading, --color-text-muted, --color-link), not -hc
variants. Per CLAUDE_DESIGN_BRIEF §4.8, Volcanic Stone is
AAA on every surface (10.09:1+). Implementation uses the
same standard tokens.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@larsweiser larsweiser merged commit e1a474c into main Apr 28, 2026
2 checks passed
blackbrowed-labs added a commit that referenced this pull request Apr 28, 2026
Adds src/data/cloudflare-facts.json with hand-verified initial values
from the 2026-04-28 verification cycle (DPF Active per
participant/5666; CWA aggregated retention 6 months per Web Analytics
FAQ; raw-event retention placeholder removed by G B.3.1 amendment).

scripts/check-cloudflare-facts-freshness.mjs runs ahead of astro build
in the build script chain. Fails the build if verifiedDate is older
than 90 days — manual-era 'no silent failures' mechanism per backlog
item #8. Tighter than the post-verifier 120-day threshold because
manual processes need stronger forcing functions than automated ones.

Phase D Cloudflare-fact-verifier (backlog #8) will overwrite the JSON
file via automated workflow; the consumer pattern lands here so D is
purely 'automate the data source' work.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
blackbrowed-labs added a commit that referenced this pull request Apr 29, 2026
…failures" design

Adds verify-cloudflare-facts.yml weekly cron workflow + scripts/checks/dpf.mjs
+ scripts/checks/cwa-retention.mjs + 6 fixtures + scripts/run-verifier.mjs
orchestrator. Extends scripts/check-cloudflare-facts-freshness.mjs to read
_meta.last_check_attempt with 30-day threshold (down from 90).

Migrates src/data/cloudflare-facts.json to verifier-era schema (schema_version
1; per-fact status + value fields; _meta block; structured cwa_retention with
integer month values; raw_events_retention_months explicitly null per
Cloudflare's documented absence). Updates src/lib/cloudflare-facts.ts type +
adds getEffectiveVerifiedDate helper (worst-case freshness signal: older of
the two per-fact verified_at). Privacy pages (datenschutz.astro, en/privacy.astro)
read via the helper.

Verifier shape per plans/active/pass-2/g-d-2/spec.md: 1/5/15-min retry budget
(21 min total, fits 30-min workflow timeout); status-return error handling
(no throws cross check boundaries); explicit registry per spec §9.6;
hand-written validator per §9.7; status-enum rename ('ok' CheckResult →
'active' JSON) per §6.2; v1-coverage smoke step inside verifier workflow only,
mode #8 deploy-triggered limitation acknowledged per §3.8.

All synthetic failure modes (#2, #4, #5, #6) verified via MOCK_SCENARIO=
fixture routing. Mode #1 (freshness gate) verified via stale last_check_attempt.
Modes #3, #7, #8, #9 deferred to controller-side post-commit per prompt's
"may defer" guidance. Outcome record at
plans/active/pass-2/g-d-7/verifier-test-matrix.md (workspace, gitignored).

Closes backlog #8.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants