Fix the from-assets arm's fitting and level defaults, and give SceneBase engine materials - #207
Merged
Merged
Conversation
…ase engine materials
The Sept 21 EMPIRIC from-assets pilot won 6 of 10 runs. Replaying its
failures through the real tools found harness problems, not scene
building:
- sim.fit scored nothing when RESIDUAL_FEATURES was empty, which the
scene contract asked for ("{} if none"): every segment read as
unexplainable at any parameters (NO FIT RAN, RMS inf). An empty scope
now falls back to the inferred features of the scene's objects, as an
undeclared one does, leaving out the commanded robot. A NO FIT RAN
report names the features it scored, and the contract and the
deployment gate describe the scope as the fit's loss scope.
- An edited ParamSpec init_value was ignored: the carried value of the
last fit or round won, so a friction sweep by edits gave identical
rollouts. A carried value now holds only while its declaration is
unchanged, the fitted file still runs at its fit, and the UNFITTED
notice lists the values in use.
- A restart warned that a subclass model's parameters fell back to
their declared inits. They did not; the check compared them against
the empty rule specs.
- On a test level, sim.reset() and sim.task() raised and pointed at
task_idx=0, the first training level, and evaluate_trajectory and
is_goal_state scored level 0 by default. All four now default to the
current level. The provider test now resets the config it reads.
- SceneBase offers the engine materials of every observed type with
bodies (mass, lateral, spinning and rolling friction, restitution,
damping) and of the static support as parameters, set on every body
of the group when declared. The Domino agents never modelled spinning
friction, which decides how a struck domino twists on a turn.
- The scene manifest lists bodies without a collision shape, such as
the Balloons ceiling that marks the burst height, with their visual
shapes. The backdrop walls stay out: the scene base builds them
itself, as it does the ground plane.
yichao-liang
force-pushed
the
from-assets-fixes
branch
from
October 3, 2026 09:48
7412e47 to
cf54348
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
In the EMPIRIC from-assets arm (
agent_continual_from_assets), the agent builds its own scene fromSceneBase, the scene manifest and the asset files.It is not handed a per-domain visible core such as
PyBulletBridgeBaseEnv.The Sept 21 pilot won 6 of 10 runs: Bridge 2/2, Boil 2/2, Balloons 1/2, Fan ramp 1/2, Domino 0/2.
Every failed run built a scene that loaded and reconstructed its observations, with at least 7,686 of 10,000 steps left.
The failures trace to the harness gaps below, which also affect the other scene-built and model arms where noted.
What changes
sim.fit).The scene contract told agents to declare
RESIDUAL_FEATURES = {}"if none", and an empty scope gave the fit nothing to score: every segment read as unexplainable at any parameters ("NO FIT RAN", RMS inf).Both Domino agents hit this, and the test-level model was unfitted in all 10 pilot runs.
An empty scope now falls back to the inferred features of the scene's objects, as an undeclared one already did, without the commanded robot.
A "NO FIT RAN" report names the features it scored, and the contract and the deployment gate describe the scope as the fit's loss scope.
Editing a
ParamSpecinit value was ignored: the carried value from the last fit or round won, so a friction sweep by edits produced identical rollouts.A carried value now holds only while its declaration is unchanged, and the file a fit was published for still runs at that fit when the agent reverts to it.
The "PARAMS UNFITTED" notice lists the values in use and marks the carried ones.
This applies to the subclass and rule model forms of every model arm.
A restart logged that a subclass model's parameters fell back to their declared inits.
They did not: the check compared them with the model's empty rule specs.
The check now counts
AGENT_PARAM_SPECS.On a test level,
sim.reset()andsim.task()raised an obsolete phased-synthesis guard that told the agent to passtask_idx=0, which staged the first training level.evaluate_trajectoryandis_goal_statealso scored level 0 by default.All four now default to the level in progress, as the play prompt already documented, and
task_idxis described as indexing the levels reached so far.SceneBase.For every observed type with bodies, the base offers
<type>_mass,_lateral_friction,_spinning_friction,_rolling_friction,_restitution,_linear_dampingand_angular_damping, plussupport_*contact materials for static bodies without an observed name.A name declared in
AGENT_PARAM_SPECSis applied to every body of its group after each reset and on change.An undeclared one only describes the scene, so the fit's pinning of unestimated parameters cannot override the agent's own code.
Every Domino agent left spinning friction at 0.005 or less (truth 0.5), and that friction decides how a struck domino twists on a turn.
Bodies without a collision shape are listed with their visual shapes and
visual_only: true, for example the Balloons ceiling that marks the burst height, which the Balloons seed-1 agent had to guess.The generic backdrop walls stay out:
SceneBasebuilds them itself, as it does the ground plane.Evidence
An end-to-end replay drives the real continual loop and tools with a scripted agent on the benchmark Domino (high-friction turn, seed 1).
It uses the seed-1 pilot agent's own
simulator.pyand replays its winning level-1 plan (Pick and Place two blue dominoes, then Push the green one), which wins level 1 in 194 steps, as in the pilot.864ed48c7sim.fit()with the pilot'sRESIDUAL_FEATURES = {}domino_friction0.70 to 0.73domino_friction0.7 to 3.0, rerun the same pushsim.reset(),sim.task()task_idx=0evaluate_trajectorydefaulttask_idx=0domino_*andsupport_*entriesTests
SceneBasematerials (declared set and kept across resets, undeclared never set), manifest visual-only bodies without the backdrop.evaluate_trajectorystubs carry the current level.Prompt goldens regenerated.
Not in this PR
🤖 Generated with Claude Code