sovereign-agent

Changelog

All notable changes to sovereign-agent.

Repository: profrodai/sovereign-agent.

Unreleased

[1.4.0] — 2026-09-05

Sovereign Agent 1.4.0 is a correctness release for two boundaries the executable book teaches learners to distrust: replacing durable files and selling inventory already promised elsewhere. It turns both claims into behavioral guarantees without adding a runtime dependency.

[1.3.0] — 2026-09-05

Sovereign Agent 1.3.0 turns six patterns from current agent systems into small, offline mechanisms that learners can inspect, break, and repair. It also brings the complete executable book to a deterministic 90+ editorial score on every chapter. The score is a prioritization instrument, not a publisher endorsement.

[1.2.0] — 2026-09-02

[1.1.1] — 2026-09-01

The curriculum release. The installed package’s runtime behavior is identical to 1.1.0 — no source changes beyond the version string itself. What this release versions is everything around the code: the book was rewritten to executable depth, companion labs were added for every chapter, and the repository gained the verification instruments that keep both honest. Run it with uv (uvx sovereign-agent@latest doctor); read it by cloning the repository, where the book and labs live (uv sync && uv run sovereign-agent doctor).

[1.1.0] — 2026-09-01

Adds a first-class OpenAI-compatible provider and makes the local-model configuration documentation true.

[1.0.0] — 2026-08-31

First stable release. The package is an executable textbook: Chapters 0-12 build a Zero-Employee Organization end to end — outcomes, statements of work, assignments, atomic commit, independent verification, and principal acceptance, with refusal as a first-class result. Intelligence is a bounded actor, never the authority: a provider proposes, and every proposal is re-validated against the governed ledger before it can commit. The reference_organizations.store organization is fully worked, including live provider tool-calling against a typed capability. Python 3.14; depends only on pydantic>=2. The Unit 12 release-evaluation machinery below (redacted proof pack, extended Andrea evaluation, and the installed-wheel release-candidate gate) ships in this release; the previously-deferred publication is this release itself.

Release evaluation, redacted proof pack, Andrea protocol extension (Unit 12)

Builds the redacted proof-pack manifest and its field-schema-aware verifier, extends the Andrea evaluation to the full 13-chapter curriculum with three new scored tasks, builds a distinct release-candidate gate covering the installed-wheel path, wires conditional truthful provider-status reporting, and additively corrects two stale passages. This document’s own status stays PROPOSED; the Andrea live evaluation, the release-candidate publication, and the final release are later, separately-authorized steps outside this unit’s implementation-acceptance scope.

Store expansion, Chapters 8-12, pilot-start mechanism (Unit 11)

Expands the Store’s single-SKU walking skeleton into a genuine multi-SKU catalog, proves the existing inventory.changed -> wake gate -> Pulse -> replenishment pipeline generalizes with zero new signal kinds, effect kinds, or core organizational primitives, lands five new chapters teaching that expansion, and builds – but never invokes against the real named pilot organization – an atomic, idempotent pilot-start mechanism. This document’s own status stays PROPOSED; the real pilot-start act and its governance receipt are a later, separately-authorized step outside this unit’s implementation-acceptance scope.

Every new mechanical guarantee and test suite was mutation-checked before this unit was reported complete: the new disposable-identity guard (a non-reserved pilot id); the multi-SKU isolation matrix (a dropped subject == sku filter in store_wake_gate, causing cross-SKU contamination); the pilot-start idempotency discipline (INSERT OR REPLACE in place of the CAS-driven plain INSERT); and a fabricated pilot.started event bypassing the mechanism entirely – each reproduced, confirmed landed via diff, confirmed caught, restored byte-identical, reconfirmed green. See docs/v1-unit11-store-expansion-pilot-start.md for the full contract and proof matrix.

Not claimed: the real pilot-start act, a governance receipt, this document’s ACCEPTED status or Unit 11’s closure, credentialed provider evidence (9 tests remain deselected and unrun), the Andrea live evaluation, pilot completion or proof-pack acceptance, release, or any Unit 12 work. Budget: src/sovereign_agent/ grew by 69 nonblank lines (migration 16 only) to 6208/6250 – 42 lines of headroom remain; no amendment requested or needed. Runtime dependency surface unchanged (pydantic only).

Curriculum completion, Chapters 0-7 (Unit 10)

Completes the promised curriculum range: four new chapters, each teaching one already-ACCEPTED production concept from Units 7-9, instructor-note machinery covering the whole completed range, a chapter-scoped (not removed) Pulse-claim guard, and a genuine post-Unit-9 Andrea evaluation task. Zero new production behavior – every chapter exercise imports and runs existing, already-ACCEPTED code; nothing was added to src/sovereign_agent/ or src/reference_organizations/.

Every new mechanical guarantee mutation-checked before this unit was reported complete (a fabricated Pulse event; a Pulse claim in an early chapter; a missing INSTRUCTOR.md section; a wrong-pointing forward link; injected frontmatter – each reproduced, confirmed caught, confirmed landed via diff, restored byte-identical, reconfirmed green) – see docs/v1-unit10-curriculum-completion.md for the full contract and proof matrix.

