7.0 KiB
Runtime Validation Implementation Spec
Document Status
- Date: March 28, 2026
- Scope: implementation spec only
- Approval status: approved for spec creation, not yet approved for implementation
Problem
The repo now has a runtime validation strategy, but not an implementation contract. Runtime-sensitive changes still rely too heavily on ad hoc local setups and narrow regression tests. The repo needs a small, repeatable runtime validation harness that agents and maintainers can run consistently.
Intent
Implement a phase-based runtime validation harness and add a project-scoped runtime-e2e-agent that can operate against it.
Locked Decisions
- Baseline pinned ComfyUI checkout:
/home/peyton/code/ComfyUI - Runtime workflow fixtures will be committed in this repo
- Implementation covers both CLI/runtime and
Save As Script, but in phases - Phase 1: CLI/runtime first
- Phase 2:
Save As Scriptroute validation
Goals
- create a repeatable runtime validation harness
- keep the harness small enough to maintain manually
- make the workflow corpus reviewable and committed in-repo
- support pinned-runtime validation with a stable command surface
- give the future
runtime-e2e-agenta stable command surface
Non-Goals
- no full browser automation in phase 1
- no image-quality regression testing
- no external CI/CD setup in this phase
- no vendoring of the ComfyUI repo into this repo
- no attempt to validate every possible custom-node workflow
Phase Plan
Phase 1: CLI / Runtime Harness
Phase 1 must provide:
- in-repo runtime workflow fixtures
- a command path that exports workflow JSON to Python
- a command path that validates generated Python parses
- a command path that executes generated Python against a pinned ComfyUI runtime
- clear pass/fail classification
This phase should be enough to validate:
- runtime/bootstrap regressions like
#143 - generated-code validity issues when they must be checked against a real runtime
- runtime/bootstrap changes that affect node-loading or script execution
Phase 2: Save As Script Route Validation
Phase 2 must build on the phase 1 harness and add:
- route-level validation of the
Save As Scriptrequest path - coverage for server-side export behavior in __init__.py
- coverage for the exported payload shape expected by the frontend flow
Phase 2 should not start with full browser automation unless route-level checks prove insufficient.
Directory Layout
The first implementation should add:
tests/fixtures/runtime/tests/fixtures/runtime/upscale-model-loader.jsontests/fixtures/runtime/unsafe-kwargs.jsontests/fixtures/runtime/subgraph-identifiers.jsontests/runtime/- a focused runtime validation runner or helper module inside
tests/runtime/ .codex/agents/runtime-e2e-agent.toml
Optional supporting docs:
docs/runtime-validation.md
Fixture Rules
- prefer real ComfyUI workflow shapes over synthetic-only fixtures
- keep fixtures as small as possible while still reproducing the target behavior
- name fixtures after behavior, not issue numbers, when practical
- commit fixtures to the repo so they are reviewable and stable
Initial Fixture Set
upscale-model-loader.json
Purpose:
- validate the
#143/#148runtime/bootstrap path
Assertions:
- export succeeds
- generated Python parses
- generated script reaches the relevant loader and upscale path without the old missing-node failure
unsafe-kwargs.json
Purpose:
- validate mixed safe and unsafe keys in a real workflow shape
Assertions:
- export succeeds
- generated Python parses
- generated code remains safe when real workflow data contains symbol-heavy or invalid keys
subgraph-identifiers.json
Purpose:
- validate that subgraph-expanded identifiers do not break generated Python in real workflow shapes
Assertions:
- export succeeds
- generated Python parses
- generated variable names are safe enough for execution
Command Contract
The harness should expose two stable command categories.
fast
Purpose:
- exporter-only validation without a real ComfyUI runtime
Examples:
uv run python -m unittest tests.test_upscale_model_loader_export -v- additional focused exporter tests as they are added
runtime
Purpose:
- run runtime validation against the pinned baseline ComfyUI checkout
Environment:
COMFYUI_PATH=/home/peyton/code/ComfyUI
Behavior:
- export fixture workflow to Python
- parse or compile generated Python
- execute generated Python with the pinned runtime available
Runner Shape
The implementation should prefer one small runner over many scattered commands.
Recommended shape:
- a small Python entry point that:
- selects a tier
- selects a fixture or fixture subset
- sets or reads
COMFYUI_PATH - runs export
- validates generated Python
- optionally executes the generated script
- reports failure classification
The runner must stay small and repo-local. It should not introduce a large new framework.
Failure Classification Contract
Every runtime validation result must classify failure as one of:
- repo regression
- fixture bug
- environment/setup failure
This classification is mandatory in both manual runs and future agent reports.
Runtime-E2E Agent Addition
A future implementation step should add:
.codex/agents/runtime-e2e-agent.toml
Its instructions should align with:
The agent should:
- run the
runtimetier - report concise results
- avoid long logs
- return
pass,pass with risk, orfail
Validation Expectations
Phase 1 success means:
- the pinned runtime can validate at least the three initial fixtures
- the runner can distinguish export failures from runtime execution failures
- the runtime harness can be invoked consistently by maintainers and agents
Phase 2 success means:
- route-level
Save As Scriptvalidation exists - frontend/server export behavior can be checked without relying on a full browser automation stack
Risks
- fixture maintenance can drift if fixtures are too complex
- local ComfyUI checkout state can become stale if not periodically refreshed intentionally
- runtime validation may still fail for environment reasons if
torchor ComfyUI dependencies are missing
Acceptance Criteria
- the implementation plan is explicit enough to build without inventing workflow shape later
- fixture names and locations are defined
- command tiers are defined
- phase split is defined
- failure classification is mandatory
- the
runtime-e2e-agentrollout target is defined
Next Step
If this implementation spec is approved, the next step is to produce a concrete implementation plan and then request explicit approval before creating:
- runtime fixture files
- the runner/helper module
- the
.codex/agents/runtime-e2e-agent.tomlfile - the short operator doc