yzzhao commited on
Commit
4adcba2
·
verified ·
1 Parent(s): fd21180

Show concise agent version labels

Browse files
Files changed (8) hide show
  1. agent-versions.json +10 -10
  2. app.js +2 -1
  3. hard/app.js +2 -2
  4. hard/index.html +1 -1
  5. index.html +1 -1
  6. manifest.json +11 -11
  7. plus/app.js +2 -2
  8. plus/index.html +1 -1
agent-versions.json CHANGED
@@ -3,7 +3,7 @@
3
  "sources": {
4
  "research/kinex-rle-20261104/source-identities.json": {
5
  "kinex": {
6
- "label": "Kinex 1.1.0 \u00b7 bb4a5cae \u00b7 src aa20d8e0",
7
  "revision": "bb4a5cae219acaf5241ec3e00c73e582c344601c",
8
  "version": "1.1.0",
9
  "source_fingerprint_sha256": "aa20d8e080a744412f9b76ef29d60e5c11613b118cfd4a15e7bd4b189ccb0ff4",
@@ -12,7 +12,7 @@
12
  },
13
  "research/agent-protocols-20261105/source-identities.json": {
14
  "kinex": {
15
- "label": "Kinex 1.1.0 \u00b7 bb4a5cae \u00b7 src dedaa454",
16
  "revision": "bb4a5cae219acaf5241ec3e00c73e582c344601c",
17
  "version": "1.1.0",
18
  "source_fingerprint_sha256": "dedaa45481ff62ff08684f77b91c9ea368740595f635fba074ed4c32fdda3842",
@@ -21,48 +21,48 @@
21
  },
22
  "research/robotwin-hard-20261101/source-identities.json": {
23
  "standalone-official": {
24
- "label": "Qwen3-VL-OFT 40k \u00b7 e9cdfc38",
25
  "revision": "e9cdfc38a0db968bf3a865bcb542d3d455952226",
26
  "detail": "StarVLA/Qwen3-VL-OFT-Robotwin2@e9cdfc38a0db968bf3a865bcb542d3d455952226"
27
  },
28
  "standalone-vlact-clean": {
29
- "label": "VLAct Qwen3-VL-OFT 50k \u00b7 dcf0f1d7",
30
  "revision": "dcf0f1d7239b28ae81a039c8d05bdfcd1d4792a5",
31
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_Finetune@dcf0f1d7239b28ae81a039c8d05bdfcd1d4792a5"
32
  },
33
  "standalone-vlact-all": {
34
- "label": "VLAct Qwen3-VL-OFT 100k \u00b7 999b37d4",
35
  "revision": "999b37d4d7c1bd0f5588f78d72a185f6f052bf83",
36
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_all_Finetune@999b37d4d7c1bd0f5588f78d72a185f6f052bf83"
37
  }
38
  },
39
  "robotwin-plus/20261101-native/source-identities.json": {
40
  "standalone-official": {
41
- "label": "Qwen3-VL-OFT 40k \u00b7 e9cdfc38",
42
  "revision": "e9cdfc38a0db968bf3a865bcb542d3d455952226",
43
  "detail": "StarVLA/Qwen3-VL-OFT-Robotwin2@e9cdfc38a0db968bf3a865bcb542d3d455952226"
44
  },
45
  "standalone-vlact-clean": {
46
- "label": "VLAct Qwen3-VL-OFT 50k \u00b7 dcf0f1d7",
47
  "revision": "dcf0f1d7239b28ae81a039c8d05bdfcd1d4792a5",
48
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_Finetune@dcf0f1d7239b28ae81a039c8d05bdfcd1d4792a5"
49
  },
50
  "standalone-vlact-all": {
51
- "label": "VLAct Qwen3-VL-OFT 100k \u00b7 999b37d4",
52
  "revision": "999b37d4d7c1bd0f5588f78d72a185f6f052bf83",
53
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_all_Finetune@999b37d4d7c1bd0f5588f78d72a185f6f052bf83"
54
  }
55
  },
56
  "robotwin-plus/20261101-native/recovery/receipt.json": {
57
  "standalone-vlact-all": {
58
- "label": "VLAct Qwen3-VL-OFT 100k \u00b7 999b37d4",
59
  "revision": "999b37d4d7c1bd0f5588f78d72a185f6f052bf83",
60
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_all_Finetune@999b37d4d7c1bd0f5588f78d72a185f6f052bf83"
61
  }
62
  },
63
  "research/oft-all140k-20261103/source-identities.json": {
64
  "standalone-oft-all140k": {
65
- "label": "Qwen3-VL-OFT 140k \u00b7 9fae4958",
66
  "revision": "9fae49581755f57944ec57f6787d214c0c0143f5",
67
  "detail": "StarVLA/Qwen3-VL-OFT-RoboTwin2-All@9fae49581755f57944ec57f6787d214c0c0143f5"
68
  }
 
3
  "sources": {
4
  "research/kinex-rle-20261104/source-identities.json": {
5
  "kinex": {
6
+ "label": "Kinex v1.1.0",
7
  "revision": "bb4a5cae219acaf5241ec3e00c73e582c344601c",
8
  "version": "1.1.0",
9
  "source_fingerprint_sha256": "aa20d8e080a744412f9b76ef29d60e5c11613b118cfd4a15e7bd4b189ccb0ff4",
 
12
  },
13
  "research/agent-protocols-20261105/source-identities.json": {
14
  "kinex": {
15
+ "label": "Kinex v1.1.0",
16
  "revision": "bb4a5cae219acaf5241ec3e00c73e582c344601c",
17
  "version": "1.1.0",
18
  "source_fingerprint_sha256": "dedaa45481ff62ff08684f77b91c9ea368740595f635fba074ed4c32fdda3842",
 
21
  },
22
  "research/robotwin-hard-20261101/source-identities.json": {
23
  "standalone-official": {
24
+ "label": "Qwen3-VL-OFT 40k",
25
  "revision": "e9cdfc38a0db968bf3a865bcb542d3d455952226",
26
  "detail": "StarVLA/Qwen3-VL-OFT-Robotwin2@e9cdfc38a0db968bf3a865bcb542d3d455952226"
27
  },
28
  "standalone-vlact-clean": {
29
+ "label": "VLAct Qwen3-VL-OFT 50k",
30
  "revision": "dcf0f1d7239b28ae81a039c8d05bdfcd1d4792a5",
31
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_Finetune@dcf0f1d7239b28ae81a039c8d05bdfcd1d4792a5"
32
  },
33
  "standalone-vlact-all": {
34
+ "label": "VLAct Qwen3-VL-OFT 100k",
35
  "revision": "999b37d4d7c1bd0f5588f78d72a185f6f052bf83",
36
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_all_Finetune@999b37d4d7c1bd0f5588f78d72a185f6f052bf83"
37
  }
38
  },
39
  "robotwin-plus/20261101-native/source-identities.json": {
40
  "standalone-official": {
41
+ "label": "Qwen3-VL-OFT 40k",
42
  "revision": "e9cdfc38a0db968bf3a865bcb542d3d455952226",
43
  "detail": "StarVLA/Qwen3-VL-OFT-Robotwin2@e9cdfc38a0db968bf3a865bcb542d3d455952226"
44
  },
45
  "standalone-vlact-clean": {
46
+ "label": "VLAct Qwen3-VL-OFT 50k",
47
  "revision": "dcf0f1d7239b28ae81a039c8d05bdfcd1d4792a5",
48
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_Finetune@dcf0f1d7239b28ae81a039c8d05bdfcd1d4792a5"
49
  },
50
  "standalone-vlact-all": {
51
+ "label": "VLAct Qwen3-VL-OFT 100k",
52
  "revision": "999b37d4d7c1bd0f5588f78d72a185f6f052bf83",
53
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_all_Finetune@999b37d4d7c1bd0f5588f78d72a185f6f052bf83"
54
  }
55
  },
56
  "robotwin-plus/20261101-native/recovery/receipt.json": {
57
  "standalone-vlact-all": {
58
+ "label": "VLAct Qwen3-VL-OFT 100k",
59
  "revision": "999b37d4d7c1bd0f5588f78d72a185f6f052bf83",
60
  "detail": "StarVLA/VLAct_Qwen3OFT_Robotwin_all_Finetune@999b37d4d7c1bd0f5588f78d72a185f6f052bf83"
61
  }
62
  },
63
  "research/oft-all140k-20261103/source-identities.json": {
64
  "standalone-oft-all140k": {
65
+ "label": "Qwen3-VL-OFT 140k",
66
  "revision": "9fae49581755f57944ec57f6787d214c0c0143f5",
67
  "detail": "StarVLA/Qwen3-VL-OFT-RoboTwin2-All@9fae49581755f57944ec57f6787d214c0c0143f5"
68
  }
app.js CHANGED
@@ -1,3 +1,4 @@
 
1
  'use strict';
2
  const plannedProtocol = (task, variant) => task.planned_protocol_by_variant?.[variant] || task.planned_protocol;
3
  // RoboEnv LIBERO raw counters include five initialization frames; RoboBridge counters do not.
@@ -189,7 +190,7 @@ function overviewDetail(task,ep) {
189
  if(!ep)return `<div class="pending-layout"><section class="pending-panel"><span class="pending-orbit">○</span><span class="eyebrow">${initializationBlocked?'Initialization blocked':'Awaiting evaluation'}</span><h2>${seedLimit?.exhausted?'No native-valid seed at or below '+number(seedLimit.max_seed):initializationBlocked?'Native seed 0 could not initialize':'No recorded episode yet'}</h2><p>${variantName(current.variant)} / ${esc(variantFor(current.variant).effort)}</p><div class="pending-facts">${metric(number(actionSteps(plannedProtocol(task,current.variant).max_control_steps,task)),'Campaign planned action steps')}${metric(String(task.planned_seed_by_variant?.[current.variant]??plannedProtocol(task,current.variant).seed),'Seed')}${metric(task.planned_protocol.control_frequency_hz+' Hz','Control frequency')}</div><p class="subtle">${seedLimit?.exhausted?'Native checks exhausted seeds 1–'+number(seedLimit.max_seed)+'. No Codex model attempt was launched. The original Kinex result is retained; this unavailable Codex task is excluded from success rates.':initializationBlocked?'No model was called. Seed 0 is retained by user decision; this is excluded from task success rates.':'This task is included in the planned catalog. Results and usage will appear after evaluation.'}</p></section>${instructionPanel(task,null)}</div>${seedLimit?.evidence_url?external(seedLimit.evidence_url,'Native seed selection evidence'):''}${nativeNote(task,null)}`;
190
  const m=ep.media||{},u=ep.usage||{},a=ep.analysis||{};
191
  const reason=a.evidence_note||a.failure_reason||a.cause||a.observed||a.visible_completion;
192
- return `<div class="episode-layout"><div>${videoPanel(ep)}<p class="media-note">${m.playback_kind==='official_action_index'?'Head + left wrist + right wrist · 4× official recording, not simulation time. Wrist views update only at inference boundaries. Native 320 × 240 views are upscaled for display; action-limit recordings omit the post-final-action frame.':ep.recording_mode==='native'?'Native camera recording · cached agent-resolution frames · '+(m.speed||1)+'× simulation speed.':ep.provider==='robobridge'&&m.playback_kind==='live_spectator'?'Independent spectator cameras · 720 px high per view · overview + wrist views · '+(m.speed||1)+'× simulation speed. Agent images retain native resolution and orientation.':m.playback_kind==='native_observation_snapshots'?'Native observation snapshots · 10 FPS playback; this is not simulation time.':`${m.source_fps?m.source_fps+' FPS source capture · ':''}${m.speed||1}× simulation speed.`} Session timestamps use wall time and are not synchronized to video frames.</p></div><aside class="result-panel panel"><div class="result-head"><span class="eyebrow">Native verdict</span>${badge(ep)}</div><div class="result-number">${number(actionSteps(ep.steps,ep))}<span> / ${number(actionSteps(ep.measured_protocol?.max_steps,ep))} action steps</span></div><div class="completion-track"><span style="width:${Math.min(100,(actionSteps(ep.steps,ep)||0)/(actionSteps(ep.measured_protocol?.max_steps,ep)||1)*100)}%"></span></div><dl class="facts"><dt>Termination</dt><dd>${esc(ep.verdict?.termination||'—')}</dd><dt>Execution</dt><dd>${esc(ep.execution?.status||'—')}</dd><dt>Evidence</dt><dd>${ep.valid?'Valid':'Invalid'}</dd><dt>Simulation time</dt><dd title="${esc(ep.timing?.simulation_time_note||'')}">${ep.timing&&ep.simulation_time_s==null?'Not recorded':elapsed(ep.simulation_time_s)}</dd><dt>Wall time</dt><dd title="${esc(ep.timing?.wall_time_scope||'')}">${elapsed(ep.wall_time_s)}</dd><dt>Estimated cost</dt><dd>${costValue(stats([ep]))}</dd><dt>Seed</dt><dd>${ep.seed}</dd><dt>Agent version</dt><dd>${ep.kinex_version?'Kinex '+esc(ep.kinex_version):ep.codex_version?'Codex '+esc(ep.codex_version):ep.claude_code_version?'Claude Code '+esc(ep.claude_code_version):esc(variantFor(ep.variant).agent)}</dd></dl><div class="result-links">${external(ep.links.verdict,'Native verdict')}${external(ep.links.provenance,'Source identity')}</div></aside></div>${nativeNote(task,ep)}${ep.post_terminal_review?`<aside class="native-note" data-post-terminal-note><span class="note-symbol">!</span><div><strong>Native episode completed; later provider error</strong><p>${esc(ep.post_terminal_review.reason)}</p>${external(ep.links.completion_review,"Terminal completion review")}</div></aside>`:""}${initializationNote?`<aside class="native-note" data-initialization-note><span class="note-symbol">!</span><div><strong>Measured initial-state variation</strong><p>${esc(initializationNote)}</p><a href="${esc(resultURL('initialization-comparison.json'))}" target="_blank">Paired initialization evidence ↗</a></div></aside>`:''}${ep.usage_review?`<aside class="native-note" data-usage-review-note><span class="note-symbol">i</span><div><strong>Context compaction included in usage</strong><p>${esc(ep.usage_review.reason)}</p>${external(ep.links.usage_review,"Usage reconciliation evidence")}</div></aside>`:""}${ep.native_clock_review?`<aside class="native-note" data-native-clock-note><span class="note-symbol">i</span><div><strong>Native physics clock differs from control-frame time</strong><p>${esc(ep.native_clock_review.reason)}</p>${external(ep.links.native_clock_review,"Native clock review")}</div></aside>`:""}${ep.collector_review&&ep.collector_review.schema!=="rlebench/collector-recovery/1"?`<aside class="native-note" data-collector-review-note><span class="note-symbol">i</span><div><strong>Host collector recovered; original model continued</strong><p>${esc(ep.collector_review.reason)}</p><p>Wall time uses the original session timestamps. Lost host setup timing is left unknown.</p><p>Host waiting protection was extended prospectively from 8 to 16 hours for this original execution; the native control budget is unchanged.</p>${external(ep.links.collector_review,"Collector recovery evidence")}</div></aside>`:""}${ep.provenance?.protocol_exception?.same_seed_comparison===false?`<aside class="native-note" data-seed-scope-note><span class="note-symbol">i</span><div><strong>Different evaluation seeds</strong><p>Codex uses seed ${number(ep.seed)} after native expert and initialization checks with no model calls during selection. ${ep.provenance.protocol_exception.max_seed!=null?'Seed selection was capped at '+number(ep.provenance.protocol_exception.max_seed)+'. ':''} Kinex retains its original seed ${number(ep.provenance.protocol_exception.preserved_kinex_seed)} result. Codex ran once; this is not a same-seed comparison.</p>${external(ep.links.seed_selection,'Native seed selection evidence')}</div></aside>`:''}${recordingComparisonNote(ep)}${episodeMetrics(ep)}<div class="detail-two-column">${instructionPanel(task,ep)}<section class="panel episode-analysis"><div class="section-heading"><div><h2>Episode notes</h2><p>Recorded observations and task-specific interpretation.</p></div></div><div class="analysis-body">${reason?`<p>${esc(reason)}</p>`:`<p>${esc(a.outcome||'The native result and original evidence are retained for this episode.')}</p>`}<details><summary>Read recorded analysis</summary>${Object.entries(a).filter(([k])=>k!=='preflight').map(([k,v])=>`<div class="analysis-entry"><span>${esc(k.replaceAll('_',' '))}</span><p>${esc(typeof v==='string'?v:JSON.stringify(v))}</p></div>`).join('')}</details><div class="inline-links">${external(ep.links.analysis,'Analysis JSON')}${external(ep.links.terminal_frame,'Terminal evidence')}</div></div></section></div><div class="detail-launchers"><a href="${taskRoute(task.key,ep.variant,'session')}"><span class="launcher-icon">≡</span><div><strong>Read the full session</strong><span>${number(ep.session_counts?.visible_events)} events · ${number(ep.session_counts?.observed_images)} observations</span></div>${arrow}</a><a href="${taskRoute(task.key,ep.variant,'artifacts')}"><span class="launcher-icon">⌘</span><div><strong>Inspect agent artifacts</strong><span>${ep.resources?.length||0} saved files · workspace & evidence</span></div>${arrow}</a></div>`;
193
  }
194
  function taskPage(key,variant,section='overview') {
195
  const task=data.tasks.find(t=>t.key===key);if(!task||!variantFor(variant)){notFound();return;}
 
1
+ const kinexDisplayVersion = ep => ep.kinex_version || (ep.links?.provenance?.endsWith('/research/kinex-vlact-rich-20261030/source-identities.json') ? '1.1.0' : null);
2
  'use strict';
3
  const plannedProtocol = (task, variant) => task.planned_protocol_by_variant?.[variant] || task.planned_protocol;
4
  // RoboEnv LIBERO raw counters include five initialization frames; RoboBridge counters do not.
 
190
  if(!ep)return `<div class="pending-layout"><section class="pending-panel"><span class="pending-orbit">○</span><span class="eyebrow">${initializationBlocked?'Initialization blocked':'Awaiting evaluation'}</span><h2>${seedLimit?.exhausted?'No native-valid seed at or below '+number(seedLimit.max_seed):initializationBlocked?'Native seed 0 could not initialize':'No recorded episode yet'}</h2><p>${variantName(current.variant)} / ${esc(variantFor(current.variant).effort)}</p><div class="pending-facts">${metric(number(actionSteps(plannedProtocol(task,current.variant).max_control_steps,task)),'Campaign planned action steps')}${metric(String(task.planned_seed_by_variant?.[current.variant]??plannedProtocol(task,current.variant).seed),'Seed')}${metric(task.planned_protocol.control_frequency_hz+' Hz','Control frequency')}</div><p class="subtle">${seedLimit?.exhausted?'Native checks exhausted seeds 1–'+number(seedLimit.max_seed)+'. No Codex model attempt was launched. The original Kinex result is retained; this unavailable Codex task is excluded from success rates.':initializationBlocked?'No model was called. Seed 0 is retained by user decision; this is excluded from task success rates.':'This task is included in the planned catalog. Results and usage will appear after evaluation.'}</p></section>${instructionPanel(task,null)}</div>${seedLimit?.evidence_url?external(seedLimit.evidence_url,'Native seed selection evidence'):''}${nativeNote(task,null)}`;
191
  const m=ep.media||{},u=ep.usage||{},a=ep.analysis||{};
192
  const reason=a.evidence_note||a.failure_reason||a.cause||a.observed||a.visible_completion;
193
+ return `<div class="episode-layout"><div>${videoPanel(ep)}<p class="media-note">${m.playback_kind==='official_action_index'?'Head + left wrist + right wrist · 4× official recording, not simulation time. Wrist views update only at inference boundaries. Native 320 × 240 views are upscaled for display; action-limit recordings omit the post-final-action frame.':ep.recording_mode==='native'?'Native camera recording · cached agent-resolution frames · '+(m.speed||1)+'× simulation speed.':ep.provider==='robobridge'&&m.playback_kind==='live_spectator'?'Independent spectator cameras · 720 px high per view · overview + wrist views · '+(m.speed||1)+'× simulation speed. Agent images retain native resolution and orientation.':m.playback_kind==='native_observation_snapshots'?'Native observation snapshots · 10 FPS playback; this is not simulation time.':`${m.source_fps?m.source_fps+' FPS source capture · ':''}${m.speed||1}× simulation speed.`} Session timestamps use wall time and are not synchronized to video frames.</p></div><aside class="result-panel panel"><div class="result-head"><span class="eyebrow">Native verdict</span>${badge(ep)}</div><div class="result-number">${number(actionSteps(ep.steps,ep))}<span> / ${number(actionSteps(ep.measured_protocol?.max_steps,ep))} action steps</span></div><div class="completion-track"><span style="width:${Math.min(100,(actionSteps(ep.steps,ep)||0)/(actionSteps(ep.measured_protocol?.max_steps,ep)||1)*100)}%"></span></div><dl class="facts"><dt>Termination</dt><dd>${esc(ep.verdict?.termination||'—')}</dd><dt>Execution</dt><dd>${esc(ep.execution?.status||'—')}</dd><dt>Evidence</dt><dd>${ep.valid?'Valid':'Invalid'}</dd><dt>Simulation time</dt><dd title="${esc(ep.timing?.simulation_time_note||'')}">${ep.timing&&ep.simulation_time_s==null?'Not recorded':elapsed(ep.simulation_time_s)}</dd><dt>Wall time</dt><dd title="${esc(ep.timing?.wall_time_scope||'')}">${elapsed(ep.wall_time_s)}</dd><dt>Estimated cost</dt><dd>${costValue(stats([ep]))}</dd><dt>Seed</dt><dd>${ep.seed}</dd><dt>Agent version</dt><dd>${kinexDisplayVersion(ep)?'Kinex v'+esc(kinexDisplayVersion(ep)):ep.codex_version?'Codex '+esc(ep.codex_version):ep.claude_code_version?'Claude Code '+esc(ep.claude_code_version):esc(variantFor(ep.variant).agent)}</dd></dl><div class="result-links">${external(ep.links.verdict,'Native verdict')}${external(ep.links.provenance,'Source identity')}</div></aside></div>${nativeNote(task,ep)}${ep.post_terminal_review?`<aside class="native-note" data-post-terminal-note><span class="note-symbol">!</span><div><strong>Native episode completed; later provider error</strong><p>${esc(ep.post_terminal_review.reason)}</p>${external(ep.links.completion_review,"Terminal completion review")}</div></aside>`:""}${initializationNote?`<aside class="native-note" data-initialization-note><span class="note-symbol">!</span><div><strong>Measured initial-state variation</strong><p>${esc(initializationNote)}</p><a href="${esc(resultURL('initialization-comparison.json'))}" target="_blank">Paired initialization evidence ↗</a></div></aside>`:''}${ep.usage_review?`<aside class="native-note" data-usage-review-note><span class="note-symbol">i</span><div><strong>Context compaction included in usage</strong><p>${esc(ep.usage_review.reason)}</p>${external(ep.links.usage_review,"Usage reconciliation evidence")}</div></aside>`:""}${ep.native_clock_review?`<aside class="native-note" data-native-clock-note><span class="note-symbol">i</span><div><strong>Native physics clock differs from control-frame time</strong><p>${esc(ep.native_clock_review.reason)}</p>${external(ep.links.native_clock_review,"Native clock review")}</div></aside>`:""}${ep.collector_review&&ep.collector_review.schema!=="rlebench/collector-recovery/1"?`<aside class="native-note" data-collector-review-note><span class="note-symbol">i</span><div><strong>Host collector recovered; original model continued</strong><p>${esc(ep.collector_review.reason)}</p><p>Wall time uses the original session timestamps. Lost host setup timing is left unknown.</p><p>Host waiting protection was extended prospectively from 8 to 16 hours for this original execution; the native control budget is unchanged.</p>${external(ep.links.collector_review,"Collector recovery evidence")}</div></aside>`:""}${ep.provenance?.protocol_exception?.same_seed_comparison===false?`<aside class="native-note" data-seed-scope-note><span class="note-symbol">i</span><div><strong>Different evaluation seeds</strong><p>Codex uses seed ${number(ep.seed)} after native expert and initialization checks with no model calls during selection. ${ep.provenance.protocol_exception.max_seed!=null?'Seed selection was capped at '+number(ep.provenance.protocol_exception.max_seed)+'. ':''} Kinex retains its original seed ${number(ep.provenance.protocol_exception.preserved_kinex_seed)} result. Codex ran once; this is not a same-seed comparison.</p>${external(ep.links.seed_selection,'Native seed selection evidence')}</div></aside>`:''}${recordingComparisonNote(ep)}${episodeMetrics(ep)}<div class="detail-two-column">${instructionPanel(task,ep)}<section class="panel episode-analysis"><div class="section-heading"><div><h2>Episode notes</h2><p>Recorded observations and task-specific interpretation.</p></div></div><div class="analysis-body">${reason?`<p>${esc(reason)}</p>`:`<p>${esc(a.outcome||'The native result and original evidence are retained for this episode.')}</p>`}<details><summary>Read recorded analysis</summary>${Object.entries(a).filter(([k])=>k!=='preflight').map(([k,v])=>`<div class="analysis-entry"><span>${esc(k.replaceAll('_',' '))}</span><p>${esc(typeof v==='string'?v:JSON.stringify(v))}</p></div>`).join('')}</details><div class="inline-links">${external(ep.links.analysis,'Analysis JSON')}${external(ep.links.terminal_frame,'Terminal evidence')}</div></div></section></div><div class="detail-launchers"><a href="${taskRoute(task.key,ep.variant,'session')}"><span class="launcher-icon">≡</span><div><strong>Read the full session</strong><span>${number(ep.session_counts?.visible_events)} events · ${number(ep.session_counts?.observed_images)} observations</span></div>${arrow}</a><a href="${taskRoute(task.key,ep.variant,'artifacts')}"><span class="launcher-icon">⌘</span><div><strong>Inspect agent artifacts</strong><span>${ep.resources?.length||0} saved files · workspace & evidence</span></div>${arrow}</a></div>`;
194
  }
195
  function taskPage(key,variant,section='overview') {
196
  const task=data.tasks.find(t=>t.key===key);if(!task||!variantFor(variant)){notFound();return;}
hard/app.js CHANGED
@@ -4,7 +4,7 @@ function recordedAgentVersion(ep) {
4
  return source?.[1]?.[ep.variant] || (ep.harness === 'kinex' ? source?.[1]?.kinex : null);
5
  }
6
  function agentVersion(ep) {
7
- return recordedAgentVersion(ep)?.label || (ep.kinex_version ? 'Kinex ' + ep.kinex_version : ep.codex_version ? 'Codex ' + ep.codex_version : ep.claude_code_version ? 'Claude Code ' + ep.claude_code_version : 'Version not recorded');
8
  }
9
  function plusSeedNote(task,variant,ep) {
10
  const selection=variant==='kinex'?(ep?.measured_protocol?.seed_selection||task.planned_protocol_by_variant?.kinex?.seed_selection):null;
@@ -215,7 +215,7 @@ function overviewDetail(task,ep) {
215
  if(!ep)return `<div class="pending-layout"><section class="pending-panel"><span class="pending-orbit">○</span><span class="eyebrow">${initializationBlocked?'Initialization blocked':'Awaiting evaluation'}</span><h2>${seedLimit?.exhausted?'No native-valid seed at or below '+number(seedLimit.max_seed):initializationBlocked?'Native seed 0 could not initialize':'No recorded episode yet'}</h2><p>${variantName(current.variant)} / ${esc(variantFor(current.variant).effort)}</p><div class="pending-facts">${metric(number(actionSteps(plannedProtocol(task,current.variant).max_control_steps,task)),'Campaign planned action steps')}${metric(String(task.planned_seed_by_variant?.[current.variant]??plannedProtocol(task,current.variant).seed),'Seed')}${metric(plannedProtocol(task,current.variant).control_frequency_hz+' Hz','Control frequency')}</div><p class="subtle">${seedLimit?.exhausted?'Native checks exhausted seeds 1–'+number(seedLimit.max_seed)+'. No Codex model attempt was launched. The original Kinex result is retained; this unavailable Codex task is excluded from success rates.':initializationBlocked?'No model was called. The authored seed could not initialize; a seed-selection decision is pending. This case is excluded from native success rates.':'This task is included in the planned catalog. Results and usage will appear after evaluation.'}</p></section>${instructionPanel(task,null)}</div>${seedLimit?.evidence_url?external(seedLimit.evidence_url,'Native seed selection evidence'):''}${nativeNote(task,null)}`;
216
  const m=ep.media||{},u=ep.usage||{},a=ep.analysis||{};
217
  const reason=a.evidence_note||a.failure_reason||a.cause||a.observed||a.visible_completion;
218
- return `<div class="episode-layout"><div>${videoPanel(ep)}<p class="media-note">${m.playback_kind==='official_action_index'?'Head + left wrist + right wrist · 4× official recording, not simulation time. Wrist views update only at inference boundaries. Native 320 × 240 views are upscaled for display; action-limit recordings omit the post-final-action frame.':ep.recording_mode==='native'?'Native camera recording · cached agent-resolution frames · '+(m.speed||1)+'× simulation speed.':ep.provider==='robobridge'&&m.playback_kind==='live_spectator'?'Independent spectator cameras · 720 px high per view · overview + wrist views · '+(m.speed||1)+'× simulation speed. Agent images retain native resolution and orientation.':m.playback_kind==='native_observation_snapshots'?'Native observation snapshots · 10 FPS playback; this is not simulation time.':`${m.source_fps?m.source_fps+' FPS source capture · ':''}${m.speed||1}× simulation speed.`} Session timestamps use wall time and are not synchronized to video frames.</p></div><aside class="result-panel panel"><div class="result-head"><span class="eyebrow">Native verdict</span>${badge(ep)}</div><div class="result-number">${number(actionSteps(ep.steps,ep))}<span> / ${number(actionSteps(ep.measured_protocol?.max_steps,ep))} action steps</span></div><div class="completion-track"><span style="width:${Math.min(100,(actionSteps(ep.steps,ep)||0)/(actionSteps(ep.measured_protocol?.max_steps,ep)||1)*100)}%"></span></div><dl class="facts"><dt>Termination</dt><dd>${esc(ep.verdict?.termination||ep.verdict?.reason||'—')}</dd><dt>Execution</dt><dd>${esc(ep.execution?.status||'—')}</dd><dt>Evidence</dt><dd>${ep.valid?'Valid':'Invalid'}</dd><dt>Simulation time</dt><dd title="${esc(ep.timing?.simulation_time_note||'')}">${ep.timing&&ep.simulation_time_s==null?'Not recorded':elapsed(ep.simulation_time_s)}</dd><dt>Wall time</dt><dd title="${esc(ep.timing?.wall_time_scope||'')}">${elapsed(ep.wall_time_s)}</dd><dt>Estimated cost</dt><dd>${costValue(stats([ep]))}</dd><dt>Seed</dt><dd>${ep.seed}</dd><dt>Agent version</dt><dd data-agent-version title="${esc(recordedAgentVersion(ep)?.detail || '')}">${esc(agentVersion(ep))}</dd></dl><div class="result-links">${external(ep.links.verdict,'Native verdict')}${external(ep.links.provenance,'Source identity')}</div></aside></div>${nativeNote(task,ep)}${ep.post_terminal_review?`<aside class="native-note" data-post-terminal-note><span class="note-symbol">!</span><div><strong>Native episode completed; later provider error</strong><p>${esc(ep.post_terminal_review.reason)}</p>${external(ep.links.completion_review,"Terminal completion review")}</div></aside>`:""}${initializationNote?`<aside class="native-note" data-initialization-note><span class="note-symbol">!</span><div><strong>Measured initial-state variation</strong><p>${esc(initializationNote)}</p><a href="${esc(resultURL('initialization-comparison.json'))}" target="_blank">Paired initialization evidence ↗</a></div></aside>`:''}${ep.usage_review?`<aside class="native-note" data-usage-review-note><span class="note-symbol">i</span><div><strong>${esc(ep.usage_review.title||'Usage accounting review')}</strong><p>${esc(ep.usage_review.reason)}</p>${external(ep.links.usage_review,"Usage reconciliation evidence")}</div></aside>`:""}${ep.native_clock_review?`<aside class="native-note" data-native-clock-note><span class="note-symbol">i</span><div><strong>Native physics clock differs from control-frame time</strong><p>${esc(ep.native_clock_review.reason)}</p>${external(ep.links.native_clock_review,"Native clock review")}</div></aside>`:""}${ep.collector_review&&ep.collector_review.schema!=="rlebench/collector-recovery/1"?`<aside class="native-note" data-collector-review-note><span class="note-symbol">i</span><div><strong>Host collector recovered; original model continued</strong><p>${esc(ep.collector_review.reason)}</p><p>Wall time uses the original session timestamps. Lost host setup timing is left unknown.</p><p>Host waiting protection was extended prospectively from 8 to 16 hours for this original execution; the native control budget is unchanged.</p>${external(ep.links.collector_review,"Collector recovery evidence")}</div></aside>`:""}${ep.provenance?.protocol_exception?.same_seed_comparison===false?`<aside class="native-note" data-seed-scope-note><span class="note-symbol">i</span><div><strong>Different evaluation seeds</strong><p>Codex uses seed ${number(ep.seed)} after native expert and initialization checks with no model calls during selection. ${ep.provenance.protocol_exception.max_seed!=null?'Seed selection was capped at '+number(ep.provenance.protocol_exception.max_seed)+'. ':''} Kinex retains its original seed ${number(ep.provenance.protocol_exception.preserved_kinex_seed)} result. Codex ran once; this is not a same-seed comparison.</p>${external(ep.links.seed_selection,'Native seed selection evidence')}</div></aside>`:''}${recordingComparisonNote(ep)}${episodeMetrics(ep)}<div class="detail-two-column">${instructionPanel(task,ep)}<section class="panel episode-analysis"><div class="section-heading"><div><h2>Episode notes</h2><p>Recorded observations and task-specific interpretation.</p></div></div><div class="analysis-body">${reason?`<p>${esc(reason)}</p>`:`<p>${esc(a.outcome||'The native result and original evidence are retained for this episode.')}</p>`}<details><summary>Read recorded analysis</summary>${Object.entries(a).filter(([k])=>k!=='preflight').map(([k,v])=>`<div class="analysis-entry"><span>${esc(k.replaceAll('_',' '))}</span><p>${esc(typeof v==='string'?v:JSON.stringify(v))}</p></div>`).join('')}</details><div class="inline-links">${external(ep.links.analysis,'Analysis JSON')}${external(ep.links.terminal_frame,'Terminal evidence')}</div></div></section></div><div class="detail-launchers"><a href="${taskRoute(task.key,ep.variant,'session')}"><span class="launcher-icon">≡</span><div><strong>Read the full session</strong><span>${number(ep.session_counts?.visible_events)} events · ${number(ep.session_counts?.observed_images)} observations</span></div>${arrow}</a><a href="${taskRoute(task.key,ep.variant,'artifacts')}"><span class="launcher-icon">⌘</span><div><strong>Inspect agent artifacts</strong><span>${ep.resources?.length||0} saved files · workspace & evidence</span></div>${arrow}</a></div>`;
219
  }
220
  function taskPage(key,variant,section='overview') {
221
  const task=data.tasks.find(t=>t.key===key);if(!task||!variantFor(variant)){notFound();return;}
 
4
  return source?.[1]?.[ep.variant] || (ep.harness === 'kinex' ? source?.[1]?.kinex : null);
5
  }
6
  function agentVersion(ep) {
7
+ return recordedAgentVersion(ep)?.label || (ep.kinex_version ? 'Kinex v' + ep.kinex_version : ep.codex_version ? 'Codex ' + ep.codex_version : ep.claude_code_version ? 'Claude Code ' + ep.claude_code_version : 'Version not recorded');
8
  }
9
  function plusSeedNote(task,variant,ep) {
10
  const selection=variant==='kinex'?(ep?.measured_protocol?.seed_selection||task.planned_protocol_by_variant?.kinex?.seed_selection):null;
 
215
  if(!ep)return `<div class="pending-layout"><section class="pending-panel"><span class="pending-orbit">○</span><span class="eyebrow">${initializationBlocked?'Initialization blocked':'Awaiting evaluation'}</span><h2>${seedLimit?.exhausted?'No native-valid seed at or below '+number(seedLimit.max_seed):initializationBlocked?'Native seed 0 could not initialize':'No recorded episode yet'}</h2><p>${variantName(current.variant)} / ${esc(variantFor(current.variant).effort)}</p><div class="pending-facts">${metric(number(actionSteps(plannedProtocol(task,current.variant).max_control_steps,task)),'Campaign planned action steps')}${metric(String(task.planned_seed_by_variant?.[current.variant]??plannedProtocol(task,current.variant).seed),'Seed')}${metric(plannedProtocol(task,current.variant).control_frequency_hz+' Hz','Control frequency')}</div><p class="subtle">${seedLimit?.exhausted?'Native checks exhausted seeds 1–'+number(seedLimit.max_seed)+'. No Codex model attempt was launched. The original Kinex result is retained; this unavailable Codex task is excluded from success rates.':initializationBlocked?'No model was called. The authored seed could not initialize; a seed-selection decision is pending. This case is excluded from native success rates.':'This task is included in the planned catalog. Results and usage will appear after evaluation.'}</p></section>${instructionPanel(task,null)}</div>${seedLimit?.evidence_url?external(seedLimit.evidence_url,'Native seed selection evidence'):''}${nativeNote(task,null)}`;
216
  const m=ep.media||{},u=ep.usage||{},a=ep.analysis||{};
217
  const reason=a.evidence_note||a.failure_reason||a.cause||a.observed||a.visible_completion;
218
+ return `<div class="episode-layout"><div>${videoPanel(ep)}<p class="media-note">${m.playback_kind==='official_action_index'?'Head + left wrist + right wrist · 4× official recording, not simulation time. Wrist views update only at inference boundaries. Native 320 × 240 views are upscaled for display; action-limit recordings omit the post-final-action frame.':ep.recording_mode==='native'?'Native camera recording · cached agent-resolution frames · '+(m.speed||1)+'× simulation speed.':ep.provider==='robobridge'&&m.playback_kind==='live_spectator'?'Independent spectator cameras · 720 px high per view · overview + wrist views · '+(m.speed||1)+'× simulation speed. Agent images retain native resolution and orientation.':m.playback_kind==='native_observation_snapshots'?'Native observation snapshots · 10 FPS playback; this is not simulation time.':`${m.source_fps?m.source_fps+' FPS source capture · ':''}${m.speed||1}× simulation speed.`} Session timestamps use wall time and are not synchronized to video frames.</p></div><aside class="result-panel panel"><div class="result-head"><span class="eyebrow">Native verdict</span>${badge(ep)}</div><div class="result-number">${number(actionSteps(ep.steps,ep))}<span> / ${number(actionSteps(ep.measured_protocol?.max_steps,ep))} action steps</span></div><div class="completion-track"><span style="width:${Math.min(100,(actionSteps(ep.steps,ep)||0)/(actionSteps(ep.measured_protocol?.max_steps,ep)||1)*100)}%"></span></div><dl class="facts"><dt>Termination</dt><dd>${esc(ep.verdict?.termination||ep.verdict?.reason||'—')}</dd><dt>Execution</dt><dd>${esc(ep.execution?.status||'—')}</dd><dt>Evidence</dt><dd>${ep.valid?'Valid':'Invalid'}</dd><dt>Simulation time</dt><dd title="${esc(ep.timing?.simulation_time_note||'')}">${ep.timing&&ep.simulation_time_s==null?'Not recorded':elapsed(ep.simulation_time_s)}</dd><dt>Wall time</dt><dd title="${esc(ep.timing?.wall_time_scope||'')}">${elapsed(ep.wall_time_s)}</dd><dt>Estimated cost</dt><dd>${costValue(stats([ep]))}</dd><dt>Seed</dt><dd>${ep.seed}</dd><dt>Agent version</dt><dd data-agent-version>${esc(agentVersion(ep))}</dd></dl><div class="result-links">${external(ep.links.verdict,'Native verdict')}${external(ep.links.provenance,'Source identity')}</div></aside></div>${nativeNote(task,ep)}${ep.post_terminal_review?`<aside class="native-note" data-post-terminal-note><span class="note-symbol">!</span><div><strong>Native episode completed; later provider error</strong><p>${esc(ep.post_terminal_review.reason)}</p>${external(ep.links.completion_review,"Terminal completion review")}</div></aside>`:""}${initializationNote?`<aside class="native-note" data-initialization-note><span class="note-symbol">!</span><div><strong>Measured initial-state variation</strong><p>${esc(initializationNote)}</p><a href="${esc(resultURL('initialization-comparison.json'))}" target="_blank">Paired initialization evidence ↗</a></div></aside>`:''}${ep.usage_review?`<aside class="native-note" data-usage-review-note><span class="note-symbol">i</span><div><strong>${esc(ep.usage_review.title||'Usage accounting review')}</strong><p>${esc(ep.usage_review.reason)}</p>${external(ep.links.usage_review,"Usage reconciliation evidence")}</div></aside>`:""}${ep.native_clock_review?`<aside class="native-note" data-native-clock-note><span class="note-symbol">i</span><div><strong>Native physics clock differs from control-frame time</strong><p>${esc(ep.native_clock_review.reason)}</p>${external(ep.links.native_clock_review,"Native clock review")}</div></aside>`:""}${ep.collector_review&&ep.collector_review.schema!=="rlebench/collector-recovery/1"?`<aside class="native-note" data-collector-review-note><span class="note-symbol">i</span><div><strong>Host collector recovered; original model continued</strong><p>${esc(ep.collector_review.reason)}</p><p>Wall time uses the original session timestamps. Lost host setup timing is left unknown.</p><p>Host waiting protection was extended prospectively from 8 to 16 hours for this original execution; the native control budget is unchanged.</p>${external(ep.links.collector_review,"Collector recovery evidence")}</div></aside>`:""}${ep.provenance?.protocol_exception?.same_seed_comparison===false?`<aside class="native-note" data-seed-scope-note><span class="note-symbol">i</span><div><strong>Different evaluation seeds</strong><p>Codex uses seed ${number(ep.seed)} after native expert and initialization checks with no model calls during selection. ${ep.provenance.protocol_exception.max_seed!=null?'Seed selection was capped at '+number(ep.provenance.protocol_exception.max_seed)+'. ':''} Kinex retains its original seed ${number(ep.provenance.protocol_exception.preserved_kinex_seed)} result. Codex ran once; this is not a same-seed comparison.</p>${external(ep.links.seed_selection,'Native seed selection evidence')}</div></aside>`:''}${recordingComparisonNote(ep)}${episodeMetrics(ep)}<div class="detail-two-column">${instructionPanel(task,ep)}<section class="panel episode-analysis"><div class="section-heading"><div><h2>Episode notes</h2><p>Recorded observations and task-specific interpretation.</p></div></div><div class="analysis-body">${reason?`<p>${esc(reason)}</p>`:`<p>${esc(a.outcome||'The native result and original evidence are retained for this episode.')}</p>`}<details><summary>Read recorded analysis</summary>${Object.entries(a).filter(([k])=>k!=='preflight').map(([k,v])=>`<div class="analysis-entry"><span>${esc(k.replaceAll('_',' '))}</span><p>${esc(typeof v==='string'?v:JSON.stringify(v))}</p></div>`).join('')}</details><div class="inline-links">${external(ep.links.analysis,'Analysis JSON')}${external(ep.links.terminal_frame,'Terminal evidence')}</div></div></section></div><div class="detail-launchers"><a href="${taskRoute(task.key,ep.variant,'session')}"><span class="launcher-icon">≡</span><div><strong>Read the full session</strong><span>${number(ep.session_counts?.visible_events)} events · ${number(ep.session_counts?.observed_images)} observations</span></div>${arrow}</a><a href="${taskRoute(task.key,ep.variant,'artifacts')}"><span class="launcher-icon">⌘</span><div><strong>Inspect agent artifacts</strong><span>${ep.resources?.length||0} saved files · workspace & evidence</span></div>${arrow}</a></div>`;
219
  }
220
  function taskPage(key,variant,section='overview') {
221
  const task=data.tasks.find(t=>t.key===key);if(!task||!variantFor(variant)){notFound();return;}
hard/index.html CHANGED
@@ -10,7 +10,7 @@
10
  <link rel="stylesheet" href="style.css?v=bd1a59147e1d">
11
  <script src="usage-metrics.js?v=330e92f8eb96" defer></script>
12
  <script src="../instruction-audit.js?v=7b5e9a418dec" defer></script>
13
- <script src="app.js?v=51b8d1175684" defer></script>
14
  <link rel="stylesheet" href="policy.css">
15
  <link rel="stylesheet" href="../instruction-audit.css?v=43163fc879ed">
16
  </head>
 
10
  <link rel="stylesheet" href="style.css?v=bd1a59147e1d">
11
  <script src="usage-metrics.js?v=330e92f8eb96" defer></script>
12
  <script src="../instruction-audit.js?v=7b5e9a418dec" defer></script>
13
+ <script src="app.js?v=0e5758b9a159" defer></script>
14
  <link rel="stylesheet" href="policy.css">
15
  <link rel="stylesheet" href="../instruction-audit.css?v=43163fc879ed">
16
  </head>
index.html CHANGED
@@ -10,7 +10,7 @@
10
  <link rel="stylesheet" href="style.css?v=bd1a59147e1d">
11
  <script src="usage-metrics.js?v=330e92f8eb96" defer></script>
12
  <script src="instruction-audit.js?v=7b5e9a418dec" defer></script>
13
- <script src="app.js?v=7000a70b1bf3" defer></script>
14
  <link rel="stylesheet" href="policy.css">
15
  <link rel="stylesheet" href="instruction-audit.css?v=43163fc879ed">
16
  </head>
 
10
  <link rel="stylesheet" href="style.css?v=bd1a59147e1d">
11
  <script src="usage-metrics.js?v=330e92f8eb96" defer></script>
12
  <script src="instruction-audit.js?v=7b5e9a418dec" defer></script>
13
+ <script src="app.js?v=6b99629785b5" defer></script>
14
  <link rel="stylesheet" href="policy.css">
15
  <link rel="stylesheet" href="instruction-audit.css?v=43163fc879ed">
16
  </head>
manifest.json CHANGED
@@ -11,8 +11,8 @@
11
  "sha256": "43163fc879edcc6dcc6e3c6bc1faa058d1ac3fd914fcb05302c5ca08640ef7d5"
12
  },
13
  "app.js": {
14
- "bytes": 87284,
15
- "sha256": "7000a70b1bf3bcf2e7a290e543436a8c438f07587068b086a4924a019c24503c"
16
  },
17
  "history-app.js": {
18
  "bytes": 87082,
@@ -44,7 +44,7 @@
44
  },
45
  "index.html": {
46
  "bytes": 3609,
47
- "sha256": "717b2cfd11db46b6a4b37443729ba34b8cfcc3b173b1e0ad36a911e983f7f07c"
48
  },
49
  "policy.css": {
50
  "bytes": 1067,
@@ -99,8 +99,8 @@
99
  "sha256": "a53108594a23b740fbb08623f6fffdda1d73608b552988a9ffda9f0944ae66a1"
100
  },
101
  "hard/app.js": {
102
- "bytes": 92850,
103
- "sha256": "51b8d11756845467afbe2b200cd0897fdc0da8121a5a3cb528e02fe636b51b58"
104
  },
105
  "hard/icon.svg": {
106
  "bytes": 725,
@@ -112,7 +112,7 @@
112
  },
113
  "hard/index.html": {
114
  "bytes": 3642,
115
- "sha256": "29998d662ff16f1d5bc52f8302bed395f1d703b969c9ea707ed83ad552dc9b01"
116
  },
117
  "hard/policy.css": {
118
  "bytes": 1067,
@@ -127,8 +127,8 @@
127
  "sha256": "6b93f6986803a39df7146b1220b68d5d63d36a2153c3062a767c0bbf65ca6f18"
128
  },
129
  "plus/app.js": {
130
- "bytes": 93619,
131
- "sha256": "339ed4fddebbe6a3040a1dc7be2f6d7b13e8024993258859470c4ec2f27b462f"
132
  },
133
  "plus/icon.svg": {
134
  "bytes": 725,
@@ -140,7 +140,7 @@
140
  },
141
  "plus/index.html": {
142
  "bytes": 3639,
143
- "sha256": "61f2a2cee213ffce3c296cd9883f4df62d9fedfffcb93c7e25027727e3eb89eb"
144
  },
145
  "plus/policy.css": {
146
  "bytes": 1067,
@@ -227,8 +227,8 @@
227
  "sha256": "a53108594a23b740fbb08623f6fffdda1d73608b552988a9ffda9f0944ae66a1"
228
  },
229
  "agent-versions.json": {
230
- "bytes": 3530,
231
- "sha256": "a4709e1c10386970c9e7c500a9e399ac4441778bffce0482c2c88f6ca2dc3cea"
232
  }
233
  },
234
  "hard_dataset": {
 
11
  "sha256": "43163fc879edcc6dcc6e3c6bc1faa058d1ac3fd914fcb05302c5ca08640ef7d5"
12
  },
13
  "app.js": {
14
+ "bytes": 87466,
15
+ "sha256": "6b99629785b504ad2b34849235d6a6d14e0839e6c631a2d256ed3c96b8d08fec"
16
  },
17
  "history-app.js": {
18
  "bytes": 87082,
 
44
  },
45
  "index.html": {
46
  "bytes": 3609,
47
+ "sha256": "3bd11d265dc8a07a29679becd3e6a1689c06da863d3a31ece22964df75548dfb"
48
  },
49
  "policy.css": {
50
  "bytes": 1067,
 
99
  "sha256": "a53108594a23b740fbb08623f6fffdda1d73608b552988a9ffda9f0944ae66a1"
100
  },
101
  "hard/app.js": {
102
+ "bytes": 92796,
103
+ "sha256": "0e5758b9a15983e4c5e0cfc30d3d425f48a218ebe1f5b6b2f2147ceac628b350"
104
  },
105
  "hard/icon.svg": {
106
  "bytes": 725,
 
112
  },
113
  "hard/index.html": {
114
  "bytes": 3642,
115
+ "sha256": "3584809bcaa6ab1b46a746e87568fa497025d44281789293d0e422779991dba8"
116
  },
117
  "hard/policy.css": {
118
  "bytes": 1067,
 
127
  "sha256": "6b93f6986803a39df7146b1220b68d5d63d36a2153c3062a767c0bbf65ca6f18"
128
  },
129
  "plus/app.js": {
130
+ "bytes": 93565,
131
+ "sha256": "e775bb627a8517b706af323b2865c064d6f51091e7a972f002da72186da5c849"
132
  },
133
  "plus/icon.svg": {
134
  "bytes": 725,
 
140
  },
141
  "plus/index.html": {
142
  "bytes": 3639,
143
+ "sha256": "a6b335732301ae656fddeaa432aab97e9175db6cacc6bd1d22d74367d0aaf188"
144
  },
145
  "plus/policy.css": {
146
  "bytes": 1067,
 
227
  "sha256": "a53108594a23b740fbb08623f6fffdda1d73608b552988a9ffda9f0944ae66a1"
228
  },
229
  "agent-versions.json": {
230
+ "bytes": 3332,
231
+ "sha256": "63cef0604b0afd9b163634068b1c8aaaf3285e60e4bed3809f1ebe0d60552b13"
232
  }
233
  },
234
  "hard_dataset": {
plus/app.js CHANGED
@@ -4,7 +4,7 @@ function recordedAgentVersion(ep) {
4
  return source?.[1]?.[ep.variant] || (ep.harness === 'kinex' ? source?.[1]?.kinex : null);
5
  }
6
  function agentVersion(ep) {
7
- return recordedAgentVersion(ep)?.label || (ep.kinex_version ? 'Kinex ' + ep.kinex_version : ep.codex_version ? 'Codex ' + ep.codex_version : ep.claude_code_version ? 'Claude Code ' + ep.claude_code_version : 'Version not recorded');
8
  }
9
  function plusSeedNote(task,variant,ep) {
10
  const selection=variant==='kinex'?(ep?.measured_protocol?.seed_selection||task.planned_protocol_by_variant?.kinex?.seed_selection):null;
@@ -214,7 +214,7 @@ function overviewDetail(task,ep) {
214
  if(!ep)return `<div class="pending-layout"><section class="pending-panel"><span class="pending-orbit">○</span><span class="eyebrow">${initializationBlocked?'Initialization blocked':'Awaiting evaluation'}</span><h2>${seedLimit?.exhausted?'No native-valid seed at or below '+number(seedLimit.max_seed):initializationBlocked?'Native seed 0 could not initialize':'No recorded episode yet'}</h2><p>${variantName(current.variant)} / ${esc(variantFor(current.variant).effort)}</p><div class="pending-facts">${metric(number(actionSteps(plannedProtocol(task,current.variant).max_control_steps,task)),'Campaign planned action steps')}${metric(String(task.planned_seed_by_variant?.[current.variant]??plannedProtocol(task,current.variant).seed),'Seed')}${metric(plannedProtocol(task,current.variant).control_frequency_hz+' Hz','Control frequency')}</div><p class="subtle">${seedLimit?.exhausted?'Native checks exhausted seeds 1–'+number(seedLimit.max_seed)+'. No Codex model attempt was launched. The original Kinex result is retained; this unavailable Codex task is excluded from success rates.':initializationBlocked?'No model was called. The authored seed could not initialize; a seed-selection decision is pending. This case is excluded from native success rates.':'This task is included in the planned catalog. Results and usage will appear after evaluation.'}</p></section>${instructionPanel(task,null)}</div>${seedLimit?.evidence_url?external(seedLimit.evidence_url,'Native seed selection evidence'):''}${nativeNote(task,null)}`;
215
  const m=ep.media||{},u=ep.usage||{},a=ep.analysis||{};
216
  const reason=a.evidence_note||a.failure_reason||a.cause||a.observed||a.visible_completion;
217
- return `<div class="episode-layout"><div>${videoPanel(ep)}<p class="media-note">${m.playback_kind==='official_action_index'?'Head + left wrist + right wrist · 4× official recording, not simulation time. Wrist views update only at inference boundaries. Native 320 × 240 views are upscaled for display; action-limit recordings omit the post-final-action frame.':ep.recording_mode==='native'?'Native camera recording · cached agent-resolution frames · '+(m.speed||1)+'× simulation speed.':ep.provider==='robobridge'&&m.playback_kind==='live_spectator'?'Independent spectator cameras · 720 px high per view · overview + wrist views · '+(m.speed||1)+'× simulation speed. Agent images retain native resolution and orientation.':m.playback_kind==='native_observation_snapshots'?'Native observation snapshots · 10 FPS playback; this is not simulation time.':`${m.source_fps?m.source_fps+' FPS source capture · ':''}${m.speed||1}× simulation speed.`} Session timestamps use wall time and are not synchronized to video frames.</p></div><aside class="result-panel panel"><div class="result-head"><span class="eyebrow">Native verdict</span>${badge(ep)}</div><div class="result-number">${number(actionSteps(ep.steps,ep))}<span> / ${number(actionSteps(ep.measured_protocol?.max_steps,ep))} action steps</span></div><div class="completion-track"><span style="width:${Math.min(100,(actionSteps(ep.steps,ep)||0)/(actionSteps(ep.measured_protocol?.max_steps,ep)||1)*100)}%"></span></div><dl class="facts"><dt>Termination</dt><dd>${esc(ep.verdict?.termination||ep.verdict?.reason||'—')}</dd><dt>Execution</dt><dd>${esc(ep.execution?.status||'—')}</dd><dt>Evidence</dt><dd>${ep.valid?'Valid':'Invalid'}</dd><dt>Simulation time</dt><dd title="${esc(ep.timing?.simulation_time_note||'')}">${ep.timing&&ep.simulation_time_s==null?'Not recorded':elapsed(ep.simulation_time_s)}</dd><dt>Wall time</dt><dd title="${esc(ep.timing?.wall_time_scope||'')}">${elapsed(ep.wall_time_s)}</dd><dt>Estimated cost</dt><dd>${costValue(stats([ep]))}</dd><dt>Seed</dt><dd>${ep.seed}</dd><dt>Agent version</dt><dd data-agent-version title="${esc(recordedAgentVersion(ep)?.detail || '')}">${esc(agentVersion(ep))}</dd></dl><div class="result-links">${external(ep.links.verdict,'Native verdict')}${external(ep.links.provenance,'Source identity')}</div></aside></div>${nativeNote(task,ep)}${ep.post_terminal_review?`<aside class="native-note" data-post-terminal-note><span class="note-symbol">!</span><div><strong>Native episode completed; later provider error</strong><p>${esc(ep.post_terminal_review.reason)}</p>${external(ep.links.completion_review,"Terminal completion review")}</div></aside>`:""}${initializationNote?`<aside class="native-note" data-initialization-note><span class="note-symbol">!</span><div><strong>Measured initial-state variation</strong><p>${esc(initializationNote)}</p><a href="${esc(resultURL('initialization-comparison.json'))}" target="_blank">Paired initialization evidence ↗</a></div></aside>`:''}${ep.usage_review?`<aside class="native-note" data-usage-review-note><span class="note-symbol">i</span><div><strong>${esc(ep.usage_review.title||'Usage accounting review')}</strong><p>${esc(ep.usage_review.reason)}</p>${external(ep.links.usage_review,"Usage reconciliation evidence")}</div></aside>`:""}${ep.native_clock_review?`<aside class="native-note" data-native-clock-note><span class="note-symbol">i</span><div><strong>Native physics clock differs from control-frame time</strong><p>${esc(ep.native_clock_review.reason)}</p>${external(ep.links.native_clock_review,"Native clock review")}</div></aside>`:""}${ep.collector_review&&ep.collector_review.schema!=="rlebench/collector-recovery/1"?`<aside class="native-note" data-collector-review-note><span class="note-symbol">i</span><div><strong>Host collector recovered; original model continued</strong><p>${esc(ep.collector_review.reason)}</p><p>Wall time uses the original session timestamps. Lost host setup timing is left unknown.</p><p>Host waiting protection was extended prospectively from 8 to 16 hours for this original execution; the native control budget is unchanged.</p>${external(ep.links.collector_review,"Collector recovery evidence")}</div></aside>`:""}${ep.provenance?.protocol_exception?.same_seed_comparison===false?`<aside class="native-note" data-seed-scope-note><span class="note-symbol">i</span><div><strong>Different evaluation seeds</strong><p>Codex uses seed ${number(ep.seed)} after native expert and initialization checks with no model calls during selection. ${ep.provenance.protocol_exception.max_seed!=null?'Seed selection was capped at '+number(ep.provenance.protocol_exception.max_seed)+'. ':''} Kinex retains its original seed ${number(ep.provenance.protocol_exception.preserved_kinex_seed)} result. Codex ran once; this is not a same-seed comparison.</p>${external(ep.links.seed_selection,'Native seed selection evidence')}</div></aside>`:''}${recordingComparisonNote(ep)}${episodeMetrics(ep)}<div class="detail-two-column">${instructionPanel(task,ep)}<section class="panel episode-analysis"><div class="section-heading"><div><h2>Episode notes</h2><p>Recorded observations and task-specific interpretation.</p></div></div><div class="analysis-body">${reason?`<p>${esc(reason)}</p>`:`<p>${esc(a.outcome||'The native result and original evidence are retained for this episode.')}</p>`}<details><summary>Read recorded analysis</summary>${Object.entries(a).filter(([k])=>k!=='preflight').map(([k,v])=>`<div class="analysis-entry"><span>${esc(k.replaceAll('_',' '))}</span><p>${esc(typeof v==='string'?v:JSON.stringify(v))}</p></div>`).join('')}</details><div class="inline-links">${external(ep.links.analysis,'Analysis JSON')}${external(ep.links.terminal_frame,'Terminal evidence')}</div></div></section></div><div class="detail-launchers"><a href="${taskRoute(task.key,ep.variant,'session')}"><span class="launcher-icon">≡</span><div><strong>Read the full session</strong><span>${number(ep.session_counts?.visible_events)} events · ${number(ep.session_counts?.observed_images)} observations</span></div>${arrow}</a><a href="${taskRoute(task.key,ep.variant,'artifacts')}"><span class="launcher-icon">⌘</span><div><strong>Inspect agent artifacts</strong><span>${ep.resources?.length||0} saved files · workspace & evidence</span></div>${arrow}</a></div>`;
218
  }
219
  function taskPage(key,variant,section='overview') {
220
  const task=data.tasks.find(t=>t.key===key);if(!task||!variantFor(variant)){notFound();return;}
 
4
  return source?.[1]?.[ep.variant] || (ep.harness === 'kinex' ? source?.[1]?.kinex : null);
5
  }
6
  function agentVersion(ep) {
7
+ return recordedAgentVersion(ep)?.label || (ep.kinex_version ? 'Kinex v' + ep.kinex_version : ep.codex_version ? 'Codex ' + ep.codex_version : ep.claude_code_version ? 'Claude Code ' + ep.claude_code_version : 'Version not recorded');
8
  }
9
  function plusSeedNote(task,variant,ep) {
10
  const selection=variant==='kinex'?(ep?.measured_protocol?.seed_selection||task.planned_protocol_by_variant?.kinex?.seed_selection):null;
 
214
  if(!ep)return `<div class="pending-layout"><section class="pending-panel"><span class="pending-orbit">○</span><span class="eyebrow">${initializationBlocked?'Initialization blocked':'Awaiting evaluation'}</span><h2>${seedLimit?.exhausted?'No native-valid seed at or below '+number(seedLimit.max_seed):initializationBlocked?'Native seed 0 could not initialize':'No recorded episode yet'}</h2><p>${variantName(current.variant)} / ${esc(variantFor(current.variant).effort)}</p><div class="pending-facts">${metric(number(actionSteps(plannedProtocol(task,current.variant).max_control_steps,task)),'Campaign planned action steps')}${metric(String(task.planned_seed_by_variant?.[current.variant]??plannedProtocol(task,current.variant).seed),'Seed')}${metric(plannedProtocol(task,current.variant).control_frequency_hz+' Hz','Control frequency')}</div><p class="subtle">${seedLimit?.exhausted?'Native checks exhausted seeds 1–'+number(seedLimit.max_seed)+'. No Codex model attempt was launched. The original Kinex result is retained; this unavailable Codex task is excluded from success rates.':initializationBlocked?'No model was called. The authored seed could not initialize; a seed-selection decision is pending. This case is excluded from native success rates.':'This task is included in the planned catalog. Results and usage will appear after evaluation.'}</p></section>${instructionPanel(task,null)}</div>${seedLimit?.evidence_url?external(seedLimit.evidence_url,'Native seed selection evidence'):''}${nativeNote(task,null)}`;
215
  const m=ep.media||{},u=ep.usage||{},a=ep.analysis||{};
216
  const reason=a.evidence_note||a.failure_reason||a.cause||a.observed||a.visible_completion;
217
+ return `<div class="episode-layout"><div>${videoPanel(ep)}<p class="media-note">${m.playback_kind==='official_action_index'?'Head + left wrist + right wrist · 4× official recording, not simulation time. Wrist views update only at inference boundaries. Native 320 × 240 views are upscaled for display; action-limit recordings omit the post-final-action frame.':ep.recording_mode==='native'?'Native camera recording · cached agent-resolution frames · '+(m.speed||1)+'× simulation speed.':ep.provider==='robobridge'&&m.playback_kind==='live_spectator'?'Independent spectator cameras · 720 px high per view · overview + wrist views · '+(m.speed||1)+'× simulation speed. Agent images retain native resolution and orientation.':m.playback_kind==='native_observation_snapshots'?'Native observation snapshots · 10 FPS playback; this is not simulation time.':`${m.source_fps?m.source_fps+' FPS source capture · ':''}${m.speed||1}× simulation speed.`} Session timestamps use wall time and are not synchronized to video frames.</p></div><aside class="result-panel panel"><div class="result-head"><span class="eyebrow">Native verdict</span>${badge(ep)}</div><div class="result-number">${number(actionSteps(ep.steps,ep))}<span> / ${number(actionSteps(ep.measured_protocol?.max_steps,ep))} action steps</span></div><div class="completion-track"><span style="width:${Math.min(100,(actionSteps(ep.steps,ep)||0)/(actionSteps(ep.measured_protocol?.max_steps,ep)||1)*100)}%"></span></div><dl class="facts"><dt>Termination</dt><dd>${esc(ep.verdict?.termination||ep.verdict?.reason||'—')}</dd><dt>Execution</dt><dd>${esc(ep.execution?.status||'—')}</dd><dt>Evidence</dt><dd>${ep.valid?'Valid':'Invalid'}</dd><dt>Simulation time</dt><dd title="${esc(ep.timing?.simulation_time_note||'')}">${ep.timing&&ep.simulation_time_s==null?'Not recorded':elapsed(ep.simulation_time_s)}</dd><dt>Wall time</dt><dd title="${esc(ep.timing?.wall_time_scope||'')}">${elapsed(ep.wall_time_s)}</dd><dt>Estimated cost</dt><dd>${costValue(stats([ep]))}</dd><dt>Seed</dt><dd>${ep.seed}</dd><dt>Agent version</dt><dd data-agent-version>${esc(agentVersion(ep))}</dd></dl><div class="result-links">${external(ep.links.verdict,'Native verdict')}${external(ep.links.provenance,'Source identity')}</div></aside></div>${nativeNote(task,ep)}${ep.post_terminal_review?`<aside class="native-note" data-post-terminal-note><span class="note-symbol">!</span><div><strong>Native episode completed; later provider error</strong><p>${esc(ep.post_terminal_review.reason)}</p>${external(ep.links.completion_review,"Terminal completion review")}</div></aside>`:""}${initializationNote?`<aside class="native-note" data-initialization-note><span class="note-symbol">!</span><div><strong>Measured initial-state variation</strong><p>${esc(initializationNote)}</p><a href="${esc(resultURL('initialization-comparison.json'))}" target="_blank">Paired initialization evidence ↗</a></div></aside>`:''}${ep.usage_review?`<aside class="native-note" data-usage-review-note><span class="note-symbol">i</span><div><strong>${esc(ep.usage_review.title||'Usage accounting review')}</strong><p>${esc(ep.usage_review.reason)}</p>${external(ep.links.usage_review,"Usage reconciliation evidence")}</div></aside>`:""}${ep.native_clock_review?`<aside class="native-note" data-native-clock-note><span class="note-symbol">i</span><div><strong>Native physics clock differs from control-frame time</strong><p>${esc(ep.native_clock_review.reason)}</p>${external(ep.links.native_clock_review,"Native clock review")}</div></aside>`:""}${ep.collector_review&&ep.collector_review.schema!=="rlebench/collector-recovery/1"?`<aside class="native-note" data-collector-review-note><span class="note-symbol">i</span><div><strong>Host collector recovered; original model continued</strong><p>${esc(ep.collector_review.reason)}</p><p>Wall time uses the original session timestamps. Lost host setup timing is left unknown.</p><p>Host waiting protection was extended prospectively from 8 to 16 hours for this original execution; the native control budget is unchanged.</p>${external(ep.links.collector_review,"Collector recovery evidence")}</div></aside>`:""}${ep.provenance?.protocol_exception?.same_seed_comparison===false?`<aside class="native-note" data-seed-scope-note><span class="note-symbol">i</span><div><strong>Different evaluation seeds</strong><p>Codex uses seed ${number(ep.seed)} after native expert and initialization checks with no model calls during selection. ${ep.provenance.protocol_exception.max_seed!=null?'Seed selection was capped at '+number(ep.provenance.protocol_exception.max_seed)+'. ':''} Kinex retains its original seed ${number(ep.provenance.protocol_exception.preserved_kinex_seed)} result. Codex ran once; this is not a same-seed comparison.</p>${external(ep.links.seed_selection,'Native seed selection evidence')}</div></aside>`:''}${recordingComparisonNote(ep)}${episodeMetrics(ep)}<div class="detail-two-column">${instructionPanel(task,ep)}<section class="panel episode-analysis"><div class="section-heading"><div><h2>Episode notes</h2><p>Recorded observations and task-specific interpretation.</p></div></div><div class="analysis-body">${reason?`<p>${esc(reason)}</p>`:`<p>${esc(a.outcome||'The native result and original evidence are retained for this episode.')}</p>`}<details><summary>Read recorded analysis</summary>${Object.entries(a).filter(([k])=>k!=='preflight').map(([k,v])=>`<div class="analysis-entry"><span>${esc(k.replaceAll('_',' '))}</span><p>${esc(typeof v==='string'?v:JSON.stringify(v))}</p></div>`).join('')}</details><div class="inline-links">${external(ep.links.analysis,'Analysis JSON')}${external(ep.links.terminal_frame,'Terminal evidence')}</div></div></section></div><div class="detail-launchers"><a href="${taskRoute(task.key,ep.variant,'session')}"><span class="launcher-icon">≡</span><div><strong>Read the full session</strong><span>${number(ep.session_counts?.visible_events)} events · ${number(ep.session_counts?.observed_images)} observations</span></div>${arrow}</a><a href="${taskRoute(task.key,ep.variant,'artifacts')}"><span class="launcher-icon">⌘</span><div><strong>Inspect agent artifacts</strong><span>${ep.resources?.length||0} saved files · workspace & evidence</span></div>${arrow}</a></div>`;
218
  }
219
  function taskPage(key,variant,section='overview') {
220
  const task=data.tasks.find(t=>t.key===key);if(!task||!variantFor(variant)){notFound();return;}
plus/index.html CHANGED
@@ -10,7 +10,7 @@
10
  <link rel="stylesheet" href="style.css?v=bd1a59147e1d">
11
  <script src="usage-metrics.js?v=330e92f8eb96" defer></script>
12
  <script src="../instruction-audit.js?v=7b5e9a418dec" defer></script>
13
- <script src="app.js?v=339ed4fddebb" defer></script>
14
  <link rel="stylesheet" href="policy.css">
15
  <link rel="stylesheet" href="../instruction-audit.css?v=43163fc879ed">
16
  </head>
 
10
  <link rel="stylesheet" href="style.css?v=bd1a59147e1d">
11
  <script src="usage-metrics.js?v=330e92f8eb96" defer></script>
12
  <script src="../instruction-audit.js?v=7b5e9a418dec" defer></script>
13
+ <script src="app.js?v=e775bb627a85" defer></script>
14
  <link rel="stylesheet" href="policy.css">
15
  <link rel="stylesheet" href="../instruction-audit.css?v=43163fc879ed">
16
  </head>