Skip to content

chore(room-ops): remove the context/doc verbs and doc_sync; the room vault is gone [Devault] - #5740

Merged
marklysze merged 2 commits into
sonichi:mainfrom
marklysze:chore/room-ops-drop-doc-verbs
Oct 21, 2026
Merged

marklysze merged 2 commits into
sonichi:mainfrom
marklysze:chore/room-ops-drop-doc-verbs

Conversation

@marklysze

@marklysze marklysze commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

What

Removes the room-ops verbs that read and wrote the AG2 Space room vault, which is being retired:

  • deletes skills/agent-room-ops/doc.py and doc_sync.py
  • room_ops.py: removes the context subcommand and its doc alias (parser + dispatch)
  • SKILL.md: removes the two retiring doc rows and the last vault line. docs(room-ops): durable room state goes to Room Commons; the room vault is retiring [Devault] #5738 already moved agents to Room Commons.
  • deletes tests that only covered these verbs: tests/agent-room-ops-{doc-404-legibility,doc-sync-writer-id,context-rename}.test.py, DocTests and test_doc_put_missing_file_structured_error in skills/agent-room-ops/test_room_ops.py
  • scripts/old-collab-literals.baseline.json: doc_sync.py was its only entry, so the baseline is now {} (regenerated with --update)
  • tests/python-suite-costs.txt: drops the two deleted test files

Kept: _gateway.py and tests/room_ops_gateway_vault.test.py. That "vault" is the local Keychain holding the gateway token, not Forgejo.

Evidence

room_ops.py capabilities and room_ops.py doc get:

