You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(web): the list is GPU CLI's, the page rounds like the app
Three changes, one of which turned up a bug.
§05 was written as an AnnotKit list. It is not — it is the GPU CLI list,
and AnnotKit is one of the things it covers. The lead now says so, and
the privacy line says it out loud ("one list for everything GPU CLI
ships, AnnotKit included") because someone subscribing from a page about
a Swift package should know what lands in their inbox. Claims are held to
gpu-cli.sh's own words: it runs cloud GPUs from your terminal. Nothing is
promised about cadence or list size.
The footer carries a powered-by line under the wordmark, linking the org.
Radii are lifted from the overlay rather than invented. The app has a
three-value vocabulary — RoundedRectangle(cornerRadius: 3) on marks and
small chrome, cornerRadius: 10 on the composer panel, Capsule() on its one
accent button — so the page gets --radius-sm/lg/pill and nothing in
between. The submit is a capsule for the same reason the app's Save is.
Editorial bans a pill with a GRADIENT fill, not a pill.
The bug: :focus-visible carried `border-radius: inherit`, which does not
mean "keep your own corners" — it REPLACES them with the parent's. The
outline already follows an element's own radius, so the declaration was
never doing anything useful; with radii on the page it would have squared
the capsule off the instant it took keyboard focus. Removed, and verified
by reading the computed style of a focused submit (999px) and input (3px,
1px border, 2px outline) rather than by looking at it.
Two instrument fixes found while auditing, not design changes:
- responsive-check watched six affordance selectors and .foot__powered
made seven. A new affordance that no gate watches is how gate 49
quietly stops meaning anything.
- The honest-typography test spot-checked four strings for straight
quotes after whitespace, so the apostrophe in "Agentation's" sat in
the footer colophon undetected. It now walks every exported string
and rejects any straight quote or double hyphen outside code samples.
Lighthouse 100/100/100/100, LCP 0.4s, CLS 0.007. Responsive PASS at five
widths, contrast 14/14, 95 tests.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: web/.hallmark/slop-test.md
+8-5Lines changed: 8 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,9 @@
1
1
# Slop test — AnnotKit landing page
2
2
3
-
Run against the built page at 320 / 375 / 414 / 768 / 1280 px, 2026-08-19.
3
+
Run against the built page at 320 / 375 / 414 / 768 / 1280 px. First run
4
+
2026-08-19; re-run 2026-08-20 after three changes — corner radii lifted from
5
+
the overlay, §05 widened from an AnnotKit list to the GPU CLI list, and the
6
+
notes file renamed to `ANNOTKIT_NOTES.md`.
4
7
Every gate must answer **no**. Where a gate is answered with a justification
5
8
rather than a plain no, the justification is written out — a silent pass on a
6
9
gate that fired is the thing this file exists to prevent.
@@ -54,8 +57,8 @@ Automated backing:
54
57
## Implementation · 22–27
55
58
56
59
22.**Zero-chroma neutral?** No. Lowest chroma on the page is 0.010.
57
-
23.**Accent over ~5 % of a viewport?** No. The accent fills exactly one surface — the submit button — plus hairline underlines, the §-numbers, and the focus ring. Measured well under 3 % at every width.
58
-
24.**Off-scale spacing?** No. Every gap, pad, and margin comes from `--space-*`; the only bare values are the 4 px double-rule height and 1 px hairlines, both tokenised as `--rule-*`.
60
+
23.**Accent over ~5 % of a viewport?** No. The accent fills exactly one surface — the submit button — plus hairline underlines, the §-numbers, the footer's powered-by hover, and the focus ring. Measured well under 3 % at every width. The submit is a capsule because the overlay fills its one accent button with `Capsule()`; editorial bans a pill with a GRADIENT fill, not a pill, and this fill is flat.
61
+
24.**Off-scale spacing?** No. Every gap, pad, and margin comes from `--space-*`; the only bare values are the 4 px double-rule height and 1 px hairlines, both tokenised as `--rule-*`. Radii are `--radius-sm/lg/pill`, lifted from the overlay (`RoundedRectangle(cornerRadius: 3)`, `cornerRadius: 10`, `Capsule()`) rather than invented, so the page rounds the way the app does.
26.**Interactive element missing focus-visible / active / disabled?** No. The copy button, the input, and the submit each ship all eight states; typographic links ship default, hover, focus-visible, active, and a disabled variant used when the repo is private.
61
64
27.**Motion without a reduced-motion fallback?** No. The hero reveal collapses to a 150 ms opacity fade, the rule draw collapses to an opacity fade, and the §02 loop renders its poster with controls instead of autoplaying.
@@ -102,7 +105,7 @@ Automated backing:
102
105
103
106
## Honest copy · 46
104
107
105
-
46.**Invented metric?** No. The page carries no numbers except the platform facts from `Package.swift` (macOS 15, iOS 17, Swift 6) and the version posture from `DECISIONS.md` (0.x, MIT). No testimonials, no logos, no proof bar. Where proof would normally sit, the page shows the code, the note format, and the captures.
108
+
46.**Invented metric?** No. The page carries no numbers except the platform facts from `Package.swift` (macOS 15, iOS 17, Swift 6) and the version posture from `DECISIONS.md` (0.x, MIT). No testimonials, no logos, no proof bar. Where proof would normally sit, the page shows the code, the note format, and the captures. §05's claims about the GPU CLI list are traceable to gpu-cli.sh's own tagline ("Run cloud GPUs from your terminal"); nothing is promised about cadence or subscriber count. The §03 claim that a named third-party skill consumes the output was REMOVED at the rename rather than restated, because it could not be verified (annotkit-6l8).
106
109
107
110
## Re-drawn chrome · 47
108
111
@@ -144,4 +147,4 @@ No axis scored below 3; no revision pass was required on the scores.
144
147
Neither is a gate failure; both are recorded so they are not mistaken for finished work.
145
148
146
149
-**Captures are placeholders.** The §02 loop and the two stills are `pending` in `src/captures.ts` and render labelled plates. L4 records them from `task demo`.
147
-
-**Initial JS is 67.4 KB gzip against the epic's ~60 KB budget** (§8.5). React 19 + react-dom is 65 KB of that; the app itself is under 3 KB. Lighthouse still scores 100 for performance (LCP 0.4 s, TBT 0 ms), so this is a budget-line question, not a user-facing one. Aliasing `react`/`react-dom` to `preact/compat` was measured at **14.5 KB gzip** — a 53 KB saving with no source changes — but the epic locks React, so the swap is the maintainer's call, not a silent substitution.
150
+
-**Initial JS is 67.6 KB gzip against the epic's ~60 KB budget** (§8.5). React 19 + react-dom is 65 KB of that; the app itself is under 3 KB. Lighthouse still scores 100 for performance (LCP 0.4 s, TBT 0 ms), so this is a budget-line question, not a user-facing one. Aliasing `react`/`react-dom` to `preact/compat` was measured at **14.5 KB gzip** — a 53 KB saving with no source changes — but the epic locks React, so the swap is the maintainer's call, not a silent substitution.
Copy file name to clipboardExpand all lines: web/src/copy.ts
+4-3Lines changed: 4 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -130,7 +130,7 @@ export const mcpBridge = {
130
130
exportconstsignup={
131
131
number: "§05",
132
132
title: "One email when it’s worth reading.",
133
-
lead: "Releases, design notes, and the 1.0 call. No digest, no drip campaign — AnnotKit is 0.x and honest about it.",
133
+
lead: "The GPU CLI list: releases and design notes for AnnotKit, for the CLI that runs cloud GPUs from your terminal, and for whatever ships next. No digest, no drip campaign.",
134
134
label: "Email address",
135
135
placeholder: "you@example.com",
136
136
submit: "Get release notes",
@@ -146,11 +146,12 @@ export const signup = {
146
146
network: "That didn’t reach us. Check your connection and try again.",
147
147
},
148
148
privacy:
149
-
"Your address goes to Resend and nowhere else. Every email carries an unsubscribe link.",
149
+
"One list for everything GPU CLI ships, AnnotKit included. Your address goes to Resend and nowhere else, and every email carries an unsubscribe link.",
150
150
}asconst;
151
151
152
152
exportconstfooter={
153
153
wordmark: "AnnotKit",
154
+
poweredBy: "Powered by GPU CLI",
154
155
tagline:
155
156
"The native analogue of the web Agentation tool. Pre-1.0 — the API may shift before 1.0.",
156
157
links: [
@@ -159,7 +160,7 @@ export const footer = {
159
160
{label: "License",href: "license"},
160
161
],
161
162
colophon:
162
-
"MIT licensed. The note format is a clean-room reimplementation of Agentation's; this project contains no Agentation source. Set in Fraunces, Newsreader & IBM Plex Mono.",
163
+
"MIT licensed. The note format is a clean-room reimplementation of Agentation’s; this project contains no Agentation source. Set in Fraunces, Newsreader & IBM Plex Mono.",
0 commit comments