Skip to content

feat: add v0.6 operator evidence and verified recovery workflows - #23

Merged
brainx merged 20 commits into
mainfrom
release/v0.6.0-dev
Sep 7, 2026
Merged

brainx merged 20 commits into
mainfrom
release/v0.6.0-dev

Conversation

@brainx

@brainx brainx commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Summary

Zeus now exposes persisted reconciliation runs and fleet attention state without starting another reconciliation or probing gateways. The v0.6 development package adds paginated zeus reconcile list/show and zeus fleet status commands plus strictly authenticated /reconcile/runs, /reconcile/runs/<run-id>, and /fleet endpoints. Fleet responses distinguish cached observation freshness from live health and include pending intent and restart budget.

Schema v7 adds indexes for history ordering and latest observations. Existing lifecycle routes retain their response shapes. The one-shot reconcile unit preserves gateways after a pass exits, and a required Ubuntu installed-wheel drill checks API interruption, pending-intent recovery, timer persistence, quiesced backup/restore, and exact-owned shutdown before preview artifacts are uploaded.

Cross-process shutdown now recognizes a confirmed Linux/macOS zombie when its API parent has not reaped it. Unreadable native state remains unknown, and the existing process ownership and generation checks still gate signals. A real subprocess regression preserves the parent while a separate CLI completes shutdown.

Olymp compatibility is coordinated in https://github.com/brainx/olymp/pull/6, preserving exact v0.5/schema-v6 checks while adding exact v0.6.0.dev0/schema-v7 support.

Test Evidence

  • All nine Zeus CI jobs passed on the PR and push runs at the current head, including Python 3.11–3.14, Linux/macOS lifecycle, real Hermes, Docker isolation, and packaging. All three Olymp compatibility CI jobs passed.
  • Full local unit pass: 1,390 tests run, 3 skipped, no failures.
  • Focused history, fleet, interface, index migration, recovery guard/restore, and contract regressions passed.
  • Existing OpenAPI route definitions retained; new nonempty response fields match the committed schemas.
  • make release-check passed: both 1,390-test runs (3 skips each), 83.12% branch/source coverage, repository contracts, Ruff, mypy, Bandit, ShellCheck, wheel/sdist build, installed-wheel smoke, Twine, and checksums.
  • Hosted Ubuntu installed-wheel service recovery passed at 9bb9fa48c6199ad4a2d0bdc8535eb0456a0d16dc: interrupted API intent recovered, timer preserved the gateway, backup restored, exact-owned gateway stopped, cleanup completed.
  • Verified preview wheel and sdist uploaded by CI run 34061988923. Downloaded both artifacts and independently verified their SHA-256 checksums and wheel version 0.6.0.dev0.

Risk

  • The schema upgrade is forward-only. Quiesce writers and retain a database/profile backup before upgrade; use the matching backup when rolling back binaries.
  • KillMode=process is deliberate for the one-shot reconciler. Stopping the timer does not stop gateways; operators must use Zeus lifecycle shutdown. The API retains its existing cgroup cleanup.
  • Fleet freshness measures persisted evidence. Sparse bot/attention filters may inspect additional candidate rows; results are bounded to 100 per page.
  • The recovery drill uses disposable Ubuntu state and packaged fake Hermes. Physical power loss, host reboot, schema rollback, and real provider workloads are outside its evidence.

@brainx
brainx enabled auto-merge (squash) August 9, 2026 03:57
brainx and others added 16 commits August 11, 2026 22:59
Add schema-v2 repository audit evidence, deterministic release-v1 gating, and isolated read-only trusted command execution with exact cleanup and compatibility coverage.
## Summary

- harden API authentication, access logging, connection limits, and
error contracts
- tighten launcher, profile-environment, process-group, workspace-path,
identifier, and terminal-output boundaries
- preserve the Audit v2 contracts now on `main` and add focused security
regression coverage

## Verification

- focused API, security, and lifecycle suites: 334 passed, 4
host-capability skips
- focused Audit v2 overlap suites: 154 passed
- process and lifecycle regressions: 4 passed
- exact wheel build, isolated installation, and `python -I` launcher
import: passed
- Ruff, strict mypy, Bandit, and `git diff --check`: passed
- full `scripts/test.sh` run: 1,270 passed, 9 skipped; 9 fresh-VPS cases
were blocked by the desktop `/dev/fd` sandbox, and the identical module
passed 14/14 outside that sandbox
…#24)

