Skip to content

Commit f454e15

Browse files
Add docs/NOTES.md: working notes migrated from Claude memory
Status, decisions already made, and the traps that have actually bitten this repo. Cross-cutting fleet knowledge lives in stoatworks-labs/fleet-notes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent db4625d commit f454e15

2 files changed

Lines changed: 70 additions & 0 deletions

File tree

AGENTS.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,3 +378,10 @@ boolean and preset values for it must be 0 or 1.
378378
Verified by rendering a preset and its hand-set equivalent through the offline
379379
harness and `ofxprobe --edit` (which delivers the set as a real user edit,
380380
with `kOfxActionInstanceChanged`) and comparing byte-for-byte.
381+
382+
## Notes
383+
384+
`docs/NOTES.md` carries this repo's working notes — current status, decisions
385+
already made, and the traps that have actually bitten. Read it before changing
386+
anything non-obvious. Cross-cutting fleet knowledge lives in
387+
[fleet-notes](https://github.com/stoatworks-labs/fleet-notes).

docs/NOTES.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Notes
2+
3+
Working notes for this repo: status, decisions, and the traps that have actually bitten.
4+
Migrated out of Claude Code's memory on 2026-08-24, so they are written in the first
5+
person and dated by when each thing was learned — that date is usually the useful part.
6+
7+
Cross-cutting notes that are not specific to this repo live in
8+
[fleet-notes](https://github.com/stoatworks-labs/fleet-notes).
9+
10+
*old-cathode — analogue TV signal path + CRT display as an FFGL effect for Resolume; PUBLIC MIT, verified via its own headless octest harness and since 2026-08-02 run in Resolume on real content*
11+
12+
**old-cathode** (started 2026-08-01) — an **analogue television signal path**, not
13+
a CRT look, as an FFGL effect for Resolume Arena/Avenue.
14+
`~/Projects/old-cathode`, **PUBLIC MIT**, github.com/stoatworks-labs/old-cathode,
15+
v0.1.0, no release cut yet.
16+
17+
**The design idea that governs everything:** it encodes to a colour subcarrier,
18+
damages the composite as one signal, and decodes with a synchronous demodulator.
19+
Dot crawl, cross-colour, chroma smear and coloured snow are **consequences, never
20+
drawn**. If tempted to add one directly, the chain is wrong somewhere instead.
21+
22+
**Signal stages run at the SD raster (754×486 NTSC / 921×576 PAL) regardless of
23+
composition size.** Authentic *and* load-bearing: artefacts stay
24+
resolution-independent, and 4K costs only 2.4× 1080p (0.83 vs 0.34 ms/frame, M4
25+
Max only, never CI). 754 = **4× subcarrier**, which is what makes the decoder's
26+
chroma notch a plain three-tap average — two samples apart is exactly 180° of
27+
carrier. Move off 4fsc and the notch stops working.
28+
29+
**Verified only by `tools/octest`** — a headless CGL 4.1-core harness that drives
30+
the real plugin class through the real FFGL sequence to a PNG. Deterministic
31+
(time from the frame counter). Level survives the round trip (0.502 in/out); mask
32+
gains land within ~1%; **PAL delay line holds hue at 0.0° under a 16.8° decoder
33+
phase error that shifts NTSC 6–26°**. **Run in Resolume on real content** as of
34+
2026-08-02 (Allan's own report), so the old "never loaded into Resolume" is
35+
retired along with the param-group/host-texture/premultiplication caveat.
36+
37+
`tools/sweep.py` renders every param at both ends and fails if any made no
38+
difference. **A GLSL uniform name that doesn't match the C++ is silently ignored**
39+
`glGetUniformLocation` returns -1, `glUniform(-1)` is a documented no-op — so a
40+
control can be stone dead while everything compiles, links and renders. Nothing
41+
else catches it; worth copying to any shader repo in the fleet. All 33 pass.
42+
43+
Traps live in the repo's AGENTS.md — see [agents md convention](https://github.com/stoatworks-labs/fleet-notes/blob/main/notes/reference_agents_md_convention.md). The
44+
sharp ones: **`flat` and `active` are GLSL reserved words** (fails at runtime as
45+
"effect does nothing"); mask gains are **measured with `octest --flat 0.05
46+
--measure`, never derived** (edge shaping and AA eat the duty cycle); the
47+
scanline/mask `fwidth` fade thresholds must keep **486 lines into 1080 = 2.2
48+
px/line** on the full-strength side; and the tube pass **overscans** (curvature
49+
divided through by its corner expansion) because otherwise barrel distortion
50+
pulls the picture's own corners inside the glass and Corner Radius does nothing.
51+
52+
**Resolume Arena IS installed on this Mac** (`/Applications/Resolume Arena`,
53+
plugins in `~/Documents/Resolume Arena/Extra Effects`, where `cmake --install`
54+
puts it and where LumaKey already lives). So "can't test it here" is false — and
55+
as of 2026-08-02 it has been driven through the host. What stays true is that
56+
driving that GUI *from a session* is unreliable per
57+
**screenshot capture** (working-practice note, kept in Claude memory), so host verification comes from Allan running
58+
it, not from an agent.
59+
60+
Related: [resolume luma keyer](https://github.com/stoatworks-labs/resolume-luma-keyer/blob/main/docs/NOTES.md) (`resolume-luma-keyer`) (the FFGL submodule + CMake MODULE
61+
pattern came from there), [resolume ofx bridge](https://github.com/stoatworks-labs/resolume-ofx-bridge/blob/main/docs/NOTES.md) (`resolume-ofx-bridge`),
62+
[ffgl sdk bugs](https://github.com/stoatworks-labs/fleet-notes/blob/main/notes/reference_ffgl_sdk_bugs.md), **disclaimer scope** (working-practice note, kept in Claude memory) (AI disclaimer
63+
applies).

0 commit comments

Comments
 (0)