From 18198846be51bd514c46f29a3a819e4fd6643e88 Mon Sep 17 00:00:00 2001 From: Pablo Stanley Date: Sun, 19 Apr 2026 18:36:00 -0700 Subject: [PATCH] Roadmap: mark IMPROVE_GIFS ticket fully shipped (PRs #161, #163, #164, #165) Final status pass on IMPROVE_GIFS.md + ROADMAP.md after merging the animation-API hardening bundle. All three in-session items shipped and npm packages published (@pixabots/core@0.5.0, @pixabots/react@0.4.0). Backlog items remain open in IMPROVE_GIFS.md for next time. Co-Authored-By: Claude Opus 4.7 (1M context) --- IMPROVE_GIFS.md | 5 +++-- ROADMAP.md | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/IMPROVE_GIFS.md b/IMPROVE_GIFS.md index 3879b46..39d0f0b 100644 --- a/IMPROVE_GIFS.md +++ b/IMPROVE_GIFS.md @@ -51,7 +51,7 @@ Root question driving the work: **can third parties use our animations, and will --- -### nice-to-have — `/api/pixabot/{id}/frames` endpoint `[~]` — in review +### nice-to-have — `/api/pixabot/{id}/frames` endpoint `[x]` — shipped (PR #165) **Problem.** Consumers who want scrubbable timelines, CSS `steps()` sprite animation, or autoplay control have to either (a) accept our baked GIF or (b) reverse-engineer frame timing from `@pixabots/core` source. The rate-limit (30 anim/min per IP per lambda) also hurts heavy consumers. @@ -84,7 +84,7 @@ Separately: expose per-layer sprite URLs as sub-resources, or use existing `/par - `app/content/docs/api.mdx` — new section - `app/public/openapi.json` — add path -**Tracked in**: PR pending open (`feat/frames-metadata-endpoint`). Emits 16-tick super-loop with offsets + per-layer sprite-sheet index + sprite URLs + `animVersion`. Immutably cached — same `animVersion` served for consumers' lifetime until bumped. +**Shipped as**: PR #165. Emits 16-tick super-loop with offsets + per-layer sprite-sheet index + sprite URLs + `animVersion`. Immutably cached — same `animVersion` served for consumers' lifetime until bumped. --- @@ -105,3 +105,4 @@ Discovered during audit, not shipping in this push: - **2026-04-19**: ticket opened after animation-API audit. Rebased `worktree-animation-api-docs` onto `main` (picked up PR #156 sub-animations, PR #158 ⌘R fix, PR #160 SW cache bump). Sub-animations infra already uses `FRAME_INDICES` — `ANIM_VERSION` bump already implicit in the SW's `VERSION` const for service worker, but that's client-only; API cache keys still don't version. +- **2026-04-19 (EOD)**: all three in-session PRs merged end-to-end in a self-supervised loop. Publish workflows for `@pixabots/core@0.5.0` + `@pixabots/react@0.4.0` succeeded on tag push (30–34s each). `/api/pixabot/{id}/frames` live on prod via PR #165. P0, P3, frames endpoint all shipped. Backlog items (reduced-motion server hint, per-response rate-limit headers, `?paused=true`, `/api/og` limit bump, APNG/Lottie) still open — pick up next time a consumer asks or a real limit hit surfaces. diff --git a/ROADMAP.md b/ROADMAP.md index 9882a99..23868c1 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -167,7 +167,7 @@ Consolidated ticket for animation-API hardening. See [`IMPROVE_GIFS.md`](./IMPRO - [x] **P0 — animation staleness trap.** Shipped (PR #164). `ANIM_VERSION=1` exported from `@pixabots/core` (v0.5.0); `@pixabots/react` (v0.4.0) auto-appends `?v=`. Server silently accepts unknown param → URL-keyed CDN cache busts naturally. Docs + OpenAPI + runbook updated. `core-v0.5.0` + `react-v0.4.0` tags pushed to trigger publish workflows. - [x] **P3 — docs clarity on animated sizes.** Shipped (PR #163). `api.mdx` + `openapi.json` now state "any size from 32 to 1920, same as PNG." -- [~] **`/api/pixabot/{id}/frames` metadata endpoint.** In review. Returns 16-tick super-loop with per-layer offsets + sprite-sheet indices + sprite URLs + `animVersion`. Sidesteps animated-GIF rate limit for consumers who want canvas / CSS-steps playback control. Immutably cached. +- [x] **`/api/pixabot/{id}/frames` metadata endpoint.** Shipped (PR #165). Returns 16-tick super-loop with per-layer offsets + sprite-sheet indices + sprite URLs + `animVersion`. Sidesteps animated-GIF rate limit for consumers who want canvas / CSS-steps playback control. Immutably cached. Backlog (not in current push): reduced-motion server hint, rate-limit headers on every response, `?paused=true`, raise `/api/og` rate limit, APNG/Lottie output.