name: check-scripts description: "Run a phased scripts audit in scripts/*.py: validate Script overrides (init/title/show) first, then verify ui() output compatibility with run() or process() parameters." argument-hint: "Optionally focus on a subset of scripts or only run-vs-ui or process-vs-ui checks"
Check Script Class Contracts
Audit all Python scripts in scripts/*.py and validate that script class overrides and UI-to-execution parameter contracts are correct.
When To Use
- New or changed files were added under
scripts/*.py - A script crashes when selected or executed from UI
- A script UI was changed and runtime args no longer match
- You want a pre-PR quality gate for script API compatibility
Guidance
- Consult
.github/instructions/core.instructions.mdfor relevant core runtime guidance before proceeding.
Scope
Primary audit scope:
scripts/*.py
Contract references:
modules/scripts_manager.py(Scriptbase class contracts fortitle,show,ui,run,process)modules/scripts_postprocessing.py(ScriptPostprocessingcontracts foruiandprocess)
Required Checks
A. Standard Overrides: __init__, title, show
For each class in scripts/*.py that subclasses scripts.Script or scripts_manager.Script:
title:
- method exists
- callable signature is valid
- returns non-empty string value
show:
- method exists
- signature is compatible with script runner usage (
show(is_img2img)or permissive*args/**kwargs) - return behavior is compatible (
boolorscripts.AlwaysVisible/ equivalent)
__init__(if overridden):
- does not require mandatory constructor args that would break loader instantiation
- avoids side effects that require runtime-only globals at import time
- leaves class in a usable state before
ui()/run()/process()are called
Notes:
__init__is optional; do not fail scripts that rely on inherited constructor.- For dynamic patterns, flag as warning with rationale instead of hard fail.
B. ui() Output vs run()/process() Parameters
For each script class:
- Determine execution target:
- Prefer
run()if present for generation scripts - Use
process()if present andrun()is absent or script is postprocessing-oriented
- Compare
ui()output shape to target method parameter expectations:
ui()list/tuple output count should match target positional argument capacity after the first processing arg (porpp), unless target uses*args- if target is strict positional (no
*args/**kwargs), detect missing/extra UI values - if target uses keyword-driven processing, ensure UI dict keys map to accepted params or
**kwargs
- Validate ordering assumptions:
- UI control order should align with positional parameter order when positional binding is used
- detect obvious drift when new UI control was added but method signature was not updated
- Validate optionality/defaults:
- required target parameters should be satisfiable by UI outputs
- defaulted target params are acceptable even if UI omits them
C. Runner Compatibility
Confirm script methods align with runner expectations in modules/scripts_manager.py:
ui()return type is compatible with runner collection (list/tupleor recognized mapping pattern where used)run()/process()receive args in expected form from runner slices- no obvious mismatch between
args_from/args_toassumptions and script method arity
For postprocessing-style scripts in scripts/*.py:
- verify compatibility with
modules/scripts_postprocessing.pyconventions (ui()list/dict,process(pp, *args, **kwargs))
Procedure
- Enumerate all classes in
scripts/*.pyand classify by base class type. - For each generation script class, validate
title,show, optional__init__, andui->run/processcontracts. - For each postprocessing script class under
scripts/*.py, validateui->processmapping semantics. - Cross-check ambiguous cases against script runner behavior from
modules/scripts_manager.pyandmodules/scripts_postprocessing.py. - Report concrete mismatches with minimal fixes.
Reporting Format
Return findings by severity:
- Blocking script contract failures
- Runtime- likely arg/arity mismatches
- Signature/type compatibility warnings
- Style/consistency improvements
For each finding include:
- script file
- class name
- failing contract area (
init,title,show,ui->run,ui->process) - mismatch summary
- minimal fix
Also include summary counts:
- total
scripts/*.pyfiles checked - total script classes checked
- classes with
runcontract checked - classes with
processcontract checked - override issues found (
init/title/show)
Pass Criteria
A full pass requires all of the following across audited scripts/*.py classes:
titleandshowoverrides are valid and runner-compatible for generation scripts- overridden
__init__methods are safely instantiable ui()output contracts are compatible withrun()orprocess()args- no blocking arity/signature mismatch remains
If a class uses runtime-determined argument mapping or dynamic method dispatch that cannot be proven statically, mark as conditional pass with explicit runtime validation recommendation.