Skip to content

Architecture decision records

Nygard-style records (Status / Context / Decision / Consequences) for comfy-test. Numbers are grouped by subsystem, not by date; most decisions were made implicitly during development and are recorded here retroactively as of v0.4.7 (August 2026).

Where a status line cites "adversarial review": these are structured LLM review panels (independently-briefed reviewer personas that investigate the code separately, then argue with each other's findings), run by the maintainer in August 2026. Their claims were verified against the working tree before being incorporated -- and several were wrong and are recorded as such. Treat the citations as "the argument survived cross-examination", not as external human endorsement.

Every record here names what it rejected. A decision without a rejected alternative is a feature description; those live in the reference pages, not in this directory.

ADR Decision One-liner
0001 Real installs are the unit of test Real venv, real ComfyUI, real server -- never a mocked comfy import.
0002 Levels are an ordered pipeline Execution order is the enum; dependencies are static; every check claims a slot.
0003 Two install paths: attach and fresh Hosted lanes attach to a prebuilt env; a green cell there does not mean "installs clean".
0004 Mocking is earned by probing CUDA packages are mocked only after probing the materialized env, never on a flag.
0005 Pinned torch, random Python Superseded. The triple is now derived from the wheel index, not tabulated; Python defaults to a fixed 3.13.
0006 Config is a hard-fail allowlist An unknown key aborts the run, because a typo once produced a plausible lie.
0007 The lane registry is the source of truth Five irreducible facts per lane; matrices are guarded against drift, not hand-written.
0008 Lanes are an opt-in allowlist Listing lanes is explicit; per-lane booleans are a hard error.
0009 A helper pack is injected into every env Validation needs an endpoint ComfyUI does not ship; the cost is a supply-chain fact.
0010 Capture drives a real browser Screenshots come from the real frontend, because that is where the bugs are.
0011 execution_light is a level, not a fallback A silent downgrade would make two green cells mean different things.
0012 ~~--level swaps terminal levels~~ (superseded) The flag is deleted; [test] levels alone decides what a run does.
0013 Desktop is driven over CDP, installed by git clone The Electron app is tested as an app; Manager could not install the packs.
0014 Frontend isolation is enforced statically AST facts are errors, heuristics are warnings, .mjs is exempt by construction.
0015 Publish is a separate job Results are an artifact; the dashboard is the consumer's own gh-pages.
0016 The branch level is never dropped Output is always run/branch/lane; an omitted --branch defaults to the detected git branch, not a missing level.