Operational Restraint: docs site theme + M64 changelog#43
Conversation
Maps every Mintlify theme variable to design-system tokens, swaps
the heritage orange chrome for cyan-mint pulse, self-hosts Commit
Mono + Instrument Sans (Latin subset, ≤80KB each), and animates the
brand-mark wake-pulse inside the logo SVGs so it survives Mintlify's
render path without a custom React component.
- docs.json: colors → pulse tokens, fonts.heading/body → self-hosted
woff2, styling.codeblocks → dark
- fonts/{CommitMono,InstrumentSans}-{Regular,Medium}.woff2: new
self-hosted faces, sourced from @fontsource Latin subset, all
under the 80KB perf cap
- tokens.css + custom.css: design-system token transcription, font
faces, headings/body type, calm Vesper-style code-block syntax
theme, focus ring, prefers-reduced-motion guard
- logo/{dark,light}.svg: pulse disc animates 2.4s ease-in-out
infinite via embedded SVG <style>; reduced-motion fallback to a
static halo
Markdown content untouched. Spec: M64_007 (W4 — docs apply).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Consolidates the M64 design-system rollout into a single user-facing <Update>: one token system end to end, the wake-pulse as currency, light mode at WCAG AA, prefers-reduced-motion honoured, and the docs site finally reading in the same voice. Followed the canonical release template (~/Projects/dotfiles/skills/ release-template.md): MMM DD, YYYY label, "What's new" + "UI" tags (both already present in changelog.mdx), user-facing voice, no milestone IDs or workstream numbers, 298 words (≤400 cap). Dashboard pulse-cap screenshot deferred — requires the e2e harness (separate spec) to seed a fixture user with 6 active zombies. Captured as a What's next pointer instead of fabricated evidence. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…006/007 specs QA was failing on three real regressions from prior commits in this PR: 1. `tests/e2e/design-system-smoke.spec.ts:141` — "terminal has surface-terminal background" queried `<pre>` for background-color, but the Terminal rebuild moved bg + border to the outer wrapper (window-chrome strip lives there now). Added a `terminalWrapperStyle` helper alongside the existing `terminalPreStyle` so colour-vs-structure queries land on the right element. 2. `tests/e2e/home.spec.ts:11` — expected "The daemon already knows why." but Hero copy was renamed to "The agent already knows why." in 3001ad6. Unit tests were updated; this e2e was missed. 3. `tests/e2e/humans-agents-links.spec.ts:33` — same string. 100/100 Playwright tests now pass (was 97 + 3 fail). Specs M64_006 (docs-repo changelog `<Update>`) and M64_007 (W4 docs site design apply) shipped via `usezombie/docs#43`. Moving both from `docs/v2/pending/` to `docs/v2/done/` and flipping `Status: PENDING` → `Status: DONE` to match the shipped reality. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8 of 9 issues fixed; 1 confirmed intentional.
P1:
- logo/{dark,light}.svg: transform-origin: center (was 10px 16px which,
combined with transform-box: fill-box, anchored the scale outside the
circle's centre).
- logo/{dark,light}.svg: keyframe 100% now matches 0% (opacity: 0.55,
scale(1)) so the loop is seamless — previously snapped from 0 → 0.55
every 2.4s.
- custom.css: .cover-grid now position: relative so .cover-grid::before's
absolute positioning anchors to it instead of escaping to the page root.
- fonts/InstrumentSans-{Regular,Medium}.woff2 → InstrumentSans-Variable.woff2:
the two static files had identical SHAs (the Medium file was a copy of
Regular, no actual heavier weight). Replaced with the wght-axis variable
file from @fontsource — 30KB single download serves every weight 400-700.
P2:
- docs.json: dropped the `fonts` block; @font-face in custom.css is now the
single source of truth (Mintlify's build-time injection was duplicating
the registration and risking double-fetch).
- AGENTS.md "Design system colors" updated from heritage --z-orange (#d96b2b)
to the M64 Operational Restraint tokens — pulse cyan + pulse glow + the
semantic info/warn/error/evidence set, with Instrument Sans + Commit Mono
named as the typeface pair.
Confirmed intentional (not changed):
- changelog.mdx label "May 9, 2026" — today's date in IST per the
authoring environment, aligned to deploy day.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Addressed in 8516736. P1 (all fixed):
P2 (fixed):
P2 (intentional, not changed):
Thanks for the review — all eight code issues had real teeth, especially the duplicate-Medium-woff2 catch. |
…STEM.md Two audit findings against ~/Projects/usezombie/docs/DESIGN_SYSTEM.md: - Focus ring outer shadow: 4px → 3px to match the spec's `box-shadow: 0 0 0 3px var(--pulse-glow)`. - Reduced-motion pulse fallback: opacity 0.30/0.35 → 0.2 to match the spec's "static ring at 0.2 opacity". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…per-level tracking
Three fixes from the self-review:
- custom.css: font-size moves from `:where(html, body)` to `:where(body)`.
Setting font-size on html redefined the rem unit (16px → 15px), which
silently rescaled every Mintlify rule expressed in rem (~6% smaller
paddings/margins/gaps). Body-only keeps inheritance without compounding
into the rem base.
- custom.css: deleted the `.token.*` Prism class overrides as dead CSS.
Mintlify renders syntax via Shiki, which emits inline `style="--shiki-…"`
attributes rather than Prism token classes — the override block was
unenforced. The chrome around code blocks (font, surface, border, radius)
remains; the syntax palette comes from `styling.codeblocks: "dark"` in
docs.json (Mintlify's built-in dark theme).
- custom.css: heading letter-spacing now per-level per DESIGN_SYSTEM.md
§Type scale — h1 -0.025em, h2 -0.02em, h3 -0.015em, h4-h6 flat.
Previous flat -0.015em deviated from the spec's tightening curve.
Also trimmed the changelog "What's next" line — the previous wording
("end-to-end browser harness against api-dev is in progress") was an
aspirational claim about M64_005 work that hasn't started, violating
the "Changelog claim challenge" rule.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Greptile P1 catch on the prior commit. The pattern was on `.cover-grid` at opacity: 1 (fully visible) and `::before` overlaid via `background: inherit; opacity: 0.08` — adding a negligible second layer. The dots were supposed to render at the 8% tint per DESIGN_SYSTEM.md "subtle dot-grid background … 8% opacity". Now: parent `.cover-grid` only provides the positioning context; `::before` owns the radial-gradient at 0.08 opacity. Single layer, correct subtlety. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Two follow-up pushes: 3acf05c — addresses the new P1 ( Good catch. The dot pattern was on 0e9a6aa — self-review pass (separate from the greptile thread). Three issues I found while auditing the PR myself before requesting review:
Also trimmed the changelog "What's next" line — the prior wording made an aspirational claim about M64_005 work that hasn't started, which violates the AGENTS.md "Changelog claim challenge" rule. |
Summary
Two commits, both on this branch per direction:
chore(design)— apply Operational Restraint todocs.usezombie.com(M64_007 / W4 of the design-system rollout). Heritage orange chrome → cyan-mint pulse, self-hosted Commit Mono + Instrument Sans (Latin subset, all under 80KB), brand-mark wake-pulse animated inside the logo SVGs, calm Vesper-style code-block syntax,prefers-reduced-motionhonoured.docs(changelog)— consolidated<Update>for the Operational Restraint rollout (M64_006). 298 words, voice-matched to recent entries, tags["What's new", "UI"](both pre-existing inchangelog.mdx).What changed
docs.json—colors.primary/light/darknow point at the design-system pulse tokens;fonts.heading= Commit Mono 500,fonts.body= Instrument Sans 400 (self-hosted woff2);styling.codeblocks: "dark".fonts/{CommitMono,InstrumentSans}-{Regular,Medium}.woff2— 4 self-hosted faces, sourced from@fontsourceLatin subset, ≤80KB each.tokens.css+custom.css(Mintlify auto-loadscustom.css) — token transcription, font-faces, body/heading family overrides, ~68ch measure, calm Vesper-style code-block syntax theme, focus ring on--uz-pulse, reduced-motion guard.logo/{dark,light}.svg— pulse disc animates 2.4s ease-in-out infinite via embedded<style>; reduced-motion fallback to a static halo. Survives Mintlify's logo render path without needing a custom React component.changelog.mdx— new<Update>block at the top.Verification
Local Mintlify CLI not installed; relying on the Mintlify deploy preview bot for build + render verification. Once the preview URL is live, manual checks:
fonts.googleapis.com/fonts.gstatic.comSpec deviations (called out)
chore/m64-changelog; bundled onto this branch per direction.["What's new", "Design", "App", "Website", "Docs"], but the canonical release template only enumeratesUIfrom that family and the existingchangelog.mdxhas never used the others. Used["What's new", "UI"]to satisfy the spec's own "tag re-use" invariant.images/changelog/m64-pulse-cap.pngscreenshot omitted — its capture depends on M64_005 (e2e harness with seeded 6-zombie fixture), which isn't done. Surfaced as a "What's next" pointer in the entry rather than fabricated.Test plan
prefers-reduced-motion: reducesimulation: brand-mark falls back to static halo🤖 Generated with Claude Code
Greptile Summary
This PR applies the Operational Restraint design system to the docs site (M64_007) and adds the corresponding changelog entry (M64_006). It replaces the heritage orange
--z-orangepalette with the cyan-mint--uz-pulsetoken set, introduces self-hosted Commit Mono + Instrument Sans Variable fonts viacustom.css, embeds a wake-pulse SVG animation in both logo variants, and updatesAGENTS.mdto reflect the new token namespace.tokens.css+docs.json): Dark-first surfaces, borders, text, status, and radius tokens transcribed from the upstream design system;colors.primary/light/darkindocs.jsonnow point at the pulse tokens;styling.codeblocks: \"dark\"selects Mintlify's built-in Shiki dark theme.custom.css): Three self-hosted font files (CommitMono-Regular, CommitMono-Medium, InstrumentSans-Variable) declared via@font-face; headings land on Commit Mono, body on Instrument Sans Variable; Mintlify'sfontsconfig is intentionally omitted to avoid double-fetching.logo/dark.svg,logo/light.svg): Symmetrical pulse keyframes (0% and 100% share the samescale/opacityvalues for a seamless loop) withtransform-origin: center; transform-box: fill-box;prefers-reduced-motionfalls back to a static halo.Confidence Score: 5/5
This is a docs-only visual redesign with no logic, API, or data changes — safe to merge.
The changes are scoped to CSS tokens, font files, SVG logos, Mintlify config, and a changelog entry. All issues from the previous review round are resolved. Remaining findings are comment-accuracy nits that do not affect rendered output or runtime behaviour.
No files require special attention — the two minor observations in
tokens.cssandcustom.cssare documentation/comment consistency issues that will not affect the deployed site.Important Files Changed
--ff-mono/--ff-sansfont-family tokens referenced in AGENTS.md.--uz-pulseconstraint relative to AGENTS.md.styling.codeblocks: "dark"added. Nofontskey present — consistent with thecustom.csscomment that Mintlify's font injection is intentionally bypassed.transform-origin: center; transform-box: fill-box; keyframes are symmetrical (0% and 100% both atscale(1) opacity:0.55) so the loop is seamless; reduced-motion fallback to static halo is present.<Update>entry added at the top for the Operational Restraint design system rollout with tags["What's new", "UI"].--z-orangepalette to new--uz-pulse/--uz-bg/--uz-surfacetoken family; grep command updated to match new token prefix.Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A[tokens.css] -->|"@import"| B[custom.css] A -->|pulse/bg/surface values| C[docs.json] B -->|font-family headings| D["CommitMono-Regular/Medium.woff2"] B -->|font-family body| E["InstrumentSans-Variable.woff2"] B -->|focus-visible outline| F["--uz-pulse / --uz-pulse-glow"] C -->|"codeblocks: dark"| G[Mintlify Shiki dark theme] H["logo/dark.svg"] -->|embedded style| I[uz-wake-pulse keyframes] J["logo/light.svg"] -->|embedded style| I I -->|"prefers-reduced-motion"| K[static halo fallback] B -->|global reduced-motion| L["animation-duration: 0.01ms !important"]Comments Outside Diff (1)
fonts/InstrumentSans-Medium.woff2, line 1 (link)InstrumentSans-Regular.woff2andInstrumentSans-Medium.woff2share the same git blob SHA (78557c7) and the same MD5 (d4be1b605ba7e3dbf6525cacf758be0d). Both@font-facedeclarations incustom.css(weight 400 and weight 500) will resolve to the same physical font, so nothing in the UI that requestsfont-weight: 500will actually render heavier. The Medium woff2 needs to be replaced with the real Medium subset.Prompt To Fix With AI
Prompt To Fix All With AI
Reviews (3): Last reviewed commit: "fix(design): cover-grid dot pattern live..." | Re-trigger Greptile
Context used: