stable-diffusion-webui/docs/milestones/M05/M05_run1.md

6.2 KiB
Raw Blame History

M05 CI Run 1 — Override Isolation / Temporary Opts Seam

Date: 2026-03-09
Branch: m05-override-isolation
PR: #18
Trigger: pull_request (PR to main)


1. Workflow Identity

Workflow Run ID Trigger Branch Commit Status
Smoke Tests 22876253113 pull_request m05-override-isolation 5fe82459 ✓ success
Linter 22876253091 pull_request m05-override-isolation 5fe82459 ✓ success

Quality Tests: Not yet run (triggered on push to main; will run post-merge).


2. Change Context

Item Value
Milestone M05 — Override isolation / temporary opts seam
Phase Phase II — Runtime Seam Preparation
Posture Behavior-preserving
Refactor target modules/processing.py (override apply/restore), new modules/runtime_utils.py
Run type Corrective (first CI verification of M05 implementation)

3. Step 1 — Workflow Inventory

Smoke Tests (22876253113)

Job / Step Required? Purpose Pass/Fail
Verify repository Yes Guardrail: m-cahill/serena only
Verify base branch Yes Guardrail: PR targets main
Checkout Code Yes Fetch PR branch
Set up Python 3.10 Yes Runtime
Cache models Yes Deterministic model path
Install test dependencies Yes pytest, coverage
Install runtime dependencies Yes torch, CLIP, open_clip, requirements_versions
Create stub repositories Yes CI fake inference support
Setup environment Yes launch.py --exit
Smoke startup Yes Verify server can start
Start test server Yes Live server for API tests
Run smoke tests Yes pytest test/smoke
Kill test server Yes Cleanup
Upload main app output No (always) Artifact for debugging

Duration: 2m48s (Run smoke tests ~45s)

Linter (22876253091)

Job Required? Purpose Pass/Fail
ruff Yes Python lint
eslint Yes JS lint

4. Step 2 — Refactor Signal Integrity

A) Tests

  • Tier: Smoke only (test/smoke)
  • Coverage of refactor target: Smoke tests exercise txt2img and img2img API endpoints, which call process_images()temporary_optsprocess_images_inner. The override seam is on the critical path.
  • Failures: None
  • Golden/snapshot: Smoke tests use CI fake inference (deterministic 1×1 PNG); no golden image comparison. API contract (response schema) is exercised.
  • Missing: test_opts_override.py (quality tier) did not run; it will run on push to main.

B) Coverage

  • Smoke run does not enforce a coverage gate (Quality Tests do, on push to main).
  • Coverage gate: ≥40% (M04 baseline).
  • Post-merge Quality run will report coverage and run test_opts_override.py.

C) Static / Policy Gates

  • Ruff and eslint passed on new and modified files.
  • No import boundary breaks, circular deps, or layering violations observed.

D) Security / Supply Chain

  • Not run in Smoke (Quality runs pip-audit).

E) Performance

  • No benchmarks. Smoke tests complete in expected time (~45s for pytest).

5. Step 3 — Delta Analysis

Change inventory

File Change
modules/runtime_utils.py New (temporary_opts context manager)
modules/processing.py Modified (use temporary_opts, preserve model/VAE reload, token merging)
test/quality/test_opts_override.py New (unit tests for seam)
docs/milestones/M05/* Plan, toolcalls

Public surfaces: None. API endpoints, CLI, schemas unchanged.

Expected vs observed

  • Expected: Override logic relocated to context manager; behavior identical.
  • Observed: Smoke tests pass; txt2img/img2img path exercises the new seam without regression.

Refactor-specific drift

  • Signal drift: None. All required checks ran and passed.
  • Coupling revealed: None.
  • Hidden dependencies: None observed.

6. Step 4 — Failure Analysis

No failures. All jobs passed.


7. Step 5 — Invariants & Guardrails Check

Invariant Status
Required checks enforced ✓ Smoke, Linter both required and passed
No scope creep ✓ Only override seam; no feature work
Public surfaces compatible ✓ API/CLI/schemas unchanged
Schema/contract outputs valid ✓ Smoke exercises API responses
Determinism preserved ✓ CI fake inference; no golden drift
No green-but-misleading path ✓ No skips, continues, or muted gates

8. Step 6 — Verdict

Verdict: Smoke Tests and Linter both passed. The refactor target (process_imagestemporary_opts) is on the critical path exercised by smoke tests (txt2img, img2img). No behavioral drift observed. Quality Tests (including test_opts_override.py and coverage) will run post-merge on push to main.

Recommended outcome: Merge approved


9. Step 7 — Next Actions

Action Owner Scope Milestone
Merge PR #18 Human m05-override-isolation → main M05
Verify Quality run post-merge Human/Cursor Run ID, coverage ≥40%, test_opts_override pass M05
Generate M05_summary, M05_audit, ledger update Cursor After Quality green M05 closeout

10. Summary Table

Check Run ID Result
Smoke Tests 22876253113 ✓ success
Linter 22876253091 ✓ success
Quality Tests 22877674534 ✗ failed (test_opts_override)

11. Quality Run 1 — Post-Merge (22877674534)

Status: Failed
Cause: test_opts_override.py — 2 failures

Failure

When opts.load() gets FileNotFoundError (no config.json), it sets opts.data = {}.
temporary_opts only applies overrides for keys in opts.data, so no overrides are applied and samples_save stays at its default (True).

Fix

Ensure a minimal config exists before loading webui so opts.data is populated.
Updated test/conftest.py initialize fixture to create config.json with {"samples_save": True} when missing.