Skip to content

release: quorus-ai 0.6.5 - #17

Merged
aravkek merged 26 commits into
mainfrom
release/0.6.5
Oct 21, 2026
Merged

aravkek merged 26 commits into
mainfrom
release/0.6.5

Conversation

@aravkek

@aravkek aravkek commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

quorus-ai 0.6.5: bug fixes on released paths

A bug-fix release under the release freeze. Nothing new. Full notes are in CHANGELOG.md (0.6.5).

Highlights

  • Room posts now mask participant keys (quorus_pk_…).
  • The default local setup now claims a real participant key for you, so hub social verbs (/vote, /claim, …) work for a brand-new user instead of answering 403 legacy auth.
  • quorus relay forwards signals to its child, refuses a port that's already taken, and reports the child's exit code (no more orphaned relays).
  • Losing @open bidders stay silent, a crashed wake's stale window no longer holds the retry, and wake prompts no longer assume a shared Git object store.
  • quorus scorecard survival now blames every file a commit touched at a pinned end (renames followed, deletions counted as gone, errors reported as uncomputed coverage).
  • Tests isolate HOME so a test run can't touch your real ~/.quorus.

Verification on head 8f21843 (26 commits on v0.6.4)

  • Full suite via quorus-suite: 3332 passed, exit 0. First-run pty suite: 21/21.
  • Built wheel (sha256 6369f3d7…): version 0.6.5; credential leaks 0; redirect clean; init switch PASS; MCP drive 11/0; introspect 25 tools; real HOME untouched.
  • Clean-HOME new-user replay (env -i, fresh HOME, plain quorus demo, opencode 2.0.30): fix on main at 39s, reviewer approved at 102s (pytest 1 passed), exit 0, no leftover processes.
  • Codex final GO on exactly 8f21843 (55 focused tests, ruff clean; pinned HOME/_invitee blobs verified).

Merge with Create a merge commit so provenance notes survive.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PePq4A7cLX7N31DGawFxBA

