v1.1.0.
Highlights
- Docker containerization (
Dockerfile,docker-entrypoint.sh,.dockerignore) - CI/CD reusable GitHub Actions workflow (
patchforge cicommand) - Asymmetric risk gates (
auto_apply_eligiblefield onRunMetadata) - Executor DAG scheduler — task dependency resolution via Kahn's algorithm
- WAL atomic writes for all apply.json persistence
- Circuit breaker externalized to SQLite with thread-safe locking
- GitHub Client, Work Queue schema, Artifact Store, Worker Loop (async infra)
- Executor new-file creation support (Issue #210)
- Executor lifecycle observability:
log_event()trail across pipeline - Provider fallback chain (Gemini → OpenRouter → Claude) for architect, scout, validator
ci --force-provider,plan --force-providerfor provider forcing- Architect structural context annotations (D-005) — injects Python AST symbols into prompt
- Executor pre-diff
ast.parse()syntax validation (D-006) — rejects non-Python LLM output - Centralized
PROJECT_ROOTinorchestrator/paths.py - Targeted git staging in CI (replaces
git add -A) - Makefile for quick QA (
make qa) - Claude as third fallback in validator summarizer
- Dogfooding experiments 005–009 (E2E validation, D-001/004/005/006 fixes + validator PATH fix)
Fixed
- 🔴 Validation workspace:
git add .+git commitnow run aftergit init - 🔴 Path traversal (Windows):
_has_parent_segmentnormalizes\→/ - 🔴
normalize_git_url: lowercasing only on Windows - 🔴 SSH URL parsing: explicit regex matchers, fixes port-number URLs
- 🟠 Subprocess timeouts:
timeout=30on all git subprocess calls - 🟠 Experiment verification: shared
verify_experiment_or_warn()helper - 🟡
Verdict.generated_at: Python 3.12 compat fix - CB thread-safety (Issue #219)
- CRLF corruption fix on Windows (Issue #192/#193)
- Phantom paths in plan (D-001)
- Workspace hash inconsistency on Windows (Issue #149/#150)
- Validator timeout configurability (Issue #151)
- Staging cleanup / empty patch.diff guard (Issue #159/#160)
- Silent-failure hardening (Issue #194/#195)
- Validator PATH resolution on Windows without
.venv—run_ruff()/run_pytest()now resolve viasys.executable -minstead of bare PATH lookup (Issue #223, PR #224)
Changed
CircuitBreakerStoreexternalized to SQLite (Issue #126)write_verdict()moved toWorkspaceManagerDEFAULT_TIMEOUT120→300→450s- Targeted git staging in CI replaces
git add -A(Issue #212) - Branch naming:
patchforge/{run_id}[/issue_{issue_number}](Issue #142) - Provider chain: Groq → OpenRouter (Issue #162)
Full Changelog: CHANGELOG.md