diff --git a/tests/test_leaderboard_artifacts.py b/tests/test_leaderboard_artifacts.py
index b82e97f..b964960 100644
--- a/tests/test_leaderboard_artifacts.py
+++ b/tests/test_leaderboard_artifacts.py
@@ -3,6 +3,7 @@
import json
import math
from pathlib import Path
+import re
import struct
@@ -191,6 +192,20 @@ def assert_no_absolute_artifact_paths(value: object) -> None:
assert 'id="finalLeaderboard"' in website
assert 'id="inferenceSettings"' in website
assert "not a shared numeric compute scale" in website
+ assert 'id="loopScore"' in website
+ assert 'id="loopNote"' in website
+ assert "loopScore.textContent=t.score" in website
+ assert "updateTaskContent(t)" in website
+ task_block = re.search(
+ r"var TASKS=\[(.*?)\];\n var ti=",
+ website,
+ re.DOTALL,
+ )
+ assert task_block is not None
+ assert task_block.group(1).count('score:"') == 9
+ assert task_block.group(1).count('note:"') == 9
+ assert task_block.group(1).count('files:"') == 9
+ assert task_block.group(1).count('metric:"') == 9
assert 'fetch("assets/article_suite.json")' in website
assert json.loads(WEBSITE_DATA.read_text()) == payload
diff --git a/website/README.md b/website/README.md
index 22f26a2..764e2e4 100644
--- a/website/README.md
+++ b/website/README.md
@@ -17,10 +17,12 @@ a full humanoid. Composed from the project's own six pencil illustrations with A
Page content follows the repo README: an interactive six-stage pipeline (heuristic policies →
VLA training, simulation → real world → more hardware → 2.0) whose first stage embeds an
-interactive improvement-loop diagram on the MuJoCo Ant (assets/ant.png), an environments diagram
-(simulation frameworks: Genesis, Isaac Sim, RoboCasa, MuJoCo · real-world operation), article-suite
-results with task and final leaderboard images, and the research background. GenesisBench 1.0 —
-language intelligence → physical intelligence; 2.0 — world intelligence.
+interactive improvement loop and navigator across all nine article-derived tasks. The selected
+task updates its environment artwork, starter description, experiment snippets, scoring-suite
+summary, and task links. The page also includes an environments diagram (simulation frameworks:
+Genesis, Isaac Sim, RoboCasa, MuJoCo · real-world operation), native HTML article-suite
+leaderboards, and the research background. GenesisBench 1.0 — language intelligence → physical
+intelligence; 2.0 — world intelligence.
The website copies `leaderboard/article_suite.json` to
`website/assets/article_suite.json` and renders both plots as responsive native
diff --git a/website/index.html b/website/index.html
index 60f799b..6c22c69 100644
--- a/website/index.html
+++ b/website/index.html
@@ -423,7 +423,7 @@
Heuristic policies in simulation
02 Run experiments
- 03 Compare returns
+ 03 Compare scores
04 Edit the policy
@@ -432,9 +432,9 @@ Heuristic policies in simulation
- Submit the best policyscored on a hidden evaluation suite · starter = 0, reference = 100
+ Submit the best policyhidden nominal + dynamics suites · locomotion return · starter = 0, article MPC reference = 100
- Code snippets in the nodes mirror the Ant v1 reference task; all nine task packages live on GitHub .
+ The loop nodes illustrate gait and planning edits for the Ant v1 task ; all nine task packages live on GitHub .
@@ -682,46 +682,123 @@ Research background
{id:"simulation_heuristics_ant_v1",env:"MuJoCo Ant",lbl:"MuJoCo Ant",img:"assets/ant.png",
d:"Improve a programmatic Ant locomotion policy under a fixed autonomous research budget.",
start:"a runnable CPG/PD gait — weaker than the reference",
+ score:"hidden nominal + dynamics suites · locomotion return · starter = 0, article MPC reference = 100",
+ note:"The loop nodes illustrate gait and planning edits for the",noteLabel:"Ant v1 task",
+ files:"task.md\nstarter_policy/policy.py\nevaluate.py",
+ run:"$ python evaluate.py --policy final_policy/policy.py",
+ metric:"locomotion return",edit:"Tune gait timing, torso feedback, and residual planning.",
+ before:"fixed phase + PD targets",after:"adaptive gait + residual MPC",
pop:"A dome torso on four two-segment legs — 8 actuated joints in the MuJoCo physics engine. Episodes return a score the agent can measure.
gymnasium.farama.org — Ant ↗ "},
{id:"simulation_heuristics_halfcheetah_v1",env:"MuJoCo HalfCheetah",lbl:"HalfCheetah",img:"assets/env-halfcheetah.png",
d:"Improve an interpretable HalfCheetah controller under a fixed autonomous research budget.",
start:"an asymmetric CPG/PD baseline — weaker than the reference",
+ score:"hidden nominal + dynamics suites · locomotion return · starter = 0, article CPG/MPC reference = 100",
+ note:"The loop nodes illustrate gait and online-planning edits for the",noteLabel:"HalfCheetah v1 task",
+ files:"task.md\nstarter_policy/policy.py\nevaluate.py",
+ run:"$ python evaluate.py --policy final_policy/policy.py",
+ metric:"locomotion return",edit:"Tune asymmetric stride timing, posture control, and online planning.",
+ before:"symmetric fixed stride",after:"asymmetric gait + staged MPC",
pop:"A planar cheetah with six actuated joints in the MuJoCo physics engine — the goal is fast, stable forward running.
gymnasium.farama.org — HalfCheetah ↗ "},
{id:"simulation_heuristics_pong_ram_v1",env:"Atari Pong (RAM)",lbl:"Pong · RAM",img:"assets/env-pong.png",
d:"Improve a programmatic Atari Pong controller that acts from the current 128-byte RAM state.",
start:"a weak, late-reacting RAM controller",
+ score:"hidden nominal + randomized-reset episodes · native Pong score · starter = 0, perfect +21 reference = 100",
+ note:"The loop nodes illustrate RAM parsing and paddle-control edits for the",noteLabel:"Pong RAM v1 task",
+ files:"task.md\nstarter_policy/policy.py\ntask_context/policy_api.md",
+ run:"$ python evaluate.py --policy final_policy/policy.py",
+ metric:"native Pong score",edit:"Decode ball and paddle state, then predict the interception point.",
+ before:"chase the current ball row",after:"predict intercept + recover center",
pop:"Classic Atari Pong via EnvPool — the controller never sees pixels; it acts from the live 128-byte RAM state.
envpool.readthedocs.io ↗ "},
{id:"simulation_heuristics_breakout_ram_v1",env:"Atari Breakout (RAM)",lbl:"Breakout · RAM",img:"assets/env-breakout-ram.png",
d:"Improve a RAM-only programmatic Atari Breakout policy toward the 864-point article result.",
start:"a RAM-state starter policy — normalized to 0",
+ score:"hidden nominal + shifted-start episodes · native Breakout return · starter = 0, 864-point reference = 100",
+ note:"The loop nodes illustrate RAM decoding and ball-trajectory edits for the",noteLabel:"Breakout RAM v1 task",
+ files:"task.md\nstarter_policy/policy.py\ntask_context/article_progression.md",
+ run:"$ python evaluate.py --policy final_policy/policy.py",
+ metric:"native Breakout return",edit:"Improve bounce prediction, paddle targeting, and stuck-loop recovery.",
+ before:"follow the current ball x",after:"predict bounce + perturb loops",
pop:"Atari Breakout via EnvPool, observed as the 128-byte RAM state — no pixels.
envpool.readthedocs.io ↗ "},
{id:"simulation_heuristics_breakout_rgb_v1",env:"Atari Breakout (RGB)",lbl:"Breakout · RGB",img:"assets/env-breakout-rgb.png",
d:"Improve a pixel-only Atari Breakout policy toward the article's 864-point RAM-to-RGB transfer result.",
start:"a pixel-only starter policy — normalized to 0",
+ score:"hidden nominal + shifted-start episodes · native Breakout return · starter = 0, pixel-only 864-point reference = 100",
+ note:"The loop nodes illustrate pixel segmentation and trajectory edits for the",noteLabel:"Breakout RGB v1 task",
+ files:"task.md\nstarter_policy/policy.py\ntask_context/provenance.md",
+ run:"$ python evaluate.py --policy final_policy/policy.py",
+ metric:"native Breakout return",edit:"Refine color segmentation, ball tracking, and predicted paddle contact.",
+ before:"coarse frame thresholding",after:"stable objects + bounce prediction",
pop:"Atari Breakout via EnvPool, observed as rendered RGB frames only — the RAM-to-RGB transfer setting.
envpool.readthedocs.io ↗ "},
{id:"simulation_heuristics_montezuma_v1",env:"Montezuma's Revenge",lbl:"Montezuma",img:"assets/env-montezuma.png",
d:"Improve a native-image Montezuma policy beyond a brittle open-loop replay.",
start:"a working but weak native-RGB controller",
+ score:"reproduction + hidden-seed + no-op + recovery suites · capped native return · starter = 0, 400-point reference = 100",
+ note:"The loop nodes illustrate state-graph and recovery-macro edits for the",noteLabel:"Montezuma v1 task",
+ files:"task.md\nstarter_policy/policy.py\noracle/reference_trajectory.npz",
+ run:"$ python evaluate.py --policy final_policy/policy.py",
+ metric:"capped native return",edit:"Replace brittle timing with visual state checks and recoverable macros.",
+ before:"fixed open-loop action timing",after:"state graph + guarded macros",
pop:"EnvPool MontezumaRevenge-v5 from native RGB observations — the classic hard-exploration Atari game.
envpool.readthedocs.io ↗ "},
{id:"simulation_heuristics_vizdoom_d1_v1",env:"ViZDoom D1 medikit",lbl:"D1 · medikit",img:"assets/env-vizdoom-d1.png",
d:"Improve a rendered-pixel ViZDoom D1 medikit policy under a fixed autonomous research budget.",
start:"a working but weak programmatic controller",
+ score:"two hidden seed batches · native D1 reward · starter = 0, screen-CV reference = 100",
+ note:"The loop nodes illustrate medikit detection and timing edits for the",noteLabel:"ViZDoom D1 v1 task",
+ files:"task.md\nstarter_policy/policy.py\ntask_context/policy_api.md",
+ run:"$ python evaluate.py --policy final_policy/policy.py",
+ metric:"native D1 reward",edit:"Tune brightness segmentation, component filtering, and medikit timing.",
+ before:"single bright-pixel trigger",after:"components + timed collection",
pop:"EnvPool D1Basic-v1 — a ViZDoom medikit scenario played from rendered screen pixels.
vizdoom.farama.org ↗ "},
{id:"simulation_heuristics_vizdoom_d3_v1",env:"ViZDoom D3 battle",lbl:"D3 · battle",img:"assets/env-vizdoom-d3.png",
d:"Improve a screen-CV ViZDoom D3 battle policy under a fixed autonomous research budget.",
start:"a working but weak programmatic controller",
+ score:"two hidden battle seed batches · native D3 reward · starter = 0, screen-CV reference = 100",
+ note:"The loop nodes illustrate combat, resupply, and exploration edits for the",noteLabel:"ViZDoom D3 v1 task",
+ files:"task.md\nstarter_policy/policy.py\ntask_context/policy_api.md",
+ run:"$ python evaluate.py --policy final_policy/policy.py",
+ metric:"native D3 reward",edit:"Refine enemy detection and switch cleanly between combat, resupply, and exploration.",
+ before:"one reactive combat mode",after:"CV detectors + state machine",
pop:"EnvPool D3Battle-v1 — a ViZDoom battle scenario driven by screen-CV features.
vizdoom.farama.org ↗ "},
{id:"simulation_heuristics_atari57_v1",env:"Atari-57 suite",lbl:"Atari-57",img:"assets/env-atari57.png",
d:"Improve one aggregate 342-policy Atari-57 submission produced by 342 independently accounted heuristic-search trajectories.",
start:"an aggregate starter artifact spanning all 57 games",
+ score:"complete 342-slot hidden evaluation · median best-mode HNS · starter = 0, article aggregate reference = 100",
+ note:"The loop nodes illustrate per-game policy search and ledger-completion edits for the",noteLabel:"Atari-57 v1 task",
+ files:"task.md\nstarter_artifact/manifest.json\nstarter_artifact/policy.py",
+ run:"$ python evaluate.py --artifact final_artifact",
+ metric:"median best-mode HNS",edit:"Improve game-specific policies while preserving all 342 accounted search records.",
+ before:"incomplete policy slots",after:"342 policies + complete ledger",
pop:"The full Atari-57 suite via EnvPool — one programmatic policy slot for every game, observation mode, and independent repeat.
envpool.readthedocs.io ↗ "}
];
var ti=0,
tpCount=document.getElementById('tpCount'),tpEnv=document.getElementById('tpEnv'),
tpDesc=document.getElementById('tpDesc'),tpId=document.getElementById('tpId'),
loopStart=document.getElementById('loopStart'),envImg=document.getElementById('loopEnvImg'),
- envLbl=document.getElementById('loopEnvLbl'),
+ envLbl=document.getElementById('loopEnvLbl'),loopScore=document.getElementById('loopScore'),
+ loopNote=document.getElementById('loopNote'),
pager=document.querySelector('.task-pager');
+ function updateTaskContent(t){
+ CONTENT.read={
+ t:"01 — Read the task",
+ h:"Read the task contract, starter artifact, and public evaluator for "+t.env+".
"+
+ ""+t.files+" "
+ };
+ CONTENT.run={
+ t:"02 — Run experiments",
+ h:"Run the public development evaluator and collect "+t.metric+" as feedback.
"+
+ ""+t.run+"\nfeedback → agent "
+ };
+ CONTENT.compare={
+ t:"03 — Compare scores",
+ h:"Compare candidates by "+t.metric+". The hidden suite maps the selected starter to 0 and article reference to 100.
"+
+ "starter ──── 0\ncandidate ── ▲\nreference ── 100 "
+ };
+ CONTENT.edit={
+ t:"04 — Edit the policy",
+ h:""+t.edit+"
- "+t.before+" \n"+
+ "+ "+t.after+" illustrative task-specific edit "
+ };
+ }
function renderTask(n){
ti=(n+TASKS.length)%TASKS.length;
var t=TASKS[ti];
@@ -731,10 +808,15 @@ Research background
tpId.textContent=t.id+" ↗";
tpId.href="https://github.com/benchflow-ai/GenesisBench/tree/main/tasks/"+t.id;
loopStart.textContent=t.start;
+ loopScore.textContent=t.score;
+ loopNote.innerHTML=t.note+" "+t.noteLabel+" ; all nine task packages live "+
+ "on GitHub .";
+ updateTaskContent(t);
CONTENT.env={t:"Environment — "+t.env,h:t.pop};
if(envImg.getAttribute("src")!==t.img){envImg.src=t.img;envImg.alt=t.env+", pencil illustration";}
envLbl.textContent=t.lbl;
- if(current&¤t.dataset.k==="env"&&pop.classList.contains("show"))show(current);
+ if(current&&pop.classList.contains("show"))show(current);
}
if(pager){
document.getElementById('tpPrev').addEventListener('click',function(){renderTask(ti-1);});