diff --git a/docs/milestones/M13/M13_audit.md b/docs/milestones/M13/M13_audit.md new file mode 100644 index 000000000..720aee242 --- /dev/null +++ b/docs/milestones/M13/M13_audit.md @@ -0,0 +1,173 @@ +# M13 Audit — txt2img Path Through Runner + +**Milestone:** M13 +**Mode:** DELTA AUDIT +**Range:** 46cf6d1c...4dd04999 +**CI Status:** Green +**Refactor Posture:** Behavior-Preserving +**Audit Verdict:** 🟢 Milestone objectives met; no behavior drift; contract test added. + +--- + +## 2. Executive Summary (Delta-First) + +### Wins + +* **Contract test added** — `test_txt2img_path_uses_runner` locks in txt2img → process_images → runner flow +* **Verification milestone** — Confirmed no routing changes needed; runner already correctly positioned +* **Zero blast radius** — No changes to txt2img.py, processing.py, or runner.py +* **CI green** — Smoke, Linter, Quality Tests all pass; coverage gate met + +### Risks + +* None identified. M13 was verification-only. + +### Single Most Important Next Action + +Proceed to M14 (API integration) per authorized next step. + +--- + +## 3. Delta Map & Blast Radius + +### What Changed + +| Path | Change | +|------|--------| +| `test/quality/test_txt2img_runner_contract.py` | New (55 lines) | +| `docs/milestones/M13/*` | New (plan, toolcalls, run1, run2, summary, audit) | + +### Consumer Surfaces Touched + +None. No CLI, API, library, or schema changes. + +### Blast Radius + +**Where breakage would show up:** Only in the new contract test. If `process_images` stopped delegating to the runner, `test_txt2img_path_uses_runner` would fail. No runtime behavior changed. + +--- + +## 4. Architecture & Modularity Review + +* **Boundary violations:** None +* **Coupling added:** None +* **Dead abstractions:** None +* **Layering leaks:** None + +**Verdict:** Keep. No fixes or deferrals. + +--- + +## 5. CI/CD & Workflow Audit + +* Required checks: Smoke (PR), Linter, Quality (push); all passed +* No workflow changes +* No skips or conditional non-runs introduced +* pip-audit continue-on-error pre-existing (M04) + +**Verdict:** CI truthful. No fixes. + +--- + +## 6. Tests, Coverage, and Invariants + +* **New test:** `test_txt2img_path_uses_runner` — verifies runner invocation via monkeypatch +* **Coverage:** Gate passed (≥40%) +* **Invariant verification:** txt2img → runner flow now contract-tested + +**Verdict:** Invariants verified. No missing tests for M13 scope. + +--- + +## 7. Security & Supply Chain + +* No dependency changes +* pip-audit vulns deferred to M27 (pre-existing) +* No secrets or trust boundary changes + +--- + +## 8. Refactor Guardrail Compliance Check + +| Guardrail | Status | +|-----------|--------| +| Invariant declaration | PASS — txt2img → runner flow declared and tested | +| Baseline discipline | PASS — 46cf6d1c referenced | +| Consumer contract protection | PASS — Contract test added | +| Extraction/split safety | N/A | +| No silent CI weakening | PASS | + +--- + +## 9. Top Issues (Max 7) + +None. M13 was a verification milestone with no functional changes. + +--- + +## 10. PR-Sized Action Plan + +| ID | Task | Category | Acceptance Criteria | Risk | Est | +|----|------|----------|---------------------|------|-----| +| — | None | — | — | — | — | + +--- + +## 11. Deferred Issues Registry + +No new deferrals from M13. + +--- + +## 12. Score Trend + +| Milestone | Invariants | Compat | Arch | CI | Sec | Tests | DX | Docs | Overall | +|-----------|------------|--------|------|-----|-----|-------|-----|------|---------| +| M12 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5.0 | +| M13 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5.0 | + +M13 maintains 5.0. Contract test strengthens invariant verification. + +--- + +## 13. Flake & Regression Log + +No new flaky tests, workflows, or behavior-drift events. + +--- + +## Machine-Readable Appendix + +```json +{ + "milestone": "M13", + "mode": "delta", + "posture": "preserve", + "commit": "4dd04999", + "range": "46cf6d1c...4dd04999", + "verdict": "green", + "quality_gates": { + "invariants": "pass", + "compatibility": "pass", + "ci": "pass", + "tests": "pass", + "coverage": "pass", + "security": "pass", + "dx_docs": "pass", + "guardrails": "pass" + }, + "issues": [], + "deferred_registry_updates": [], + "score_trend_update": { + "invariants": 5, + "compat": 5, + "arch": 5, + "ci": 5, + "sec": 5, + "tests": 5, + "dx": 5, + "docs": 5, + "overall": 5.0 + } +} +``` diff --git a/docs/milestones/M13/M13_run2.md b/docs/milestones/M13/M13_run2.md new file mode 100644 index 000000000..d9518f01b --- /dev/null +++ b/docs/milestones/M13/M13_run2.md @@ -0,0 +1,56 @@ +# M13 Run 2 — Post-Merge CI Analysis + +**Milestone:** M13 — txt2img execution via runner +**Merge commit:** 4dd04999 +**PR:** [#31](https://github.com/m-cahill/serena/pull/31) (merged 2026-03-13T22:17:06Z) + +--- + +## 1. Post-Merge Workflows + +| Workflow | Run ID | Trigger | Result | Duration | +|----------|--------|---------|--------|----------| +| Linter | [23072709504](https://github.com/m-cahill/serena/actions/runs/23072709504) | push to main | ✓ success | ~18s | +| Quality Tests | [23072709479](https://github.com/m-cahill/serena/actions/runs/23072709479) | push to main | ✓ success | 3m 33s | + +--- + +## 2. Quality Tests Job Details + +| Step | Result | +|------|--------| +| Verify repository, ref | ✓ | +| Checkout Code | ✓ | +| Set up Python 3.10 | ✓ | +| Install dependencies | ✓ | +| Dependency vulnerability scan | ✓ (continue-on-error; pip-audit deferred to M27) | +| Verify pinned dependencies | ✓ | +| Setup environment | ✓ | +| Start test server | ✓ | +| **Run quality tests** (smoke + quality) | ✓ | +| **Show coverage** | ✓ (≥40% enforced) | +| Upload artifacts | ✓ | + +--- + +## 3. Evidence Summary + +| Check | Expected | Actual | +|-------|----------|--------| +| Smoke Tests (PR) | ✓ | ✓ Run 1 | +| Linter (post-merge) | ✓ | ✓ Run 2 | +| Quality Tests (post-merge) | ✓ | ✓ Run 2 | +| Coverage | ≥ 40% | ✓ (gate passed) | + +--- + +## 4. Annotations (Informational) + +* Node.js 20 actions deprecation — informational; not merge-blocking +* pip-audit vulnerabilities — deferred to M27 per M04_audit.md + +--- + +## 5. Conclusion + +**Run 2 status: ✓ GREEN.** Post-merge Linter and Quality Tests passed. Coverage gate met. M13 closeout can proceed. diff --git a/docs/milestones/M13/M13_summary.md b/docs/milestones/M13/M13_summary.md new file mode 100644 index 000000000..373d99c1f --- /dev/null +++ b/docs/milestones/M13/M13_summary.md @@ -0,0 +1,158 @@ +# M13 Summary — txt2img Path Through Runner + +📌 Milestone Summary — M13: txt2img execution via runner +======================================================== + +**Project:** Serena +**Phase:** Phase III — Runner & Service Boundary +**Milestone:** M13 — txt2img path through runner +**Timeframe:** 2026-03-12 → 2026-03-13 +**Status:** Closed +**Baseline:** 46cf6d1c (v0.0.12-m12, M12) +**Refactor Posture:** Behavior-Preserving + +--- + +## 1. Milestone Objective + +M13 existed to **verify** that the txt2img execution path flows through `ProcessingRunner`. The runner was introduced in M10–M12; M13 confirmed that the txt2img UI path already uses it via `process_images` and added a contract test to lock that routing. + +**What would remain unsafe or ungoverned if this refactor did not occur?** Without explicit verification and a contract test, future changes could accidentally bypass the runner. M13 makes the txt2img → runner flow **provably true** and regression-protected. + +--- + +## 2. Scope Definition + +### In Scope + +* `modules/txt2img.py` — Verification only; no changes +* `test/quality/test_txt2img_runner_contract.py` — New contract test +* `docs/milestones/M13/*` — Plan, toolcalls, run1, run2, summary, audit + +### Out of Scope + +* API integration (M14) +* img2img path (covered by process_images; not M13 scope) +* Scripts, extensions +* Queue/background runner (M15) +* Pipeline modification + +--- + +## 3. Refactor Classification + +### Change Type + +**Boundary refactor (verification)** — No routing changes; added contract test to verify existing flow. + +### Observability + +* **API responses:** Unchanged +* **CLI output:** Unchanged +* **File formats / save paths:** Unchanged +* **Model outputs:** Unchanged + +--- + +## 4. Work Executed + +* Verified txt2img calls `process_images(p)` only (lines 83, 109); no direct `process_images_inner` +* Verified `process_images` delegates to `ProcessingRunner().run(ProcessingRequest(p))` (M10) +* Added `test_txt2img_path_uses_runner` — monkeypatches runner, calls `process_images`, asserts runner.execute invoked +* Updated M13_plan (implementation steps, risk level, deliverables) +* No functional logic changed in txt2img, processing, or runner + +--- + +## 5. Invariants & Compatibility + +### Declared Invariants (must Not Change) + +* CLI behavior identical +* API responses unchanged +* Output images identical +* Extensions unaffected +* Coverage ≥40% + +### Compatibility Notes + +* Backward compatibility preserved: Yes +* Breaking changes: None +* Deprecations: None + +--- + +## 6. Validation & Evidence + +| Evidence Type | Tool/Workflow | Result | Notes | +| ------------- | ------------- | ------ | ----- | +| Smoke Tests | run_smoke_tests (PR) | ✓ | Run 1: 23038170275 | +| Linter | Linter workflow | ✓ | Run 2: 23072709504 | +| Quality Tests | run_quality_tests | ✓ | Run 2: 23072709479 | +| Coverage | --fail-under=40 | ✓ | Gate passed | +| Contract test | test_txt2img_path_uses_runner | ✓ | Runner invocation verified | + +--- + +## 7. CI / Automation Impact + +* Workflows: Smoke Tests (PR), Linter, Quality Tests (push to main); all passed +* New test: `test_txt2img_runner_contract.py` runs in quality tier +* No checks added/removed/reclassified +* No enforcement changes + +--- + +## 8. Issues, Exceptions, and Guardrails + +No new issues were introduced during this milestone. + +--- + +## 9. Deferred Work + +* API runner routing — M14 +* Queue/background runner — M15 +* Node.js 20 actions deprecation — informational; no M13 action +* pip-audit vulnerabilities — deferred to M27 (pre-existing) + +--- + +## 10. Governance Outcomes + +**What is now provably true that was not provably true before?** + +The txt2img UI path is **contract-tested** to invoke `ProcessingRunner`. The call chain `txt2img → process_images → ProcessingRunner.run → process_images_inner` is locked in by automated test. Future changes that bypass the runner will fail the contract test. + +--- + +## 11. Exit Criteria Evaluation + +| Criterion | Status | Evidence | +| --------- | ------ | -------- | +| txt2img path uses ProcessingRunner | Met | Verified; no routing changes needed | +| No direct process_images_inner in txt2img path | Met | txt2img calls process_images only | +| CI green | Met | Smoke, Linter, Quality all pass | +| Coverage ≥40% | Met | Gate passed | +| Behavior identical | Met | No pipeline changes | + +--- + +## 12. Final Verdict + +Milestone objectives met. Refactor verified safe. Proceed to M14. + +--- + +## 13. Authorized Next Step + +**M14 — API integration:** Route API generation paths through the runner. + +--- + +## 14. Canonical References + +* **Commits:** 142f0bbe (M13 impl), 212b6275 (run1 report), 4dd04999 (merge) +* **PR:** [#31](https://github.com/m-cahill/serena/pull/31) +* **CI Runs:** Smoke 23038170275; Linter 23072709504; Quality 23072709479 +* **Docs:** docs/milestones/M13/M13_plan.md, M13_run1.md, M13_run2.md diff --git a/docs/serena.md b/docs/serena.md index 836ae3093..d0d514704 100644 --- a/docs/serena.md +++ b/docs/serena.md @@ -143,6 +143,7 @@ Core principles: | M10 | ProcessingRunner skeleton | Completed | m10-processing-runner | #27 (+ #28 fix) | 0d11b587 | Quality 22988627838 ✓ | 5.0 / 5 | 2026-03-12 | | M11 | Runner lifecycle surface | Completed | m11-runner-lifecycle | #30 | 08ac1c0e | Quality 22989978348 ✓ | 5.0 / 5 | 2026-03-12 | | M12 | Runtime instrumentation hooks | Completed | m12-runner-instrumentation | — | 46cf6d1c | Quality 23037656379 ✓ | 5.0 / 5 | 2026-03-13 | +| M13 | txt2img path through runner | Completed | m13-txt2img-runner | #31 | 4dd04999 | Smoke 23038170275 ✓; Linter 23072709504 ✓; Quality 23072709479 ✓ | 5.0 / 5 | 2026-03-13 | **M05:** Introduced `temporary_opts()` context manager — first Phase II runtime seam. Isolates override_settings mutation from global `shared.opts`; preserves behavior (opts.set, setattr restore, k in opts.data). Model/VAE reload and token merging remain in process_images. Enables future opts snapshot injection (M07). @@ -160,6 +161,8 @@ Core principles: **M12:** Introduced optional instrumentation hooks on ProcessingRunner: on_prepare, on_execute, on_finalize. Hooks no-op by default; lifecycle order prepare → on_prepare → execute → on_execute → finalize → on_finalize. test_runner_hooks_called verifies hook invocation. Enables M13+ progress, cancellation, queue runners. +**M13:** Verification milestone. Confirmed txt2img path flows through process_images → ProcessingRunner (no routing changes; M10 already delegates). Added test_txt2img_path_uses_runner contract test. Runner boundary proven with real consumer. Enables M14 API integration. + --- ## 5. Standing Invariants