Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 28 additions & 16 deletions .claude/rules/components.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,22 +45,34 @@ MUST:
2. Respect `prefers-reduced-motion` (the site-wide override in
`src/index.css` collapses `animation-duration` to 0.01ms)
3. Be CSS-only — **no JS animation libraries, no Framer Motion, no
`requestAnimationFrame`** — with ONE ratified exception, the
working-model exception (ISSUE 419), which covers the `plate`
(`PlateFeature`), `bore` (`BoreFeature`, ISSUE 420), and
`fourier` (`FourierFeature`, ISSUE 421) shapes — and, as
amended by ISSUE 422 (the APPARATUS REGISTER, merger ruling),
the `audit` (`AuditFeature`) shape, whose whole feature carries
the full artifact contract on-site (springs, proximity masks,
magnetic dispatch) confined to that feature and meaning-first.
Inside those spreads' frames, script may move the model's own
signal (a pulse, a probe, a plate drawing itself), under the
four constraints in `docs/interaction-language.md` rule 3 as
amended: confined to the frame; timer-robust (every step
advances via a rAF-vs-setTimeout race, never rAF alone — rAF
provably stalls in throttled/background tabs and embedded
panes); collapsed by reduced-motion; ambient amplitude even
inside the frame (≤4px)
`requestAnimationFrame`** — with TWO ratified exceptions:
- the working-model exception (ISSUE 419), which covers the
`plate` (`PlateFeature`), `bore` (`BoreFeature`, ISSUE 420),
and `fourier` (`FourierFeature`, ISSUE 421) shapes — and, as
amended by ISSUE 422 (the APPARATUS REGISTER, merger ruling),
the `audit` (`AuditFeature`) shape, whose whole feature carries
the full artifact contract on-site (springs, proximity masks,
magnetic dispatch) confined to that feature and meaning-first.
Inside those spreads' frames, script may move the model's own
signal (a pulse, a probe, a plate drawing itself), under the
four constraints in `docs/interaction-language.md` rule 3 as
amended: confined to the frame; timer-robust (every step
advances via a rAF-vs-setTimeout race, never rAF alone — rAF
provably stalls in throttled/background tabs and embedded
panes); collapsed by reduced-motion; ambient amplitude even
inside the frame (≤4px)
- the walkable-room exception (THE STACKS, `/archive`, 2026-07-20
design review): a room is inherently a working model — bodies
drift in a WebGL space via `@react-three/fiber`'s `useFrame`.
Confined to `src/stacks/` (never spills into a shared
component); `prefers-reduced-motion` fully collapses the drift
and the scroll-driven camera easing to a static, fully
navigable resting layout — same collapse contract as the
working-model exception, enforced in React state rather than
CSS since the surface is a `<canvas>`; the real DOM ledger
beside the canvas is the CSS-only resting structure required by
this section and stays present and complete with the canvas
layer entirely absent (no WebGL2, JS disabled)
4. Not trigger layout/repaint hotspots — animate only `opacity` and
`transform`

Expand Down
4 changes: 4 additions & 0 deletions KERNEL.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,10 @@ kernel.chat/ ← repo root
│ │ ├── 360.ts ... 375.ts ← every published issue
│ │ └── …
│ ├── pages/ ← routes (IssueDetailPage, EnginePage, …)
│ ├── stacks/ ← THE STACKS (/archive): the back catalog
│ │ as a walkable room; bodies resolve in
│ │ bodies.ts (M1 sheets; M2 instruments,
│ │ M3 monuments, M4 scans)
│ ├── engine/ ← AI orchestration (when the magazine
│ │ hosts an interactive surface)
│ └── components/MagazineFrame.tsx← masthead/folio rendering
Expand Down
47 changes: 47 additions & 0 deletions SCRATCHPAD.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,53 @@

> This file persists context between Claude Code sessions.

## Session 2026-07-20 (cont.) — THE STACKS M1 ships (feat/the-stacks)

- Isaac showed the SUKIMA project (claygarden.jp/series) — floating
scanned-clay objects in a dark void, scroll-descent into bilingual
spreads — and asked for the equivalent on kernel.chat. Brainstormed
to a spec (docs/superpowers/specs/2026-07-20-the-stacks-design.md):
a new room at `/archive`, volumes grouped by cover month, four body
kinds resolved by one seam (`bodyFor`) — sheets now, instruments/
monuments/scans in M2–M4. Planned as 7 TDD tasks
(docs/superpowers/plans/2026-07-20-the-stacks-m1.md), executed via
subagent-driven-development on branch `feat/the-stacks` (based on
PR #62's real-URLs branch — the room assumes real paths).
- **Motion-law conflict, resolved by Isaac:** the drifting bodies need
rAF (`useFrame`), but `.claude/rules/components.md` restricts the
editorial surface to CSS-only motion except a named exception list.
Isaac's call: ratify a new "walkable-room exception" alongside the
existing plate/bore/fourier/audit one — same collapse contract
(reduced-motion → static, fully navigable), confined to
`src/stacks/`. Committed to the rules file before Task 5.
- **Two real bugs caught by review, not by me:** (1) PR #62's
`deploy.yml`/`package.json` referenced `scripts/build-sitemap.mjs`,
but the file was never actually git-added — sat untracked on disk
from the earlier session. Would have broken CI. Fixed directly on
`feat/real-urls-cloudflare` (commit 758813af6). (2) The issue
registry isn't uniformly abbreviated — 18 issues spell out `'APRIL'`
and 2 spell out `'JUNE'` instead of the 3-letter form every other
issue uses. `volumes.ts`'s month lookup assumed uniformity, so
~20 issues (a third of the catalog) got broken JP labels and
miskeyed grouping buckets. Task 6's design-QA audit surfaced it
(`"JUNE 2026二〇二六年undefined"`); fixed by normalizing on the
first 3 letters rather than touching 20 content files, with 2
regression tests. Verified against all 68 real issues: zero
`undefined`/`NaN` in any label.
- Shipped: `src/stacks/{volumes,bodies,coverPainter,coverTheme,
webgl,Scene}.ts`, `src/pages/ArchivePage.{tsx,css}`, e2e coverage,
colophon entry link. r3f/@react-three/three confined to the lazy
`/archive` chunk — main bundle held at 236.42KB gzip (budget
300KB), independently confirmed by grepping the built output for
three.js symbols (zero in the main chunk).
- Gates at close: adherence + editorial clean, tsc clean, 810/810
tests, e2e 4/4, design-QA audit clean on `/archive` (desktop +
mobile). M2 (instruments), M3 (monuments), M4 (first scan — KERNEL
PRESS Edition №001) remain, per the spec's milestone sequence.
- Still blocked on Isaac for PR #62 (unrelated to this branch): create
Cloudflare Pages project `kernel-chat` + 2 repo secrets, then DNS
cutover.

## Session 2026-07-20 — UX anti-pattern audit → real URLs (PR #62)

- Ran the design-QA audit against live kernel.chat. Editorial surface
Expand Down
Loading