Fountain Coach Gitowner-controlled · read only

FountainFlow.git · AGENTS.md

FountainFlow.git / AGENTS.md

revision 6931a86dd2b56970c31c82f5eeb5b484f139819b · complete file

# AGENT — FountainFlow (per‑node flexible node editor)

FountainFlow is our evolution path from AudioKit’s Flow toward a per‑node‑flexible editor that can render Stage nodes as pages (node = page) with baseline‑aligned ports and custom bodies, while keeping Flow’s solid wiring and gestures. We explicitly honor our ancestors: Quartz Composer, Vuo, and Plogue Bidule.

What
- A SwiftPM library exporting `FountainFlow`.
- Starts as a thin interop layer over Flow; grows native capabilities where Flow’s global layout limits us.

Why
- Flow has global layout/style (one `LayoutConstants`, one `Style`) and always draws a node body. We need per‑node width/height, body rendering hooks, and input/output rect providers.

How (incremental)
- v0 Bridge (this repo):
  - Types for per‑node style and rect providers (protocols).
  - Helpers to hide node bodies for selected kinds (e.g., Stages) and render custom bodies on top of the canvas.
- v1 Native:
  - `NodeStyleProvider` and `NodeRectProvider` drive the editor.
  - `NodeBodyRenderer` draws bodies; Flow remains only for wire gestures if useful.

Where it’s used
- PatchBay Studio Stage nodes: ports align to baselines; the page is the node body; no Flow tile.

Conventions
- Snapshot/UI invariants required; golden images under `Tests/**/Baselines`.
- Numeric invariants: fit/center, baseline spacing, left edge alignment to ports.