fix: regenerate favicon.ico with a transparent ground; tick Pouya's read-through
public/favicon.ico shipped with no transparency: all three frames declared a 32-bit alpha channel and then carried alpha=255 on every one of their 256/1024/ 2304 pixels, ground opaque cream rgba(250,247,242,255). Pouya's read-through finding, confirmed by parsing the ICO container directly. The render source carries true alpha (2,272,386 transparent px, 20,795 partial), so this is an export, not a mask derived from the cream ground — R13's harder branch did not fire and R13 is unchanged on its own terms. New scripts/icons.mjs + npm run icons re-derives the icon from the committed master: asserts the source is still the documented crop (R14), verifies a candidate file and renames on success so a rejected build cannot replace a good favicon, and runs a boundary-colour halo test. Composition is unchanged — ink bbox and pixel count identical at all three sizes. apple-touch-icon.png is byte-identical and stays opaque cream deliberately; the reason lives in docs/reference/brand-assets.md §The icon set, with the bar and a pointer in BaseLayout.astro, docs/06 and R13. docs/06: the read-through is ticked, and the cutover callout drops to ONE blocker — Q60's waiting period. Two adversarial review rounds, 15 findings, all resolved, none declined; stopped at two per D19. claims-auditor correctly deferred to cutover per D20. Gates on the committed bytes, exit status read: check 0, build 0 (23 pages), check:claims 0, check:intake 0, og:proof 0, lint 0, lighthouse 0 (worst of 23 99/100/100/100). Nothing deployed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Md3GndFqWPzK78xAoebsg5
This commit is contained in:
co-authored by
Claude Opus 5
parent
4735989f0b
commit
67847d94fa
@@ -140,6 +140,7 @@ npm run check:intake # the form's field table vs the Lambda's — they are two
|
||||
npm run og:proof # every og:image resolves; every card headline IS its page's <h1>
|
||||
npm run lighthouse # the performance budget. LOCAL ONLY — needs Chrome, not in CI
|
||||
npm run bio:pdf # re-renders the committed one-page PDF from /bio/. LOCAL ONLY
|
||||
npm run icons # re-derives public/favicon.ico from the brand master. REGENERATOR
|
||||
npm run lint # eslint + prettier check
|
||||
npm run format # prettier — rewrite files in place
|
||||
npm run deploy # build + deploy from this machine (see docs/06)
|
||||
@@ -153,6 +154,17 @@ checklist, and **they are deliberately not wired into `npm run build` or either
|
||||
deploy path.** Do not describe either as gating a deploy: a check described as
|
||||
running where it cannot is the defect `AGENTS.md` Q22 turned out to be.
|
||||
|
||||
**`bio:pdf` and `icons` are REGENERATORS, not gates** — they rewrite committed
|
||||
artefacts (`public/pouya-lajevardi-bio.pdf`, `public/favicon.ico`) rather than
|
||||
checking anything, so they are run deliberately and their output is committed.
|
||||
⚠️ **`LOCAL ONLY` above means a different thing for each, so do not read the two
|
||||
labels as one.** `bio:pdf` **cannot** run in CI — it drives a browser. `icons`
|
||||
is pure Node and **could**; it is out of the build because a build should not
|
||||
silently rewrite an artefact a human approved, which is why it is labelled
|
||||
`REGENERATOR` rather than `LOCAL ONLY`. It regenerates the favicon **only** — the touch icon
|
||||
is hand-made and must stay opaque cream (`docs/reference/brand-assets.md`
|
||||
§The icon set).
|
||||
|
||||
**`og:proof` and `check:intake` exist because two facts in this repo are
|
||||
deliberately duplicated**, and a duplicated fact needs a mechanism rather than a
|
||||
comment. `og:proof` compares each generated OG card's headline against its page's
|
||||
@@ -363,7 +375,7 @@ an operator to delete the three records that authenticate outbound mail —
|
||||
under the heading "Never delete".
|
||||
|
||||
**A measurement is a claim about your instrument until you check the
|
||||
instrument.** This has now cost six times, and the shape is identical every
|
||||
instrument.** This has now cost eight times, and the shape is identical every
|
||||
time: a number that looks like a finding, from a probe nobody validated.
|
||||
|
||||
- `timeout 60 ls "$DRIVE"` — **the command never ran.** `timeout` is not
|
||||
@@ -391,6 +403,20 @@ time: a number that looks like a finding, from a probe nobody validated.
|
||||
from the list. **A `grep -o` window count is not an enumeration** — to count
|
||||
occurrences of a string, iterate every match position, or `grep -o` the bare
|
||||
string with no context window.
|
||||
- **An ink bounding box of `48x48` filling the whole 48 px favicon** — which
|
||||
reads as *the regeneration blew the mark up to the full square*. The probe
|
||||
identified ink as "differs from cream", which is **correct on a matted icon and
|
||||
meaningless on a transparent one**, because `alpha = 0` pixels still carry RGB
|
||||
`(0,0,0)`. **Nothing about the probe changed — the class of input did**, and a
|
||||
probe cannot tell you that. Composite over a known ground first, so both things
|
||||
compared are the kind of thing the instrument was built for.
|
||||
- **A contrast ratio of `14.02:1` for the mark's darkest ink** — computed from a
|
||||
raw channel value **without asking what alpha it is painted at**. Exactly one
|
||||
pixel carried that colour and its alpha was 251; a `>= 250` filter let it
|
||||
through and the ratio was then taken as if it were opaque. **It is a number
|
||||
about a colour that is never painted.** Composite against the actual ground
|
||||
before measuring contrast, and take "the ink colour" only from fully opaque
|
||||
pixels.
|
||||
|
||||
So before acting on a number: say what it is a number *of*; confirm the command
|
||||
actually ran and read its exit status; and check it against a second method that
|
||||
|
||||
Reference in New Issue
Block a user