Produce the privacy page and refuse a claim on it that no check backs [#48] - #149
Merged
Conversation
…#48] A page saying a site does not do something is worth what a reader can check, and a reader can check none of it from the outside. So the page is written in three registers and every statement carries what stands behind it. A checked statement names the invariant that refuses a page breaking it, a promise names the issue that would refuse it, and a residual is what is true anyway and names nothing, which is what the rest is credible against. The failure this prevents is the one a reader cannot see, because a statement whose register slipped renders exactly like one that held. A mistyped keyword turns a claim into a paragraph and takes it out of the register anything reads, empty brackets render as a name, and an issue number where a check name goes says a machine refuses what nothing refuses. Each of those stops the build and names the line it is about, and every reason is reported rather than the first. The other half is on the produced page. page-cites-only-checks-that-exist refuses a page naming a check this gate does not decide, so a row renamed or taken out cannot leave a sentence standing that reads as a property while what it cites answers to nothing. It reads the table rather than a list beside it, and an owed row is refused as well, since the run itself prints that one as not decided. The three lists render through the template every other page goes through, so a statement carrying markup reaches the page as text by the path the rest of the site is escaped by, and a tree with no prose for the page says so rather than producing nothing quietly. Signed-off-by: Nils Lehnen <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #48.
What was wrong
There was no privacy page. The pages this repository produces said nothing
about what happens to a reader's request, and record 0011 already pointed at
this issue as the place the strong version of that statement would be made:
Run 2026-08-12 against
21e13dd. The page that was missing is the one whosesentences are easiest to write and hardest to trust, because a reader can check
none of them from the outside.
What this change does
content/privacy.txtis the prose, and every statement on it stands in one ofthree registers.
A checked statement names the invariant that refuses a page breaking it, and
the name reaches the reader as well as the machine. Two statements qualify
today, against
page-fetches-no-scriptandoutput-references-no-domain-outside-the-allowlist.A promise names the issue that would refuse it. Three statements are promises
today, all held by #50: the cookie and storage statement, the statement that
there is no route by which a reader can send anything, and the wider statement
that no page needs scripting at all. That last one is deliberately not written
as checked. What is refused today is a page fetching a script, and a handler
written into the page itself is refused by nothing yet, so writing it as
checked would be the page overstating what stands behind it.
A residual names nothing, because it is what is true anyway: what a host sees,
and that every checked statement is about the bytes this build produced rather
than about whatever answers at an address.
The build renders it through the same template every other page goes through,
at the address record 0008 gives it:
The failure it prevents, and the proof it bites
The defect this page can carry is invisible in the rendered page: a statement
whose register slipped renders exactly like one that held.
The one-character version is a keyword with a letter missing. The block behind
it becomes a paragraph, the sentence still renders, and nothing names what
stands behind it. Written into the real file, the build refuses it and says
which line:
The other half is the name going stale. A row renamed leaves the sentence
standing on the page while what it cites answers to nothing, and the new row
refuses that on the produced page:
Both files were restored afterwards and the tree pushed is the green one.
The row deleted from the table reds the suite rather than passing quietly,
which is the accounting the table already carries:
The parser guard deleted reds the case written for it, and the case reads the
message rather than the failure, which is what says the guard bites for the
reason it names:
That smallest fixture is refused for a second reason with the guard gone. The
real file would not be: it carries other checked statements, so one keyword
losing a letter would leave a green build and a statement nobody backs.
The gate
All run 2026-08-12 at
0f92e4b.needs-networkwas not asked for and nothinghere needed it.
The means
Go and the template path this repository already renders through, because the
statements have to be escaped by the path everything else on the site is
escaped by, and because the half that has to refuse a stale name has to be a
row in the table whose suite already proves a row bites. A separate template or
a second escaping path for this one page would have been a second way for a
sentence to reach a reader, on the page least able to afford one.
What this does not do
It adds no link to the page. Every page's links live in the frame in #73, and
putting one in the footer here would be a second place they come from.
It does not carry the cookie and storage statements as checked, because #50 has
not landed. They are on the page as promises, in the register that says so.
Directives a document cannot carry, and a policy a browser enforces, are #72
rather than this change.
Reading
No second reader.
docs/parity.mdholds that gap for this repository, and theevidence above stands in place of one: every claim in this body carries the
command that produced it, run at the commit being pushed.