Bumps
[actions/attest-build-provenance](https://github.com/actions/attest-build-provenance)
from 4.1.1 to 4.2.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/attest-build-provenance/releases">actions/attest-build-provenance's
releases</a>.</em></p>
<blockquote>
<h2>v4.2.2</h2>
<blockquote>
<p>[!NOTE]
As of version 4, <code>actions/attest-build-provenance</code> is simply
a wrapper on top of <a
href="https://github.com/actions/attest"><code>actions/attest</code></a>.</p>
<p>Existing applications may continue to use the
<code>attest-build-provenance</code> action, but new implementations
should use <code>actions/attest</code> instead.</p>
</blockquote>
<h2>What's Changed</h2>
<ul>
<li>Bump actions/attest from 4.2.0 to 4.2.1 in the actions-minor group
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/attest-build-provenance/pull/862">actions/attest-build-provenance#862</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/attest-build-provenance/compare/v4.1.1...v4.2.2">https://github.com/actions/attest-build-provenance/compare/v4.1.1...v4.2.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/attest-build-provenance/commit/4d101475d8b20a2381f78447822ac1eab6504dd8"><code>4d10147</code></a>
Bump actions/attest from 4.2.0 to 4.2.1 in the actions-minor group (<a
href="https://redirect.github.com/actions/attest-build-provenance/issues/862">#862</a>)</li>
<li><a
href="https://github.com/actions/attest-build-provenance/commit/e3fe62ef559997059fe8380e7d2b4c909e2d65f4"><code>e3fe62e</code></a>
Bump the actions-minor group with 2 updates (<a
href="https://redirect.github.com/actions/attest-build-provenance/issues/860">#860</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/attest-build-provenance/compare/0f67c3f4856b2e3261c31976d6725780e5e4c373...4d101475d8b20a2381f78447822ac1eab6504dd8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/attest-build-provenance&package-manager=github_actions&previous-version=4.1.1&new-version=4.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: brainx <12695242+brainx@users.noreply.github.com>
Bumps [pytz](https://github.com/stub42/pytz) from 2026.2 to
2026.3.post1.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/stub42/pytz/commit/661bca921e29dc3eedd4430bac70816c9154c05e"><code>661bca9</code></a>
Bump version numbers to 2026.3.post1 for python2 fix</li>
<li><a
href="https://github.com/stub42/pytz/commit/1e31a162477bfd338df4651cbb55d35a86a15cd1"><code>1e31a16</code></a>
Log python version running tests, force python2</li>
<li><a
href="https://github.com/stub42/pytz/commit/b3ca7c3fc264252e7f8162229f9d0dc4410037ee"><code>b3ca7c3</code></a>
Unix line endings</li>
<li><a
href="https://github.com/stub42/pytz/commit/b55039a6ad038432bfc8e718f1852f54599bfa30"><code>b55039a</code></a>
Replace non-ASCII character in comment to fix build with Python 2</li>
<li><a
href="https://github.com/stub42/pytz/commit/5420ee2c14c95abd5258c0e43381ac9430647ab8"><code>5420ee2</code></a>
Replace non-ASCII character in comment</li>
<li><a
href="https://github.com/stub42/pytz/commit/2c139e800b5353eb6bb9649ee51fc177b51c4e9e"><code>2c139e8</code></a>
Merge branch 'fix/localize-overflow-at-datetime-extremes' of <a
href="https://github.c">https://github.c</a>...</li>
<li><a
href="https://github.com/stub42/pytz/commit/c843864ba959a0def449dfe5c4f1547308ab8eb1"><code>c843864</code></a>
Run zdump tests quietly</li>
<li><a
href="https://github.com/stub42/pytz/commit/518500c68a9ed1f6cda32101004c38b4cc1d6fa6"><code>518500c</code></a>
Reduce noise when collecting zdump info dumps</li>
<li><a
href="https://github.com/stub42/pytz/commit/081f935fbc519305e147480ecd3410052f07816c"><code>081f935</code></a>
Merge branch 'kytta-fix-dst' into 2026c</li>
<li><a
href="https://github.com/stub42/pytz/commit/8c9d69b125dabe489741e1eb24ba14fcf4a7e7c9"><code>8c9d69b</code></a>
Merge branch 'master' into 2026c</li>
<li>Additional commits viewable in <a
href="https://github.com/stub42/pytz/compare/release_2026.2...release_2026.3.post1">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: brainx <12695242+brainx@users.noreply.github.com>
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.69.1 to 4.70.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tqdm/tqdm/releases">tqdm's
releases</a>.</em></p>
<blockquote>
<h2>tqdm v4.70.0 stable</h2>
<ul>
<li><code>contrib.concurrent</code>: major improvements
<ul>
<li>support <code>process_map(mp_context, max_tasks_per_child)</code>,
<code>thread_map(thread_name_prefix)</code> (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1265">#1265</a>)</li>
<li>fix <code>total</code> based on shortest iterable length (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1473">#1473</a>)</li>
<li>use default <code>max_workers</code> (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1543">#1543</a> &lt;-
<a href="https://redirect.github.com/tqdm/tqdm/issues/1530">#1530</a>,
<a
href="https://redirect.github.com/tqdm/tqdm/issues/1518">#1518</a>)</li>
<li>support <code>timeout</code>, <code>buffersize</code> (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1576">#1576</a>)</li>
<li>improve ETA (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1708">#1708</a> &lt;-
<a
href="https://redirect.github.com/tqdm/tqdm/issues/1161">#1161</a>)</li>
<li>update <code>as_completed</code> (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1709">#1709</a> &lt;-
<a
href="https://redirect.github.com/tqdm/tqdm/issues/1565">#1565</a>)</li>
<li>add <code>tqdm.concurrent.intepreter_map</code> (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1777">#1777</a>)</li>
</ul>
</li>
<li><code>asyncio</code>: support iterables with only
<code>__aiter__</code> (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1714">#1714</a> &lt;-
<a
href="https://redirect.github.com/tqdm/tqdm/issues/1686">#1686</a>)</li>
<li>support <code>reset(float(&quot;inf&quot;))</code> (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1783">#1783</a> &lt;-
<a href="https://redirect.github.com/tqdm/tqdm/issues/1781">#1781</a>,
<a
href="https://redirect.github.com/tqdm/tqdm/issues/651">#651</a>)</li>
<li>framework: test &amp; reduce wheel size (<a
href="https://redirect.github.com/tqdm/tqdm/issues/1782">#1782</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tqdm/tqdm/commit/96f2e60e4584cdab57a23602e27043d0465254ad"><code>96f2e60</code></a>
Merge pull request <a
href="https://redirect.github.com/tqdm/tqdm/issues/1777">#1777</a> from
shermansiu/feat/interpreter-pool</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/c27393ec3a0a91d83dd53f04b80ee61f9c0cd5e4"><code>c27393e</code></a>
misc tidy</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/061c6236d56f8c1ed0934606c3b4ee5c59cf122e"><code>061c623</code></a>
Disable <code>tqdm.monitor_interval</code> for subinterpreters because
they do not have ...</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/9fc160ba7f959f955058985b0d1122fc9f0b2729"><code>9fc160b</code></a>
Update how we check for <code>interpreter_map</code> support in the
tests</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/b42463a20fffc17ad4df2aa145076afb0dc4486d"><code>b42463a</code></a>
Ensure that subinterpreters can import tqdm while unpickling the
initializer</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/16d5486c402a2808ec9c398538e0bc56d00866de"><code>16d5486</code></a>
Add support for nested progress bars</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/9f5890fda6cf43e66782fbf34647f808bdc66d58"><code>9f5890f</code></a>
Add initial implementation for interpreter_map</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/321f920bb7368e27eee04fed1c0de2a8a236fd9d"><code>321f920</code></a>
Merge pull request <a
href="https://redirect.github.com/tqdm/tqdm/issues/1783">#1783</a> from
LuShadowX/reset-inf-total</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/4664b5701ebc5299290a1fb31a229fb1bfc64703"><code>4664b57</code></a>
minor tidy</li>
<li><a
href="https://github.com/tqdm/tqdm/commit/426a0988a1e9970041f5a649ae8a6376c5293fbe"><code>426a098</code></a>
Treat inf total as unknown in reset() too</li>
<li>Additional commits viewable in <a
href="https://github.com/tqdm/tqdm/compare/v4.69.1...v4.70.0">compare
view</a></li>
</ul>
</details>
<br />

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: brainx <12695242+brainx@users.noreply.github.com>
@brainx brainx changed the title chore: start Zeus v0.6.0 development feat: add v0.6 operator evidence and verified recovery workflows Sep 6, 2026
@brainx
brainx disabled auto-merge September 7, 2026 00:31
@brainx
brainx enabled auto-merge (squash) September 7, 2026 00:31
@brainx
brainx merged commit ddb34e2 into main Sep 7, 2026
18 checks passed
@brainx
brainx deleted the release/v0.6.0-dev branch September 7, 2026 01:18
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.

1 participant