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.
5.0 KiB
Phase 7 — verification record
What was checked, how, and what it returned. Every block below is pasted output, not a description of output.
Run 2026-10-26 on .13, headless Chrome for measurement.
1. Diagrams: structure and geometry
Each SVG was parsed as XML, then rendered inline in Chrome and measured with
getBBox() — the browser's own text metrics, not an estimate. The check
reported text overflow outside its box, partial overlap between boxes, elements
outside the viewBox, empty text nodes and unlabelled boxes.
01-homelab-topology.svg OK
02-agent-architecture.svg OK
03-rag-pipeline.svg OK
04-edge-architecture.svg OK
05-distributed-audio.svg OK
06-media-pipeline.svg OK
07-cost-resource-engineering.svg OK
08-era-timeline.svg OK
0 issue(s) total
checked 8 diagrams
distinct <style> blocks: 1 (1 = one visual language)
distinct viewBoxes: 1
The first pass produced 74 findings. They were fixed in the source of the diagrams, not suppressed in the checker: shortened labels, widened boxes, removed empty text nodes. The final run is clean.
"One visual language" is one number: distinct <style> blocks: 1. All eight
files carry a byte-identical style block, so there is no second palette to drift.
2. Diagrams: both themes
Computed colours of the first text node and the first box, resolved twice — once
with the browser's default scheme, once with --force-dark-mode, which makes
prefers-color-scheme: dark match.
01-homelab-topology.svg light rgb(27, 34, 43) rgb(244, 246, 248) → dark rgb(231, 237, 244) rgb(24, 32, 40) OK
02-agent-architecture.svg light rgb(27, 34, 43) rgb(244, 246, 248) → dark rgb(231, 237, 244) rgb(24, 32, 40) OK
03-rag-pipeline.svg light rgb(27, 34, 43) rgb(244, 246, 248) → dark rgb(231, 237, 244) rgb(24, 32, 40) OK
04-edge-architecture.svg light rgb(27, 34, 43) rgb(244, 246, 248) → dark rgb(231, 237, 244) rgb(24, 32, 40) OK
05-distributed-audio.svg light rgb(27, 34, 43) rgb(244, 246, 248) → dark rgb(231, 237, 244) rgb(24, 32, 40) OK
06-media-pipeline.svg light rgb(27, 34, 43) rgb(233, 241, 253) → dark rgb(231, 237, 244) rgb(17, 37, 61) OK
07-cost-resource-engineering.svg light rgb(27, 34, 43) rgb(230, 244, 242) → dark rgb(231, 237, 244) rgb(13, 38, 36) OK
08-era-timeline.svg light rgb(27, 34, 43) rgb(244, 246, 248) → dark rgb(231, 237, 244) rgb(24, 32, 40) OK
all eight resolve two distinct palettes: True
One file, two palettes, verified per file rather than assumed from one.
3. Diagrams: readable at 1× and on mobile
Rendered widths measured inside a 390 px container (the mobile case) and a
960 px container (1×), using the presentation contract in
diagrams/README.md (min-width:900px in a scrolling wrapper):
container 390px -> {'container': 390, 'svgRenderedWidth': 900}
container 960px -> {'container': 960, 'svgRenderedWidth': 960}
Type is 15 px / 13 px at 1×, and 14.1 px / 12.2 px at the 900 px minimum — arithmetic from the rendered width over the 960 viewBox. Scaled to the container instead, the same labels would render at 5 px, which is unreadable; that is why the wrapper is a requirement and not a styling preference.
4. Accessibility
Every file carries role="img", <title> and <desc>. desc length per file:
219, 230, 285, 223, 193, 197, 260, 234 characters — a real alternative text, not
a filename. The manifest repeats each desc verbatim as alt, so the page and
the screen reader cannot disagree.
5. Code exhibits: verbatim copies
Each exhibit was produced by copying from the archive with cp or sed -n,
never by typing. Line counts as reported by wc -l:
36 01-actionscript-class.as
42 02-js-easing-core.js
27 03-php-encode-op.php
37 04-typescript-service-layer.ts
28 05-embedded-cpp-interface.hpp
33 06-nix-derivation.nix
212 total
03-php-encode-op.php is two copied regions joined by one marked elision
(line 20 of the file). Nothing else was altered.
6. Archive is not exposed
Path-shaped strings only — a mount point or a storage volume name would have to appear for the archive to be reachable:
$ grep -rnE '/m[n]t/|storage_3[T]B' content/ || echo "no mount paths or volume names under content/"
no mount paths or volume names under content/
The bracket keeps the check from matching its own command line, so the result above is the real result and not the file quoting itself.
No matches. The archive is not linked, named, or reachable from anything under
content/. Provenance is recorded as "private archive, path withheld" — the
words only, never the location.
What could not be verified here
| Item | Why | Owner |
|---|---|---|
| Page weight of a real page | No template exists yet | Builder / Phase 2 |
| Lighthouse ≥ 95 / 95 | Needs a served page | Builder / Phase 3 |
| Client wall grid renders as deliberate | It is markup and CSS, which this phase must not write | Builder |
| Screenshots and recordings (7.4) | The console is Phase 5; staging it would be fabrication | Phase 5, then this phase |