Not claimed: Chapters 8-12, any Unit 11 Store expansion or 30-day pilot, any Unit 12 release work or the Andrea soak itself, credentialed provider evidence, a mechanical check for additive-only Chapters 0-3 editing, any new runtime dependency, or any change to src/sovereign_agent/’s own budget (unchanged: 27/40 modules, 6139/6250 lines, 7/30 exports).

Pulse and proactive governed work (Unit 9)

Closes the gap between the manually dispatched Unit 5 Store pipeline and sequencing amendment 5’s proactive milestone: “sale → inventory signal → deterministic wake gate → pulse → replenishment work created without a human prompt.” Pulse is a distinct mechanism from the supervisor, per the governing ruling: supervisor.tick() is unchanged, still never reads a Pulse signal or fires a wake gate.

Tests grow from 281 to 332 (33 new in tests/test_pulse.py from the initial implementation, 8 new migration tests in tests/test_persistence.py, 10 more in tests/test_pulse.py from the F-U9-1 correction below), including a mutation-checked proof for every decisive property this unit exists to protect (the fix reverted, the specific test confirmed red, restored byte-identical, re-confirmed green) – see docs/v1-unit9-pulse-proactive-work.md for the full contract and proof matrix.

Review correction (PR #35, F-U9-1). Sparring found, and the Principal independently reproduced, that the canonical creation transaction was not actually atomic: a fault between any two of its five original separate commits durably stranded the wake decision, and source_signal_id’s own UNIQUE constraint then made every retry impossible – the signal was orphaned permanently. Closed by composing all five writes into one db.immediate() transaction (see above); the source-line budget was raised from 6000 to 6250 to accommodate the honest cost of that composition (scripts/verify_source_budget.py’s own comment records the ruling; module and export ceilings are unchanged).

Not claimed: credentialed Claude/Codex/Cursor provider tests remain deselected and unrun. No OS service, scheduling, cron, or webhooks. No automatic retry policy for failed governed work.

Supervisor, fencing, and hard-kill recovery (Unit 8)

A worker that no longer holds the current lease could still commit completion, mutate canonical execution state, acknowledge mailbox work, or reclaim the active workspace – Unit 4’s mailbox proved actor-level idempotency, never process-level exclusivity, and named the gap rather than build a supervisor to close it (deferral ruling, one-process-per-actor ruling). A hard-killed worker also left its assignment stuck RUNNING forever, since “a process cannot record its own death” (Unit 5). This unit closes both.

Tests grow from 230 to 274, including a mutation-checked proof for every decisive property (the fix reverted, the specific test confirmed red, restored byte-identical, re-confirmed green) – see docs/v1-unit8-supervisor-fencing-recovery.md for the full contract and proof matrix.

Not claimed: credentialed Claude/Codex/Cursor provider tests remain deselected and unrun – no live-provider evidence exists anywhere in this unit. Fencing is a ledger guarantee, not a filesystem one: a worker that has lost its lease can still write bytes to disk if its subprocess is still running; only the ledger commit is refused.

Cumulative conformance (Unit 6.5)

The simulated store now performs a real replenishment. Previously the demo printed ACCEPTED while SKU-TEA sat at on_hand=2 against a reorder_point=3, with no purchase and no replenishment event: the governance records were complete and the business claim was false.

Tests grow from 59 to 98, including a falsification suite that proves acceptance is refused for missing, failed, unrelated, unbound, stale, and fabricated evidence, and a fault-injection suite that proves rollback after a partial write.

Not claimed: the credentialed provider smokes for Claude, Codex, and Cursor have not been run. They remain a Unit 12 release gate. Installed is not authenticated.

Branch policy correction

main became the 1.x educational integration line when Units 0–6 merged. The earlier holding that “main remains the 0.7 line” is superseded. Tag v0.7.0 remains immutable at be2a41bbee202c52a40b2e87c00215827be302a0; pin sovereign-agent<1 for the 0.x framework. No claim is made that 1.0 has met its release gates. See docs/rulings/2026-08-25-main-is-the-1x-line.md and docs/persistence-boundary.md.

Providers (Unit 6)

Claude, Codex, and Cursor adapters implement probe / build_invocation / parse_event. One provider-neutral envelope supplies actor identity, authority, SOW, workspace/output boundaries, and the exact report schema. Capability claims retain probe evidence and fail closed. Terminal events, sessions, usage, malformed streams, reports, canonical receipts, and receipt digests are validated by fake-executable integration tests. Credentialed live assignments remain explicitly opt-in and outside default CI. Chapter 3 lands with a runnable provider-rebinding exercise. Codex receives an authority-bound writable sandbox, Claude receives acceptEdits, and Cursor receives --force for the mandatory report; refusals and timeouts finalize durable failed receipts; provider credentials use explicit environment allowlists.

1.x educational reset (authorization only)

Principal ruling 2026-08-25 authorizes Sovereign Agent 1.x as an executable textbook. The v0.7 public API promise ends at the 0.x line. Tag v0.7.0 is not moved. Pin sovereign-agent<1 for the old framework.

The 0.x non-goal “no governance decisions in this package” remains true for v0.7 and is superseded for 1.x: the package may include the minimum governance needed to teach and run one outcome. See docs/rulings/2026-08-25-educational-reset.md, docs/migration-v0.7-to-v1.md, and docs/non-goals.md.

No runtime or public-API code changes in this entry.

[0.7.0] — 2026-08-23

Bounded production execution fleet on the v0.6 coordinator. Docker and rootless Podman workers, authenticated SSH workers, fail-closed placement, reservations, secret leases, network enforcement with evidence, content-addressed artifacts, and reconciliation that forbids last-write-wins. DockerWorker is no longer a stub. ZeoCore remains the capability contract layer, not a scheduler. A git tag is not a public release until make verify-pypi.

[0.6.0] — 2026-08-23

Capability-native single-node default. run_task projects ZeoCore capabilities and Sovereign runtime commands through a frozen per-execution catalog. Approvals, durable concurrency leases, and invocation evidence survive restart. @register_tool remains compatibility-only through 2027-02-23. Fleet work stays in v0.7. A git tag is not a public release until make verify-pypi.

[0.5.1] — 2026-08-23

Packaging and documentation truth for the v0.5 capability migration. Python 3.13 floor, zeocore>=0.5,<0.6, capability-first README, contract fixtures in the wheel, and a ZeoCore min/newest CI job. Git tag v0.5.0 is not moved and is not announced as the PyPI line.

[0.5.0] — 2026-08-23

Capability migration toward ZeoCore. Python 3.13 floor. Runtime evidence types renamed to RuntimeCapabilityManifest. Reusable actions go through ZeoCore; runtime commands stay in Sovereign. Legacy register_tool remains through the compatibility window.

The 152-symbol v0.4 __all__ surface is preserved; v0.5 adds 9 capability symbols for 161 total.

[0.4.0] — 2026-08-22

Durable local execution service on top of the v0.3 harness. HMAC-authenticated Unix-socket API, serialized Zero Employee connector, relay v2 directory states, seat supervision, durable approvals, webhook/Slack/email-draft channels, allowlisted plugins, coordinator fencing, backup/restore, and copy-on-write migration from v0.3 runtime roots. No Sandcastle. No multi-host workers.

The 152-symbol v0.3 __all__ surface is preserved.

[0.3.0] — 2026-08-22

The package, documentation, API manifest, wheel, and sdist declare v0.3.0. Publishing remains a separate tag-triggered action; make ready-to-ship never publishes or uses live credentials.

Added

Landed on main on 2026-08-22 via PR #1 and PR #2. See docs/branch-consolidation-2026-08-22.md for branch tips, merge commits, and a correction to the archive/pre-v0.3-runtime-stack-20260822 tag, which points at a feature-branch tip rather than the pre-v0.3 state of main.

sovereign_agent.__all__ now has 152 public symbols, up from the 67 that shipped in 0.2.0. Every v0.2 symbol remains and the 85 additions enter the v0.3 compatibility contract.

Release readiness

Documentation and truth repair

Packaging

Not implemented, despite having a name

Recorded here so the gap is documented rather than inferred:

[0.2.0] — 2026-04-24

Released to PyPI as the only published release. Tag v0.2.0 → 9d934cf53ff223175d01ebf07483fd608fae66a0.

Contents are as described under [0.2.0-alpha] below; the alpha entry was the working record and was never rewritten at tag time. Two claims in that entry were accurate when written and are no longer accurate for the current tree — the test count (220 then, 370 now) and the public-symbol count (67 then, 76 now).

[0.2.0-alpha] — 2026-04-24

Historical record, kept as written. Counts and claims in this entry describe the tree at 0.2.0 and are not a description of main today; see [Unreleased] above.

v0.2 focuses on five capabilities students asked about in the first-cohort class: parallel tool calls, process isolation without Docker, session resume, pluggable rule verifiers, and human-in-the-loop approval. All five ship as additive features — every v0.1.0 scenario still works unchanged.

Module 1 — Parallelism

Module 2 — Process isolation (no Docker)

Module 3 — Session resume

Module 4 — Verifier protocol

Module 5 — Human-in-the-loop

Tests

100 new unit tests across the five modules — 9 parallelism, 14 approval, 23 verifier, 23 resume, 11 worker, 20 isolation — bringing the total to 220 tests, all passing.

Examples

One end-to-end example per module, each self-contained (no real LLM credentials required by default) and wired into the Makefile:

Sessions and artifacts

Documentation

Packaging

Breaking changes

None. Every public API from v0.1.0 still works with the same signature.


[0.1.0] — unreleased (alpha)

Initial scaffold. This is the first working implementation of the architecture specified in docs/architecture.md.

Implemented

Skeletons (API stubbed, behavior TODO)

Not yet started

Verified working in this release