feat(worldmodel): additive task channels — representation repaired, control unmoved - #62
Merged
Merged
Conversation
…ontrol unmoved
Ledger node 21. Node 20's structural candidate: give pos/vel their own additive
observation channels instead of leaving them as small multiplicative modulations
on the nuisance carriers.
c0 = alpha * (1 + 0.10*pos) -> c0 = 1.0 + pos
c1 = beta * (1 + 0.10*vel) -> c1 = 1.0 + vel
_step untouched. NO TUNABLE CONSTANT: JEPATransitionDataset z-scores every
feature on train statistics, so any gain divides straight back out; the 1.0 is a
DC offset for positivity that the same z-scoring removes. This restores
_render_state's own stated intent -- its comment already claimed these two
channels carry the task factors.
G1-G5 registered before implementing, INCLUDING G5, the gate node 20 lacked.
G1 raw probe pos 1.0000 vel 1.0000 PASS
G2 oracle ladder BIT-IDENTICAL 100.0/91.5/73.5/37.0/34.5 PASS
G3 alphaPower post|pre still 1.000 -- NOT addressed, declared in advance
G4 chi still recoverable 0.6849 PASS
G5 factor recovery under the incumbent objective:
pos 0.6065 -> 0.9824 vel 0.0227 -> 0.9740 PASS
chi 0.9566 -> 0.7660 peak_amp 0.9947 -> 0.8859
The encoder inverted its priorities exactly as intended: task up, nuisance down.
ACTION RECOVERY TRANSFORMED. ax -0.1676 -> +0.8309, ay -0.1199 -> +0.3709, with
mode_bit at -0.2807 so the negative control still holds. Node 18's "no
recoverable action information" is fully resolved. The frame offset also improved
16x without being targeted: node 14's A/B ratio 70.6 -> 4.25.
AND CONTROL DID NOT MOVE. mpc_success 0.353 +/- 0.034 against a random baseline
of 0.361; log-ratio +0.0582 against zero-action's +0.0341. Still at chance, still
worse than doing nothing. The planner remains uninformative on a representation
that now contains what it needs: correlation(needed, produced) -0.0206 (was
+0.0375), sign agreement 49.0% (45.5%), producing 0.069 of the 0.222 displacement
required -- 31%, essentially unchanged.
KEEP the repair: it passed every gate and fixed a real, measured defect. But
nodes 17-19's diagnosis is NECESSARY BUT NOT SUFFICIENT.
This is the THIRD defect found, fixed, and followed by no change in control --
the frame offset (node 14), the benchmark's resolving power (node 15), and now
the action channel (nodes 17-19). Each was real. None was binding. That pattern
is the finding: the control failure is not one broken component.
Next suspect now has evidence, not suspicion: rollout error compounds 11.3x to
17.4x from h=1 to h=8 while horizon=6, so a CEM plan is scored on a state that
may not match the trajectory executed. Test named: score the CEM against a
rollout through the TRUE env on the same episodes and plans.
Verified: generator and forward_eval smoke tests pass; ledger and ADR gates green.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DJJ8y1zo7WSqEmGNW8DQap
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.
Node 20's structural candidate.
c0 = alpha·(1 + 0.10·pos)→c0 = 1.0 + pos, likewisec1/vel._stepuntouched.No tunable constant.
JEPATransitionDatasetz-scores every feature on train statistics, so any gain divides straight back out; the1.0is a DC offset for positivity that the same z-scoring removes. This restores_render_state's own stated intent — its comment already claimed these two channels carry the task factors.Gates — registered before implementing, including G5
pos1.0000,vel1.0000alphaPowerpost|prechirecoverableG5 — factor recovery under the incumbent objective, 3 seeds
posvelchipeak_ampThe encoder inverted its priorities exactly as intended — task up, nuisance down.
velwent from unencoded to near-perfect.Action recovery transformed
ax−0.1676 → +0.8309,ay−0.1199 → +0.3709,mode_bitstill −0.2807 so the negative control holds. Node 18's "no recoverable action information" is fully resolved.The frame offset also improved 16× without being targeted: node 14's A/B ratio 70.6 → 4.25.
And control did not move
mpc_successStill at chance, still worse than doing nothing. The planner remains uninformative on a representation that now contains what it needs.
Verdict
Keep the repair — it passed every gate and fixed a real, measured defect. But nodes 17–19's diagnosis is necessary but not sufficient.
This is the third defect found, fixed, and followed by no change in control: the frame offset (node 14), the benchmark's resolving power (node 15), and now the action channel (nodes 17–19). Each was real. None was binding. That pattern is itself the finding — the control failure is not one broken component.
Next suspect, with evidence
Rollout error compounds 11.3× to 17.4× from h=1 to h=8 while
horizon=6:A CEM plan feeds the predictor its own output for six steps, so the cost being minimised may be computed on a state that does not match the trajectory executed.
Test named: score the CEM against a rollout through the true env on the same episodes and plans. If control jumps, the predictor's rollout is the bottleneck; if not, the fault is in the cost or the goal latent, not the forward model.
Verified: generator and forward_eval smoke tests pass; ledger and ADR gates green.