BEFORE (output captured at 9ef61c256, #5738's first commit; the doc verbs are the same on main 18c31213f):
commands: ['agents', 'capabilities', 'context', 'doc', 'events', 'fetch', 'grant', 'history', 'join', 'members', 'mention', 'react', 'read', 'resolve', 'rooms', 'say', 'send', 'unreact']

AFTER (64681a600, now rebased as dfe5a4990 with the same code):
commands: ['agents', 'capabilities', 'events', 'fetch', 'grant', 'history', 'join', 'members', 'mention', 'react', 'read', 'resolve', 'rooms', 'say', 'send', 'unreact']
room_ops: error: argument cmd: invalid choice: 'doc' (choose from read, fetch, send, join, react, unreact, rooms, members, events, agents, resolve, mention, say, grant, history, capabilities)
exit=2

Tests at HEAD: skills/agent-room-ops/test_room_ops.py, all tests/agent-room-ops-*, tests/room-ops-*, tests/room_ops_*, tests/lint-old-collab-literals.test.py and tests/python-ci-legs-partition.test.py pass. python3 scripts/lint-old-collab-literals.py reports ok (0 occurrences in 0 files). git diff origin/main | bash scripts/review-checks.sh passes.
tests/agent-room-ops-read-redaction.test.py fails locally the same way on origin/main (detect-secrets is missing on this host). Unrelated.

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Gate

✅ Diff coverage PASSES the 95% bar. Whole-tree (informational): 93%.

Diff Coverage

Diff: origin/main...HEAD, staged and unstaged changes

No lines with coverage information in this diff.

⚠️ Not measured

Changed, but absent from coverage.xml — outside [run] source in
.coveragerc, so diff-cover never examined these lines:

  • skills/agent-room-ops/test_room_ops.py

@liususan091219 liususan091219 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review at 867b82f (not a draft on GitHub, but the body says "do not merge yet"). Verdict: COMMENT - the removal itself is clean; nothing here blocks, and approval waits on the stated holds plus a reviewer approval at this head.

What I checked

  1. Completeness. At the head, git grep finds no remaining caller, test, doc, skill, manifest, CLAUDE.md or AGENTS.md reference to room_ops context / room_ops doc, doc.py, doc_sync, doc_get/doc_put/doc_rm, prep_get/prep_put/prep_delete, ROOM_DOC_*, room-live-context or state/room-doc-sync. The other "vault" hits in the repo are the secret vault, the workspace-sync vault and _gateway.py's Keychain tier, which are unrelated, as the body says. Two stale comments are left, both in skills/agent-room-ops/events.py:

    • line 12: "same shape as doc/mention" - there is no doc op any more.
    • line 70: "Mirrors doc._call - same envelope, same degrade map." - doc._call no longer exists, so this cross-reference points at nothing.
      Neither changes behaviour. A one-line edit each before merge would finish the sweep.
  2. Outside this repo. The desktop-shipped room-commons skill (not in sonichi/sutando) still ends its description with "Not room_ops context, which holds a room's stored Context files." After this lands, that steers agents toward a verb that is gone. It needs a follow-up in whichever repo ships that skill, merged around the same time as this PR. It is not a defect in this PR.

  3. Data safety. This PR deletes only client code. The room-vault content stays on the server, and its fate belongs to the backend B2 PR. Locally, doc_sync get wrote base copies under <workspace>/state/room-doc-sync/*.base. They become orphaned but harmless, since they are only merge bases and the remote holds the real content. Nothing on an existing install is deleted. One question for B2: once these verbs are gone, agents have no client path left to read the vault. Is any vault content (room-live-context, room-todo, room-memo, room-live-transcript) being exported or migrated to Commons before the store is dropped? Or is it confirmed disposable? A sentence in the body would settle it.

  4. Replacement. #5738 (merged) already pointed agents at Room Commons pages and databases. This PR removes the last SKILL.md rows and the vault line, and no agent-facing instruction in the repo still names the removed verbs. At the head, room_ops.py doc get exits 2 with argparse's invalid-choice error, which is the intended loud failure for any remaining external caller, such as the qingyun-001 PR-shepherd cron named in the body.

  5. Tests. The deleted tests covered only the removed verbs. Nothing left asserts on removed code, and python-suite-costs.txt plus the old-collab-literals baseline (now {}) are consistent. Locally at the head, all of these exit 0: skills/agent-room-ops/test_room_ops.py (164 tests OK), every tests/agent-room-ops-*, tests/room-ops-* and tests/room_ops_*, tests/lint-old-collab-literals.test.py and tests/python-ci-legs-partition.test.py. scripts/lint-old-collab-literals.py reports 0 occurrences. CI is 33 success and 1 skipped (Windows). license/cla is success (1 status context present). scripts/review-checks.sh on the diff passes, and the added lines contain no hardcoded paths.

What approval still needs

  • The two holds in the body: B2 merged and the qingyun-001 cron off room_ops doc. Since GitHub does not show this PR as a draft, consider marking it draft or labelling it until both are done, so the hold is not only in prose.

  • At least one approving review at this head. There are none yet.

  • Sutando (susans-MacBook-Pro)

@john-the-dev john-the-dev left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes requested at 867b82f, for one blocker.

Blocker: this PR turns main red once merged.

  • #5704 added tests/hermetic-env-sentinels.test.py:121 to main after this PR's CI ran. That line still lists tests/agent-room-ops-context-rename.test.py, which this PR deletes.
  • On the tree merged with current main (git merge-tree --write-tree origin/main 867b82f7), test_room_ops_gateway_tests_read_no_outer_selector fails with "no gateway module was imported: the case ran nothing". The same test passes on origin/main.
  • The two changes merge without a textual conflict. That's why GitHub shows MERGEABLE, and why CI here stays green: it ran on the old base (18c3121, 20 commits behind).
  • Fix: rebase, remove or replace that tuple entry, and rerun CI.

Otherwise the removal is complete.

  • At head there are no callers of prep_get/put/delete, doc_sync, doc.py or room_ops doc|context. The same grep finds 56 hits at the parent.
  • Every _gateway helper is still used. The old-collab-literals baseline is {}, and python-suite-costs.txt matches the CI partition (1211 suites).
  • room_ops doc now exits 2 with argparse's invalid-choice error.
  • Room-ops, lint and partition tests pass at head.
  • §15 doesn't apply here. This removes a CLI verb and doesn't change a bridge, the delivery loop or startup.

Non-blocking

  • Two stale comments: skills/agent-room-ops/events.py:12 ("same shape as doc/mention") and :70 ("Mirrors doc._call").
  • The desktop-shipped room-commons skill still says "Not room_ops context". It needs a follow-up in the repo that ships it.
  • The body says "Draft, do not merge yet", but the PR isn't marked as a draft. Please mark it draft until B2 (ag2space-backend#2858) and the qingyun-001 cron change land.
  • The /observe example and tests/observe-policy.test.py:28 still use artifact.updated, which B2 stops emitting.

After the rebase and that fix, and once the holds are met, this is ready from my side. Codex-core compatibility verification will be requested at the new head before I approve.

Review by Rui's Claude core (agent-assisted).

…vault is gone [Devault]

The doc verbs read and wrote the AG2 Space room vault through the broker's
prep_get/prep_put/prep_delete ops, which the backend removes. Durable room
state lives in Room Commons pages and databases. Delete doc.py, doc_sync.py,
the context/doc subcommand, their tests, and the doc_sync literal baseline.
@marklysze

Copy link
Copy Markdown
Collaborator Author

Addressed at 1570266:

  • Rebased on main (was 20 behind).
  • tests/hermetic-env-sentinels.test.py: removed the deleted agent-room-ops-context-rename.test.py from the gateway-test tuple. Local: Ran 19 tests ... OK.
  • skills/agent-room-ops/events.py: dropped the two stale doc references (lines 12, 70).
  • skills/agent-room-ops/test_room_ops.py: Ran 164 tests ... OK; lint-old-collab-literals: ok.

Holds: qingyun-001 cron is off room_ops doc (confirmed by Qingyun via Mark). Remaining hold: backend B2 ag2space-backend#2858 merges first.
room-commons skill line is being fixed by the desktop session in a separate PR.
/observe + tests/observe-policy.test.py:28 artifact.updated example left as-is (event-name example only; no behaviour depends on emission).

@marklysze
marklysze force-pushed the chore/room-ops-drop-doc-verbs branch from 867b82f to 1570266 Compare October 21, 2026 06:41
@github-actions

Copy link
Copy Markdown
Contributor

@cla-assistant check

@john-the-dev
john-the-dev dismissed their stale review October 21, 2026 07:30

Withdrawn at 1570266. The blocker is fixed: the PR is rebased on main, tests/hermetic-env-sentinels.test.py no longer lists the deleted context-rename suite (19/19 pass at this head, including test_room_ops_gateway_tests_read_no_outer_selector), and the stale events.py comments are tidied. My APPROVE waits on Codex-core compatibility verification at this head, and the stated merge holds (B2 #2858, the qingyun-001 cron) still apply.

@liususan091219 liususan091219 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review at 1570266. Verdict: COMMENT. The code is ready from my side and no change is needed; approval waits only on a reviewer approval at this head and the stated B2 hold.

Since my COMMENT at 867b82f

  • Both stale comments I named are fixed: skills/agent-room-ops/events.py:12 now says "same shape as mention", and :70 no longer points at doc._call.
  • The blocker in john-the-dev's change request is fixed. The PR is rebased, and tests/hermetic-env-sentinels.test.py:121 no longer lists the deleted context-rename suite. I checked this on the tree merged with current main (f4f09d7, two commits ahead of the base, no conflict): test_room_ops_gateway_tests_read_no_outer_selector passes. That is the test John showed failing.
  • The range-diff shows the main commit is unchanged by the rebase (867b82f = bea0116). The only new code is 1570266, which changes 3 lines in 2 files.
  • The qingyun-001 cron hold is reported done in the author's 06:41Z comment. The room-commons skill line is going to a separate PR, and the /observe artifact.updated example is kept on purpose with a stated reason. I accept both.

Removal sweep, on the merged tree

  • git grep finds no remaining caller, doc or test of room_ops context/doc, doc.py, doc_sync, doc_get/put/rm, prep_get/put/delete, room-live-context or room-doc-sync. The only ROOM_DOC_ hits are scripts/lint-old-collab-literals.py:22 and its test fixture (tests/lint-old-collab-literals.test.py:67). Those are the lint's own patterns, and they are correct to keep.
  • Coverage of kept behaviour: the deleted 404-legibility suite reached _gateway.degrade_reason_from only through doc._call. That helper is still used by events.py, and its 401/403/404 cases stay pinned directly in skills/agent-room-ops/test_room_ops.py:1657-1671 and tests/room-ops-events-server-reason.test.py. writer_id was doc_sync-only. I found no coverage hole.
  • These all exit 0: skills/agent-room-ops/test_room_ops.py, every tests/agent-room-ops-, tests/room-ops- and tests/room_ops_* suite, tests/lint-old-collab-literals.test.py and tests/python-ci-legs-partition.test.py. scripts/lint-old-collab-literals.py reports 0 occurrences. room_ops.py doc get exits 2 with argparse's invalid-choice error. scripts/review-checks.sh on the diff passes.
  • Limit of my local run: three other hermetic-env-sentinels cases (core_heartbeat writer) fail on this host. They fail identically on origin/main, so the cause is this host, not this PR.

CI at this head

  • 29 success, 2 skipped. The 2 failures come from one test file: tests/skills/process-hygiene/reap-orphans.test.py, "changes between scan and signal" (change='cwd'), in python leg 7/9. The "tsc + tests (clean install)" job only reports that leg. This is the open flake #5733, and this diff does not touch process-hygiene. A rerun of that leg should clear it.
  • license/cla is success, with 1 status context present. There are no unresolved review threads.

Merge-readiness: not ready to merge yet. The diff needs no further change. These are still missing:

  1. An approving review at 1570266. None exists at any head. John withdrew his change request and said his approval waits on Codex-core compatibility verification at this head.
  2. The B2 backend hold that the body names. I cannot see that repository from here, so I cannot confirm its state.
  3. Nit, not blocking: the body still says "rebased on main (18c3121)" and lists the cron as an open hold. Updating it, or marking the PR as a draft until B2 lands, would keep the hold visible outside the prose.
    Blast radius: this deletes client code only, and on an existing install nothing is deleted beyond orphaned *.base merge copies. An external caller still using room_ops doc gets a loud exit 2, not a silent no-op.
  • Sutando (susans-MacBook-Pro)

@sonichi sonichi left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at 1570266. No caller of room_ops doc/context, doc_sync, prep_* or the removed functions remains anywhere in the repo, crons included. The room-commons SKILL.md disambiguation row is already gone upstream. The gateway-token Keychain code is untouched, CI is green, and the baseline change is only the doc_sync.py removal.

Optional nit: room_ops doc|context now hits argparse's bare "invalid choice". A short stub that prints "retired; use Room Commons (room-commons skill / room.commons.* Actions)" would help agents following older notes. Not blocking. LGTM.

@john-the-dev john-the-dev left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review at 1570266. Verdict: COMMENT. I found nothing blocking. Approval is pending Codex-core verification at 1570266.

My earlier blocker (CR at 867b82f) is resolved.

  • tests/hermetic-env-sentinels.test.py:121 no longer lists the deleted agent-room-ops-context-rename.test.py.
  • I merged the head with current main (git merge-tree --write-tree origin/main 15702667, no conflict; main is 2 commits ahead, f4f09d7, and neither touches room-ops). On that tree, tests/hermetic-env-sentinels.test.py runs 19 tests, OK. That includes test_room_ops_gateway_tests_read_no_outer_selector, the test that failed before.

The rest of what I raised:

  • Both stale events.py comments (:12, :70) are fixed.
  • The B2 hold is met: ag2space-backend#2858 merged at 2026-10-21T18:32:05Z.
  • The body no longer says "do not merge yet". The PR is not a draft, so draft status is no longer needed.
  • The room-commons line and the /observe artifact.updated example go to other PRs, for the reasons the author gave. I accept both.

Removal sweep, on the merged tree: git grep for room_ops doc|context, doc_sync, doc.py, doc._call, prep_get/put/delete, room-live-context, room-doc-sync and the three deleted test names returns 0 files. The same pattern returns 11 files on origin/main, so the grep can match.

Tests on the merged tree, all rc=0:

  • skills/agent-room-ops/test_room_ops.py (164 OK)
  • every tests/agent-room-ops-*, tests/room-ops-* and tests/room_ops_* suite (17 files)
  • tests/lint-old-collab-literals.test.py
  • tests/python-ci-legs-partition.test.py
  • tests/hermetic-env-sentinels.test.py (19 OK)

Also:

  • scripts/lint-old-collab-literals.py: 0 occurrences.
  • room_ops.py doc get and room_ops.py context exit 2 with the invalid-choice error.
  • scripts/review-checks.sh --diff <gh pr diff 5740>: PASS.
  • All 15 required checks pass at this head.

Non-blocking: I agree with @sonichi's nit. A one-line "retired; use Room Commons" message for doc/context would help agents that follow older notes.

Review by Rui's Claude core (agent-assisted).

@qingyun-wu qingyun-wu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed at 1570266, merged locally with current main (a1f8f324e, no conflict):

  • test_room_ops.py: 164 tests OK.
  • tests/hermetic-env-sentinels.test.py: OK.
  • tests/lint-old-collab-literals.test.py: OK.
  • git grep for room_ops doc|context, doc_sync and prep_get returns nothing.
  • room_ops.py doc … now exits with argparse's invalid-choice error.

The server side is already gone. With backend #2858 deployed, a context get from current main returns ok:false with "not allowed: the room vault is retired", so these verbs can only fail now. Removing them is correct.

Non-blocking, and agreeing with sonichi's nit: an invalid-choice error doesn't tell an agent working from old notes where the documents went. A stub doc/context subcommand that prints "retired: use Room Commons (room.commons.* Actions)" and exits 2 would tell it.

@marklysze
marklysze merged commit a4ecdd3 into sonichi:main Oct 21, 2026
82 of 88 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.

5 participants