Skip to content

Release pass 0.12.0 Hardening, and a published record that had gone stale the other way - #212

Merged
rohanrkamath merged 1 commit into
mainfrom
release/0.12.0
Sep 15, 2026
Merged

rohanrkamath merged 1 commit into
mainfrom
release/0.12.0

Conversation

@arpanghoshal

@arpanghoshal arpanghoshal commented Sep 15, 2026

Copy link
Copy Markdown
Member

v0.12 asks one question: is what this project says about itself checkable? No new capability. Three claims that were prose became tests, and each was false or incomplete when its test was written.

The blocker this release had to clear first

The published adapters exclude this kernel. ctrlrun-langgraph and ctrlrun-openai-agents 1.2.0 declare ctrlrun>=0.5,<0.12 on PyPI, so 0.12.0 is outside their range. Both go to 1.3.0 with <0.13, and their tags must be pushed before the kernel's — the same ordering 0.11.0 needed.

And adapters/PUBLISHED.toml had gone stale in the other direction. It claimed 1.1.0 / <0.11 while PyPI has served 1.2.0 / <0.12 since the 0.11.0 release. The rule in that file's own header is update the row after the upload succeeds, and the upload is the last thing that happens, so nobody came back. The guard could not see it either: a tree that differs from the record and carries a higher version is exactly the shape of a correct pending release. The record is corrected to what PyPI serves, and RECORDED now freezes 1.2.0's range too.

That is three releases running where this file has been wrong in a new way. It is doing its job — each time, something caught it — but the pattern is worth naming.

What shipped

The module map is acyclic and §6's rule is a test. Broken in two places: Decision and POLICY_UNAPPROVED to ctrlrun.decision, then the policy document grammar to ctrlrun.grammar, so authority.py no longer imports policy.py at all. SPEC-v0.3.md §4.5's one-evaluator requirement is better served than before, since it is now owned by neither axis. No public name moved. tests/test_module_graph.py's allow-list of recorded exceptions is empty.

Property tests. The invariant that matters is the one v0.11 item 1 violated: every break a tamper reports names a row the store actually holds. The first version of that property was wrong and hypothesis said so on its second example.

An SBOM measured from the wheel, two components, signed with the distributions and attached to the release.

The gateway stopped telling MCP clients to call a Python API, and a shared-directory race that reddened two branches is fixed.

Gate and release verification

All checks passed!                     (ruff, ruff format, mypy --strict)
4592 passed                            (working tree)
4512 passed, 6 skipped                 (fresh clone of the release branch)
sbom: ctrlrun 0.12.0 → [('PyYAML', '6.0.3'), ('click', '8.5.0')]
build: ctrlrun-0.12.0.tar.gz and ctrlrun-0.12.0-py3-none-any.whl
demo from the wheel: runs

Docs are release/0.12.0. Do not merge before it; do not tag before the adapters.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Release

    • Updated the core software release to version 0.12.0.
    • Updated both adapter packages to version 1.3.0.
  • Compatibility

    • LangGraph and OpenAI Agents adapters now support CTRLRun versions from 0.5 up to, but not including, 0.13.
    • Published compatibility records have been synchronized with the current adapter versions and supported ranges.
  • Documentation

    • Updated software citation and release documentation for version 0.12.0.
    • Improved adapter documentation and packaging verification details.

…went stale

Three claims about this project became tests in v0.12, and each was false or
incomplete when its test was written. No new capability.

The adapters go to 1.3.0 with `ctrlrun>=0.5,<0.13`, because the published 1.2.0
declares `<0.12` and would exclude this kernel. Publishing 0.12.0 without them
is the ordering that breaks `pip install ctrlrun-langgraph`.

`PUBLISHED.toml` is corrected to what PyPI actually serves, 1.2.0 / `<0.12`.
It claimed 1.1.0 / `<0.11` for a whole release: 0.11.0 uploaded the adapters
and nobody came back to update the record, which is the rule written in that
file's own header. The guard could not see it, because a tree that differs from
the record and carries a higher version is exactly the shape of a correct
pending release. `RECORDED` now freezes 1.2.0's range too.

Signed-off-by: arpan <contact@arpanghoshal.com>
@coderabbitai

coderabbitai Bot commented Sep 15, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 189212e7-4901-44c6-a060-e9166e5bffa5

📥 Commits

Reviewing files that changed from the base of the PR and between d07d7c8 and 081798c.

📒 Files selected for processing (11)
  • CHANGELOG.md
  • CITATION.cff
  • adapters/PUBLISHED.toml
  • adapters/langgraph/README.md
  • adapters/langgraph/pyproject.toml
  • adapters/langgraph/src/ctrlrun_langgraph/__init__.py
  • adapters/openai-agents/README.md
  • adapters/openai-agents/pyproject.toml
  • adapters/openai-agents/src/ctrlrun_openai_agents/__init__.py
  • pyproject.toml
  • tests/test_packaging.py

Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review.


📝 Walkthrough

Walkthrough

The project version changed to 0.12.0. Adapter packages changed to 1.3.0 with support for kernel versions below 0.13. Published adapter records, packaging expectations, citation metadata, and the changelog were updated.

Changes

Release metadata and adapter compatibility

Layer / File(s) Summary
Core release version metadata
pyproject.toml, CITATION.cff
The project and citation versions changed from 0.11.0 to 0.12.0.
Adapter versions and kernel ranges
adapters/langgraph/..., adapters/openai-agents/..., adapters/PUBLISHED.toml, tests/test_packaging.py
Both adapter packages changed to 1.3.0 and accept ctrlrun>=0.5,<0.13. Published records and packaging expectations record the prior 1.2.0 adapter range of >=0.5,<0.12.
Hardening release documentation
CHANGELOG.md
The 0.12.0 changelog documents module, gateway, tamper-test, SBOM, cookbook, adapter, and compatibility changes.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 08179

The release metadata and adapter compatibility updates are reported as aligned, with no identified merge-blocking behavior.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the 0.12.0 hardening release and the correction of a stale published record.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 3…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/0.12.0

Comment @coderabbitai help to get the list of available commands.

@rohanrkamath
rohanrkamath merged commit ed6b2ec into main Sep 15, 2026
16 checks passed
@rohanrkamath
rohanrkamath deleted the release/0.12.0 branch September 15, 2026 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants