Files
ai-resume/content/assets/VERIFY.md
Documenter da18ab2237 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.
2026-10-26 17:35:15 +11:00

125 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 |