docs(memory): split the frame pipeline out of ai.md into docs/ai

ai.md is the mandatory read every session; at 2,702 lines / ~64k tokens it
costs the whole subsystem history even when the task never touches it. This
is a verbatim move, not a compression - nothing is deleted and each stub is
written from the moved text.

- docs/ai/frame-pipeline.md: 'Frame cadence', 'Per-element composite timing +
  scene dump', 'What the first instrumented take said', 'Render budget',
  'Scene compositor' and 'Live frame pipeline', byte-identical, plus a short
  'Related in ai.md' footer and two stale 'below' pointers corrected.
- ai.md keeps two stubs carrying the invariants that must not be missed
  (overlay on every render path, VideoFrame.Epoch, StripPool threads,
  Release-only render numbers; arrival-stamped rawvideo, non-blocking submit,
  stop order, burned _outputIndex judge) and links the new file.
- docs/ai/index.md + docs/index.md route the split; schema.md inventory lists
  the new tier.
- 4 index-row references and 2 TASKS.md anchors repointed; ai.md's Services
  row too.

Measured: ai.md 63.6k -> 47.1k tokens, 2,702 -> 1,975 lines. Progressive
disclosure per schema.md convention 5. No source touched; no push.
This commit is contained in:
2026-10-26 10:25:21 -07:00
parent ef60f1f3b6
commit 804b1d2f5f
8 changed files with 881 additions and 774 deletions
+2 -2
View File
@@ -182,7 +182,7 @@ second encoder path needing a "redirect". Record+simulcast is one ffmpeg with tw
(user-queued): static (+) catalog rows (Background, YouTubeEvent, quoted labels) with reason-greying.
- **🔶 Webcam cadence → resolution — IN PROGRESS, creator-queued 2026-10-05** (DHH/lipreading: the
webcam judders, ~1 hitch in 5, invisible in the output file). **UNIT 0 shipped** (counters +
`Helpers/FrameCadence.cs`; see `ai.md` → "Frame cadence"). **Needs a creator recording before the
`Helpers/FrameCadence.cs`; see [`docs/ai/frame-pipeline.md`](docs/ai/frame-pipeline.md) → "Frame cadence"). **Needs a creator recording before the
next unit.** Remaining units, all agreed 2026-10-05, one Good Dog test each:
- **⛔ UNIT 1 IS NOT NEXT — re-scoped 2026-10-05.** The first real reading exonerated the camera:
it delivers 30.0/s with zero hitches; the compositor manages **6.8 composites/s at ~141ms each**,
@@ -191,7 +191,7 @@ second encoder path needing a "redirect". Record+simulcast is one ffmpeg with tw
and schedule it AFTER the compositor work.
- **✅ SHIPPED 2026-10-16 (measurement only): per-element composite timing + a scene dump.**
`CompositeTimings` + the pump's `FramePump parts (N renders/5s): …` line and
`FramePump scene dump:` block (see `ai.md` → "Per-element composite timing + scene dump").
`FramePump scene dump:` block (see [`docs/ai/frame-pipeline.md`](docs/ai/frame-pipeline.md) → "Per-element composite timing + scene dump").
One integration test: `ytLive.Tests/CompositeTimingTests.cs`. **NOW WAITING ON A CREATOR TAKE
(Release):** the parts line must name which of the 6 elements eats the ~140ms and the dump must
show the shape of the slow take vs the fast one (10:03 → 12:01, 29–34ms → 143–155ms, same shape).