Skip to content

refactor: rename tandem to jevduo (package, CLI, session class, paths) - #15

Merged
k4ngzy merged 2 commits into
AI45Lab:mainfrom
two-tiger:refactor/rename-to-jevduo
Nov 5, 2026
Merged

k4ngzy merged 2 commits into
AI45Lab:mainfrom
two-tiger:refactor/rename-to-jevduo

Conversation

@two-tiger

@two-tiger two-tiger commented Nov 5, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The project is renamed from Tandem to JevDuo (lowercase jevduo for anything machine-readable, JevDuo for display).

This PR is a mechanical rename only. It does not change behavior, the protocol, or the on-disk result format. It contains two commits:

  1. refactor: rename tandem to jevduo (package, CLI, session class, paths)
  2. docs: sync executable commands and imports with the jevduo rename; add upgrade note

Changes

Code and packaging

  • src/tandem → src/jevduo, src/tandem_eval → src/jevduo_eval (git mv; 76 of 77 files are detected as renames)
  • Distribution name jevduo; CLI entry points jevduo / jevduo-eval (the old tandem / tandem-eval commands are removed, no aliases)
  • TandemSession → JevDuoSession
  • rjob job name prefix tandem- → jevduo-
  • pyproject.toml: the package-data key and the ruff per-file-ignores paths follow the new package path
  • infra/config.example.json: repo_root / deploy_root / results_root
  • infra/worker.sh: entry module jevduo_eval, docker temp dir prefix
  • CI: tandem check → jevduo check
  • Tests: imports, monkeypatch string paths, path / job-name assertions, and the regex in tests/demo/test_site.py that guards the "demo must not import the harness" boundary

Docs (executable content only)

  • README / AGENTS.md / docs/*: commands, import examples, directory maps and the jevduo-<run-id> job name now match the renamed entry points, so the documented steps run as written
  • README: new section "从旧名称 tandem 升级" (upgrade from the old name)

Compatibility impact (please review)

  • Breaking: import tandem / import tandem_eval and the tandem / tandem-eval commands no longer exist. Existing installs need:
    pip uninstall -y tandem        # uv: uv pip uninstall tandem
    pip install -e '.[dev]'
    jevduo check
  • rjob names become jevduo-<run_id>.
  • The dev machine's infra/config.json (gitignored) needs eval.repo_root / eval.deploy_root updated by hand. The old tandem-deploy copy on the shared volume is left untouched and should be removed once no run uses it.

Intentionally not in this PR

  • Env vars TANDEM_EXPERIMENT_ROOT / TANDEM_CONFIG_FILE (follow-up PR, with a fallback to the old names)
  • harness.name, f"tandem {__version__}" in episode.json, the version number, and the schema $id / $ref / title (follow-up PR; wording and identifiers only, no protocol_version bump)
  • Brand wording in README / AGENTS.md titles and intro sentences, and the DEVIATIONS.md history (wording PR)
  • Shared-volume paths owned elsewhere: tandem_api_pool, tandem_jev_images, tandem_osworld21_*, and log.results_root (it points at the existing historical results directory)
  • The real-machine capture in tests/eval/rjob_fakes.py (kept verbatim)

Verification

  • ruff check src tests demo: pass
  • pytest: 657 passed, 1 skipped (the skip is the existing optional-Chromium test, unavailable on my machine)
  • jevduo check: 17 protocol samples pass
  • Offline wheel build: the wheel contains the 3 schemas and 17 samples, entry points are jevduo / jevduo-eval, and there are no tandem entries (confirms the package-data key was updated correctly)
  • After reinstalling the editable install, the entry points work and import tandem raises ModuleNotFoundError
  • The README commands and the library-usage imports were executed for real: jevduo check, jevduo --version, jevduo-eval rjob run --help, jevduo-eval entry --help, and the build_default / SessionConfig / JevDuoSession imports
  • The demo boundary guard regex was checked with positive and negative samples: from jevduo import x and import jevduo_eval match, from tandem import x does not

Cluster mock smoke

jevduo-eval rjob run --benchmark mock --limit 2

  • run id rename-mock-20261105, rjob jevduo-rename-mock-20261105, code version 905c33b (no -dirty)
  • Result: platform status Succeeded, rjob run returned succeeded, worker log {"done": 1, "scored": 1}
  • Results: /mnt/shared-storage-gpfs2/evobox-share-gpfs2/chenxinquan/tandem/rjob_logs/rename-mock-20261105
  • total is 1 because the mock manifest contains a single task (mock-000); --limit 2 did not drop anything
  • Used the new jevduo-deploy as deploy_root; the old tandem-deploy copy was not touched
  • The rjob no longer appears in the full rjob list (259 jobs listed, 0 matches). rjob run does not print the deleted flag and rjob get cannot distinguish "deleted" from "never existed", so this is indirect evidence of cleanup
  • Scope: covers sync, submit, worker entry, result archiving and cleanup on the mock benchmark. It does not cover the real-benchmark path (shared env.sh, docker, VM; OSW1 / OSW2 / OSW2.1)
  • Expected leftover: harness.name in the archived summary.json is still tandem (follow-up PR)

CI note

test (3.12) failed once on tests/eval/test_browser_controls.py::test_real_cdp_discovers_click_handlers_without_promoting_plain_text (a real-Chromium test timing out waiting for document.readyState). This PR only changes one import line in that file. The same test also failed on debug/gui-observation-closure and passed on re-run; it passed on re-run here too. The root cause was not investigated; hardening it should be a separate change.

Notes for reviewers

  • Please view the diff with rename detection (git diff -M30% or GitHub's rename view). src/jevduo/__init__.py is only 3 lines with 49% similarity, so it shows as an add/delete at the default 50% threshold.
  • tools/rank_probe.py:24 imports jevduo.candidates, which does not exist (the module is jevduo.gui.candidates). The old import was equally broken on the baseline, so it is not a regression of this rename. I will fix it in a separate small PR.

tandem-demo added 2 commits November 5, 2026 22:53
- src/tandem -> src/jevduo, src/tandem_eval -> src/jevduo_eval (git mv, history preserved)
- distribution name jevduo; CLI entry points jevduo / jevduo-eval
- TandemSession -> JevDuoSession
- rjob job name prefix tandem- -> jevduo-
- pyproject: package-data key and ruff per-file-ignores follow the new package path
- infra/config.example.json: repo_root / deploy_root / results_root; worker.sh entry module
- CI: tandem check -> jevduo check
- tests: imports, monkeypatch string paths, path / job-name assertions, demo boundary guard regex

Not in this commit (follow-up PRs): TANDEM_* env vars, harness.name, schema id/ref/title,
version bump, docs wording. Shared-volume paths (tandem_api_pool, tandem_jev_images,
tandem_osworld21_*) and real-machine fixtures in tests/eval/rjob_fakes.py are intentionally unchanged.
…d upgrade note

- README / AGENTS.md / docs: tandem check, tandem-eval, TandemSession, src/tandem*/ paths and the
  tandem-<run-id> job name now match the renamed entry points, so the documented steps run as written
- README: add a short upgrade section (uninstall old package, reinstall, config path sync)
- verified by running the README commands and the library-usage imports for real

Not in this commit (PR2 wording batch): brand wording in titles and intro sentences,
DEVIATIONS.md history, TANDEM_* env vars.
@k4ngzy
k4ngzy merged commit 33c44e5 into AI45Lab:main Nov 5, 2026
2 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.

2 participants