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

5.0 KiB
Raw Permalink Blame History

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