## Lab 04: seven things to build, and one word we have not earned

A build specification for the first thing anybody will ever use — a page that asks what
you run, computes what you granted, and hands you the gap — plus a repair to a defect
that had put a line of JavaScript at the foot of nine pages.

- **[Lab 04 — seven things to build, and one word we have not earned](lab-shape-collector.html)**.
  Three tools, two vaults, two documents, each card saying what the thing is, where it
  runs, what it holds, what it must never do, and which open question blocks it. The
  collector itself; the shape-record schema; the write-only submitting vault and the
  collection vault behind it; the aggregator that is the only place a suppression rule
  can actually be enforced; the motivated-intruder assessment; and the employer
  instrument, which is a second product under different law.
- **The arithmetic is the argument.** A twenty-connector multi-select carries about 20
  bits — more entropy than a well-known browser-fingerprint study measured across a whole
  fingerprint, where 83.6% of 470,000 samples were instantaneously unique. At 500
  responses effectively every respondent is unique, so the submissions are personal data.
  The fix is to compute the full shape locally and submit only bands and categories.
- **One correction to the brief this came from, stated on the page.** Banding the
  connector question cuts it from about 20 bits to about 7, and banding every field cuts
  the nominal space from roughly 42 bits to roughly 20 — a factor of four million, and
  the largest single reduction available. It also leaves a banded submission at
  *approximately the entropy of that fingerprint*. So banding is the necessary first move
  and not the whole answer: the page says so, marks the arithmetic as ours rather than a
  citation, and shows the assumptions it rests on.
- **The word *anonymous* is gated, in public.** It may not appear in the product until the
  banding, the suppression and the written assessment all exist. Until then the honest
  word is *banded*, and the page says which of the three are specified and which are not.

**Editions can now say what separates them from the edition before.** Two PDFs dated a day
apart otherwise read as two states of an argument, and sometimes one of them is only a
repair — as three of today's are. `lab-editions.json` takes an optional `note` per
edition and the edition list on each page renders it.

**A line of script was rendering onto nine pages.** The page scaffolder lifts the shared
JS modules from a page already in `site/`, and the last of those modules ran to the end of
the donor document — so it carried the donor's own `</script></body></html>` in with it.
Every scaffolded page therefore closed twice, and the text between the two closes is not
ignored: the parser reparents it into `<body>`, which put `})();` at the foot of
[abp](abp.html), [the Lab](lab.html) and its three entries, [Lisbon](summit.html), the
booth guide, and both [work](work.html) pages. It was in the published PDFs too. Fixed at
the source, trimmed from all nine, and a test now asserts that every page closes exactly
once with nothing after it.

**And editions no longer turn over for chrome changes.** The renderer's content hash
covered the shared JS modules, so a `sync-modules` run would have minted a new edition on
every Lab entry the same afternoon — implying four arguments had moved when none had. The
hash now covers the markup between `<body` and `</html>` with the script block and the
injected regions removed.
