## The Lab gets a submenu, and every brief the site was built from gets a register

The four Lab entries were reachable only from the Lab index, and the documents this
site is written from were not recorded anywhere at all. Both are now visible in the
header.

- **The Lab is a dropdown.** All four entries sit under it, in reading order, with the
  current one marked. Still one top-level entry of seven — a group counts as one.
- **[The brief register](briefs.html)** — every document we were given, archived exactly
  as it arrived with its SHA-256, what it produced, and what it asked for and has not
  got. In the *More* menu. The machine-readable version is
  [briefs-register.json](briefs-register.json).

**It exists because both failure modes have already happened.** One brief arrived twice,
byte-identical, six hours apart — and three Lab entries had already been written from the
first copy. Without a digest to compare against, the only thing standing between that and
a wasted afternoon is somebody's memory of a filename. The other failure is the quiet one:
a document arrives and is never worked at all, and nobody notices because there is no list
saying it should have been.

**So the register does two jobs.** Nothing gets worked twice, because an identical file is
recognisable before anybody starts reading it, and every arrival is recorded rather than
only the first. And nothing gets quietly dropped, because the agent producing these briefs
can fetch the JSON, hash what it sent, and name anything absent — a check somebody else can
run against us, which is the only kind worth having.

**Every entry carries both columns.** What came out of it, and what it asked for and has not
got. Two of the nine items are marked *received*, meaning read and archived with nothing
built — and they stay marked that way until something is. A register that listed only
outputs would be a press release.

**A new CI gate keeps it honest**: every document must exist at the path given and match its
recorded digest, every file in `assets/briefs/` must appear in the register, a *processed*
item must name something that exists, and a *received* item must name nothing. 23 tests.

**Two header fixes came with the submenu.**

- **The Lab caret pushed the bar past its 1100px cap** between 980 and 1012px, and the
  homepage — which carries section links too — past it up to 1032px. The drawer breakpoint
  moves from 980px to 1040px, and the decoupled scenarios pilot, which hides its nav with no
  replacement, moves from 880px to 940px where it actually stops overflowing.
- **And the header itself scrolled sideways at 360px** on the pages whose call to action is
  the longer one. The brand, the burger and the button all have to fit on that line, so the
  gutter, the gap and the button tighten below 420px rather than any of them being dropped.

Every page is now clean at fourteen widths from 1400px down to 360px, **except** for three
pre-existing content overflows that are not the header and are not fixed here:
`ramm.html` at 900px and 980px, and `plug.html` and `demos.html` at 360px. All three are
min-content floors in vault-era grids and each needs its own look.
