Skip to content

Product Requirements

What projectMM v2 must do for the end user. This is the third constraint alongside system and process: the others say how the code is shaped; this says what it must deliver. A capacity floor on a no-PSRAM device is a Rule #1 resource-minimalism input — the same kind of binding number as a LOC budget. Changing a binding target is an architecture change and carries a paired ADR — never silent. See ADR 0008.

There is no product-owner agent and no end-user agent. The product intent lives in this document; the existing architect and minimalism-reviewer enforce it. (Authority chain: the documents are the contract; agents are advisors that produce findings, not rulings; the maintainer ratifies any target change via an ADR. See ADR 0008.)


Two tiers

  • Binding — a hard guarantee. A change that regresses a binding target, or a design that cannot meet it, is a constitutional conflict: it is rejected or carries an ADR amending the target. minimalism-reviewer treats a binding regression at the same bar as an unjustified LOC-budget bump; architect treats "this design cannot meet a binding floor" as a conflict, not a tradeoff.
  • Aspirational — a stretch we pursue when minimalism allows. Missing an aspirational target is an informational note, never a blocker and never an ADR trigger. It must not silently become a de-facto floor.

Capacity (LED count)

Target Tier Notes
≥ 4096 LEDs on a no-PSRAM ESP32 (esp32dev) Binding The reference floor. Drives per-module RAM footprint; a module that pushes the default pipeline below this on esp32dev is over budget.
Max practical LED count on PSRAM devices (esp32s3_n16r8, large setups) Binding "As many as the 8 MB PSRAM holds for a sensible pipeline." Not a fixed number — the binding part is PSRAM is used by default when present and large setups are first-class on S3.
≥ 12288 LEDs on a no-PSRAM ESP32, minimal config Aspirational Stretch. Pursued only if it falls out of minimalism work; never traded for by adding complexity, and never blocks a change for missing it.

Throughput

Target Tier Notes
Highest practical processing-pipeline FPS (lights domain is the worked example) Binding The hot-path rules in process exist to protect this. "Regression" is measured against the reference setup (reference-setup scenario) FPS recorded by the latest HIL run / scenario measure baseline — not a subjective judgement. A change that drops that figure without an ADR is a finding; a change with no measured baseline yet cannot be a finding (record the baseline first).
ESP32-P4 as the speed ceiling Binding When a P4 target exists, it is the max-speed reference; the pipeline must scale to it (not be artificially capped for convenience on slower parts).

User experience

Target Tier Notes
Desktop-optimized, mobile-workable UI Binding Desktop is the primary surface and must be fully usable; mobile must be workable (not necessarily optimal). A desktop-regressing change is a finding.
Industry-standard interaction patterns Binding Follow recognised prior art (node/canvas editors in the spirit of TouchDesigner / MADRIX) rather than inventing exotic UX. "A competent user of those tools recognises this" is the bar.

Transparency

Target Tier Notes
The user-facing docs surface what has been tested Binding The generated test list and HIL records are the source; the user guide must link them so users see the tested surface. Reuses existing artefacts — adds no new mechanism.

Per-module behaviour and the how-to live in the User Guide and Developer Guide. This page is the contract for what the product owes the user; those are the catalogue and the manual.