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.
125 lines
5.0 KiB
Markdown
125 lines
5.0 KiB
Markdown
# 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 |
|