Phase 7: authored assets (diagrams, code exhibits, client wall, budget)

Phase 7 is mostly authored assets. This commit is the asset half; the
template half is a Builder child issue because this phase must not write
application code.

DoD items satisfied or advanced:

- [x] Eight diagrams present, both themes, readable at 1x and on mobile
      8 SVGs, one byte-identical <style> block across all 8 (one visual
      language by construction). Light and dark resolve from a single file
      via prefers-color-scheme, verified per file in Chrome: 8/8 return two
      distinct palettes. Geometry verified with getBBox(), not estimated:
      0 findings after fixing 74 (text overflow, partial overlap, empty
      text, out-of-viewBox). Mobile type at the 900px minimum is 14.1/12.2px.

- [x] Six code exhibits with a two-sentence rationale each
      212 verbatim lines across five eras, copied with cp/sed from the
      read-only archive. Every rationale is exactly two sentences about why
      the code is good; every exhibit also carries an honest_note, and where
      the code is not good the note says so (the 3,400-line procedural PHP
      script is presented for its operational judgement, not its structure).

- [~] Every image optimised; total page weight budgeted and recorded
      BUDGET.md records measured raw and gzip weights for all 15 served
      files: 63,802 B raw / 13,220 B gzipped. Zero rasters by design. Page
      weight of a real page is not measurable until Phase 2 templates and
      Phase 3 serving exist, and is recorded as open rather than asserted.

- [x] Archive never linked or exposed
      No mount paths or volume names under content/. Provenance recorded as
      "private archive, path withheld".

- [ ] Client wall reads as deliberate  -> needs markup/CSS (Builder)
- [ ] Lighthouse held at >= 95/95      -> needs a served page (Phase 3)

Also: the client wall is authored as data (45 entries, 44 distinct names) with
the 45-vs-46 discrepancy and the Diajio -> Diageo correction recorded
rather than papered over. No commercial marks are enabled: that is a
permission decision for Sam, so availability is recorded and permission is not
implied.
This commit is contained in:
Documenter
2026-10-26 17:35:11 +11:00
parent b267e55f8c
commit da18ab2237
22 changed files with 1711 additions and 0 deletions

73
content/assets/README.md Normal file
View File

@@ -0,0 +1,73 @@
# content/assets — authored exhibits
Everything the site shows that is not Markdown prose. Authored in Phase 7; wired
into templates by Phase 2's builder.
```
content/assets/
├── BUDGET.md measured weights for every asset, and the budget
├── VERIFY.md what was checked, with the output pasted in
├── diagrams/ 8 SVGs, light and dark in one file each
│ ├── README.md the visual language and the presentation contract
│ └── manifest.yaml id, area, level, title, alt text per diagram
├── code/ 6 verbatim excerpts, 212 lines, 5 eras
│ ├── README.md the rules these follow
│ └── manifest.yaml era, language, shows, rationale, honest note
└── logos/
└── clients.yaml the client wall: 45 entries, 44 distinct names
```
## Three decisions worth knowing
**The client wall is type, not logos.** Forty-five names in one typeface at one
size on an even grid. Nothing is an image, so nothing can break, and no client is
visually ranked above another. Ten client marks do exist in Simple Icons; none is
enabled, because using a company's mark on a public portfolio is a permission
question for Sam, not a design choice for an agent.
**Diagrams carry both themes in one file.** Not two files that can drift: one
`<style>` block with the light palette and the same selectors repeated under
`prefers-color-scheme: dark`. The eight files therefore share one palette by
construction.
**Code excerpts are copied, never retyped.** Including the defects. An excerpt
that has been tidied is a claim, not evidence — and this site's whole argument is
that the claims are checkable.
## What is wired and what is not
| DoD item | State | Evidence |
|---|---|---|
| Client wall reads as deliberate, no broken images, no placeholders | **assets done, markup not** | `logos/clients.yaml` — 45 entries, zero image references by design. The grid is CSS and belongs to Builder |
| Eight diagrams, both themes, readable at 1× and on mobile | **done** | `VERIFY.md` §1–§3: 0 geometry findings, 8/8 resolve two palettes, rendered widths measured |
| Six code exhibits with a two-sentence rationale each | **done** | `code/manifest.yaml`, `VERIFY.md` §5 |
| Every image optimised; total weight budgeted and recorded | **assets done, page weight not** | `BUDGET.md`. Zero rasters. A full page cannot be weighed until a page exists |
| Lighthouse ≥ 95 / 95 after assets | **not measurable yet** | Needs a served page (Phase 3) |
| Archive never linked or exposed | **done** | `VERIFY.md` §6 — no archive path anywhere under `content/` |
The four "not yet" rows are honest gaps, not omissions: three need a page that
does not exist until Phase 2 and Phase 3 land, and one needs a live agent console
from Phase 5.
## Consuming these from templates
```go
// diagrams: "assets/diagrams/01-homelab-topology.svg"
<img src="/assets/diagrams/01-homelab-topology.svg"
alt="{{ .Alt }}" width="960" height="540" loading="lazy" decoding="async">
```
The `width`/`height` attributes are not optional — they are what stops the page
shifting as figures load, which is a Lighthouse CLS and a real annoyance. `alt`
comes from `manifest.yaml`; if it is set to `""` the SVG's own `<title>`/`<desc>`
are not read out.
Figures go inside a horizontally scrollable wrapper (`diagrams/README.md`), or a
960 px schematic becomes 5 px type on a phone.
## Adding an asset
1. Put the file in the right folder; no external references of any kind.
2. Add an entry to the folder's `manifest.yaml` with `alt` and, for code,
`rationale` and `honest_note`.
3. Re-measure and update `BUDGET.md`. A budget nobody updates is a wish.