Repository navigation
docs: refresh navigation - #1219
Conversation
|
The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
Autofix Details
Bugbot Autofix prepared a fix for the issue found in the latest run.
- ✅ Fixed: Colab setup breaks on cell rerun
- The setup now skips clone and chdir when already in the OpenEnv repository, allowing repeated Colab cell execution.
You can send follow-ups to the cloud agent here.
There was a problem hiding this comment.
APPROVE at 35069805
Docs + stub-sync refresh looks solid.
sync_env_docs._rewrite_relative_links
- Rewrites file/dir/image/HTML links to GitHub blob/tree/raw while preserving query/fragment, angle-bracket URLs, fenced/indented code, anchors, and external/missing/outside paths
- New regressions in
tests/scripts/test_sync_env_docs.pypass (3/3); fulltests/scripts/54/54 scripts/sync_env_docs.py --checkclean;check-env-docsCI green
Getting Started / Echo
- Replaces stale
EchoAction/echoed_messagewith current MCP surface (metadata["message"],call_tool,CallToolAction/observation.result) — matchesEchoEnv/MCPToolClientandSyncEnvClient.__getattr__wrapping
Nav
- Concepts / Learn split; toctree locals all resolve; doc-builder PR build green
CI exact-head: tests 3.11/3.12, lint, package smoke, env locks, docs, CodeQL, snapshot — all green
Housekeeping: this supersedes fork #1101 (same README→docs relative-link problem, with broader coverage + tests). Safe to close #1101 after merge.
Docs/scripts only — not 0.6.0 wheel cargo.
Sent by Cursor Automation: Release
There was a problem hiding this comment.
REQUEST_CHANGES at 35069805 — withdrawing earlier APPROVE
Bugbot’s Colab finding is real and was introduced by this PR’s setup rewrite.
if IN_COLAB:
if not Path("OpenEnv").exists():
subprocess.check_call(["git", "clone", ...])
os.chdir("OpenEnv")After the first successful run, cwd is already the repo root, so Path("OpenEnv").exists() is false, the clone is skipped, and os.chdir("OpenEnv") fails on rerun.
Suggested shape:
if IN_COLAB:
if (Path.cwd() / "pyproject.toml").exists():
pass # already in the repo
elif Path("OpenEnv/pyproject.toml").exists():
os.chdir("OpenEnv")
else:
subprocess.check_call(["git", "clone", "https://github.com/huggingface/OpenEnv.git"])
os.chdir("OpenEnv")Everything else from the prior APPROVE still looks good (link rewrite + tests, Echo API, nav, CI). Fix the Colab cell and I’ll re-approve.
Sent by Cursor Automation: Release
There was a problem hiding this comment.
APPROVE at 96e990fd
Colab blocker fixed: if IN_COLAB and Path.cwd().name != "OpenEnv": skips clone/chdir on cell rerun. Bugbot clean on this head.
Prior positives unchanged (link rewrite + tests, Echo API, nav; supersedes #1101). Docs/scripts only — not 0.6.0 wheel cargo.
Sent by Cursor Automation: Release
There was a problem hiding this comment.
Alignment Review Report
Two-tier review of the docs: refresh navigation changes (docs + the scripts/sync_env_docs.py link rewriter + new regression tests). Net: a clean PR that actually improves doc↔code alignment.
Automated Checks
- Lint: PASS —
ruff format --check,ruff check, andusort checkare all clean on the two changed Python files (scripts/sync_env_docs.py,tests/scripts/test_sync_env_docs.py). Note:.claude/hooks/lint.shitself only errored on this review VM becauseuvisn't preinstalled here — I installed the tools and ran the underlying checks directly. CI lintssrc/+tests/, so the new test file is in scope and passes;scripts/isn't CI-linted but is clean too. - Debug code: CLEAN —
check-debug.shscanssrc/only and surfaced pre-existing prints/TODOs; none are in this PR's changed files. Theprint()s insync_env_docs.pyare legitimate CLI output. - Doc sync (
python scripts/sync_env_docs.py --check): PASS — the committeddocs/source/environments/*.mdstubs are byte-identical to what the updated generator produces (verified on a clean tree). - New tests: PASS — 3/3 in
tests/scripts/test_sync_env_docs.py. - Navigation: OK — every
_toctree.ymllocal:target resolves to an existing file (no broken nav).
Open RFCs Context
Open RFCs on this branch — In Review: 000, 001, 002 (+ Cloud-Sandbox amendment), 003 (MCP), 005 (Agentic Harnesses), 008 (Env Auto-Validation), 012 (Harbor Capture Providers); Draft: 010, 011 (ARD Catalog Discovery); 004 (Rubrics) has no status header. None conflict with this PR. Two are relevant but consistent: the tutorial's HTTP→WebSocket rewrite matches the INVARIANTS "WebSocket for all environment communication" rule (HTTP is being deprecated), and getting-started's MCP call_tool usage matches RFC 003 "MCP as universal standard" / the dual-API boundary.
Tier 1: Fixes Required
None. All mechanical checks pass (lint / format / imports / tests / doc-sync).
Tier 2: Alignment Discussion
Principle Conflicts
None identified — the changes strengthen alignment rather than conflict:
docs/source/guides/concepts.md:result.terminated→result.donefixes a reference to a non-existent attribute (clientStepResultexposesdone,client_types.py:28).docs/source/tutorials/openenv-tutorial.md: HTTP/REST framing → WebSocket,HTTPEnvClient→EnvClient,from core...→from openenv.core...,src/envs/→envs/— all match the current API surface and the WebSocket invariant.docs/source/getting-started.md: switches to the MCP tool-calling pattern. Verified accurate against the code:MCPToolClient.call_toolunwraps the FastMCP envelope (.data,mcp_client.py:550), echo's reset setsmetadata["message"]="Echo environment ready!"(echo_environment.py:133), andecho_messagereturns the message — so the# "..."output comments are correct.
RFC Conflicts
None identified. The docs touch RFC-governed areas (MCP / WebSocket) but describe them consistently with RFC 003 and the WebSocket invariant — this is convergence, not divergence.
Additional verification (high-value for a docs PR)
Stateimport inenvironment-builder.mdresolves (env_server/types.py:180).cli.md: the Sphinxautomodule→[[autodoc]] openenv.cli.commands.import_env.import_envswap targets a real symbol (import_env.py:58) and matches the[[autodoc]]syntax used everywhere else in that file.opencode.md/opencode_env/README.mddrop a dead link to a non-existentDOCS/HF/...file (source README + synced stub stay consistent).
Minor (non-blocking)
- One optional heads-up left inline on the indented-code-block heuristic in
_rewrite_relative_links. docs/README.mdchanges the local-preview hint tohttp://localhost:5173/index; worth a quick confirm thatdoc-builder previewserves at that path locally (doesn't affect the built site or CI).
Summary
- 0 mechanical issues to fix
- 0 alignment points for human review
- 0 RFC conflicts to discuss
Nice cleanup: generalizing the assets-only regex into a proper file/dir/image link rewriter (with query/fragment preservation, <...> autolinks, code-fence/inline-code skipping, and symlink/out-of-repo safety) and backing it with focused regression tests is a solid improvement.
Sent by Cursor Automation: Pre-review
| elif marker: | ||
| fence = marker[1] | ||
| lines.append(line) | ||
| elif line.startswith((" ", "\t")): |
There was a problem hiding this comment.
Optional (non-blocking): this treats any line indented ≥4 spaces (or a tab) as an indented code block and skips link rewriting for it. A relative link inside a deeply-indented list item would therefore not be rewritten and would stay relative (→ 404 on the docs site). The fenced-code handling just above is solid, and this matches all current READMEs (--check passes), so it's only a heads-up for future READMEs — not a blocker.
There was a problem hiding this comment.
Stale comment
REQUEST_CHANGES at
96e990fd— correcting the prior approvalThe navigation, link rewriting, focused tests, generated-doc sync, OpenSpiel Markdown walkthrough, and exact-head CI are otherwise green. Two concrete blockers remain:
- The new AutoEnv quick start cannot install its package:
openenv/echo-envresolves the live host but names a nonexistent Space git repository. The canonical repository isopenenv/echo_env, but AutoEnv currently converts that to the wrong underscore hostname, so the docs-only working form needs the canonical repo plus an explicithttps://openenv-echo-env.hf.spacebase URL (or a tested core resolver fix).- The new generic link parser makes
sync_env_docs.py --fixdestructive on malformed links. Reproduced with[bad](http://[):urlsplitraisesValueErrorafterrun_fixhas opened the existing stub with"w", leaving the committed stub empty.Also reconcile the runnable counterparts before merge: the Colab badge still opens
examples/OpenEnv_Tutorial.ipynb, which pins old commitc2997e8and teaches the legacy HTTP surface; the generate-openenv-env skill snapshots still retain stale tutorial content / nonexistentMyState; and the manual Echo Docker command maps7860:7860although the image listens on container port 8000.Docs/scripts only — not 0.6.0 wheel cargo.
Sent by Cursor Automation: Release
Co-authored-by: burtenshaw <burtenshaw@users.noreply.github.com>
There was a problem hiding this comment.
REQUEST_CHANGES at 1694071a (autofix progress)
Fixed this head:
- Getting Started AutoEnv now uses canonical
openenv/echo_env+ explicithttps://openenv-echo-env.hf.space(with a regression). urlsplitmalformed URLs fail-safe;--fixuses atomic temp+replace (no stub truncation); indented list link rewrite + tests.
CI: lint is already red — scripts/sync_env_docs.py and tests/scripts/test_sync_env_docs.py need ruff format (and the arc usort/ruff format pipeline).
Still open:
- Nested image alts → misclassified as blob links (not raw).
unquote("%00")still crashes generation.- Blockquoted fenced code still has relative links rewritten.
- Getting Started still documents
-p 7860:7860/localhost:7860while the image listens on 8000, and still printsresult.observation.resultfor MCPstep()(CallToolResult dict). RootREADME.mdstill teaches nonexistentechoed_message(not in this PR’s file list, but it’s the wheel long description / TestPyPI surface). - CARLA
maze_navigation.py --scenario maze-1is invalid. - Git “complete working example” still treats bootstrap
from_docker_image()as a connected client.
Prior notes on Colab notebook pin / generator skill MyState snapshots / tutorial TOC remain follow-ups. Not Thursday 0.6.0 wheel cargo.
Sent by Cursor Automation: Release
Co-authored-by: burtenshaw <burtenshaw@users.noreply.github.com>
Co-authored-by: burtenshaw <burtenshaw@users.noreply.github.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
Bugbot Autofix prepared a fix for the issue found in the latest run.
- ✅ Fixed: List rewrite misses nested fences
- Fence detection now recognizes list-relative indentation, with regression coverage ensuring Markdown, href, and src targets remain unchanged.
You can send follow-ups to the cloud agent here.
Reviewed by Cursor Bugbot for commit 8cc6a9c. Configure here.
Co-authored-by: burtenshaw <burtenshaw@users.noreply.github.com>
Co-authored-by: burtenshaw <burtenshaw@users.noreply.github.com>
There was a problem hiding this comment.
REQUEST_CHANGES at 7d5ce7df (most follow-ups fixed)
Fixed this head / prior autofix:
- Nested image alts,
%00path fail-safe, blockquoted fences, and list-nested fences now leave code/images alone (with tests). - CARLA
maze_navigationdocs no longer pass invalid--scenario. - Git README +
examples/local_git_env.pyresolvefrom_docker_image()via.sync().
Still open (Getting Started / package README):
docs/source/getting-started.mdstill runs-p 7860:7860/ connects tolocalhost:7860, but the Echo Space image listens on container port 8000 — use-p 7860:8000(or map/connect to 8000 consistently).- Same page still
print(result.observation.result)after MCPstep(CallToolAction(...)); that value is a serialized CallToolResult dict (echoed string is underresult["data"], or prefercall_toolas in the first example). - Root
README.mdstill teaches nonexistentobservation.echoed_message(wheel/TestPyPI long description). Not in this PR’s changed-file list, but it is the same broken quick-start surface.
Holding approval until the Getting Started docker/result-shape examples are corrected (and ideally the root README echo quick start). Exact-head CI still running. Not Thursday 0.6.0 wheel cargo.
Sent by Cursor Automation: Release
OpenEnv 0.6.0 Breaking change - `--llm-endpoint` / OpenAIClient now take a full base URL; the implicit port 8000 is gone. `http://localhost` means port 80; use `http://localhost:8000` or `--llm-port 8000` for the old behavior (#1189, landed via #1237). New - NovitaSandboxProvider: run an OpenEnv server in a Novita AI sandbox over wss://, from a registry image or a local Dockerfile; install with `pip install openenv[novita]` (#1191). - RFC 008 Level 2 validation building blocks: manifest-v2, report-v2 and runtime-plan schemas, the severity-v2 policy, and DockerValidationProvider (#1178, #1179). The `openenv validate` CLI is unchanged in this release. Fixes - A failed `new_session()` no longer leaves the provider's container or sandbox running (#1145). Repository and environment images (not in the wheel) - coding_env `additional_imports` now extends the default safe-import allowlist (#1147). - Environment lockfile security updates: anyio 4.14.2 and soupsieve 2.9.2 (#1196, #1197, #1201, #1202). - CI hardening: per-job GITHUB_TOKEN scopes and SHA-pinned actions (#1221, #1223, #1225, #1226, #1228, #1239, #1240); validation-lab toolchain pins (#1229, #1230, #1231); docs navigation and Miles integration docs (#1219, #1220). Known, accepted for this release: Novita provider debt (unbraced $ARG ordering in Dockerfile flattening, a tbench2 example readiness leak); fixes follow in #1235. Validated: exact-head CI 13/13 on 0034202; TestPyPI 0.6.0.dev141 (run 35854754769) byte-identical to the release wheel apart from Version; clean wheel/sdist install, CLI, and Echo reset/step smoke.



This PR reorganizes the docs into Concepts and Learn, updates the evaluation title, and fixes outdated examples and broken links.