From 0d6db0e0d048abedf17bc316ede001e477228313 Mon Sep 17 00:00:00 2001 From: Piyush Makhija Date: Fri, 7 Aug 2026 22:37:39 +0530 Subject: [PATCH] release: v2.1.0 Seven commits have been on main since 2f9276b (v2.0.0) with no release cut, so everything they added sat under [Unreleased] while VERSION still read 2.0.0. MINOR, not MAJOR. Every removal in this release was verified to have no caller or reader before it was made, and the two exports dropped from runtime_verification's __all__ -- ORCHESTRATOR_CONTRACT and verify_orchestrator_result -- had no consumer outside their own tests. That is not the v2.0.0 situation, whose own entry justifies MAJOR by "every existing v1.x installation is affected and none upgrades silently". The Step 1 behaviour change is real and user-visible, but it replaces a path that was already fail-silent rather than introducing a new incompatibility. Not PATCH either: FORCE_GRAPH_REBUILD and the orchestration-prompt verification are new behaviour, and features do not belong in a patch release. scripts/tools/sync-version.py did the propagation -- VERSION, README.md, CLAUDE.md, SRS.md and langgraph_engine/__init__.py all read 2.1.0, and `git diff --numstat` shows 1/1 and 3/3 rather than whole-file line-ending flips, which is the defect that script's own test suite exists to guard. release.py was NOT used for the changelog step. Its update_changelog() inserts before the first "## " heading, which is [Unreleased], so it would have produced a 2.1.0 entry whose only content was "Bumped from 2.0.0 to 2.1.0" while leaving every real change stranded below it under [Unreleased] -- a changelog asserting that the release contains nothing and that the work is still unreleased. The section was promoted by hand instead, and a fresh empty [Unreleased] left in place for the next cycle. Tags are handled separately after this merges, because they must point at the commit that lands on main rather than at this branch. Verified: 57 version and documentation tests including test_sync_version.py, all six CI gates, and the [2.1.0] heading matches the ISO-dated form rules/11-documentation-files.md requires. Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 19 +++++++++++++++++++ CLAUDE.md | 2 +- README.md | 2 +- SRS.md | 6 +++--- VERSION | 2 +- langgraph_engine/__init__.py | 2 +- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 132bef33..1af5840d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/). ## [Unreleased] +## [2.1.0] - 2026-08-07 + +**Step 1 emits its prompt instead of executing it, and three things that were only +documented became things that are also checked.** The engine runs inside a hook +subprocess, so it cannot act in the session it is serving -- it can only hand that +session something to run. Phase 2's TODO decomposition and per-TODO agent execution +re-derived work the master template already specifies, and did so fail-silently, so +both are gone along with the three scripts behind them. + +MINOR rather than MAJOR: every removal below was verified to have no caller or +reader before it was made, and `runtime_verification`'s two dropped exports had no +consumer outside their own tests. It is not the v2.0.0 situation, where every +installation was affected and none upgraded silently. + +The through-line of the release is that **enforcement beats audit**. The audit that +scheduled this work missed a doc-count gap of 99 files, a flag promised in five +documents and implemented in none, and two documentation fixes that survived only +inside an orphaned package. Tests found all four. + ### Added - **Step 1 now verifies the orchestration prompt it emits.** `verify_orchestration_prompt()` existed, was exported and had four unit tests, and was called by nothing; it is now wired in at the point the prompt is stored, and its findings are recorded on `orchestrator_result["prompt_warnings"]` and logged. The gap it closes is narrow and specific: both degraded paths in the node already log (an `ERROR` from prompt-gen, and an empty response), so this is not for those. It is for a response that is **non-empty and therefore silent** but not a usable prompt — a truncated template, the wrong file, a stub — which until now was indistinguishable from a good one. Warnings are never fatal: `STEP1_CONTRACT` documents the short raw-task fallback as a legitimate degraded path, and it trips both checks by design, so failing here would convert a recoverable run into a dead one. diff --git a/CLAUDE.md b/CLAUDE.md index b4d7e7b6..c52c7b78 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,7 +1,7 @@ # Claude Workflow Engine - Project Context **Project:** Claude Workflow Engine -**Version:** 2.0.0 +**Version:** 2.1.0 **Type:** LangGraph Orchestration Pipeline with Call Graph Intelligence + Template Fast-Path **Last Updated:** 2026-08-07 diff --git a/README.md b/README.md index 8cf1546e..93827cce 100644 --- a/README.md +++ b/README.md @@ -842,4 +842,4 @@ Key rules: --- -**Version:** 2.0.0 | **Last Updated:** 2026-08-07 +**Version:** 2.1.0 | **Last Updated:** 2026-08-07 diff --git a/SRS.md b/SRS.md index 30e1536c..bceefc87 100644 --- a/SRS.md +++ b/SRS.md @@ -1,8 +1,8 @@ # System Requirements Analysis **Project:** Claude Workflow Engine -**Version:** 2.0.0 -**Date:** 2026-08-05 +**Version:** 2.1.0 +**Date:** 2026-08-07 **Author:** Claude Workflow Engine Team --- @@ -1189,7 +1189,7 @@ User Prompt --- -**Last Updated:** 2026-08-05 +**Last Updated:** 2026-08-07 **Next Review:** 2026-06-21 --- diff --git a/VERSION b/VERSION index 227cea21..7ec1d6db 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.0 +2.1.0 diff --git a/langgraph_engine/__init__.py b/langgraph_engine/__init__.py index fe28a759..71dd4898 100644 --- a/langgraph_engine/__init__.py +++ b/langgraph_engine/__init__.py @@ -14,7 +14,7 @@ All existing policy scripts continue to work unchanged via PolicyNodeAdapter. """ -__version__ = "2.0.0" +__version__ = "2.1.0" from .backup_manager import BackupManager, create_backup_manager from .checkpoint_manager import CheckpointManager, create_checkpoint_manager