Skip to content

Docs: refresh cache semantics after PR #166 (1d fresh + 7d SWR) - #169

Merged
pablostanley merged 1 commit into
mainfrom
docs/cache-semantics-post-pr166
Apr 20, 2026
Merged

Docs: refresh cache semantics after PR #166 (1d fresh + 7d SWR)#169
pablostanley merged 1 commit into
mainfrom
docs/cache-semantics-post-pr166

Conversation

@pablostanley

Copy link
Copy Markdown
Owner

Summary

Findings from post-merge review

  1. /frames route hardcoded max-age=31536000, immutable on ship — already fixed in PR Frames endpoint: align cache header with DETERMINISTIC_CACHE #168.
  2. api.mdx claimed "immutably cached for a year" in two places — fixed here.
  3. openapi.json and CLAUDE.md had the same stale language — fixed here.

Test plan

  • openapi.json parses as valid JSON
  • Prod currently serves cache-control: public, max-age=86400, stale-while-revalidate=604800 on /api/pixabot/{id} and /api/pixabot/{id}/frames
  • ?v=N still cache-busts (verified against prod; identical bytes, distinct cache entries)

🤖 Generated with Claude Code

PR #166 swapped the deterministic cache header from 1-year immutable
to 1-day fresh + 7-day stale-while-revalidate. The ?v= versioning
story we shipped in PRs #164#165 assumed the old immutable headers,
so the docs overclaimed how long stale animations linger.

Updates:
- api.mdx intro / embedding blurb / caching section reflect the SWR
  window (≤ 1 day fresh, up to 8 days long-tail).
- Animation-versioning section frames ?v=N as the escape hatch for
  instant propagation rather than "the only way out of an immutable
  trap."
- openapi.json descriptions match.
- Root CLAUDE.md points agents at DETERMINISTIC_CACHE in app/src/lib/api.ts.

No code changes — /frames route was already switched to DETERMINISTIC_CACHE
in PR #168.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Apr 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
app Building Building Preview, Comment Apr 20, 2026 2:08am

Request Review

@pablostanley
pablostanley merged commit 6fabc31 into main Apr 20, 2026
2 of 3 checks passed
@pablostanley
pablostanley deleted the docs/cache-semantics-post-pr166 branch April 20, 2026 02:08
pablostanley added a commit that referenced this pull request Apr 20, 2026
… cache policy

Rolls the important stuff from this long session into the living docs
so next-agent (or next-me) doesn't have to reread the whole thread.

CLAUDE.md
- **Key conventions**: replace the old 8-frame-bounce line with the
  16-tick super-loop model; add sub-animation `kind` (static/blink/
  sequence) + `resolveFrameIndex` as the one source for frame picks;
  document `TOTAL_COMBOS_LABEL` as the single-source for the count;
  add the keydown `hasModifier` rule (earned from the ⌘R bug).
- **Adding new parts**: split static vs animated workflows. Static
  is flat PNG + stitcher copy-through. Animated uses subdir layouts
  (blink: open/closed pair, sequence: numbered) that the stitcher
  detects automatically; updated the parts.ts entry shape
  (`'name'` vs `{ name, frames, kind }`).
- **npm**: drop the stale "CLI token caveat" note — first-publish
  is done, token allow-list extended.
- **API**: refresh the endpoint list (frames metadata, batch, palette
  + bg params); document the 1d fresh / 7d SWR cache policy and the
  same-origin rate-limit bypass.

ROADMAP.md
- Appends Done entries for PR #158 (⌘R guard), #160 (SW bump),
  #162 (TOTAL_COMBOS dedupe), #166/#168/#169 (cache revalidate),
  and #170 (browse 429s). Each entry includes the "why we needed it"
  so future readers see the failure mode, not just the fix.

Memory (not in this commit; lives outside the repo):
- New `feedback_keyboard_modifier_guard.md` — the ⌘R lesson promoted
  to a rule.
- New `project_animation_infra.md` — the sub-animation mental model.
- Updated `project_npm_published.md` with current versions of core /
  react / cli.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pablostanley added a commit that referenced this pull request Apr 20, 2026
… cache policy (#171)

Rolls the important stuff from this long session into the living docs
so next-agent (or next-me) doesn't have to reread the whole thread.

CLAUDE.md
- **Key conventions**: replace the old 8-frame-bounce line with the
  16-tick super-loop model; add sub-animation `kind` (static/blink/
  sequence) + `resolveFrameIndex` as the one source for frame picks;
  document `TOTAL_COMBOS_LABEL` as the single-source for the count;
  add the keydown `hasModifier` rule (earned from the ⌘R bug).
- **Adding new parts**: split static vs animated workflows. Static
  is flat PNG + stitcher copy-through. Animated uses subdir layouts
  (blink: open/closed pair, sequence: numbered) that the stitcher
  detects automatically; updated the parts.ts entry shape
  (`'name'` vs `{ name, frames, kind }`).
- **npm**: drop the stale "CLI token caveat" note — first-publish
  is done, token allow-list extended.
- **API**: refresh the endpoint list (frames metadata, batch, palette
  + bg params); document the 1d fresh / 7d SWR cache policy and the
  same-origin rate-limit bypass.

ROADMAP.md
- Appends Done entries for PR #158 (⌘R guard), #160 (SW bump),
  #162 (TOTAL_COMBOS dedupe), #166/#168/#169 (cache revalidate),
  and #170 (browse 429s). Each entry includes the "why we needed it"
  so future readers see the failure mode, not just the fix.

Memory (not in this commit; lives outside the repo):
- New `feedback_keyboard_modifier_guard.md` — the ⌘R lesson promoted
  to a rule.
- New `project_animation_infra.md` — the sub-animation mental model.
- Updated `project_npm_published.md` with current versions of core /
  react / cli.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant