Pace chat and command packets per connection, restore Creative inventory without clear/kill or losing existing NBT, return 503 immediately on disconnect, and bind callbacks to their own bot. Startup is bounded and readiness checks the real connection. Preserve the world/checkpoints and both remote Mine model profiles. Validation: 65 pytest checks passed, one skipped; eight Node behavioral checks passed through the real patched upstream routes; measured divergence matches 18 modified and 5 added files.
Repair Voyager deadlines and connect both bots to Mine
Keep server-only mode and saved worlds. Restore the missing engine deadline helper, clean isolated runner process groups, and route both bots to the separate Mine endpoint. Preserve checkpoints and existing Creative mode.
fix: bound the waits that could freeze the learn loop (voyager_runtime_contract.py)
1. Deny-only Critic veto
Measured: the Critic returned success: true with the reasoning 'having a netherite_pickaxe in their inventory means they have successfully mined gold, stone bricks, bricks and polished andesite', and separately returned success: true while its own evidence line read 'Live Inventory has 0/1 ...'. Both reached completed_tasks.json, which is why the completed count grows while the skill count does not.
mechanical_verdict() in voyager_verification is three-valued: True, False, or None. None means 'this deployment cannot judge this objective from the world', which is not the same as failed. VerifiedCreativeCritic now denies a model success only when mechanical_verdict returns a definite False -- an objective with a countable postcondition whose world state contradicts the claim. Every other verdict, including every objective this deployment cannot measure, still goes to the pinned upstream CriticAgent unchanged. The wrapper can deny a success; it can never cre…
Exercise the exit report instead of matching strings, and fix the name it needed
The test I wrote for the exit report asserted that certain strings appeared in the file. That is the same weakness that let the previous NameError through, so the test now runs the code: it raises a real exception carrying a fake API key, calls record_exit, reads the file back and checks the content, the traceback and the redaction.
To make that possible, record_exit moved from voyager_runner.py into voyager_runtime_contract.py. voyager_runner imports the pinned upstream package at module level, which a unit test should not need to satisfy. The runner keeps a one-line wrapper.
Moving it immediately exposed the same class of bug again: the new code in the contract used time.time() without importing time, and pyflakes -- added in the previous commit for exactly this -- reported 'undefined name time' on the first run. Fixed, and the unused 'import re' the move left behind in the runner was removed with it.
Also covered now: each bot writes its own report file, and a write failure retur…
Fix the NameError that made the leave/rejoin loop worse, and record why a runner dies
I introduced a bug in the previous commit and this fixes it.
The retry loop added to voyager_runner.py called time.sleep() without importing time. The except block therefore raised NameError on its first use, so a retryable provider error became a hard crash: the runner exited with rc=1, the watchdog restarted it, and the bot left and rejoined the game again. Gemini_Bot's restart count climbed 1 -> 4 -> 8 -> 9. The fix I wrote to stop the leave/rejoin loop made it worse, and the only reason it was visible at all is the restart counter.
import re and import time added.
Why the tests missed it: they asserted that certain strings appeared in the file. A file can contain a retry loop and still raise NameError the first time it runs. tests/test_python_names_resolve.py now runs pyflakes over the maintained modules and fails on 'undefined name', which is that exact class. Verified by removing import time again: two tests fail.
Second change, so the next failure is not invisible:
The on…
Declare and enforce the full divergence from the pinned upstream
checkout_verified attested five decision methods. Those are not the whole difference between this tree and MineDojo/Voyager@55e45a88: the boot patcher rewrites sixteen upstream files and adds four, and nothing said so. A reader of the status could take checkout_verified to mean the tree is pristine.
voyager_runtime_contract.py
ADAPTED_UPSTREAM_FILES and ADDED_UPSTREAM_FILES declare every upstream path the boot rewrites, each with a reason. The sets were measured by running the real patcher against a clean checkout and hashing the tree before and after. write_upstream_manifest() hashes the pristine tree at checkout time; verify_divergence() re-measures and refuses to attest a tree that differs from the declaration in either direction -- an undeclared edit, an undeclared addition, a deletion, or a declared patch that silently stopped applying. node_modules, __pycache__, egg-info, .git and npm lock files are excluded.
voyager_stack.py
Writes the manifest right after the checkout, an…
Attest the live Critic wrapper instead of the object it replaces
voyager_runner.py attested the upstream CriticAgent and then replaced it with VerifiedCreativeCritic, so the report named a decision method that was no longer the one being called. The wrapper is now declared in DECLARED_WRAPPERS, installed before the attestation, and the attestation resolves its upstream delegate and attests that object. An undeclared wrapper, or one with no reachable delegate, fails the boot. Adds 4 regression tests; suite 51 passed, 0 failed.
Restore official Voyager decision agents and attest the runtime
naldo
5ddf32a
Remove the local curriculum/action/critic/skill overrides, the
deterministic action parser, the affordance catalog, and the build
blueprints, so Curriculum, Action, Critic and SkillManager are the
upstream implementations at the pinned commit.
The single declared adaptation is the curriculum parse-failure retry
feedback, applied through voyager_runtime_contract and recorded in
.upstream-expected/ for the AST attestation. Skill templates are
quarantined before the learning loop, and template skills can no longer
drive a build catalog.
Verify shared upstream Voyager and restore bounded LLM Critic