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. |