aravkek and others added 26 commits October 20, 2026 19:09
resolve_config_dir() returned the import-time ~/.quorus, so a HOME faked
after import (tests, wrappers) was ignored and a quorus join test wrote
a config into the process's real HOME. A monkeypatched
DEFAULT_CONFIG_DIR still wins; otherwise Path.home() is read now.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 084bd2f7e9e553156a04d9573cc70973990f858e)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 64e5c8724cdb6dcc4c255bf72722e57fa7c00820)
bindings_path() is the one place the CLI resolves room-bindings.json;
tests/conftest.py points it at a temp file for every test (a faked HOME
is respected), so the account-owner agent-add test can no longer pass
only on a machine whose real file has a 'build' room (PR #15 CI). The
test now covers mode=None (adds) and mode=default with no binding
(refused), and a new test proves the isolation.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit d4d5f235a787413360436f94285d8cf3f5616833)
quorus/runtime/bindings.bindings_path() is the only way the CLI and
the relay find room-bindings.json; replay_cmd, the scorecard route and
scripts/scenarios.py read it there, the conftest fixture isolates that
one function, Codex's sentinel repro is a test, and an ast invariant
fails any module that builds the path on its own.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 068a635bab37a345dd26f880dceb16bdc869dc6d)
Three rounds of per-API read guards (open, Path.read_*, bytes paths,
"+" modes, os.open) were an arms race; the overseer asked for the real
file to be unreachable instead. conftest now redirects HOME to a session
tmp dir before any quorus import, fails the session if Path.home() still
resolves to the real home, gives git subprocesses a throwaway identity,
and removes the builtins.open wrapper. The config snapshot guard keeps
proving the real ~/.quorus is untouched; bindings_path() and the AST
invariant stay as cheap belts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 18ace002558a2519813ddd8bc75329cde07510e7)
Codex (review of 18ace002): an inherited MCP_TUNNEL_CONFIG_DIR survived
the ambient-variable scrub and pointed config reads past the session
HOME. It joins AMBIENT_IDENTITY_VARS; a regression asserts every
*_CONFIG_DIR env var config.py consults is on that list and unset, and
that resolve_config_dir() lands under the session HOME. Comments now say
HOME-based test isolation, not an unreachable real HOME.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit c0c6402faa5559f4a9ee95f68df1203460ccd5ff)
The human's ask ('…then ask @alice-opencode to review it') wakes the
reviewer too; its stub fixed calc.py in parallel and whichever agent
published first won, so the other's publish diverged (PR #15 F5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 9360d018c2b3bfcc24a27521642231ca4cc6d79c)
_invitee() started alice's relay before returning; a failing step
left it running, since the caller's finally never saw the session
(orphans 73397/73417 from 2026-10-19 20:41).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 9511a523cbba3c3237a1d5ad3e3344f61f2a7dd7)
A failure inside _invitee (share, bob's wizard) happened before the test's
try/finally, so alice's relay outlived the run; the overseer's sweep found
two such relays from a 20:41 run. The helper now tracks the sessions it
opened and closes them before re-raising. Regression breaks the share step
and asserts no started relay is still alive.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit af1cadffb267bff494e787965a718979a6c14721)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 83c8e7c856b3ee6c7c86477b73de252d123d8657)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 5cda69807d05e53309cb831b9ef240ebccd0ccc6)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 22680480e7c5639b0cf72f0b621a8ff77f3dfec6)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit adb9a45b1016e52ff06f5fe6481488ffd6b5ad63)
redact_secrets covered mct_ and quorus_sk_ but not quorus_pk_.
Since H4 the owner's own participant key sits in ~/.quorus, which
an agent running as the owner can read; a prompt-injected agent
could post it unmasked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 0df1dbf7c37aad59cca85372edb067ec74d6cd53)
One @OPEN with four agents posted four '/defer -> @winner' lines
(Arav's multi-owner run). The claim already names the winner and
nothing routes on these edges; failover handoffs keep their defer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit b9052a773dadb05ec99f47428222b485145dccba)
b9052a77 left test_losing_an_auction_on_agent_chatter_posts_no_defer
expecting one defer for an @OPEN; weekend went red. Both cases now
expect none, under a name that says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 07ae343a609e963a4726fbc88115eba5dab5e75d)
Multi-person audit BUG 24: nadia's only message woke nadia-opencode, the
wake crashed before committing and left its held-window file dated
before her message. The retry wake for that same message committed, and
the publish guard held it as "@nadia wrote to me mid-turn". A window
whose turn left nothing unpublished (no commit ahead of main, clean tree)
is stale; mark_window now replaces it with the new turn's start and view.
A window with an unpublished commit behind it still stands (codex's rule).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit ba92db59475ee0f36c936fd754763825ac25d3da)
Codex: _surviving blamed only the first 25 files at checkout HEAD while
counting every added line, so a 26-file commit kept 25 of 26. Survival
now blames every file at one pinned end commit, follows renames, counts
deleted files' lines as gone, and leaves unblameable files out of the
denominator, reported as coverage. 0.6.5 queue.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 04a96e5755ca10e156b87c78df9075cb4acf1653)
Codex on f033a72d: numstat's 'old => new' was read as a path, so a
rename-and-edit commit kept 0% at 100% coverage; and any failed tree
read counted as deletion while a blame timeout escaped. Numstat and
renames are parsed from -z output, existence comes from ls-tree, and
any git error or timeout marks the file uncomputed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit c5126cbf5ebc47bd1b9041c9c2edd8b53a25ac01)
Port for 0.6.5 per docs/internal/release-0.6.5-plan.md E, with no
owner-signature code:
- quorus/runtime/own_relays.py from 9971eeb7 (blob 53f320f).
- relay writer: own_relay_urls, record_own_relay and the startup call
  from 9971eeb7:quorus/relay.py (blob 24ec60dd); docstring drops the
  signature wording.
- 54da38fe's agent_cmd (_on_teammates_relay, the owner's own-relay
  credential) and hub (_invited_elsewhere) hunks, owner_sig replaced
  by own_relays; its triage part is already in 0.6.4 (e453d03).
- tests: 54da38fe's agent_cmd regressions patched to own_relays, and
  test_own_relays (9971eeb7 minus owner_sig re-exports, plus the
  relay writer test from test_owner_sig_daemon).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bug fixes on released paths, per docs/internal/release-0.6.5-plan.md
(Codex plan GO at 1a51e568). Version 0.6.5 in every package, the
relay, server.json and the Claude plugin pin. CHANGELOG: one fresh
0.6.5 entry; the H4 lines the hold-revert re-added under 0.6.4 move
here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The own-relay port (c7c3a29) starts the relay through uvicorn.Server
so it can record the sockets it bound; test_main_runs_uvicorn and the
access-log CLI test still mocked uvicorn.run. Both take weekend's
versions from 380372e6 (test hunks only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aravkek
aravkek merged commit b945bb4 into main Oct 21, 2026
25 checks passed
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