[Docs] Say a build gate enforces the projection boundary, not the type system #601
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#601
Loading…
Reference in a new issue
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?
Found in the pre-publication claim audit.
The claim —
README.md:27: personal data is "removed at a single projection boundary that the type system enforces, so no render surface can forget it — screen, presenter, audience window, PDF, PPTX, HTML, speaker notes, document metadata." The same wording sits inlib/services/privacy/privacy_projection.dart:12-16.What the project own gate says:
tool/check_audience_boundary.dart:5-9— "SECURITY_DESIGN §8 belooft een compile-time garantie … De compiler houdt die belofte — maar alleen voor de functies die het type ook echt eisen. De vraag die daaronder ligt is welke functies dat zijn, en die stond hier als een lijst van vier hard-gecodeerde instappunten. Een vijfde uitvoeroppervlak werd niet gezien."What actually prevents a forgotten surface is a hand-maintained registry (
:70-158, ~18 entries) plus an AST heuristic that fires only when a declaration both takes aDeck/AudienceDeckand contains one of six artefact primitives in its own body (:161-170), with the blind spot stated at:31-35: a surface that delegates the writing to a helper two layers down is not seen.Why this matters now: "the type system enforces it" is the strongest security sentence in the README, and the first one a security reviewer will test. The truth is still good — a private constructor plus a build-breaking registry gate is more than most tools do — but the inference "so no render surface can forget it" does not follow from the private constructor, and the repository own tool header says so.
Proposal: adjust the claim, leave the code alone. "…removed at a single projection boundary:
AudienceDeckhas a private constructor, so only the projection can produce one, and a build gate (tool/check_audience_boundary.dart) forces every new output surface to be classified as audience-side or source-side before it can land." Defensible, checkable, and still impressive.