From 06f50bd37ffa0342c17a43d9882c898835c559ce Mon Sep 17 00:00:00 2001 From: RoboCo Release Manager Date: Wed, 29 Jul 2026 15:59:52 +0000 Subject: [PATCH] chore(release): 0.28.0 --- CHANGELOG.md | 2 ++ panel/package.json | 2 +- pyproject.toml | 2 +- roboco/__init__.py | 2 +- roboco/config.py | 2 +- uv.lock | 2 +- 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7977db84..20459d3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] +## [0.28.0] - 2026-07-29 + ### Added - **The eval harness real-spawn path is wired (#701).** `python -m roboco.eval run` now works end-to-end for a developer-role cohort: `OrchestratorStageSpawner.__init__` replaces its `NotImplementedError` with a real `AgentOrchestrator()` constructed the same way the production dispatcher builds it, so `run_stage` drives a real `spawn_agent` per turn. The no-production-reach guarantee lives in `_generate_mcp_config`, which now prefers `settings.api_url` when set (both `PROJECT_HOST_PATH` branches) — the harness's `_bench_environment` patches `settings.api_url` to the disposable stack URL, so a spawned container's MCP servers resolve to the throwaway orchestrator instead of the real production hostname or `127.0.0.1:{port}`, even though `_seed_company` seeds agents under their real production UUIDs (correct — orchestrator-internal helpers keyed by the static registry resolve as in a real deployment; the isolation is the URL, not the UUID). A new `tests/unit/runtime/test_eval_mcp_config_isolation.py` pins the guarantee without a Docker daemon. The injectable scripted `StageSpawner` (`tests/e2e_smoke/test_eval_bench.py`) is unaffected — it injects its own `make_spawner` — and remains the unit-test fallback. The real spawn needs a Docker daemon + built agent images. diff --git a/panel/package.json b/panel/package.json index 60160f34..1580a2bf 100644 --- a/panel/package.json +++ b/panel/package.json @@ -1,6 +1,6 @@ { "name": "roboco-panel", - "version": "0.27.0", + "version": "0.28.0", "private": true, "packageManager": "pnpm@11.10.0", "scripts": { diff --git a/pyproject.toml b/pyproject.toml index 9ebfe8d3..b4490425 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "roboco" -version = "0.27.0" +version = "0.28.0" description = "AI Agents Company - A virtual organization of AI agents functioning as a software development workforce" authors = [ {name = "Renzo Franceschini", email = "rennf93@users.noreply.github.com"} diff --git a/roboco/__init__.py b/roboco/__init__.py index 755c39be..dd3c58fa 100644 --- a/roboco/__init__.py +++ b/roboco/__init__.py @@ -5,7 +5,7 @@ A virtual organization of 25 AI agents + 1 human CEO, designed to operate as a complete software development workforce. """ -__version__ = "0.27.0" +__version__ = "0.28.0" # Core exports from roboco.config import settings diff --git a/roboco/config.py b/roboco/config.py index f007acef..bc2caf48 100644 --- a/roboco/config.py +++ b/roboco/config.py @@ -38,7 +38,7 @@ class Settings(BaseSettings): # ========================================================================== # Application # ========================================================================== - app_version: str = "0.27.0" + app_version: str = "0.28.0" debug: bool = False environment: str = Field( default="development", pattern="^(development|staging|production)$" diff --git a/uv.lock b/uv.lock index 7e2370ed..e114b9f5 100644 --- a/uv.lock +++ b/uv.lock @@ -2533,7 +2533,7 @@ wheels = [ [[package]] name = "roboco" -version = "0.27.0" +version = "0.28.0" source = { editable = "." } dependencies = [ { name = "alembic" },