cy0307 commited on
Commit
697d349
·
verified ·
1 Parent(s): 149cadc

Publish Ropedia Xperience-10M task baseline cards

Browse files
Files changed (36) hide show
  1. PROJECT_README.md +22 -0
  2. README.md +2 -0
  3. data/mirror_parity.json +636 -160
  4. data/publication_audit.json +19 -16
  5. data/single_episode_explorer.json +0 -0
  6. data/website_integrity.json +80 -21
  7. docs/data/mirror_parity.json +305 -167
  8. docs/data/publication_audit.json +120 -24
  9. docs/data/single_episode_explorer.json +0 -0
  10. docs/data/website_integrity.json +80 -21
  11. docs/index.html +4 -0
  12. docs/single_episode_explorer.html +0 -0
  13. index.html +4 -0
  14. metrics/mirror_parity.json +419 -30
  15. metrics/publication_audit.json +11 -11
  16. metrics/single_episode_explorer.json +0 -0
  17. metrics/website_integrity.json +36 -17
  18. results/single_episode_diagnostics/README.md +23 -0
  19. results/single_episode_diagnostics/alignment_stress/ALIGNMENT_STRESS_REPORT.md +17 -0
  20. results/single_episode_diagnostics/alignment_stress/alignment_shift_curves.svg +86 -0
  21. results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv +46 -0
  22. results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json +6 -0
  23. results/single_episode_diagnostics/modality_ablation/MODALITY_ABLATION_REPORT.md +26 -0
  24. results/single_episode_diagnostics/modality_ablation/ablation_matrix.svg +243 -0
  25. results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv +97 -0
  26. results/single_episode_diagnostics/modality_ablation/ablation_summary.json +31 -0
  27. results/single_episode_diagnostics/object_labels/object_vocab.json +42 -0
  28. results/single_episode_diagnostics/object_labels/window_object_labels.csv +1162 -0
  29. results/single_episode_diagnostics/provenance.json +142 -0
  30. results/single_episode_diagnostics/timeline_overlay/TIMELINE_OVERLAY_REPORT.md +17 -0
  31. results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv +0 -0
  32. results/single_episode_diagnostics/timeline_overlay/timeline_overlay.svg +0 -0
  33. scripts/build_single_episode_explorer.py +565 -0
  34. scripts/single_episode_diagnostics.py +1254 -0
  35. scripts/validate_mirror_parity.py +36 -0
  36. single_episode_explorer.html +0 -0
PROJECT_README.md CHANGED
@@ -92,6 +92,7 @@ multi-episode held-out model metrics:
92
  | Research takeaways | `RESEARCH_TAKEAWAYS.md`, `docs/data/research_takeaways.json`, `scripts/build_research_takeaways.py` | summarizes result interpretation from committed metrics and identifies which experiments need held-out episodes |
93
  | Research roadmap | `RESEARCH_ROADMAP.md`, `docs/data/research_roadmap.json` | stages the path from public-sample task development to multi-episode held-out evaluation and larger omni-model extensions |
94
  | 12-task suite | `scripts/episode_task_suite.py`, per-task `metrics.json`, predictions | chronological single-episode split |
 
95
  | Neural heads | `scripts/neural_task_models.py`, `results/episode_task_suite/neural_mlp/` | compact MLP heads, not a foundation model |
96
  | Research directions | `research_direction_taxonomy.json`, extension probe results | direct/proxy/diagnostic evidence, not full solutions |
97
  | Task surface integrity | `docs/data/task_surface_integrity.json`, `scripts/validate_task_surface.py` | public task cards stay human-readable, thumbnail-backed, and wired to the scrub/play walkthrough storyboard |
@@ -803,6 +804,27 @@ The strongest single-episode self-supervised signal is cross-modal retrieval:
803
  motion/IMU/camera features retrieve matching depth/video windows substantially
804
  better than random.
805
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
806
  ## Reproducibility Check
807
 
808
  I re-ran the full pipeline from the local raw public sample into an ignored
 
92
  | Research takeaways | `RESEARCH_TAKEAWAYS.md`, `docs/data/research_takeaways.json`, `scripts/build_research_takeaways.py` | summarizes result interpretation from committed metrics and identifies which experiments need held-out episodes |
93
  | Research roadmap | `RESEARCH_ROADMAP.md`, `docs/data/research_roadmap.json` | stages the path from public-sample task development to multi-episode held-out evaluation and larger omni-model extensions |
94
  | 12-task suite | `scripts/episode_task_suite.py`, per-task `metrics.json`, predictions | chronological single-episode split |
95
+ | Single-episode diagnostics | `scripts/single_episode_diagnostics.py`, `results/single_episode_diagnostics/`, `docs/single_episode_explorer.html` | modality ablations, timeline overlay, object-label export, alignment stress tests, and interactive window inspection from one sample episode |
96
  | Neural heads | `scripts/neural_task_models.py`, `results/episode_task_suite/neural_mlp/` | compact MLP heads, not a foundation model |
97
  | Research directions | `research_direction_taxonomy.json`, extension probe results | direct/proxy/diagnostic evidence, not full solutions |
98
  | Task surface integrity | `docs/data/task_surface_integrity.json`, `scripts/validate_task_surface.py` | public task cards stay human-readable, thumbnail-backed, and wired to the scrub/play walkthrough storyboard |
 
804
  motion/IMU/camera features retrieve matching depth/video windows substantially
805
  better than random.
806
 
807
+ ## Single-Episode Diagnostics and Explorer
808
+
809
+ While waiting for broader Xperience-10M access, the repo now includes an
810
+ artifact-driven diagnostics pass over the public sample episode:
811
+
812
+ - `results/single_episode_diagnostics/object_labels/window_object_labels.csv`
813
+ exports 1,161 real window-level object-label sets from `annotation.hdf5`.
814
+ - `results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv`
815
+ recomputes all 96 task/modality cells, including object relevance.
816
+ - `results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv`
817
+ aligns 2,079 existing prediction rows back to the episode timeline.
818
+ - `results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv`
819
+ evaluates cross-modal retrieval under explicit time shifts.
820
+ - `docs/single_episode_explorer.html` is a static interactive page for
821
+ inspecting window labels, objects, predictions, feature-block statistics, and
822
+ diagnostic scores.
823
+
824
+ These are single-episode research diagnostics. They are useful for auditing
825
+ task definitions, feature behavior, and model errors before scaling to more
826
+ episodes; they are not reported as multi-episode benchmark results.
827
+
828
  ## Reproducibility Check
829
 
830
  I re-ran the full pipeline from the local raw public sample into an ignored
README.md CHANGED
@@ -95,6 +95,7 @@ For a short first-reader path, open `PROJECT_BRIEF.md` or
95
  | Release checks | `QUALITY_GATES.md`, `metrics/quality_gates.json` |
96
  | Public project surface | `PUBLIC_SURFACE_QA.md`, `metrics/public_surface_qa.json` |
97
  | Mirror parity | `metrics/mirror_parity.json` |
 
98
 
99
  ## Current Scope
100
 
@@ -111,6 +112,7 @@ For a short first-reader path, open `PROJECT_BRIEF.md` or
111
  | Public project surface | `PUBLIC_SURFACE_QA.md`, `metrics/public_surface_qa.json` | repo, website, and Hugging Face card consistency |
112
  | Task surface | `metrics/task_surface_integrity.json`, `scripts/validate_task_surface.py` | readable task names, modality thumbnails, and walkthrough wiring |
113
  | Rendered website check | `RENDERED_SITE_CHECK.md`, `metrics/rendered_site_check.json`, `scripts/build_rendered_site_check.py` | browser-level load, tab, walkthrough deep-link, control-click, and console-health check |
 
114
 
115
  ## Metrics Snapshot
116
 
 
95
  | Release checks | `QUALITY_GATES.md`, `metrics/quality_gates.json` |
96
  | Public project surface | `PUBLIC_SURFACE_QA.md`, `metrics/public_surface_qa.json` |
97
  | Mirror parity | `metrics/mirror_parity.json` |
98
+ | Single-episode explorer | `single_episode_explorer.html`, `metrics/single_episode_explorer.json` |
99
 
100
  ## Current Scope
101
 
 
112
  | Public project surface | `PUBLIC_SURFACE_QA.md`, `metrics/public_surface_qa.json` | repo, website, and Hugging Face card consistency |
113
  | Task surface | `metrics/task_surface_integrity.json`, `scripts/validate_task_surface.py` | readable task names, modality thumbnails, and walkthrough wiring |
114
  | Rendered website check | `RENDERED_SITE_CHECK.md`, `metrics/rendered_site_check.json`, `scripts/build_rendered_site_check.py` | browser-level load, tab, walkthrough deep-link, control-click, and console-health check |
115
+ | Single-episode diagnostics | `results/single_episode_diagnostics/`, `single_episode_explorer.html` | window labels, object sets, predictions, feature-block statistics, and diagnostic probes |
116
 
117
  ## Metrics Snapshot
118
 
data/mirror_parity.json CHANGED
@@ -1,9 +1,9 @@
1
  {
2
  "status": "pass",
3
- "generated_at_utc": "2026-06-02T17:37:17+00:00",
4
  "hf_root": "hf_publish",
5
  "summary": {
6
- "group_count": 72,
7
  "failure_count": 0,
8
  "failures_by_surface": {}
9
  },
@@ -24,6 +24,10 @@
24
  "name": "repo_hf_website_html_parity",
25
  "status": "pass"
26
  },
 
 
 
 
27
  {
28
  "name": "repo_hf_quality_doc_parity",
29
  "status": "pass"
@@ -36,27 +40,27 @@
36
  "local": {
37
  "path": "repo:docs/data/artifact_index.json",
38
  "exists": true,
39
- "bytes": 27749,
40
- "sha256": "5a5a8f60eb75d1880e9654e61a4f55e2b0b9e0caea2540d47211ebea24ba9f84"
41
  },
42
  "mirrors": {
43
  "hf_space": {
44
  "path": "hf_space:data/artifact_index.json",
45
  "exists": true,
46
- "bytes": 27749,
47
- "sha256": "5a5a8f60eb75d1880e9654e61a4f55e2b0b9e0caea2540d47211ebea24ba9f84"
48
  },
49
  "hf_artifacts": {
50
  "path": "hf_artifacts:docs/data/artifact_index.json",
51
  "exists": true,
52
- "bytes": 27749,
53
- "sha256": "5a5a8f60eb75d1880e9654e61a4f55e2b0b9e0caea2540d47211ebea24ba9f84"
54
  },
55
  "hf_model": {
56
  "path": "hf_model:metrics/artifact_index.json",
57
  "exists": true,
58
- "bytes": 27749,
59
- "sha256": "5a5a8f60eb75d1880e9654e61a4f55e2b0b9e0caea2540d47211ebea24ba9f84"
60
  }
61
  },
62
  "failures": []
@@ -98,27 +102,27 @@
98
  "local": {
99
  "path": "repo:docs/data/evidence_contract.json",
100
  "exists": true,
101
- "bytes": 11570,
102
- "sha256": "8420bf3fb405e79dd5f02d23009fe695f2f49008706a645018b6413c4e43a5fa"
103
  },
104
  "mirrors": {
105
  "hf_space": {
106
  "path": "hf_space:data/evidence_contract.json",
107
  "exists": true,
108
- "bytes": 11570,
109
- "sha256": "8420bf3fb405e79dd5f02d23009fe695f2f49008706a645018b6413c4e43a5fa"
110
  },
111
  "hf_artifacts": {
112
  "path": "hf_artifacts:docs/data/evidence_contract.json",
113
  "exists": true,
114
- "bytes": 11570,
115
- "sha256": "8420bf3fb405e79dd5f02d23009fe695f2f49008706a645018b6413c4e43a5fa"
116
  },
117
  "hf_model": {
118
  "path": "hf_model:metrics/evidence_contract.json",
119
  "exists": true,
120
- "bytes": 11570,
121
- "sha256": "8420bf3fb405e79dd5f02d23009fe695f2f49008706a645018b6413c4e43a5fa"
122
  }
123
  },
124
  "failures": []
@@ -284,27 +288,27 @@
284
  "local": {
285
  "path": "repo:docs/data/project_manifest.json",
286
  "exists": true,
287
- "bytes": 4468,
288
- "sha256": "a5fd25374d967c7155e8d3c404d9b520d804c7a0de5c84c4f725156155f421b1"
289
  },
290
  "mirrors": {
291
  "hf_space": {
292
  "path": "hf_space:data/project_manifest.json",
293
  "exists": true,
294
- "bytes": 4468,
295
- "sha256": "a5fd25374d967c7155e8d3c404d9b520d804c7a0de5c84c4f725156155f421b1"
296
  },
297
  "hf_artifacts": {
298
  "path": "hf_artifacts:docs/data/project_manifest.json",
299
  "exists": true,
300
- "bytes": 4468,
301
- "sha256": "a5fd25374d967c7155e8d3c404d9b520d804c7a0de5c84c4f725156155f421b1"
302
  },
303
  "hf_model": {
304
  "path": "hf_model:metrics/project_manifest.json",
305
  "exists": true,
306
- "bytes": 4468,
307
- "sha256": "a5fd25374d967c7155e8d3c404d9b520d804c7a0de5c84c4f725156155f421b1"
308
  }
309
  },
310
  "failures": []
@@ -377,27 +381,27 @@
377
  "local": {
378
  "path": "repo:docs/data/publication_audit.json",
379
  "exists": true,
380
- "bytes": 6962,
381
- "sha256": "6bfc32e32da373ee70b0b928b6e632b76a8c6299b87bdf27272b58f14bb7c8e3"
382
  },
383
  "mirrors": {
384
  "hf_space": {
385
  "path": "hf_space:data/publication_audit.json",
386
  "exists": true,
387
- "bytes": 6962,
388
- "sha256": "6bfc32e32da373ee70b0b928b6e632b76a8c6299b87bdf27272b58f14bb7c8e3"
389
  },
390
  "hf_artifacts": {
391
  "path": "hf_artifacts:docs/data/publication_audit.json",
392
  "exists": true,
393
- "bytes": 6962,
394
- "sha256": "6bfc32e32da373ee70b0b928b6e632b76a8c6299b87bdf27272b58f14bb7c8e3"
395
  },
396
  "hf_model": {
397
  "path": "hf_model:metrics/publication_audit.json",
398
  "exists": true,
399
- "bytes": 6962,
400
- "sha256": "6bfc32e32da373ee70b0b928b6e632b76a8c6299b87bdf27272b58f14bb7c8e3"
401
  }
402
  },
403
  "failures": []
@@ -408,27 +412,27 @@
408
  "local": {
409
  "path": "repo:docs/data/public_surface_qa.json",
410
  "exists": true,
411
- "bytes": 5455,
412
- "sha256": "546ad4fcccaebe19529a846a6f18ad8edec93a3720d2e7244641b999db97302f"
413
  },
414
  "mirrors": {
415
  "hf_space": {
416
  "path": "hf_space:data/public_surface_qa.json",
417
  "exists": true,
418
- "bytes": 5455,
419
- "sha256": "546ad4fcccaebe19529a846a6f18ad8edec93a3720d2e7244641b999db97302f"
420
  },
421
  "hf_artifacts": {
422
  "path": "hf_artifacts:docs/data/public_surface_qa.json",
423
  "exists": true,
424
- "bytes": 5455,
425
- "sha256": "546ad4fcccaebe19529a846a6f18ad8edec93a3720d2e7244641b999db97302f"
426
  },
427
  "hf_model": {
428
  "path": "hf_model:metrics/public_surface_qa.json",
429
  "exists": true,
430
- "bytes": 5455,
431
- "sha256": "546ad4fcccaebe19529a846a6f18ad8edec93a3720d2e7244641b999db97302f"
432
  }
433
  },
434
  "failures": []
@@ -439,27 +443,58 @@
439
  "local": {
440
  "path": "repo:docs/data/quality_gates.json",
441
  "exists": true,
442
- "bytes": 7528,
443
- "sha256": "fc7bea936fca24a3cc71539c661c32fcfbbc8827bb99b401e1954efe38894c48"
444
  },
445
  "mirrors": {
446
  "hf_space": {
447
  "path": "hf_space:data/quality_gates.json",
448
  "exists": true,
449
- "bytes": 7528,
450
- "sha256": "fc7bea936fca24a3cc71539c661c32fcfbbc8827bb99b401e1954efe38894c48"
451
  },
452
  "hf_artifacts": {
453
  "path": "hf_artifacts:docs/data/quality_gates.json",
454
  "exists": true,
455
- "bytes": 7528,
456
- "sha256": "fc7bea936fca24a3cc71539c661c32fcfbbc8827bb99b401e1954efe38894c48"
457
  },
458
  "hf_model": {
459
  "path": "hf_model:metrics/quality_gates.json",
460
  "exists": true,
461
- "bytes": 7528,
462
- "sha256": "fc7bea936fca24a3cc71539c661c32fcfbbc8827bb99b401e1954efe38894c48"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
463
  }
464
  },
465
  "failures": []
@@ -501,27 +536,27 @@
501
  "local": {
502
  "path": "repo:docs/data/research_roadmap.json",
503
  "exists": true,
504
- "bytes": 4590,
505
- "sha256": "17f6bb8ecbf0fbb4b2fc987f2a61c61ab8fcff08722cef8135e603ebd1fb8a42"
506
  },
507
  "mirrors": {
508
  "hf_space": {
509
  "path": "hf_space:data/research_roadmap.json",
510
  "exists": true,
511
- "bytes": 4590,
512
- "sha256": "17f6bb8ecbf0fbb4b2fc987f2a61c61ab8fcff08722cef8135e603ebd1fb8a42"
513
  },
514
  "hf_artifacts": {
515
  "path": "hf_artifacts:docs/data/research_roadmap.json",
516
  "exists": true,
517
- "bytes": 4590,
518
- "sha256": "17f6bb8ecbf0fbb4b2fc987f2a61c61ab8fcff08722cef8135e603ebd1fb8a42"
519
  },
520
  "hf_model": {
521
  "path": "hf_model:metrics/research_roadmap.json",
522
  "exists": true,
523
- "bytes": 4590,
524
- "sha256": "17f6bb8ecbf0fbb4b2fc987f2a61c61ab8fcff08722cef8135e603ebd1fb8a42"
525
  }
526
  },
527
  "failures": []
@@ -626,26 +661,57 @@
626
  "path": "repo:docs/data/scope_claims_audit.json",
627
  "exists": true,
628
  "bytes": 20066,
629
- "sha256": "15c0312558adc484cae747cd0eec7be5f72b311fae7fa07dbdbee661f5689f73"
630
  },
631
  "mirrors": {
632
  "hf_space": {
633
  "path": "hf_space:data/scope_claims_audit.json",
634
  "exists": true,
635
  "bytes": 20066,
636
- "sha256": "15c0312558adc484cae747cd0eec7be5f72b311fae7fa07dbdbee661f5689f73"
637
  },
638
  "hf_artifacts": {
639
  "path": "hf_artifacts:docs/data/scope_claims_audit.json",
640
  "exists": true,
641
  "bytes": 20066,
642
- "sha256": "15c0312558adc484cae747cd0eec7be5f72b311fae7fa07dbdbee661f5689f73"
643
  },
644
  "hf_model": {
645
  "path": "hf_model:metrics/scope_claims_audit.json",
646
  "exists": true,
647
  "bytes": 20066,
648
- "sha256": "15c0312558adc484cae747cd0eec7be5f72b311fae7fa07dbdbee661f5689f73"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
649
  }
650
  },
651
  "failures": []
@@ -719,26 +785,26 @@
719
  "path": "repo:docs/data/task_surface_integrity.json",
720
  "exists": true,
721
  "bytes": 45780,
722
- "sha256": "89438c397eaf0099e250f2b6ec40cdff09058e8e779b2a1a7c75ef5dac2459a9"
723
  },
724
  "mirrors": {
725
  "hf_space": {
726
  "path": "hf_space:data/task_surface_integrity.json",
727
  "exists": true,
728
  "bytes": 45780,
729
- "sha256": "89438c397eaf0099e250f2b6ec40cdff09058e8e779b2a1a7c75ef5dac2459a9"
730
  },
731
  "hf_artifacts": {
732
  "path": "hf_artifacts:docs/data/task_surface_integrity.json",
733
  "exists": true,
734
  "bytes": 45780,
735
- "sha256": "89438c397eaf0099e250f2b6ec40cdff09058e8e779b2a1a7c75ef5dac2459a9"
736
  },
737
  "hf_model": {
738
  "path": "hf_model:metrics/task_surface_integrity.json",
739
  "exists": true,
740
  "bytes": 45780,
741
- "sha256": "89438c397eaf0099e250f2b6ec40cdff09058e8e779b2a1a7c75ef5dac2459a9"
742
  }
743
  },
744
  "failures": []
@@ -780,27 +846,27 @@
780
  "local": {
781
  "path": "repo:docs/data/website_integrity.json",
782
  "exists": true,
783
- "bytes": 11553,
784
- "sha256": "2fb7b2bc0be27839a75618ef205118fe9da033991664ef63792b585196e1965a"
785
  },
786
  "mirrors": {
787
  "hf_space": {
788
  "path": "hf_space:data/website_integrity.json",
789
  "exists": true,
790
- "bytes": 11553,
791
- "sha256": "2fb7b2bc0be27839a75618ef205118fe9da033991664ef63792b585196e1965a"
792
  },
793
  "hf_artifacts": {
794
  "path": "hf_artifacts:docs/data/website_integrity.json",
795
  "exists": true,
796
- "bytes": 11553,
797
- "sha256": "2fb7b2bc0be27839a75618ef205118fe9da033991664ef63792b585196e1965a"
798
  },
799
  "hf_model": {
800
  "path": "hf_model:metrics/website_integrity.json",
801
  "exists": true,
802
- "bytes": 11553,
803
- "sha256": "2fb7b2bc0be27839a75618ef205118fe9da033991664ef63792b585196e1965a"
804
  }
805
  },
806
  "failures": []
@@ -1471,21 +1537,21 @@
1471
  "local": {
1472
  "path": "repo:scripts/build_artifact_index.py",
1473
  "exists": true,
1474
- "bytes": 22604,
1475
- "sha256": "dc3355f4c4d6f262be5eb6a4651a2a4b39db86740c07b10a881f676e296283cd"
1476
  },
1477
  "mirrors": {
1478
  "hf_artifacts": {
1479
  "path": "hf_artifacts:scripts/build_artifact_index.py",
1480
  "exists": true,
1481
- "bytes": 22604,
1482
- "sha256": "dc3355f4c4d6f262be5eb6a4651a2a4b39db86740c07b10a881f676e296283cd"
1483
  },
1484
  "hf_model": {
1485
  "path": "hf_model:scripts/build_artifact_index.py",
1486
  "exists": true,
1487
- "bytes": 22604,
1488
- "sha256": "dc3355f4c4d6f262be5eb6a4651a2a4b39db86740c07b10a881f676e296283cd"
1489
  }
1490
  },
1491
  "failures": []
@@ -1571,21 +1637,21 @@
1571
  "local": {
1572
  "path": "repo:scripts/build_quality_gates.py",
1573
  "exists": true,
1574
- "bytes": 10722,
1575
- "sha256": "00857818032ab8b2573401fb51b40a722dbb323669accba77f006bab221f5221"
1576
  },
1577
  "mirrors": {
1578
  "hf_artifacts": {
1579
  "path": "hf_artifacts:scripts/build_quality_gates.py",
1580
  "exists": true,
1581
- "bytes": 10722,
1582
- "sha256": "00857818032ab8b2573401fb51b40a722dbb323669accba77f006bab221f5221"
1583
  },
1584
  "hf_model": {
1585
  "path": "hf_model:scripts/build_quality_gates.py",
1586
  "exists": true,
1587
- "bytes": 10722,
1588
- "sha256": "00857818032ab8b2573401fb51b40a722dbb323669accba77f006bab221f5221"
1589
  }
1590
  },
1591
  "failures": []
@@ -1596,21 +1662,71 @@
1596
  "local": {
1597
  "path": "repo:scripts/build_public_surface_qa.py",
1598
  "exists": true,
1599
- "bytes": 11812,
1600
- "sha256": "2c816b3d841fca4485e71748d54b69fe254333ab24282a365549c82a8c477623"
1601
  },
1602
  "mirrors": {
1603
  "hf_artifacts": {
1604
  "path": "hf_artifacts:scripts/build_public_surface_qa.py",
1605
  "exists": true,
1606
- "bytes": 11812,
1607
- "sha256": "2c816b3d841fca4485e71748d54b69fe254333ab24282a365549c82a8c477623"
1608
  },
1609
  "hf_model": {
1610
  "path": "hf_model:scripts/build_public_surface_qa.py",
1611
  "exists": true,
1612
- "bytes": 11812,
1613
- "sha256": "2c816b3d841fca4485e71748d54b69fe254333ab24282a365549c82a8c477623"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1614
  }
1615
  },
1616
  "failures": []
@@ -1640,27 +1756,52 @@
1640
  },
1641
  "failures": []
1642
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1643
  {
1644
  "name": "scripts/verify_live_publication.py",
1645
  "status": "pass",
1646
  "local": {
1647
  "path": "repo:scripts/verify_live_publication.py",
1648
  "exists": true,
1649
- "bytes": 27645,
1650
- "sha256": "ce62085efcc288237d53046db83f30fe401e69db60f11585d206f5a365d58dc2"
1651
  },
1652
  "mirrors": {
1653
  "hf_artifacts": {
1654
  "path": "hf_artifacts:scripts/verify_live_publication.py",
1655
  "exists": true,
1656
- "bytes": 27645,
1657
- "sha256": "ce62085efcc288237d53046db83f30fe401e69db60f11585d206f5a365d58dc2"
1658
  },
1659
  "hf_model": {
1660
  "path": "hf_model:scripts/verify_live_publication.py",
1661
  "exists": true,
1662
- "bytes": 27645,
1663
- "sha256": "ce62085efcc288237d53046db83f30fe401e69db60f11585d206f5a365d58dc2"
1664
  }
1665
  },
1666
  "failures": []
@@ -1671,21 +1812,21 @@
1671
  "local": {
1672
  "path": "repo:scripts/validate_mirror_parity.py",
1673
  "exists": true,
1674
- "bytes": 10348,
1675
- "sha256": "a004b41d76872a383d6a3137e4ae8891c4f0de856658a48224912d10ca42e870"
1676
  },
1677
  "mirrors": {
1678
  "hf_artifacts": {
1679
  "path": "hf_artifacts:scripts/validate_mirror_parity.py",
1680
  "exists": true,
1681
- "bytes": 10348,
1682
- "sha256": "a004b41d76872a383d6a3137e4ae8891c4f0de856658a48224912d10ca42e870"
1683
  },
1684
  "hf_model": {
1685
  "path": "hf_model:scripts/validate_mirror_parity.py",
1686
  "exists": true,
1687
- "bytes": 10348,
1688
- "sha256": "a004b41d76872a383d6a3137e4ae8891c4f0de856658a48224912d10ca42e870"
1689
  }
1690
  },
1691
  "failures": []
@@ -1696,21 +1837,21 @@
1696
  "local": {
1697
  "path": "repo:scripts/validate_publication_package.py",
1698
  "exists": true,
1699
- "bytes": 18769,
1700
- "sha256": "37db2ea703faee33b4557cefb60d0ac619b52494782f49ab619e6d53a72aa291"
1701
  },
1702
  "mirrors": {
1703
  "hf_artifacts": {
1704
  "path": "hf_artifacts:scripts/validate_publication_package.py",
1705
  "exists": true,
1706
- "bytes": 18769,
1707
- "sha256": "37db2ea703faee33b4557cefb60d0ac619b52494782f49ab619e6d53a72aa291"
1708
  },
1709
  "hf_model": {
1710
  "path": "hf_model:scripts/validate_publication_package.py",
1711
  "exists": true,
1712
- "bytes": 18769,
1713
- "sha256": "37db2ea703faee33b4557cefb60d0ac619b52494782f49ab619e6d53a72aa291"
1714
  }
1715
  },
1716
  "failures": []
@@ -1796,21 +1937,21 @@
1796
  "local": {
1797
  "path": "repo:scripts/validate_website_integrity.py",
1798
  "exists": true,
1799
- "bytes": 20438,
1800
- "sha256": "d6d59f8de726593c43a9aacd04cda5adb1ad7194259f954ece7e546d6aa77bf9"
1801
  },
1802
  "mirrors": {
1803
  "hf_artifacts": {
1804
  "path": "hf_artifacts:scripts/validate_website_integrity.py",
1805
  "exists": true,
1806
- "bytes": 20438,
1807
- "sha256": "d6d59f8de726593c43a9aacd04cda5adb1ad7194259f954ece7e546d6aa77bf9"
1808
  },
1809
  "hf_model": {
1810
  "path": "hf_model:scripts/validate_website_integrity.py",
1811
  "exists": true,
1812
- "bytes": 20438,
1813
- "sha256": "d6d59f8de726593c43a9aacd04cda5adb1ad7194259f954ece7e546d6aa77bf9"
1814
  }
1815
  },
1816
  "failures": []
@@ -1821,21 +1962,21 @@
1821
  "local": {
1822
  "path": "repo:scripts/publish_hf_bundles.py",
1823
  "exists": true,
1824
- "bytes": 7948,
1825
- "sha256": "05556b94aaf549c58fdde92ced5c72d588e81100212783b166d544e1b82fe4b4"
1826
  },
1827
  "mirrors": {
1828
  "hf_artifacts": {
1829
  "path": "hf_artifacts:scripts/publish_hf_bundles.py",
1830
  "exists": true,
1831
- "bytes": 7948,
1832
- "sha256": "05556b94aaf549c58fdde92ced5c72d588e81100212783b166d544e1b82fe4b4"
1833
  },
1834
  "hf_model": {
1835
  "path": "hf_model:scripts/publish_hf_bundles.py",
1836
  "exists": true,
1837
- "bytes": 7948,
1838
- "sha256": "05556b94aaf549c58fdde92ced5c72d588e81100212783b166d544e1b82fe4b4"
1839
  }
1840
  },
1841
  "failures": []
@@ -1896,21 +2037,46 @@
1896
  "local": {
1897
  "path": "repo:docs/index.html",
1898
  "exists": true,
1899
- "bytes": 158980,
1900
- "sha256": "36b6b4ea491b9828d0ccf3c9d07473e60c8d7933d8d8f68631d3d75c96259556"
1901
  },
1902
  "mirrors": {
1903
  "hf_space": {
1904
  "path": "hf_space:index.html",
1905
  "exists": true,
1906
- "bytes": 158980,
1907
- "sha256": "36b6b4ea491b9828d0ccf3c9d07473e60c8d7933d8d8f68631d3d75c96259556"
1908
  },
1909
  "hf_artifacts_docs": {
1910
  "path": "hf_artifacts:docs/index.html",
1911
  "exists": true,
1912
- "bytes": 158980,
1913
- "sha256": "36b6b4ea491b9828d0ccf3c9d07473e60c8d7933d8d8f68631d3d75c96259556"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1914
  }
1915
  },
1916
  "failures": []
@@ -1940,33 +2106,312 @@
1940
  },
1941
  "failures": []
1942
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1943
  {
1944
  "name": "docs/QUALITY_GATES.md",
1945
  "status": "pass",
1946
  "local": {
1947
  "path": "repo:QUALITY_GATES.md",
1948
  "exists": true,
1949
- "bytes": 4513,
1950
- "sha256": "14a6ef280ecc72e8266f1fcbf7e3bfd91ed650de27ef1d3772b15793aa8e3491"
1951
  },
1952
  "mirrors": {
1953
  "hf_space": {
1954
  "path": "hf_space:QUALITY_GATES.md",
1955
  "exists": true,
1956
- "bytes": 4513,
1957
- "sha256": "14a6ef280ecc72e8266f1fcbf7e3bfd91ed650de27ef1d3772b15793aa8e3491"
1958
  },
1959
  "hf_artifacts": {
1960
  "path": "hf_artifacts:QUALITY_GATES.md",
1961
  "exists": true,
1962
- "bytes": 4513,
1963
- "sha256": "14a6ef280ecc72e8266f1fcbf7e3bfd91ed650de27ef1d3772b15793aa8e3491"
1964
  },
1965
  "hf_model": {
1966
  "path": "hf_model:QUALITY_GATES.md",
1967
  "exists": true,
1968
- "bytes": 4513,
1969
- "sha256": "14a6ef280ecc72e8266f1fcbf7e3bfd91ed650de27ef1d3772b15793aa8e3491"
1970
  }
1971
  },
1972
  "failures": []
@@ -2064,33 +2509,64 @@
2064
  },
2065
  "failures": []
2066
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2067
  {
2068
  "name": "docs/RESEARCH_ROADMAP.md",
2069
  "status": "pass",
2070
  "local": {
2071
  "path": "repo:RESEARCH_ROADMAP.md",
2072
  "exists": true,
2073
- "bytes": 5094,
2074
- "sha256": "b61c7de1ff8ca95329fa7a1d8d9176dc4073e4340e3f28c5a74a2850de6b1756"
2075
  },
2076
  "mirrors": {
2077
  "hf_space": {
2078
  "path": "hf_space:RESEARCH_ROADMAP.md",
2079
  "exists": true,
2080
- "bytes": 5094,
2081
- "sha256": "b61c7de1ff8ca95329fa7a1d8d9176dc4073e4340e3f28c5a74a2850de6b1756"
2082
  },
2083
  "hf_artifacts": {
2084
  "path": "hf_artifacts:RESEARCH_ROADMAP.md",
2085
  "exists": true,
2086
- "bytes": 5094,
2087
- "sha256": "b61c7de1ff8ca95329fa7a1d8d9176dc4073e4340e3f28c5a74a2850de6b1756"
2088
  },
2089
  "hf_model": {
2090
  "path": "hf_model:RESEARCH_ROADMAP.md",
2091
  "exists": true,
2092
- "bytes": 5094,
2093
- "sha256": "b61c7de1ff8ca95329fa7a1d8d9176dc4073e4340e3f28c5a74a2850de6b1756"
2094
  }
2095
  },
2096
  "failures": []
@@ -2101,27 +2577,27 @@
2101
  "local": {
2102
  "path": "repo:PROJECT_STATUS.md",
2103
  "exists": true,
2104
- "bytes": 5290,
2105
- "sha256": "ae21770fdcdc18b2078e7e879c9c1e13e5094e901a1e2f4cb120ee7952b53ab8"
2106
  },
2107
  "mirrors": {
2108
  "hf_space": {
2109
  "path": "hf_space:PROJECT_STATUS.md",
2110
  "exists": true,
2111
- "bytes": 5290,
2112
- "sha256": "ae21770fdcdc18b2078e7e879c9c1e13e5094e901a1e2f4cb120ee7952b53ab8"
2113
  },
2114
  "hf_artifacts": {
2115
  "path": "hf_artifacts:PROJECT_STATUS.md",
2116
  "exists": true,
2117
- "bytes": 5290,
2118
- "sha256": "ae21770fdcdc18b2078e7e879c9c1e13e5094e901a1e2f4cb120ee7952b53ab8"
2119
  },
2120
  "hf_model": {
2121
  "path": "hf_model:PROJECT_STATUS.md",
2122
  "exists": true,
2123
- "bytes": 5290,
2124
- "sha256": "ae21770fdcdc18b2078e7e879c9c1e13e5094e901a1e2f4cb120ee7952b53ab8"
2125
  }
2126
  },
2127
  "failures": []
@@ -2132,27 +2608,27 @@
2132
  "local": {
2133
  "path": "repo:PUBLIC_SURFACE_QA.md",
2134
  "exists": true,
2135
- "bytes": 1992,
2136
- "sha256": "e423f892fa317a626113fba91b7b14fcdb82477d1124debc2b5d73ff010914e8"
2137
  },
2138
  "mirrors": {
2139
  "hf_space": {
2140
  "path": "hf_space:PUBLIC_SURFACE_QA.md",
2141
  "exists": true,
2142
- "bytes": 1992,
2143
- "sha256": "e423f892fa317a626113fba91b7b14fcdb82477d1124debc2b5d73ff010914e8"
2144
  },
2145
  "hf_artifacts": {
2146
  "path": "hf_artifacts:PUBLIC_SURFACE_QA.md",
2147
  "exists": true,
2148
- "bytes": 1992,
2149
- "sha256": "e423f892fa317a626113fba91b7b14fcdb82477d1124debc2b5d73ff010914e8"
2150
  },
2151
  "hf_model": {
2152
  "path": "hf_model:PUBLIC_SURFACE_QA.md",
2153
  "exists": true,
2154
- "bytes": 1992,
2155
- "sha256": "e423f892fa317a626113fba91b7b14fcdb82477d1124debc2b5d73ff010914e8"
2156
  }
2157
  },
2158
  "failures": []
 
1
  {
2
  "status": "pass",
3
+ "generated_at_utc": "2026-06-03T04:07:33+00:00",
4
  "hf_root": "hf_publish",
5
  "summary": {
6
+ "group_count": 88,
7
  "failure_count": 0,
8
  "failures_by_surface": {}
9
  },
 
24
  "name": "repo_hf_website_html_parity",
25
  "status": "pass"
26
  },
27
+ {
28
+ "name": "repo_hf_diagnostic_result_parity",
29
+ "status": "pass"
30
+ },
31
  {
32
  "name": "repo_hf_quality_doc_parity",
33
  "status": "pass"
 
40
  "local": {
41
  "path": "repo:docs/data/artifact_index.json",
42
  "exists": true,
43
+ "bytes": 29016,
44
+ "sha256": "e86a70ddecc41330f7e0549dc3d7f7af9984cd92d5b5e5f181ba29c95833b62a"
45
  },
46
  "mirrors": {
47
  "hf_space": {
48
  "path": "hf_space:data/artifact_index.json",
49
  "exists": true,
50
+ "bytes": 29016,
51
+ "sha256": "e86a70ddecc41330f7e0549dc3d7f7af9984cd92d5b5e5f181ba29c95833b62a"
52
  },
53
  "hf_artifacts": {
54
  "path": "hf_artifacts:docs/data/artifact_index.json",
55
  "exists": true,
56
+ "bytes": 29016,
57
+ "sha256": "e86a70ddecc41330f7e0549dc3d7f7af9984cd92d5b5e5f181ba29c95833b62a"
58
  },
59
  "hf_model": {
60
  "path": "hf_model:metrics/artifact_index.json",
61
  "exists": true,
62
+ "bytes": 29016,
63
+ "sha256": "e86a70ddecc41330f7e0549dc3d7f7af9984cd92d5b5e5f181ba29c95833b62a"
64
  }
65
  },
66
  "failures": []
 
102
  "local": {
103
  "path": "repo:docs/data/evidence_contract.json",
104
  "exists": true,
105
+ "bytes": 12007,
106
+ "sha256": "abf0923da5e24b2773b19ecbc83873b05ecc99be07089c63e038a354d806217c"
107
  },
108
  "mirrors": {
109
  "hf_space": {
110
  "path": "hf_space:data/evidence_contract.json",
111
  "exists": true,
112
+ "bytes": 12007,
113
+ "sha256": "abf0923da5e24b2773b19ecbc83873b05ecc99be07089c63e038a354d806217c"
114
  },
115
  "hf_artifacts": {
116
  "path": "hf_artifacts:docs/data/evidence_contract.json",
117
  "exists": true,
118
+ "bytes": 12007,
119
+ "sha256": "abf0923da5e24b2773b19ecbc83873b05ecc99be07089c63e038a354d806217c"
120
  },
121
  "hf_model": {
122
  "path": "hf_model:metrics/evidence_contract.json",
123
  "exists": true,
124
+ "bytes": 12007,
125
+ "sha256": "abf0923da5e24b2773b19ecbc83873b05ecc99be07089c63e038a354d806217c"
126
  }
127
  },
128
  "failures": []
 
288
  "local": {
289
  "path": "repo:docs/data/project_manifest.json",
290
  "exists": true,
291
+ "bytes": 4644,
292
+ "sha256": "cf5f477e09a2cdc45b3c44078ab260df532ddd9cb64725444447f8e8f7e8f99a"
293
  },
294
  "mirrors": {
295
  "hf_space": {
296
  "path": "hf_space:data/project_manifest.json",
297
  "exists": true,
298
+ "bytes": 4644,
299
+ "sha256": "cf5f477e09a2cdc45b3c44078ab260df532ddd9cb64725444447f8e8f7e8f99a"
300
  },
301
  "hf_artifacts": {
302
  "path": "hf_artifacts:docs/data/project_manifest.json",
303
  "exists": true,
304
+ "bytes": 4644,
305
+ "sha256": "cf5f477e09a2cdc45b3c44078ab260df532ddd9cb64725444447f8e8f7e8f99a"
306
  },
307
  "hf_model": {
308
  "path": "hf_model:metrics/project_manifest.json",
309
  "exists": true,
310
+ "bytes": 4644,
311
+ "sha256": "cf5f477e09a2cdc45b3c44078ab260df532ddd9cb64725444447f8e8f7e8f99a"
312
  }
313
  },
314
  "failures": []
 
381
  "local": {
382
  "path": "repo:docs/data/publication_audit.json",
383
  "exists": true,
384
+ "bytes": 7097,
385
+ "sha256": "9ab8df8c416ccdf385c076caee6ad13b3b227e29d9467ee00c1e749c36e0909b"
386
  },
387
  "mirrors": {
388
  "hf_space": {
389
  "path": "hf_space:data/publication_audit.json",
390
  "exists": true,
391
+ "bytes": 7097,
392
+ "sha256": "9ab8df8c416ccdf385c076caee6ad13b3b227e29d9467ee00c1e749c36e0909b"
393
  },
394
  "hf_artifacts": {
395
  "path": "hf_artifacts:docs/data/publication_audit.json",
396
  "exists": true,
397
+ "bytes": 7097,
398
+ "sha256": "9ab8df8c416ccdf385c076caee6ad13b3b227e29d9467ee00c1e749c36e0909b"
399
  },
400
  "hf_model": {
401
  "path": "hf_model:metrics/publication_audit.json",
402
  "exists": true,
403
+ "bytes": 7097,
404
+ "sha256": "9ab8df8c416ccdf385c076caee6ad13b3b227e29d9467ee00c1e749c36e0909b"
405
  }
406
  },
407
  "failures": []
 
412
  "local": {
413
  "path": "repo:docs/data/public_surface_qa.json",
414
  "exists": true,
415
+ "bytes": 5651,
416
+ "sha256": "92ead5e68cf9a3da42c8095397f15be8a75d248b5371147f7806bc5d8e83e3ad"
417
  },
418
  "mirrors": {
419
  "hf_space": {
420
  "path": "hf_space:data/public_surface_qa.json",
421
  "exists": true,
422
+ "bytes": 5651,
423
+ "sha256": "92ead5e68cf9a3da42c8095397f15be8a75d248b5371147f7806bc5d8e83e3ad"
424
  },
425
  "hf_artifacts": {
426
  "path": "hf_artifacts:docs/data/public_surface_qa.json",
427
  "exists": true,
428
+ "bytes": 5651,
429
+ "sha256": "92ead5e68cf9a3da42c8095397f15be8a75d248b5371147f7806bc5d8e83e3ad"
430
  },
431
  "hf_model": {
432
  "path": "hf_model:metrics/public_surface_qa.json",
433
  "exists": true,
434
+ "bytes": 5651,
435
+ "sha256": "92ead5e68cf9a3da42c8095397f15be8a75d248b5371147f7806bc5d8e83e3ad"
436
  }
437
  },
438
  "failures": []
 
443
  "local": {
444
  "path": "repo:docs/data/quality_gates.json",
445
  "exists": true,
446
+ "bytes": 8147,
447
+ "sha256": "fddf86398d7187175c7321ea645c421ee599093fb1c484b1e8aa0f2a23174c3e"
448
  },
449
  "mirrors": {
450
  "hf_space": {
451
  "path": "hf_space:data/quality_gates.json",
452
  "exists": true,
453
+ "bytes": 8147,
454
+ "sha256": "fddf86398d7187175c7321ea645c421ee599093fb1c484b1e8aa0f2a23174c3e"
455
  },
456
  "hf_artifacts": {
457
  "path": "hf_artifacts:docs/data/quality_gates.json",
458
  "exists": true,
459
+ "bytes": 8147,
460
+ "sha256": "fddf86398d7187175c7321ea645c421ee599093fb1c484b1e8aa0f2a23174c3e"
461
  },
462
  "hf_model": {
463
  "path": "hf_model:metrics/quality_gates.json",
464
  "exists": true,
465
+ "bytes": 8147,
466
+ "sha256": "fddf86398d7187175c7321ea645c421ee599093fb1c484b1e8aa0f2a23174c3e"
467
+ }
468
+ },
469
+ "failures": []
470
+ },
471
+ {
472
+ "name": "data/rendered_site_check.json",
473
+ "status": "pass",
474
+ "local": {
475
+ "path": "repo:docs/data/rendered_site_check.json",
476
+ "exists": true,
477
+ "bytes": 4032,
478
+ "sha256": "2390c3663e9a110b9ed2f9c581b88a95bbd811a72ffb3e8dc780dae420e0f919"
479
+ },
480
+ "mirrors": {
481
+ "hf_space": {
482
+ "path": "hf_space:data/rendered_site_check.json",
483
+ "exists": true,
484
+ "bytes": 4032,
485
+ "sha256": "2390c3663e9a110b9ed2f9c581b88a95bbd811a72ffb3e8dc780dae420e0f919"
486
+ },
487
+ "hf_artifacts": {
488
+ "path": "hf_artifacts:docs/data/rendered_site_check.json",
489
+ "exists": true,
490
+ "bytes": 4032,
491
+ "sha256": "2390c3663e9a110b9ed2f9c581b88a95bbd811a72ffb3e8dc780dae420e0f919"
492
+ },
493
+ "hf_model": {
494
+ "path": "hf_model:metrics/rendered_site_check.json",
495
+ "exists": true,
496
+ "bytes": 4032,
497
+ "sha256": "2390c3663e9a110b9ed2f9c581b88a95bbd811a72ffb3e8dc780dae420e0f919"
498
  }
499
  },
500
  "failures": []
 
536
  "local": {
537
  "path": "repo:docs/data/research_roadmap.json",
538
  "exists": true,
539
+ "bytes": 4594,
540
+ "sha256": "bbce65e803a0fad55cc739eb2dc6fdf50a69c81362f05d216324d0813ee4ccad"
541
  },
542
  "mirrors": {
543
  "hf_space": {
544
  "path": "hf_space:data/research_roadmap.json",
545
  "exists": true,
546
+ "bytes": 4594,
547
+ "sha256": "bbce65e803a0fad55cc739eb2dc6fdf50a69c81362f05d216324d0813ee4ccad"
548
  },
549
  "hf_artifacts": {
550
  "path": "hf_artifacts:docs/data/research_roadmap.json",
551
  "exists": true,
552
+ "bytes": 4594,
553
+ "sha256": "bbce65e803a0fad55cc739eb2dc6fdf50a69c81362f05d216324d0813ee4ccad"
554
  },
555
  "hf_model": {
556
  "path": "hf_model:metrics/research_roadmap.json",
557
  "exists": true,
558
+ "bytes": 4594,
559
+ "sha256": "bbce65e803a0fad55cc739eb2dc6fdf50a69c81362f05d216324d0813ee4ccad"
560
  }
561
  },
562
  "failures": []
 
661
  "path": "repo:docs/data/scope_claims_audit.json",
662
  "exists": true,
663
  "bytes": 20066,
664
+ "sha256": "02d7c586e9e6a2d8ce99271bd0b13d6c1975dae6fa8c8ccafd398359e61d35c9"
665
  },
666
  "mirrors": {
667
  "hf_space": {
668
  "path": "hf_space:data/scope_claims_audit.json",
669
  "exists": true,
670
  "bytes": 20066,
671
+ "sha256": "02d7c586e9e6a2d8ce99271bd0b13d6c1975dae6fa8c8ccafd398359e61d35c9"
672
  },
673
  "hf_artifacts": {
674
  "path": "hf_artifacts:docs/data/scope_claims_audit.json",
675
  "exists": true,
676
  "bytes": 20066,
677
+ "sha256": "02d7c586e9e6a2d8ce99271bd0b13d6c1975dae6fa8c8ccafd398359e61d35c9"
678
  },
679
  "hf_model": {
680
  "path": "hf_model:metrics/scope_claims_audit.json",
681
  "exists": true,
682
  "bytes": 20066,
683
+ "sha256": "02d7c586e9e6a2d8ce99271bd0b13d6c1975dae6fa8c8ccafd398359e61d35c9"
684
+ }
685
+ },
686
+ "failures": []
687
+ },
688
+ {
689
+ "name": "data/single_episode_explorer.json",
690
+ "status": "pass",
691
+ "local": {
692
+ "path": "repo:docs/data/single_episode_explorer.json",
693
+ "exists": true,
694
+ "bytes": 4101241,
695
+ "sha256": "4ea0e34660de421a1a5ab0a4afcc44edec0ad0fc4e739f13d3af7974163f1897"
696
+ },
697
+ "mirrors": {
698
+ "hf_space": {
699
+ "path": "hf_space:data/single_episode_explorer.json",
700
+ "exists": true,
701
+ "bytes": 4101241,
702
+ "sha256": "4ea0e34660de421a1a5ab0a4afcc44edec0ad0fc4e739f13d3af7974163f1897"
703
+ },
704
+ "hf_artifacts": {
705
+ "path": "hf_artifacts:docs/data/single_episode_explorer.json",
706
+ "exists": true,
707
+ "bytes": 4101241,
708
+ "sha256": "4ea0e34660de421a1a5ab0a4afcc44edec0ad0fc4e739f13d3af7974163f1897"
709
+ },
710
+ "hf_model": {
711
+ "path": "hf_model:metrics/single_episode_explorer.json",
712
+ "exists": true,
713
+ "bytes": 4101241,
714
+ "sha256": "4ea0e34660de421a1a5ab0a4afcc44edec0ad0fc4e739f13d3af7974163f1897"
715
  }
716
  },
717
  "failures": []
 
785
  "path": "repo:docs/data/task_surface_integrity.json",
786
  "exists": true,
787
  "bytes": 45780,
788
+ "sha256": "f4d2894afa2aba013ed6728ee610d6665e08ae7baac9c28e94c86ac79144023e"
789
  },
790
  "mirrors": {
791
  "hf_space": {
792
  "path": "hf_space:data/task_surface_integrity.json",
793
  "exists": true,
794
  "bytes": 45780,
795
+ "sha256": "f4d2894afa2aba013ed6728ee610d6665e08ae7baac9c28e94c86ac79144023e"
796
  },
797
  "hf_artifacts": {
798
  "path": "hf_artifacts:docs/data/task_surface_integrity.json",
799
  "exists": true,
800
  "bytes": 45780,
801
+ "sha256": "f4d2894afa2aba013ed6728ee610d6665e08ae7baac9c28e94c86ac79144023e"
802
  },
803
  "hf_model": {
804
  "path": "hf_model:metrics/task_surface_integrity.json",
805
  "exists": true,
806
  "bytes": 45780,
807
+ "sha256": "f4d2894afa2aba013ed6728ee610d6665e08ae7baac9c28e94c86ac79144023e"
808
  }
809
  },
810
  "failures": []
 
846
  "local": {
847
  "path": "repo:docs/data/website_integrity.json",
848
  "exists": true,
849
+ "bytes": 13149,
850
+ "sha256": "d813e2b9dab44f290deed5dfd17af9949b6e064723f138117678e6f54e346df7"
851
  },
852
  "mirrors": {
853
  "hf_space": {
854
  "path": "hf_space:data/website_integrity.json",
855
  "exists": true,
856
+ "bytes": 13149,
857
+ "sha256": "d813e2b9dab44f290deed5dfd17af9949b6e064723f138117678e6f54e346df7"
858
  },
859
  "hf_artifacts": {
860
  "path": "hf_artifacts:docs/data/website_integrity.json",
861
  "exists": true,
862
+ "bytes": 13149,
863
+ "sha256": "d813e2b9dab44f290deed5dfd17af9949b6e064723f138117678e6f54e346df7"
864
  },
865
  "hf_model": {
866
  "path": "hf_model:metrics/website_integrity.json",
867
  "exists": true,
868
+ "bytes": 13149,
869
+ "sha256": "d813e2b9dab44f290deed5dfd17af9949b6e064723f138117678e6f54e346df7"
870
  }
871
  },
872
  "failures": []
 
1537
  "local": {
1538
  "path": "repo:scripts/build_artifact_index.py",
1539
  "exists": true,
1540
+ "bytes": 23604,
1541
+ "sha256": "e822eaa3fcbc805ac6869c16d46d41b78e1a1cfb921afa4956dc28c0a7c8daa3"
1542
  },
1543
  "mirrors": {
1544
  "hf_artifacts": {
1545
  "path": "hf_artifacts:scripts/build_artifact_index.py",
1546
  "exists": true,
1547
+ "bytes": 23604,
1548
+ "sha256": "e822eaa3fcbc805ac6869c16d46d41b78e1a1cfb921afa4956dc28c0a7c8daa3"
1549
  },
1550
  "hf_model": {
1551
  "path": "hf_model:scripts/build_artifact_index.py",
1552
  "exists": true,
1553
+ "bytes": 23604,
1554
+ "sha256": "e822eaa3fcbc805ac6869c16d46d41b78e1a1cfb921afa4956dc28c0a7c8daa3"
1555
  }
1556
  },
1557
  "failures": []
 
1637
  "local": {
1638
  "path": "repo:scripts/build_quality_gates.py",
1639
  "exists": true,
1640
+ "bytes": 11380,
1641
+ "sha256": "e8c99db9b2698f824b580882b238a881cffeafffc0b5f768d5fad0f9ac24ae18"
1642
  },
1643
  "mirrors": {
1644
  "hf_artifacts": {
1645
  "path": "hf_artifacts:scripts/build_quality_gates.py",
1646
  "exists": true,
1647
+ "bytes": 11380,
1648
+ "sha256": "e8c99db9b2698f824b580882b238a881cffeafffc0b5f768d5fad0f9ac24ae18"
1649
  },
1650
  "hf_model": {
1651
  "path": "hf_model:scripts/build_quality_gates.py",
1652
  "exists": true,
1653
+ "bytes": 11380,
1654
+ "sha256": "e8c99db9b2698f824b580882b238a881cffeafffc0b5f768d5fad0f9ac24ae18"
1655
  }
1656
  },
1657
  "failures": []
 
1662
  "local": {
1663
  "path": "repo:scripts/build_public_surface_qa.py",
1664
  "exists": true,
1665
+ "bytes": 11894,
1666
+ "sha256": "d0e86f45f2f23670e967c1a92024797a59106116ac9d948c35972512384f41de"
1667
  },
1668
  "mirrors": {
1669
  "hf_artifacts": {
1670
  "path": "hf_artifacts:scripts/build_public_surface_qa.py",
1671
  "exists": true,
1672
+ "bytes": 11894,
1673
+ "sha256": "d0e86f45f2f23670e967c1a92024797a59106116ac9d948c35972512384f41de"
1674
  },
1675
  "hf_model": {
1676
  "path": "hf_model:scripts/build_public_surface_qa.py",
1677
  "exists": true,
1678
+ "bytes": 11894,
1679
+ "sha256": "d0e86f45f2f23670e967c1a92024797a59106116ac9d948c35972512384f41de"
1680
+ }
1681
+ },
1682
+ "failures": []
1683
+ },
1684
+ {
1685
+ "name": "scripts/build_rendered_site_check.py",
1686
+ "status": "pass",
1687
+ "local": {
1688
+ "path": "repo:scripts/build_rendered_site_check.py",
1689
+ "exists": true,
1690
+ "bytes": 7820,
1691
+ "sha256": "670f31c75e9d641ef20f8ad761a63104e96fd631372c965c7f7746a692b4d514"
1692
+ },
1693
+ "mirrors": {
1694
+ "hf_artifacts": {
1695
+ "path": "hf_artifacts:scripts/build_rendered_site_check.py",
1696
+ "exists": true,
1697
+ "bytes": 7820,
1698
+ "sha256": "670f31c75e9d641ef20f8ad761a63104e96fd631372c965c7f7746a692b4d514"
1699
+ },
1700
+ "hf_model": {
1701
+ "path": "hf_model:scripts/build_rendered_site_check.py",
1702
+ "exists": true,
1703
+ "bytes": 7820,
1704
+ "sha256": "670f31c75e9d641ef20f8ad761a63104e96fd631372c965c7f7746a692b4d514"
1705
+ }
1706
+ },
1707
+ "failures": []
1708
+ },
1709
+ {
1710
+ "name": "scripts/build_single_episode_explorer.py",
1711
+ "status": "pass",
1712
+ "local": {
1713
+ "path": "repo:scripts/build_single_episode_explorer.py",
1714
+ "exists": true,
1715
+ "bytes": 29394,
1716
+ "sha256": "c837f4f4a0d7baff8d4e3bea36ea0f669c6a3eb073a0504c0a31bab481a38b73"
1717
+ },
1718
+ "mirrors": {
1719
+ "hf_artifacts": {
1720
+ "path": "hf_artifacts:scripts/build_single_episode_explorer.py",
1721
+ "exists": true,
1722
+ "bytes": 29394,
1723
+ "sha256": "c837f4f4a0d7baff8d4e3bea36ea0f669c6a3eb073a0504c0a31bab481a38b73"
1724
+ },
1725
+ "hf_model": {
1726
+ "path": "hf_model:scripts/build_single_episode_explorer.py",
1727
+ "exists": true,
1728
+ "bytes": 29394,
1729
+ "sha256": "c837f4f4a0d7baff8d4e3bea36ea0f669c6a3eb073a0504c0a31bab481a38b73"
1730
  }
1731
  },
1732
  "failures": []
 
1756
  },
1757
  "failures": []
1758
  },
1759
+ {
1760
+ "name": "scripts/single_episode_diagnostics.py",
1761
+ "status": "pass",
1762
+ "local": {
1763
+ "path": "repo:scripts/single_episode_diagnostics.py",
1764
+ "exists": true,
1765
+ "bytes": 57667,
1766
+ "sha256": "865ab2cd732e561fdf006516d50b337878592ab06708f231e9a864f82b3c867f"
1767
+ },
1768
+ "mirrors": {
1769
+ "hf_artifacts": {
1770
+ "path": "hf_artifacts:scripts/single_episode_diagnostics.py",
1771
+ "exists": true,
1772
+ "bytes": 57667,
1773
+ "sha256": "865ab2cd732e561fdf006516d50b337878592ab06708f231e9a864f82b3c867f"
1774
+ },
1775
+ "hf_model": {
1776
+ "path": "hf_model:scripts/single_episode_diagnostics.py",
1777
+ "exists": true,
1778
+ "bytes": 57667,
1779
+ "sha256": "865ab2cd732e561fdf006516d50b337878592ab06708f231e9a864f82b3c867f"
1780
+ }
1781
+ },
1782
+ "failures": []
1783
+ },
1784
  {
1785
  "name": "scripts/verify_live_publication.py",
1786
  "status": "pass",
1787
  "local": {
1788
  "path": "repo:scripts/verify_live_publication.py",
1789
  "exists": true,
1790
+ "bytes": 28398,
1791
+ "sha256": "bcc5377beea66e731866182f307be7ed2c51a56d7cd6055d6f5e8c9643e274d3"
1792
  },
1793
  "mirrors": {
1794
  "hf_artifacts": {
1795
  "path": "hf_artifacts:scripts/verify_live_publication.py",
1796
  "exists": true,
1797
+ "bytes": 28398,
1798
+ "sha256": "bcc5377beea66e731866182f307be7ed2c51a56d7cd6055d6f5e8c9643e274d3"
1799
  },
1800
  "hf_model": {
1801
  "path": "hf_model:scripts/verify_live_publication.py",
1802
  "exists": true,
1803
+ "bytes": 28398,
1804
+ "sha256": "bcc5377beea66e731866182f307be7ed2c51a56d7cd6055d6f5e8c9643e274d3"
1805
  }
1806
  },
1807
  "failures": []
 
1812
  "local": {
1813
  "path": "repo:scripts/validate_mirror_parity.py",
1814
  "exists": true,
1815
+ "bytes": 11942,
1816
+ "sha256": "730159d3136e1f7fd7db236157d4081096bde0fde5110faeb265eb2724509945"
1817
  },
1818
  "mirrors": {
1819
  "hf_artifacts": {
1820
  "path": "hf_artifacts:scripts/validate_mirror_parity.py",
1821
  "exists": true,
1822
+ "bytes": 11942,
1823
+ "sha256": "730159d3136e1f7fd7db236157d4081096bde0fde5110faeb265eb2724509945"
1824
  },
1825
  "hf_model": {
1826
  "path": "hf_model:scripts/validate_mirror_parity.py",
1827
  "exists": true,
1828
+ "bytes": 11942,
1829
+ "sha256": "730159d3136e1f7fd7db236157d4081096bde0fde5110faeb265eb2724509945"
1830
  }
1831
  },
1832
  "failures": []
 
1837
  "local": {
1838
  "path": "repo:scripts/validate_publication_package.py",
1839
  "exists": true,
1840
+ "bytes": 19097,
1841
+ "sha256": "1073dd6539d4b998150a820e5eb2a5267ea9d492cbe1929f1d958567b3935649"
1842
  },
1843
  "mirrors": {
1844
  "hf_artifacts": {
1845
  "path": "hf_artifacts:scripts/validate_publication_package.py",
1846
  "exists": true,
1847
+ "bytes": 19097,
1848
+ "sha256": "1073dd6539d4b998150a820e5eb2a5267ea9d492cbe1929f1d958567b3935649"
1849
  },
1850
  "hf_model": {
1851
  "path": "hf_model:scripts/validate_publication_package.py",
1852
  "exists": true,
1853
+ "bytes": 19097,
1854
+ "sha256": "1073dd6539d4b998150a820e5eb2a5267ea9d492cbe1929f1d958567b3935649"
1855
  }
1856
  },
1857
  "failures": []
 
1937
  "local": {
1938
  "path": "repo:scripts/validate_website_integrity.py",
1939
  "exists": true,
1940
+ "bytes": 22821,
1941
+ "sha256": "6385dc491daad67f771df9d44895a2e930f572127684c421b132e2d1866040dc"
1942
  },
1943
  "mirrors": {
1944
  "hf_artifacts": {
1945
  "path": "hf_artifacts:scripts/validate_website_integrity.py",
1946
  "exists": true,
1947
+ "bytes": 22821,
1948
+ "sha256": "6385dc491daad67f771df9d44895a2e930f572127684c421b132e2d1866040dc"
1949
  },
1950
  "hf_model": {
1951
  "path": "hf_model:scripts/validate_website_integrity.py",
1952
  "exists": true,
1953
+ "bytes": 22821,
1954
+ "sha256": "6385dc491daad67f771df9d44895a2e930f572127684c421b132e2d1866040dc"
1955
  }
1956
  },
1957
  "failures": []
 
1962
  "local": {
1963
  "path": "repo:scripts/publish_hf_bundles.py",
1964
  "exists": true,
1965
+ "bytes": 8996,
1966
+ "sha256": "9790951493763e6490d01fec62661df2bbe2a3341466fe41298b95cda0900229"
1967
  },
1968
  "mirrors": {
1969
  "hf_artifacts": {
1970
  "path": "hf_artifacts:scripts/publish_hf_bundles.py",
1971
  "exists": true,
1972
+ "bytes": 8996,
1973
+ "sha256": "9790951493763e6490d01fec62661df2bbe2a3341466fe41298b95cda0900229"
1974
  },
1975
  "hf_model": {
1976
  "path": "hf_model:scripts/publish_hf_bundles.py",
1977
  "exists": true,
1978
+ "bytes": 8996,
1979
+ "sha256": "9790951493763e6490d01fec62661df2bbe2a3341466fe41298b95cda0900229"
1980
  }
1981
  },
1982
  "failures": []
 
2037
  "local": {
2038
  "path": "repo:docs/index.html",
2039
  "exists": true,
2040
+ "bytes": 159797,
2041
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
2042
  },
2043
  "mirrors": {
2044
  "hf_space": {
2045
  "path": "hf_space:index.html",
2046
  "exists": true,
2047
+ "bytes": 159797,
2048
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
2049
  },
2050
  "hf_artifacts_docs": {
2051
  "path": "hf_artifacts:docs/index.html",
2052
  "exists": true,
2053
+ "bytes": 159797,
2054
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
2055
+ }
2056
+ },
2057
+ "failures": []
2058
+ },
2059
+ {
2060
+ "name": "website/single_episode_explorer.html",
2061
+ "status": "pass",
2062
+ "local": {
2063
+ "path": "repo:docs/single_episode_explorer.html",
2064
+ "exists": true,
2065
+ "bytes": 2641502,
2066
+ "sha256": "e97fede9233ce1329ea113dbbd06d0b6b9e5da986d35a9d6a3e20b626d741935"
2067
+ },
2068
+ "mirrors": {
2069
+ "hf_space": {
2070
+ "path": "hf_space:single_episode_explorer.html",
2071
+ "exists": true,
2072
+ "bytes": 2641502,
2073
+ "sha256": "e97fede9233ce1329ea113dbbd06d0b6b9e5da986d35a9d6a3e20b626d741935"
2074
+ },
2075
+ "hf_artifacts_docs": {
2076
+ "path": "hf_artifacts:docs/single_episode_explorer.html",
2077
+ "exists": true,
2078
+ "bytes": 2641502,
2079
+ "sha256": "e97fede9233ce1329ea113dbbd06d0b6b9e5da986d35a9d6a3e20b626d741935"
2080
  }
2081
  },
2082
  "failures": []
 
2106
  },
2107
  "failures": []
2108
  },
2109
+ {
2110
+ "name": "results/single_episode_diagnostics/provenance.json",
2111
+ "status": "pass",
2112
+ "local": {
2113
+ "path": "repo:results/single_episode_diagnostics/provenance.json",
2114
+ "exists": true,
2115
+ "bytes": 3962,
2116
+ "sha256": "48087224240941fd92444d4fee94a6146c96c35b5acc429a209db3c5cdb8d24b"
2117
+ },
2118
+ "mirrors": {
2119
+ "hf_space": {
2120
+ "path": "hf_space:results/single_episode_diagnostics/provenance.json",
2121
+ "exists": true,
2122
+ "bytes": 3962,
2123
+ "sha256": "48087224240941fd92444d4fee94a6146c96c35b5acc429a209db3c5cdb8d24b"
2124
+ },
2125
+ "hf_artifacts": {
2126
+ "path": "hf_artifacts:results/single_episode_diagnostics/provenance.json",
2127
+ "exists": true,
2128
+ "bytes": 3962,
2129
+ "sha256": "48087224240941fd92444d4fee94a6146c96c35b5acc429a209db3c5cdb8d24b"
2130
+ },
2131
+ "hf_model": {
2132
+ "path": "hf_model:results/single_episode_diagnostics/provenance.json",
2133
+ "exists": true,
2134
+ "bytes": 3962,
2135
+ "sha256": "48087224240941fd92444d4fee94a6146c96c35b5acc429a209db3c5cdb8d24b"
2136
+ }
2137
+ },
2138
+ "failures": []
2139
+ },
2140
+ {
2141
+ "name": "results/single_episode_diagnostics/README.md",
2142
+ "status": "pass",
2143
+ "local": {
2144
+ "path": "repo:results/single_episode_diagnostics/README.md",
2145
+ "exists": true,
2146
+ "bytes": 1058,
2147
+ "sha256": "e64b13f227f270dc545317636f432fb766d6f7ab8695f69234b2c24b6413a42e"
2148
+ },
2149
+ "mirrors": {
2150
+ "hf_space": {
2151
+ "path": "hf_space:results/single_episode_diagnostics/README.md",
2152
+ "exists": true,
2153
+ "bytes": 1058,
2154
+ "sha256": "e64b13f227f270dc545317636f432fb766d6f7ab8695f69234b2c24b6413a42e"
2155
+ },
2156
+ "hf_artifacts": {
2157
+ "path": "hf_artifacts:results/single_episode_diagnostics/README.md",
2158
+ "exists": true,
2159
+ "bytes": 1058,
2160
+ "sha256": "e64b13f227f270dc545317636f432fb766d6f7ab8695f69234b2c24b6413a42e"
2161
+ },
2162
+ "hf_model": {
2163
+ "path": "hf_model:results/single_episode_diagnostics/README.md",
2164
+ "exists": true,
2165
+ "bytes": 1058,
2166
+ "sha256": "e64b13f227f270dc545317636f432fb766d6f7ab8695f69234b2c24b6413a42e"
2167
+ }
2168
+ },
2169
+ "failures": []
2170
+ },
2171
+ {
2172
+ "name": "results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2173
+ "status": "pass",
2174
+ "local": {
2175
+ "path": "repo:results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2176
+ "exists": true,
2177
+ "bytes": 24871,
2178
+ "sha256": "8e43bfa9b90544d7b09e207de26d1b852dd115b3e7c957eaa4b45e520dc050b8"
2179
+ },
2180
+ "mirrors": {
2181
+ "hf_space": {
2182
+ "path": "hf_space:results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2183
+ "exists": true,
2184
+ "bytes": 24871,
2185
+ "sha256": "8e43bfa9b90544d7b09e207de26d1b852dd115b3e7c957eaa4b45e520dc050b8"
2186
+ },
2187
+ "hf_artifacts": {
2188
+ "path": "hf_artifacts:results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2189
+ "exists": true,
2190
+ "bytes": 24871,
2191
+ "sha256": "8e43bfa9b90544d7b09e207de26d1b852dd115b3e7c957eaa4b45e520dc050b8"
2192
+ },
2193
+ "hf_model": {
2194
+ "path": "hf_model:results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2195
+ "exists": true,
2196
+ "bytes": 24871,
2197
+ "sha256": "8e43bfa9b90544d7b09e207de26d1b852dd115b3e7c957eaa4b45e520dc050b8"
2198
+ }
2199
+ },
2200
+ "failures": []
2201
+ },
2202
+ {
2203
+ "name": "results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2204
+ "status": "pass",
2205
+ "local": {
2206
+ "path": "repo:results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2207
+ "exists": true,
2208
+ "bytes": 735,
2209
+ "sha256": "2761e1777963473ffa5110ab25e863a6b8ee19ce2004d94ffa938cfa5e0d93fc"
2210
+ },
2211
+ "mirrors": {
2212
+ "hf_space": {
2213
+ "path": "hf_space:results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2214
+ "exists": true,
2215
+ "bytes": 735,
2216
+ "sha256": "2761e1777963473ffa5110ab25e863a6b8ee19ce2004d94ffa938cfa5e0d93fc"
2217
+ },
2218
+ "hf_artifacts": {
2219
+ "path": "hf_artifacts:results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2220
+ "exists": true,
2221
+ "bytes": 735,
2222
+ "sha256": "2761e1777963473ffa5110ab25e863a6b8ee19ce2004d94ffa938cfa5e0d93fc"
2223
+ },
2224
+ "hf_model": {
2225
+ "path": "hf_model:results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2226
+ "exists": true,
2227
+ "bytes": 735,
2228
+ "sha256": "2761e1777963473ffa5110ab25e863a6b8ee19ce2004d94ffa938cfa5e0d93fc"
2229
+ }
2230
+ },
2231
+ "failures": []
2232
+ },
2233
+ {
2234
+ "name": "results/single_episode_diagnostics/object_labels/object_vocab.json",
2235
+ "status": "pass",
2236
+ "local": {
2237
+ "path": "repo:results/single_episode_diagnostics/object_labels/object_vocab.json",
2238
+ "exists": true,
2239
+ "bytes": 995,
2240
+ "sha256": "813320bbe5d57c74803f5dfb080d440ef1804af41950e031d82ab80311eb04c7"
2241
+ },
2242
+ "mirrors": {
2243
+ "hf_space": {
2244
+ "path": "hf_space:results/single_episode_diagnostics/object_labels/object_vocab.json",
2245
+ "exists": true,
2246
+ "bytes": 995,
2247
+ "sha256": "813320bbe5d57c74803f5dfb080d440ef1804af41950e031d82ab80311eb04c7"
2248
+ },
2249
+ "hf_artifacts": {
2250
+ "path": "hf_artifacts:results/single_episode_diagnostics/object_labels/object_vocab.json",
2251
+ "exists": true,
2252
+ "bytes": 995,
2253
+ "sha256": "813320bbe5d57c74803f5dfb080d440ef1804af41950e031d82ab80311eb04c7"
2254
+ },
2255
+ "hf_model": {
2256
+ "path": "hf_model:results/single_episode_diagnostics/object_labels/object_vocab.json",
2257
+ "exists": true,
2258
+ "bytes": 995,
2259
+ "sha256": "813320bbe5d57c74803f5dfb080d440ef1804af41950e031d82ab80311eb04c7"
2260
+ }
2261
+ },
2262
+ "failures": []
2263
+ },
2264
+ {
2265
+ "name": "results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2266
+ "status": "pass",
2267
+ "local": {
2268
+ "path": "repo:results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2269
+ "exists": true,
2270
+ "bytes": 78160,
2271
+ "sha256": "a28e43bf88f5c4c0a193b7c0c574526822e5ca0757d78b168c8450730d804510"
2272
+ },
2273
+ "mirrors": {
2274
+ "hf_space": {
2275
+ "path": "hf_space:results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2276
+ "exists": true,
2277
+ "bytes": 78160,
2278
+ "sha256": "a28e43bf88f5c4c0a193b7c0c574526822e5ca0757d78b168c8450730d804510"
2279
+ },
2280
+ "hf_artifacts": {
2281
+ "path": "hf_artifacts:results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2282
+ "exists": true,
2283
+ "bytes": 78160,
2284
+ "sha256": "a28e43bf88f5c4c0a193b7c0c574526822e5ca0757d78b168c8450730d804510"
2285
+ },
2286
+ "hf_model": {
2287
+ "path": "hf_model:results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2288
+ "exists": true,
2289
+ "bytes": 78160,
2290
+ "sha256": "a28e43bf88f5c4c0a193b7c0c574526822e5ca0757d78b168c8450730d804510"
2291
+ }
2292
+ },
2293
+ "failures": []
2294
+ },
2295
+ {
2296
+ "name": "results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2297
+ "status": "pass",
2298
+ "local": {
2299
+ "path": "repo:results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2300
+ "exists": true,
2301
+ "bytes": 293713,
2302
+ "sha256": "eebd53caf853aac5da51adea285e6623dd00860d23d3bc5703169ed6c53d0405"
2303
+ },
2304
+ "mirrors": {
2305
+ "hf_space": {
2306
+ "path": "hf_space:results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2307
+ "exists": true,
2308
+ "bytes": 293713,
2309
+ "sha256": "eebd53caf853aac5da51adea285e6623dd00860d23d3bc5703169ed6c53d0405"
2310
+ },
2311
+ "hf_artifacts": {
2312
+ "path": "hf_artifacts:results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2313
+ "exists": true,
2314
+ "bytes": 293713,
2315
+ "sha256": "eebd53caf853aac5da51adea285e6623dd00860d23d3bc5703169ed6c53d0405"
2316
+ },
2317
+ "hf_model": {
2318
+ "path": "hf_model:results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2319
+ "exists": true,
2320
+ "bytes": 293713,
2321
+ "sha256": "eebd53caf853aac5da51adea285e6623dd00860d23d3bc5703169ed6c53d0405"
2322
+ }
2323
+ },
2324
+ "failures": []
2325
+ },
2326
+ {
2327
+ "name": "results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2328
+ "status": "pass",
2329
+ "local": {
2330
+ "path": "repo:results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2331
+ "exists": true,
2332
+ "bytes": 8203,
2333
+ "sha256": "8b0026b472a0c0fd8c6eb5c9c307b41ac7ed71fe0ae3d52c8b18dfd5721f0ef1"
2334
+ },
2335
+ "mirrors": {
2336
+ "hf_space": {
2337
+ "path": "hf_space:results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2338
+ "exists": true,
2339
+ "bytes": 8203,
2340
+ "sha256": "8b0026b472a0c0fd8c6eb5c9c307b41ac7ed71fe0ae3d52c8b18dfd5721f0ef1"
2341
+ },
2342
+ "hf_artifacts": {
2343
+ "path": "hf_artifacts:results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2344
+ "exists": true,
2345
+ "bytes": 8203,
2346
+ "sha256": "8b0026b472a0c0fd8c6eb5c9c307b41ac7ed71fe0ae3d52c8b18dfd5721f0ef1"
2347
+ },
2348
+ "hf_model": {
2349
+ "path": "hf_model:results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2350
+ "exists": true,
2351
+ "bytes": 8203,
2352
+ "sha256": "8b0026b472a0c0fd8c6eb5c9c307b41ac7ed71fe0ae3d52c8b18dfd5721f0ef1"
2353
+ }
2354
+ },
2355
+ "failures": []
2356
+ },
2357
+ {
2358
+ "name": "results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2359
+ "status": "pass",
2360
+ "local": {
2361
+ "path": "repo:results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2362
+ "exists": true,
2363
+ "bytes": 332,
2364
+ "sha256": "2a467dae8e2f1606d77eccc8d1cbeb11507d462f95291d52b49d1057b7db9f14"
2365
+ },
2366
+ "mirrors": {
2367
+ "hf_space": {
2368
+ "path": "hf_space:results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2369
+ "exists": true,
2370
+ "bytes": 332,
2371
+ "sha256": "2a467dae8e2f1606d77eccc8d1cbeb11507d462f95291d52b49d1057b7db9f14"
2372
+ },
2373
+ "hf_artifacts": {
2374
+ "path": "hf_artifacts:results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2375
+ "exists": true,
2376
+ "bytes": 332,
2377
+ "sha256": "2a467dae8e2f1606d77eccc8d1cbeb11507d462f95291d52b49d1057b7db9f14"
2378
+ },
2379
+ "hf_model": {
2380
+ "path": "hf_model:results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2381
+ "exists": true,
2382
+ "bytes": 332,
2383
+ "sha256": "2a467dae8e2f1606d77eccc8d1cbeb11507d462f95291d52b49d1057b7db9f14"
2384
+ }
2385
+ },
2386
+ "failures": []
2387
+ },
2388
  {
2389
  "name": "docs/QUALITY_GATES.md",
2390
  "status": "pass",
2391
  "local": {
2392
  "path": "repo:QUALITY_GATES.md",
2393
  "exists": true,
2394
+ "bytes": 4919,
2395
+ "sha256": "7138e99b116c44f128cd2f749e9d7427e496cb7596d30d54dd44af79be80df81"
2396
  },
2397
  "mirrors": {
2398
  "hf_space": {
2399
  "path": "hf_space:QUALITY_GATES.md",
2400
  "exists": true,
2401
+ "bytes": 4919,
2402
+ "sha256": "7138e99b116c44f128cd2f749e9d7427e496cb7596d30d54dd44af79be80df81"
2403
  },
2404
  "hf_artifacts": {
2405
  "path": "hf_artifacts:QUALITY_GATES.md",
2406
  "exists": true,
2407
+ "bytes": 4919,
2408
+ "sha256": "7138e99b116c44f128cd2f749e9d7427e496cb7596d30d54dd44af79be80df81"
2409
  },
2410
  "hf_model": {
2411
  "path": "hf_model:QUALITY_GATES.md",
2412
  "exists": true,
2413
+ "bytes": 4919,
2414
+ "sha256": "7138e99b116c44f128cd2f749e9d7427e496cb7596d30d54dd44af79be80df81"
2415
  }
2416
  },
2417
  "failures": []
 
2509
  },
2510
  "failures": []
2511
  },
2512
+ {
2513
+ "name": "docs/RENDERED_SITE_CHECK.md",
2514
+ "status": "pass",
2515
+ "local": {
2516
+ "path": "repo:RENDERED_SITE_CHECK.md",
2517
+ "exists": true,
2518
+ "bytes": 1922,
2519
+ "sha256": "be747c041579fa1b1131ad1f8935217c607d7307843c88fef5e656cd74a74471"
2520
+ },
2521
+ "mirrors": {
2522
+ "hf_space": {
2523
+ "path": "hf_space:RENDERED_SITE_CHECK.md",
2524
+ "exists": true,
2525
+ "bytes": 1922,
2526
+ "sha256": "be747c041579fa1b1131ad1f8935217c607d7307843c88fef5e656cd74a74471"
2527
+ },
2528
+ "hf_artifacts": {
2529
+ "path": "hf_artifacts:RENDERED_SITE_CHECK.md",
2530
+ "exists": true,
2531
+ "bytes": 1922,
2532
+ "sha256": "be747c041579fa1b1131ad1f8935217c607d7307843c88fef5e656cd74a74471"
2533
+ },
2534
+ "hf_model": {
2535
+ "path": "hf_model:RENDERED_SITE_CHECK.md",
2536
+ "exists": true,
2537
+ "bytes": 1922,
2538
+ "sha256": "be747c041579fa1b1131ad1f8935217c607d7307843c88fef5e656cd74a74471"
2539
+ }
2540
+ },
2541
+ "failures": []
2542
+ },
2543
  {
2544
  "name": "docs/RESEARCH_ROADMAP.md",
2545
  "status": "pass",
2546
  "local": {
2547
  "path": "repo:RESEARCH_ROADMAP.md",
2548
  "exists": true,
2549
+ "bytes": 5051,
2550
+ "sha256": "1d640dbc0bcba26d72dbedd4c2dacb04e38bc7c3b11ac79f57b52c2a6e8caec3"
2551
  },
2552
  "mirrors": {
2553
  "hf_space": {
2554
  "path": "hf_space:RESEARCH_ROADMAP.md",
2555
  "exists": true,
2556
+ "bytes": 5051,
2557
+ "sha256": "1d640dbc0bcba26d72dbedd4c2dacb04e38bc7c3b11ac79f57b52c2a6e8caec3"
2558
  },
2559
  "hf_artifacts": {
2560
  "path": "hf_artifacts:RESEARCH_ROADMAP.md",
2561
  "exists": true,
2562
+ "bytes": 5051,
2563
+ "sha256": "1d640dbc0bcba26d72dbedd4c2dacb04e38bc7c3b11ac79f57b52c2a6e8caec3"
2564
  },
2565
  "hf_model": {
2566
  "path": "hf_model:RESEARCH_ROADMAP.md",
2567
  "exists": true,
2568
+ "bytes": 5051,
2569
+ "sha256": "1d640dbc0bcba26d72dbedd4c2dacb04e38bc7c3b11ac79f57b52c2a6e8caec3"
2570
  }
2571
  },
2572
  "failures": []
 
2577
  "local": {
2578
  "path": "repo:PROJECT_STATUS.md",
2579
  "exists": true,
2580
+ "bytes": 5385,
2581
+ "sha256": "353e177fac7a2009c475b8ae833117ae4cf68ca69307d9e1c292b6e13a18be61"
2582
  },
2583
  "mirrors": {
2584
  "hf_space": {
2585
  "path": "hf_space:PROJECT_STATUS.md",
2586
  "exists": true,
2587
+ "bytes": 5385,
2588
+ "sha256": "353e177fac7a2009c475b8ae833117ae4cf68ca69307d9e1c292b6e13a18be61"
2589
  },
2590
  "hf_artifacts": {
2591
  "path": "hf_artifacts:PROJECT_STATUS.md",
2592
  "exists": true,
2593
+ "bytes": 5385,
2594
+ "sha256": "353e177fac7a2009c475b8ae833117ae4cf68ca69307d9e1c292b6e13a18be61"
2595
  },
2596
  "hf_model": {
2597
  "path": "hf_model:PROJECT_STATUS.md",
2598
  "exists": true,
2599
+ "bytes": 5385,
2600
+ "sha256": "353e177fac7a2009c475b8ae833117ae4cf68ca69307d9e1c292b6e13a18be61"
2601
  }
2602
  },
2603
  "failures": []
 
2608
  "local": {
2609
  "path": "repo:PUBLIC_SURFACE_QA.md",
2610
  "exists": true,
2611
+ "bytes": 1988,
2612
+ "sha256": "b93b5c16c87a5b9f87de937ae1ca68a59668c039fdec75765049c526b6e83326"
2613
  },
2614
  "mirrors": {
2615
  "hf_space": {
2616
  "path": "hf_space:PUBLIC_SURFACE_QA.md",
2617
  "exists": true,
2618
+ "bytes": 1988,
2619
+ "sha256": "b93b5c16c87a5b9f87de937ae1ca68a59668c039fdec75765049c526b6e83326"
2620
  },
2621
  "hf_artifacts": {
2622
  "path": "hf_artifacts:PUBLIC_SURFACE_QA.md",
2623
  "exists": true,
2624
+ "bytes": 1988,
2625
+ "sha256": "b93b5c16c87a5b9f87de937ae1ca68a59668c039fdec75765049c526b6e83326"
2626
  },
2627
  "hf_model": {
2628
  "path": "hf_model:PUBLIC_SURFACE_QA.md",
2629
  "exists": true,
2630
+ "bytes": 1988,
2631
+ "sha256": "b93b5c16c87a5b9f87de937ae1ca68a59668c039fdec75765049c526b6e83326"
2632
  }
2633
  },
2634
  "failures": []
data/publication_audit.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "status": "pass",
3
- "generated_at_utc": "2026-06-02T17:35:52+00:00",
4
  "checks": [
5
  {
6
  "name": "required_publication_assets_present",
@@ -54,6 +54,7 @@
54
  "RESEARCH_TAKEAWAYS.md": true,
55
  "QUALITY_GATES.md": true,
56
  "PUBLIC_SURFACE_QA.md": true,
 
57
  "EVALUATION_PROTOCOL.md": true,
58
  "FIGURE_INDEX.md": true,
59
  "SOURCE_ALIGNMENT_AUDIT.md": true,
@@ -87,6 +88,7 @@
87
  "docs/data/modality_atlas.json": true,
88
  "docs/data/mirror_parity.json": true,
89
  "docs/data/public_surface_qa.json": true,
 
90
  "docs/data/scope_claims_audit.json": true,
91
  "docs/data/task_surface_integrity.json": true,
92
  "docs/data/website_integrity.json": true,
@@ -121,6 +123,7 @@
121
  "scripts/build_figure_index.py": true,
122
  "scripts/build_quality_gates.py": true,
123
  "scripts/build_public_surface_qa.py": true,
 
124
  "scripts/verify_live_publication.py": true,
125
  "scripts/validate_mirror_parity.py": true,
126
  "scripts/validate_scope_claims.py": true,
@@ -135,7 +138,7 @@
135
  "surface": "github_repo",
136
  "path": "README.md",
137
  "exists": true,
138
- "required_marker_count": 19,
139
  "missing_markers": [],
140
  "status": "pass"
141
  },
@@ -143,7 +146,7 @@
143
  "surface": "hf_space_bundle",
144
  "path": "README.md",
145
  "exists": true,
146
- "required_marker_count": 19,
147
  "missing_markers": [],
148
  "status": "pass"
149
  },
@@ -151,7 +154,7 @@
151
  "surface": "hf_artifact_bundle",
152
  "path": "README.md",
153
  "exists": true,
154
- "required_marker_count": 18,
155
  "missing_markers": [],
156
  "status": "pass"
157
  },
@@ -159,7 +162,7 @@
159
  "surface": "hf_artifact_bundle",
160
  "path": "PROJECT_README.md",
161
  "exists": true,
162
- "required_marker_count": 19,
163
  "missing_markers": [],
164
  "status": "pass"
165
  },
@@ -167,7 +170,7 @@
167
  "surface": "hf_model_bundle",
168
  "path": "README.md",
169
  "exists": true,
170
- "required_marker_count": 19,
171
  "missing_markers": [],
172
  "status": "pass"
173
  }
@@ -176,8 +179,8 @@
176
  "github_repo": {
177
  "root": "repo",
178
  "exists": true,
179
- "file_count": 330,
180
- "text_file_count": 266,
181
  "largest_file": {
182
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
183
  "bytes": 52601010
@@ -187,19 +190,19 @@
187
  "hf_space_bundle": {
188
  "root": "hf_publish/space",
189
  "exists": true,
190
- "file_count": 116,
191
- "text_file_count": 89,
192
  "largest_file": {
193
- "path": "assets/task_suite_infographic.png",
194
- "bytes": 2618313
195
  },
196
  "violations": []
197
  },
198
  "hf_artifact_bundle": {
199
  "root": "hf_publish/artifacts",
200
  "exists": true,
201
- "file_count": 359,
202
- "text_file_count": 275,
203
  "largest_file": {
204
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
205
  "bytes": 52601010
@@ -209,8 +212,8 @@
209
  "hf_model_bundle": {
210
  "root": "hf_publish/model",
211
  "exists": true,
212
- "file_count": 536,
213
- "text_file_count": 420,
214
  "largest_file": {
215
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
216
  "bytes": 52601010
 
1
  {
2
  "status": "pass",
3
+ "generated_at_utc": "2026-06-03T04:07:12+00:00",
4
  "checks": [
5
  {
6
  "name": "required_publication_assets_present",
 
54
  "RESEARCH_TAKEAWAYS.md": true,
55
  "QUALITY_GATES.md": true,
56
  "PUBLIC_SURFACE_QA.md": true,
57
+ "RENDERED_SITE_CHECK.md": true,
58
  "EVALUATION_PROTOCOL.md": true,
59
  "FIGURE_INDEX.md": true,
60
  "SOURCE_ALIGNMENT_AUDIT.md": true,
 
88
  "docs/data/modality_atlas.json": true,
89
  "docs/data/mirror_parity.json": true,
90
  "docs/data/public_surface_qa.json": true,
91
+ "docs/data/rendered_site_check.json": true,
92
  "docs/data/scope_claims_audit.json": true,
93
  "docs/data/task_surface_integrity.json": true,
94
  "docs/data/website_integrity.json": true,
 
123
  "scripts/build_figure_index.py": true,
124
  "scripts/build_quality_gates.py": true,
125
  "scripts/build_public_surface_qa.py": true,
126
+ "scripts/build_rendered_site_check.py": true,
127
  "scripts/verify_live_publication.py": true,
128
  "scripts/validate_mirror_parity.py": true,
129
  "scripts/validate_scope_claims.py": true,
 
138
  "surface": "github_repo",
139
  "path": "README.md",
140
  "exists": true,
141
+ "required_marker_count": 20,
142
  "missing_markers": [],
143
  "status": "pass"
144
  },
 
146
  "surface": "hf_space_bundle",
147
  "path": "README.md",
148
  "exists": true,
149
+ "required_marker_count": 20,
150
  "missing_markers": [],
151
  "status": "pass"
152
  },
 
154
  "surface": "hf_artifact_bundle",
155
  "path": "README.md",
156
  "exists": true,
157
+ "required_marker_count": 19,
158
  "missing_markers": [],
159
  "status": "pass"
160
  },
 
162
  "surface": "hf_artifact_bundle",
163
  "path": "PROJECT_README.md",
164
  "exists": true,
165
+ "required_marker_count": 20,
166
  "missing_markers": [],
167
  "status": "pass"
168
  },
 
170
  "surface": "hf_model_bundle",
171
  "path": "README.md",
172
  "exists": true,
173
+ "required_marker_count": 20,
174
  "missing_markers": [],
175
  "status": "pass"
176
  }
 
179
  "github_repo": {
180
  "root": "repo",
181
  "exists": true,
182
+ "file_count": 352,
183
+ "text_file_count": 288,
184
  "largest_file": {
185
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
186
  "bytes": 52601010
 
190
  "hf_space_bundle": {
191
  "root": "hf_publish/space",
192
  "exists": true,
193
+ "file_count": 135,
194
+ "text_file_count": 108,
195
  "largest_file": {
196
+ "path": "data/single_episode_explorer.json",
197
+ "bytes": 4101241
198
  },
199
  "violations": []
200
  },
201
  "hf_artifact_bundle": {
202
  "root": "hf_publish/artifacts",
203
  "exists": true,
204
+ "file_count": 381,
205
+ "text_file_count": 297,
206
  "largest_file": {
207
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
208
  "bytes": 52601010
 
212
  "hf_model_bundle": {
213
  "root": "hf_publish/model",
214
  "exists": true,
215
+ "file_count": 561,
216
+ "text_file_count": 445,
217
  "largest_file": {
218
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
219
  "bytes": 52601010
data/single_episode_explorer.json ADDED
The diff for this file is too large to render. See raw diff
 
data/website_integrity.json CHANGED
@@ -1,14 +1,14 @@
1
  {
2
  "status": "pass",
3
- "generated_at_utc": "2026-06-02T17:31:49+00:00",
4
  "docs_root": "docs",
5
  "site_base": "/ropedia-xperience-10m-task-suite/",
6
  "summary": {
7
- "html_pages": 2,
8
- "local_references": 99,
9
- "external_reference_count": 80,
10
- "json_files": 27,
11
- "image_assets_referenced": 19,
12
  "failure_count": 0
13
  },
14
  "failures": {
@@ -74,8 +74,8 @@
74
  "name": "project_overview_precedes_progress_ledger",
75
  "status": "pass",
76
  "reason": "The project overview should appear before the deeper progress ledger.",
77
- "overview_index": 60551,
78
- "evidence_index": 73976
79
  },
80
  {
81
  "name": "project_status_links_json",
@@ -83,13 +83,48 @@
83
  "reason": "The website should expose the machine-readable project status.",
84
  "marker_count": 2
85
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  {
87
  "name": "evaluation_protocol_between_overview_and_progress",
88
  "status": "pass",
89
  "reason": "The evaluation protocol should appear before the deeper evidence ledger.",
90
- "overview_index": 60551,
91
- "protocol_index": 71379,
92
- "evidence_index": 73976
93
  },
94
  {
95
  "name": "evaluation_protocol_links_json",
@@ -163,14 +198,20 @@
163
  {
164
  "path": "index.html",
165
  "id_count": 75,
166
- "reference_count": 98,
167
  "image_count": 22
 
 
 
 
 
 
168
  }
169
  ],
170
  "json_files": [
171
  {
172
  "path": "data/artifact_index.json",
173
- "bytes": 27749,
174
  "top_level_type": "dict"
175
  },
176
  {
@@ -185,7 +226,7 @@
185
  },
186
  {
187
  "path": "data/evidence_contract.json",
188
- "bytes": 11570,
189
  "top_level_type": "dict"
190
  },
191
  {
@@ -200,7 +241,7 @@
200
  },
201
  {
202
  "path": "data/mirror_parity.json",
203
- "bytes": 74690,
204
  "top_level_type": "dict"
205
  },
206
  {
@@ -215,7 +256,7 @@
215
  },
216
  {
217
  "path": "data/project_manifest.json",
218
- "bytes": 4468,
219
  "top_level_type": "dict"
220
  },
221
  {
@@ -230,17 +271,22 @@
230
  },
231
  {
232
  "path": "data/public_surface_qa.json",
233
- "bytes": 5454,
234
  "top_level_type": "dict"
235
  },
236
  {
237
  "path": "data/publication_audit.json",
238
- "bytes": 6883,
239
  "top_level_type": "dict"
240
  },
241
  {
242
  "path": "data/quality_gates.json",
243
- "bytes": 7528,
 
 
 
 
 
244
  "top_level_type": "dict"
245
  },
246
  {
@@ -260,7 +306,7 @@
260
  },
261
  {
262
  "path": "data/research_roadmap.json",
263
- "bytes": 4590,
264
  "top_level_type": "dict"
265
  },
266
  {
@@ -273,6 +319,11 @@
273
  "bytes": 20066,
274
  "top_level_type": "dict"
275
  },
 
 
 
 
 
276
  {
277
  "path": "data/source_alignment_audit.json",
278
  "bytes": 4432,
@@ -295,7 +346,7 @@
295
  },
296
  {
297
  "path": "data/website_integrity.json",
298
- "bytes": 11444,
299
  "top_level_type": "dict"
300
  },
301
  {
@@ -313,6 +364,14 @@
313
  "height": 64,
314
  "format": "PNG"
315
  },
 
 
 
 
 
 
 
 
316
  {
317
  "path": "assets/charts/cross_modal_retrieval.svg",
318
  "exists": true,
 
1
  {
2
  "status": "pass",
3
+ "generated_at_utc": "2026-06-03T04:04:17+00:00",
4
  "docs_root": "docs",
5
  "site_base": "/ropedia-xperience-10m-task-suite/",
6
  "summary": {
7
+ "html_pages": 3,
8
+ "local_references": 109,
9
+ "external_reference_count": 83,
10
+ "json_files": 29,
11
+ "image_assets_referenced": 20,
12
  "failure_count": 0
13
  },
14
  "failures": {
 
74
  "name": "project_overview_precedes_progress_ledger",
75
  "status": "pass",
76
  "reason": "The project overview should appear before the deeper progress ledger.",
77
+ "overview_index": 60611,
78
+ "evidence_index": 74036
79
  },
80
  {
81
  "name": "project_status_links_json",
 
83
  "reason": "The website should expose the machine-readable project status.",
84
  "marker_count": 2
85
  },
86
+ {
87
+ "name": "roadmap_links_json",
88
+ "status": "pass",
89
+ "reason": "The website should expose the machine-readable research roadmap.",
90
+ "marker_count": 2
91
+ },
92
+ {
93
+ "name": "rendered_site_check_links_json",
94
+ "status": "pass",
95
+ "reason": "The website should expose the browser-level rendered website check.",
96
+ "marker_count": 1
97
+ },
98
+ {
99
+ "name": "roadmap_html_matches_json_phases",
100
+ "status": "pass",
101
+ "reason": "The roadmap section should show every stage defined in research_roadmap.json.",
102
+ "phase_count": 5,
103
+ "missing_phase_names": [],
104
+ "roadmap_json_error": null
105
+ },
106
+ {
107
+ "name": "roadmap_status_chips_match_json",
108
+ "status": "pass",
109
+ "reason": "The roadmap status chips should match the phase statuses in research_roadmap.json.",
110
+ "phase_count": 5,
111
+ "statuses": [
112
+ "implemented",
113
+ "active",
114
+ "next",
115
+ "planned",
116
+ "planned"
117
+ ],
118
+ "missing_statuses": [],
119
+ "roadmap_json_error": null
120
+ },
121
  {
122
  "name": "evaluation_protocol_between_overview_and_progress",
123
  "status": "pass",
124
  "reason": "The evaluation protocol should appear before the deeper evidence ledger.",
125
+ "overview_index": 60611,
126
+ "protocol_index": 71439,
127
+ "evidence_index": 74036
128
  },
129
  {
130
  "name": "evaluation_protocol_links_json",
 
198
  {
199
  "path": "index.html",
200
  "id_count": 75,
201
+ "reference_count": 102,
202
  "image_count": 22
203
+ },
204
+ {
205
+ "path": "single_episode_explorer.html",
206
+ "id_count": 26,
207
+ "reference_count": 6,
208
+ "image_count": 1
209
  }
210
  ],
211
  "json_files": [
212
  {
213
  "path": "data/artifact_index.json",
214
+ "bytes": 29016,
215
  "top_level_type": "dict"
216
  },
217
  {
 
226
  },
227
  {
228
  "path": "data/evidence_contract.json",
229
+ "bytes": 12007,
230
  "top_level_type": "dict"
231
  },
232
  {
 
241
  },
242
  {
243
  "path": "data/mirror_parity.json",
244
+ "bytes": 81842,
245
  "top_level_type": "dict"
246
  },
247
  {
 
256
  },
257
  {
258
  "path": "data/project_manifest.json",
259
+ "bytes": 4644,
260
  "top_level_type": "dict"
261
  },
262
  {
 
271
  },
272
  {
273
  "path": "data/public_surface_qa.json",
274
+ "bytes": 5651,
275
  "top_level_type": "dict"
276
  },
277
  {
278
  "path": "data/publication_audit.json",
279
+ "bytes": 10473,
280
  "top_level_type": "dict"
281
  },
282
  {
283
  "path": "data/quality_gates.json",
284
+ "bytes": 8147,
285
+ "top_level_type": "dict"
286
+ },
287
+ {
288
+ "path": "data/rendered_site_check.json",
289
+ "bytes": 4032,
290
  "top_level_type": "dict"
291
  },
292
  {
 
306
  },
307
  {
308
  "path": "data/research_roadmap.json",
309
+ "bytes": 4594,
310
  "top_level_type": "dict"
311
  },
312
  {
 
319
  "bytes": 20066,
320
  "top_level_type": "dict"
321
  },
322
+ {
323
+ "path": "data/single_episode_explorer.json",
324
+ "bytes": 4101241,
325
+ "top_level_type": "dict"
326
+ },
327
  {
328
  "path": "data/source_alignment_audit.json",
329
  "bytes": 4432,
 
346
  },
347
  {
348
  "path": "data/website_integrity.json",
349
+ "bytes": 13148,
350
  "top_level_type": "dict"
351
  },
352
  {
 
364
  "height": 64,
365
  "format": "PNG"
366
  },
367
+ {
368
+ "path": "assets/brand/xperience10m-logo-mark-192.png",
369
+ "exists": true,
370
+ "bytes": 41318,
371
+ "width": 192,
372
+ "height": 192,
373
+ "format": "PNG"
374
+ },
375
  {
376
  "path": "assets/charts/cross_modal_retrieval.svg",
377
  "exists": true,
docs/data/mirror_parity.json CHANGED
@@ -1,16 +1,20 @@
1
  {
2
- "status": "pass",
3
- "generated_at_utc": "2026-06-02T17:37:17+00:00",
4
  "hf_root": "hf_publish",
5
  "summary": {
6
- "group_count": 72,
7
- "failure_count": 0,
8
- "failures_by_surface": {}
 
 
 
 
9
  },
10
  "checks": [
11
  {
12
  "name": "repo_hf_space_artifact_model_data_parity",
13
- "status": "pass"
14
  },
15
  {
16
  "name": "repo_hf_visual_asset_parity",
@@ -36,27 +40,27 @@
36
  "local": {
37
  "path": "repo:docs/data/artifact_index.json",
38
  "exists": true,
39
- "bytes": 27749,
40
- "sha256": "5a5a8f60eb75d1880e9654e61a4f55e2b0b9e0caea2540d47211ebea24ba9f84"
41
  },
42
  "mirrors": {
43
  "hf_space": {
44
  "path": "hf_space:data/artifact_index.json",
45
  "exists": true,
46
- "bytes": 27749,
47
- "sha256": "5a5a8f60eb75d1880e9654e61a4f55e2b0b9e0caea2540d47211ebea24ba9f84"
48
  },
49
  "hf_artifacts": {
50
  "path": "hf_artifacts:docs/data/artifact_index.json",
51
  "exists": true,
52
- "bytes": 27749,
53
- "sha256": "5a5a8f60eb75d1880e9654e61a4f55e2b0b9e0caea2540d47211ebea24ba9f84"
54
  },
55
  "hf_model": {
56
  "path": "hf_model:metrics/artifact_index.json",
57
  "exists": true,
58
- "bytes": 27749,
59
- "sha256": "5a5a8f60eb75d1880e9654e61a4f55e2b0b9e0caea2540d47211ebea24ba9f84"
60
  }
61
  },
62
  "failures": []
@@ -98,27 +102,27 @@
98
  "local": {
99
  "path": "repo:docs/data/evidence_contract.json",
100
  "exists": true,
101
- "bytes": 11570,
102
- "sha256": "8420bf3fb405e79dd5f02d23009fe695f2f49008706a645018b6413c4e43a5fa"
103
  },
104
  "mirrors": {
105
  "hf_space": {
106
  "path": "hf_space:data/evidence_contract.json",
107
  "exists": true,
108
- "bytes": 11570,
109
- "sha256": "8420bf3fb405e79dd5f02d23009fe695f2f49008706a645018b6413c4e43a5fa"
110
  },
111
  "hf_artifacts": {
112
  "path": "hf_artifacts:docs/data/evidence_contract.json",
113
  "exists": true,
114
- "bytes": 11570,
115
- "sha256": "8420bf3fb405e79dd5f02d23009fe695f2f49008706a645018b6413c4e43a5fa"
116
  },
117
  "hf_model": {
118
  "path": "hf_model:metrics/evidence_contract.json",
119
  "exists": true,
120
- "bytes": 11570,
121
- "sha256": "8420bf3fb405e79dd5f02d23009fe695f2f49008706a645018b6413c4e43a5fa"
122
  }
123
  },
124
  "failures": []
@@ -284,27 +288,27 @@
284
  "local": {
285
  "path": "repo:docs/data/project_manifest.json",
286
  "exists": true,
287
- "bytes": 4468,
288
- "sha256": "a5fd25374d967c7155e8d3c404d9b520d804c7a0de5c84c4f725156155f421b1"
289
  },
290
  "mirrors": {
291
  "hf_space": {
292
  "path": "hf_space:data/project_manifest.json",
293
  "exists": true,
294
- "bytes": 4468,
295
- "sha256": "a5fd25374d967c7155e8d3c404d9b520d804c7a0de5c84c4f725156155f421b1"
296
  },
297
  "hf_artifacts": {
298
  "path": "hf_artifacts:docs/data/project_manifest.json",
299
  "exists": true,
300
- "bytes": 4468,
301
- "sha256": "a5fd25374d967c7155e8d3c404d9b520d804c7a0de5c84c4f725156155f421b1"
302
  },
303
  "hf_model": {
304
  "path": "hf_model:metrics/project_manifest.json",
305
  "exists": true,
306
- "bytes": 4468,
307
- "sha256": "a5fd25374d967c7155e8d3c404d9b520d804c7a0de5c84c4f725156155f421b1"
308
  }
309
  },
310
  "failures": []
@@ -373,34 +377,56 @@
373
  },
374
  {
375
  "name": "data/publication_audit.json",
376
- "status": "pass",
377
  "local": {
378
  "path": "repo:docs/data/publication_audit.json",
379
  "exists": true,
380
- "bytes": 6962,
381
- "sha256": "6bfc32e32da373ee70b0b928b6e632b76a8c6299b87bdf27272b58f14bb7c8e3"
382
  },
383
  "mirrors": {
384
  "hf_space": {
385
  "path": "hf_space:data/publication_audit.json",
386
  "exists": true,
387
- "bytes": 6962,
388
- "sha256": "6bfc32e32da373ee70b0b928b6e632b76a8c6299b87bdf27272b58f14bb7c8e3"
389
  },
390
  "hf_artifacts": {
391
  "path": "hf_artifacts:docs/data/publication_audit.json",
392
  "exists": true,
393
- "bytes": 6962,
394
- "sha256": "6bfc32e32da373ee70b0b928b6e632b76a8c6299b87bdf27272b58f14bb7c8e3"
395
  },
396
  "hf_model": {
397
  "path": "hf_model:metrics/publication_audit.json",
398
  "exists": true,
399
- "bytes": 6962,
400
- "sha256": "6bfc32e32da373ee70b0b928b6e632b76a8c6299b87bdf27272b58f14bb7c8e3"
401
  }
402
  },
403
- "failures": []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
404
  },
405
  {
406
  "name": "data/public_surface_qa.json",
@@ -408,27 +434,27 @@
408
  "local": {
409
  "path": "repo:docs/data/public_surface_qa.json",
410
  "exists": true,
411
- "bytes": 5455,
412
- "sha256": "546ad4fcccaebe19529a846a6f18ad8edec93a3720d2e7244641b999db97302f"
413
  },
414
  "mirrors": {
415
  "hf_space": {
416
  "path": "hf_space:data/public_surface_qa.json",
417
  "exists": true,
418
- "bytes": 5455,
419
- "sha256": "546ad4fcccaebe19529a846a6f18ad8edec93a3720d2e7244641b999db97302f"
420
  },
421
  "hf_artifacts": {
422
  "path": "hf_artifacts:docs/data/public_surface_qa.json",
423
  "exists": true,
424
- "bytes": 5455,
425
- "sha256": "546ad4fcccaebe19529a846a6f18ad8edec93a3720d2e7244641b999db97302f"
426
  },
427
  "hf_model": {
428
  "path": "hf_model:metrics/public_surface_qa.json",
429
  "exists": true,
430
- "bytes": 5455,
431
- "sha256": "546ad4fcccaebe19529a846a6f18ad8edec93a3720d2e7244641b999db97302f"
432
  }
433
  },
434
  "failures": []
@@ -439,27 +465,58 @@
439
  "local": {
440
  "path": "repo:docs/data/quality_gates.json",
441
  "exists": true,
442
- "bytes": 7528,
443
- "sha256": "fc7bea936fca24a3cc71539c661c32fcfbbc8827bb99b401e1954efe38894c48"
444
  },
445
  "mirrors": {
446
  "hf_space": {
447
  "path": "hf_space:data/quality_gates.json",
448
  "exists": true,
449
- "bytes": 7528,
450
- "sha256": "fc7bea936fca24a3cc71539c661c32fcfbbc8827bb99b401e1954efe38894c48"
451
  },
452
  "hf_artifacts": {
453
  "path": "hf_artifacts:docs/data/quality_gates.json",
454
  "exists": true,
455
- "bytes": 7528,
456
- "sha256": "fc7bea936fca24a3cc71539c661c32fcfbbc8827bb99b401e1954efe38894c48"
457
  },
458
  "hf_model": {
459
  "path": "hf_model:metrics/quality_gates.json",
460
  "exists": true,
461
- "bytes": 7528,
462
- "sha256": "fc7bea936fca24a3cc71539c661c32fcfbbc8827bb99b401e1954efe38894c48"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
463
  }
464
  },
465
  "failures": []
@@ -501,27 +558,27 @@
501
  "local": {
502
  "path": "repo:docs/data/research_roadmap.json",
503
  "exists": true,
504
- "bytes": 4590,
505
- "sha256": "17f6bb8ecbf0fbb4b2fc987f2a61c61ab8fcff08722cef8135e603ebd1fb8a42"
506
  },
507
  "mirrors": {
508
  "hf_space": {
509
  "path": "hf_space:data/research_roadmap.json",
510
  "exists": true,
511
- "bytes": 4590,
512
- "sha256": "17f6bb8ecbf0fbb4b2fc987f2a61c61ab8fcff08722cef8135e603ebd1fb8a42"
513
  },
514
  "hf_artifacts": {
515
  "path": "hf_artifacts:docs/data/research_roadmap.json",
516
  "exists": true,
517
- "bytes": 4590,
518
- "sha256": "17f6bb8ecbf0fbb4b2fc987f2a61c61ab8fcff08722cef8135e603ebd1fb8a42"
519
  },
520
  "hf_model": {
521
  "path": "hf_model:metrics/research_roadmap.json",
522
  "exists": true,
523
- "bytes": 4590,
524
- "sha256": "17f6bb8ecbf0fbb4b2fc987f2a61c61ab8fcff08722cef8135e603ebd1fb8a42"
525
  }
526
  },
527
  "failures": []
@@ -626,26 +683,26 @@
626
  "path": "repo:docs/data/scope_claims_audit.json",
627
  "exists": true,
628
  "bytes": 20066,
629
- "sha256": "15c0312558adc484cae747cd0eec7be5f72b311fae7fa07dbdbee661f5689f73"
630
  },
631
  "mirrors": {
632
  "hf_space": {
633
  "path": "hf_space:data/scope_claims_audit.json",
634
  "exists": true,
635
  "bytes": 20066,
636
- "sha256": "15c0312558adc484cae747cd0eec7be5f72b311fae7fa07dbdbee661f5689f73"
637
  },
638
  "hf_artifacts": {
639
  "path": "hf_artifacts:docs/data/scope_claims_audit.json",
640
  "exists": true,
641
  "bytes": 20066,
642
- "sha256": "15c0312558adc484cae747cd0eec7be5f72b311fae7fa07dbdbee661f5689f73"
643
  },
644
  "hf_model": {
645
  "path": "hf_model:metrics/scope_claims_audit.json",
646
  "exists": true,
647
  "bytes": 20066,
648
- "sha256": "15c0312558adc484cae747cd0eec7be5f72b311fae7fa07dbdbee661f5689f73"
649
  }
650
  },
651
  "failures": []
@@ -719,26 +776,26 @@
719
  "path": "repo:docs/data/task_surface_integrity.json",
720
  "exists": true,
721
  "bytes": 45780,
722
- "sha256": "89438c397eaf0099e250f2b6ec40cdff09058e8e779b2a1a7c75ef5dac2459a9"
723
  },
724
  "mirrors": {
725
  "hf_space": {
726
  "path": "hf_space:data/task_surface_integrity.json",
727
  "exists": true,
728
  "bytes": 45780,
729
- "sha256": "89438c397eaf0099e250f2b6ec40cdff09058e8e779b2a1a7c75ef5dac2459a9"
730
  },
731
  "hf_artifacts": {
732
  "path": "hf_artifacts:docs/data/task_surface_integrity.json",
733
  "exists": true,
734
  "bytes": 45780,
735
- "sha256": "89438c397eaf0099e250f2b6ec40cdff09058e8e779b2a1a7c75ef5dac2459a9"
736
  },
737
  "hf_model": {
738
  "path": "hf_model:metrics/task_surface_integrity.json",
739
  "exists": true,
740
  "bytes": 45780,
741
- "sha256": "89438c397eaf0099e250f2b6ec40cdff09058e8e779b2a1a7c75ef5dac2459a9"
742
  }
743
  },
744
  "failures": []
@@ -780,27 +837,27 @@
780
  "local": {
781
  "path": "repo:docs/data/website_integrity.json",
782
  "exists": true,
783
- "bytes": 11553,
784
- "sha256": "2fb7b2bc0be27839a75618ef205118fe9da033991664ef63792b585196e1965a"
785
  },
786
  "mirrors": {
787
  "hf_space": {
788
  "path": "hf_space:data/website_integrity.json",
789
  "exists": true,
790
- "bytes": 11553,
791
- "sha256": "2fb7b2bc0be27839a75618ef205118fe9da033991664ef63792b585196e1965a"
792
  },
793
  "hf_artifacts": {
794
  "path": "hf_artifacts:docs/data/website_integrity.json",
795
  "exists": true,
796
- "bytes": 11553,
797
- "sha256": "2fb7b2bc0be27839a75618ef205118fe9da033991664ef63792b585196e1965a"
798
  },
799
  "hf_model": {
800
  "path": "hf_model:metrics/website_integrity.json",
801
  "exists": true,
802
- "bytes": 11553,
803
- "sha256": "2fb7b2bc0be27839a75618ef205118fe9da033991664ef63792b585196e1965a"
804
  }
805
  },
806
  "failures": []
@@ -1471,21 +1528,21 @@
1471
  "local": {
1472
  "path": "repo:scripts/build_artifact_index.py",
1473
  "exists": true,
1474
- "bytes": 22604,
1475
- "sha256": "dc3355f4c4d6f262be5eb6a4651a2a4b39db86740c07b10a881f676e296283cd"
1476
  },
1477
  "mirrors": {
1478
  "hf_artifacts": {
1479
  "path": "hf_artifacts:scripts/build_artifact_index.py",
1480
  "exists": true,
1481
- "bytes": 22604,
1482
- "sha256": "dc3355f4c4d6f262be5eb6a4651a2a4b39db86740c07b10a881f676e296283cd"
1483
  },
1484
  "hf_model": {
1485
  "path": "hf_model:scripts/build_artifact_index.py",
1486
  "exists": true,
1487
- "bytes": 22604,
1488
- "sha256": "dc3355f4c4d6f262be5eb6a4651a2a4b39db86740c07b10a881f676e296283cd"
1489
  }
1490
  },
1491
  "failures": []
@@ -1571,21 +1628,21 @@
1571
  "local": {
1572
  "path": "repo:scripts/build_quality_gates.py",
1573
  "exists": true,
1574
- "bytes": 10722,
1575
- "sha256": "00857818032ab8b2573401fb51b40a722dbb323669accba77f006bab221f5221"
1576
  },
1577
  "mirrors": {
1578
  "hf_artifacts": {
1579
  "path": "hf_artifacts:scripts/build_quality_gates.py",
1580
  "exists": true,
1581
- "bytes": 10722,
1582
- "sha256": "00857818032ab8b2573401fb51b40a722dbb323669accba77f006bab221f5221"
1583
  },
1584
  "hf_model": {
1585
  "path": "hf_model:scripts/build_quality_gates.py",
1586
  "exists": true,
1587
- "bytes": 10722,
1588
- "sha256": "00857818032ab8b2573401fb51b40a722dbb323669accba77f006bab221f5221"
1589
  }
1590
  },
1591
  "failures": []
@@ -1596,21 +1653,46 @@
1596
  "local": {
1597
  "path": "repo:scripts/build_public_surface_qa.py",
1598
  "exists": true,
1599
- "bytes": 11812,
1600
- "sha256": "2c816b3d841fca4485e71748d54b69fe254333ab24282a365549c82a8c477623"
1601
  },
1602
  "mirrors": {
1603
  "hf_artifacts": {
1604
  "path": "hf_artifacts:scripts/build_public_surface_qa.py",
1605
  "exists": true,
1606
- "bytes": 11812,
1607
- "sha256": "2c816b3d841fca4485e71748d54b69fe254333ab24282a365549c82a8c477623"
1608
  },
1609
  "hf_model": {
1610
  "path": "hf_model:scripts/build_public_surface_qa.py",
1611
  "exists": true,
1612
- "bytes": 11812,
1613
- "sha256": "2c816b3d841fca4485e71748d54b69fe254333ab24282a365549c82a8c477623"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1614
  }
1615
  },
1616
  "failures": []
@@ -1646,21 +1728,21 @@
1646
  "local": {
1647
  "path": "repo:scripts/verify_live_publication.py",
1648
  "exists": true,
1649
- "bytes": 27645,
1650
- "sha256": "ce62085efcc288237d53046db83f30fe401e69db60f11585d206f5a365d58dc2"
1651
  },
1652
  "mirrors": {
1653
  "hf_artifacts": {
1654
  "path": "hf_artifacts:scripts/verify_live_publication.py",
1655
  "exists": true,
1656
- "bytes": 27645,
1657
- "sha256": "ce62085efcc288237d53046db83f30fe401e69db60f11585d206f5a365d58dc2"
1658
  },
1659
  "hf_model": {
1660
  "path": "hf_model:scripts/verify_live_publication.py",
1661
  "exists": true,
1662
- "bytes": 27645,
1663
- "sha256": "ce62085efcc288237d53046db83f30fe401e69db60f11585d206f5a365d58dc2"
1664
  }
1665
  },
1666
  "failures": []
@@ -1671,21 +1753,21 @@
1671
  "local": {
1672
  "path": "repo:scripts/validate_mirror_parity.py",
1673
  "exists": true,
1674
- "bytes": 10348,
1675
- "sha256": "a004b41d76872a383d6a3137e4ae8891c4f0de856658a48224912d10ca42e870"
1676
  },
1677
  "mirrors": {
1678
  "hf_artifacts": {
1679
  "path": "hf_artifacts:scripts/validate_mirror_parity.py",
1680
  "exists": true,
1681
- "bytes": 10348,
1682
- "sha256": "a004b41d76872a383d6a3137e4ae8891c4f0de856658a48224912d10ca42e870"
1683
  },
1684
  "hf_model": {
1685
  "path": "hf_model:scripts/validate_mirror_parity.py",
1686
  "exists": true,
1687
- "bytes": 10348,
1688
- "sha256": "a004b41d76872a383d6a3137e4ae8891c4f0de856658a48224912d10ca42e870"
1689
  }
1690
  },
1691
  "failures": []
@@ -1696,21 +1778,21 @@
1696
  "local": {
1697
  "path": "repo:scripts/validate_publication_package.py",
1698
  "exists": true,
1699
- "bytes": 18769,
1700
- "sha256": "37db2ea703faee33b4557cefb60d0ac619b52494782f49ab619e6d53a72aa291"
1701
  },
1702
  "mirrors": {
1703
  "hf_artifacts": {
1704
  "path": "hf_artifacts:scripts/validate_publication_package.py",
1705
  "exists": true,
1706
- "bytes": 18769,
1707
- "sha256": "37db2ea703faee33b4557cefb60d0ac619b52494782f49ab619e6d53a72aa291"
1708
  },
1709
  "hf_model": {
1710
  "path": "hf_model:scripts/validate_publication_package.py",
1711
  "exists": true,
1712
- "bytes": 18769,
1713
- "sha256": "37db2ea703faee33b4557cefb60d0ac619b52494782f49ab619e6d53a72aa291"
1714
  }
1715
  },
1716
  "failures": []
@@ -1796,21 +1878,21 @@
1796
  "local": {
1797
  "path": "repo:scripts/validate_website_integrity.py",
1798
  "exists": true,
1799
- "bytes": 20438,
1800
- "sha256": "d6d59f8de726593c43a9aacd04cda5adb1ad7194259f954ece7e546d6aa77bf9"
1801
  },
1802
  "mirrors": {
1803
  "hf_artifacts": {
1804
  "path": "hf_artifacts:scripts/validate_website_integrity.py",
1805
  "exists": true,
1806
- "bytes": 20438,
1807
- "sha256": "d6d59f8de726593c43a9aacd04cda5adb1ad7194259f954ece7e546d6aa77bf9"
1808
  },
1809
  "hf_model": {
1810
  "path": "hf_model:scripts/validate_website_integrity.py",
1811
  "exists": true,
1812
- "bytes": 20438,
1813
- "sha256": "d6d59f8de726593c43a9aacd04cda5adb1ad7194259f954ece7e546d6aa77bf9"
1814
  }
1815
  },
1816
  "failures": []
@@ -1821,21 +1903,21 @@
1821
  "local": {
1822
  "path": "repo:scripts/publish_hf_bundles.py",
1823
  "exists": true,
1824
- "bytes": 7948,
1825
- "sha256": "05556b94aaf549c58fdde92ced5c72d588e81100212783b166d544e1b82fe4b4"
1826
  },
1827
  "mirrors": {
1828
  "hf_artifacts": {
1829
  "path": "hf_artifacts:scripts/publish_hf_bundles.py",
1830
  "exists": true,
1831
- "bytes": 7948,
1832
- "sha256": "05556b94aaf549c58fdde92ced5c72d588e81100212783b166d544e1b82fe4b4"
1833
  },
1834
  "hf_model": {
1835
  "path": "hf_model:scripts/publish_hf_bundles.py",
1836
  "exists": true,
1837
- "bytes": 7948,
1838
- "sha256": "05556b94aaf549c58fdde92ced5c72d588e81100212783b166d544e1b82fe4b4"
1839
  }
1840
  },
1841
  "failures": []
@@ -1896,21 +1978,21 @@
1896
  "local": {
1897
  "path": "repo:docs/index.html",
1898
  "exists": true,
1899
- "bytes": 158980,
1900
- "sha256": "36b6b4ea491b9828d0ccf3c9d07473e60c8d7933d8d8f68631d3d75c96259556"
1901
  },
1902
  "mirrors": {
1903
  "hf_space": {
1904
  "path": "hf_space:index.html",
1905
  "exists": true,
1906
- "bytes": 158980,
1907
- "sha256": "36b6b4ea491b9828d0ccf3c9d07473e60c8d7933d8d8f68631d3d75c96259556"
1908
  },
1909
  "hf_artifacts_docs": {
1910
  "path": "hf_artifacts:docs/index.html",
1911
  "exists": true,
1912
- "bytes": 158980,
1913
- "sha256": "36b6b4ea491b9828d0ccf3c9d07473e60c8d7933d8d8f68631d3d75c96259556"
1914
  }
1915
  },
1916
  "failures": []
@@ -1946,27 +2028,27 @@
1946
  "local": {
1947
  "path": "repo:QUALITY_GATES.md",
1948
  "exists": true,
1949
- "bytes": 4513,
1950
- "sha256": "14a6ef280ecc72e8266f1fcbf7e3bfd91ed650de27ef1d3772b15793aa8e3491"
1951
  },
1952
  "mirrors": {
1953
  "hf_space": {
1954
  "path": "hf_space:QUALITY_GATES.md",
1955
  "exists": true,
1956
- "bytes": 4513,
1957
- "sha256": "14a6ef280ecc72e8266f1fcbf7e3bfd91ed650de27ef1d3772b15793aa8e3491"
1958
  },
1959
  "hf_artifacts": {
1960
  "path": "hf_artifacts:QUALITY_GATES.md",
1961
  "exists": true,
1962
- "bytes": 4513,
1963
- "sha256": "14a6ef280ecc72e8266f1fcbf7e3bfd91ed650de27ef1d3772b15793aa8e3491"
1964
  },
1965
  "hf_model": {
1966
  "path": "hf_model:QUALITY_GATES.md",
1967
  "exists": true,
1968
- "bytes": 4513,
1969
- "sha256": "14a6ef280ecc72e8266f1fcbf7e3bfd91ed650de27ef1d3772b15793aa8e3491"
1970
  }
1971
  },
1972
  "failures": []
@@ -2064,33 +2146,64 @@
2064
  },
2065
  "failures": []
2066
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2067
  {
2068
  "name": "docs/RESEARCH_ROADMAP.md",
2069
  "status": "pass",
2070
  "local": {
2071
  "path": "repo:RESEARCH_ROADMAP.md",
2072
  "exists": true,
2073
- "bytes": 5094,
2074
- "sha256": "b61c7de1ff8ca95329fa7a1d8d9176dc4073e4340e3f28c5a74a2850de6b1756"
2075
  },
2076
  "mirrors": {
2077
  "hf_space": {
2078
  "path": "hf_space:RESEARCH_ROADMAP.md",
2079
  "exists": true,
2080
- "bytes": 5094,
2081
- "sha256": "b61c7de1ff8ca95329fa7a1d8d9176dc4073e4340e3f28c5a74a2850de6b1756"
2082
  },
2083
  "hf_artifacts": {
2084
  "path": "hf_artifacts:RESEARCH_ROADMAP.md",
2085
  "exists": true,
2086
- "bytes": 5094,
2087
- "sha256": "b61c7de1ff8ca95329fa7a1d8d9176dc4073e4340e3f28c5a74a2850de6b1756"
2088
  },
2089
  "hf_model": {
2090
  "path": "hf_model:RESEARCH_ROADMAP.md",
2091
  "exists": true,
2092
- "bytes": 5094,
2093
- "sha256": "b61c7de1ff8ca95329fa7a1d8d9176dc4073e4340e3f28c5a74a2850de6b1756"
2094
  }
2095
  },
2096
  "failures": []
@@ -2101,27 +2214,27 @@
2101
  "local": {
2102
  "path": "repo:PROJECT_STATUS.md",
2103
  "exists": true,
2104
- "bytes": 5290,
2105
- "sha256": "ae21770fdcdc18b2078e7e879c9c1e13e5094e901a1e2f4cb120ee7952b53ab8"
2106
  },
2107
  "mirrors": {
2108
  "hf_space": {
2109
  "path": "hf_space:PROJECT_STATUS.md",
2110
  "exists": true,
2111
- "bytes": 5290,
2112
- "sha256": "ae21770fdcdc18b2078e7e879c9c1e13e5094e901a1e2f4cb120ee7952b53ab8"
2113
  },
2114
  "hf_artifacts": {
2115
  "path": "hf_artifacts:PROJECT_STATUS.md",
2116
  "exists": true,
2117
- "bytes": 5290,
2118
- "sha256": "ae21770fdcdc18b2078e7e879c9c1e13e5094e901a1e2f4cb120ee7952b53ab8"
2119
  },
2120
  "hf_model": {
2121
  "path": "hf_model:PROJECT_STATUS.md",
2122
  "exists": true,
2123
- "bytes": 5290,
2124
- "sha256": "ae21770fdcdc18b2078e7e879c9c1e13e5094e901a1e2f4cb120ee7952b53ab8"
2125
  }
2126
  },
2127
  "failures": []
@@ -2132,27 +2245,27 @@
2132
  "local": {
2133
  "path": "repo:PUBLIC_SURFACE_QA.md",
2134
  "exists": true,
2135
- "bytes": 1992,
2136
- "sha256": "e423f892fa317a626113fba91b7b14fcdb82477d1124debc2b5d73ff010914e8"
2137
  },
2138
  "mirrors": {
2139
  "hf_space": {
2140
  "path": "hf_space:PUBLIC_SURFACE_QA.md",
2141
  "exists": true,
2142
- "bytes": 1992,
2143
- "sha256": "e423f892fa317a626113fba91b7b14fcdb82477d1124debc2b5d73ff010914e8"
2144
  },
2145
  "hf_artifacts": {
2146
  "path": "hf_artifacts:PUBLIC_SURFACE_QA.md",
2147
  "exists": true,
2148
- "bytes": 1992,
2149
- "sha256": "e423f892fa317a626113fba91b7b14fcdb82477d1124debc2b5d73ff010914e8"
2150
  },
2151
  "hf_model": {
2152
  "path": "hf_model:PUBLIC_SURFACE_QA.md",
2153
  "exists": true,
2154
- "bytes": 1992,
2155
- "sha256": "e423f892fa317a626113fba91b7b14fcdb82477d1124debc2b5d73ff010914e8"
2156
  }
2157
  },
2158
  "failures": []
@@ -2251,5 +2364,30 @@
2251
  "failures": []
2252
  }
2253
  ],
2254
- "failures": []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2255
  }
 
1
  {
2
+ "status": "fail",
3
+ "generated_at_utc": "2026-06-03T04:04:16+00:00",
4
  "hf_root": "hf_publish",
5
  "summary": {
6
+ "group_count": 75,
7
+ "failure_count": 3,
8
+ "failures_by_surface": {
9
+ "hf_space": 1,
10
+ "hf_artifacts": 1,
11
+ "hf_model": 1
12
+ }
13
  },
14
  "checks": [
15
  {
16
  "name": "repo_hf_space_artifact_model_data_parity",
17
+ "status": "fail"
18
  },
19
  {
20
  "name": "repo_hf_visual_asset_parity",
 
40
  "local": {
41
  "path": "repo:docs/data/artifact_index.json",
42
  "exists": true,
43
+ "bytes": 29016,
44
+ "sha256": "e86a70ddecc41330f7e0549dc3d7f7af9984cd92d5b5e5f181ba29c95833b62a"
45
  },
46
  "mirrors": {
47
  "hf_space": {
48
  "path": "hf_space:data/artifact_index.json",
49
  "exists": true,
50
+ "bytes": 29016,
51
+ "sha256": "e86a70ddecc41330f7e0549dc3d7f7af9984cd92d5b5e5f181ba29c95833b62a"
52
  },
53
  "hf_artifacts": {
54
  "path": "hf_artifacts:docs/data/artifact_index.json",
55
  "exists": true,
56
+ "bytes": 29016,
57
+ "sha256": "e86a70ddecc41330f7e0549dc3d7f7af9984cd92d5b5e5f181ba29c95833b62a"
58
  },
59
  "hf_model": {
60
  "path": "hf_model:metrics/artifact_index.json",
61
  "exists": true,
62
+ "bytes": 29016,
63
+ "sha256": "e86a70ddecc41330f7e0549dc3d7f7af9984cd92d5b5e5f181ba29c95833b62a"
64
  }
65
  },
66
  "failures": []
 
102
  "local": {
103
  "path": "repo:docs/data/evidence_contract.json",
104
  "exists": true,
105
+ "bytes": 12007,
106
+ "sha256": "abf0923da5e24b2773b19ecbc83873b05ecc99be07089c63e038a354d806217c"
107
  },
108
  "mirrors": {
109
  "hf_space": {
110
  "path": "hf_space:data/evidence_contract.json",
111
  "exists": true,
112
+ "bytes": 12007,
113
+ "sha256": "abf0923da5e24b2773b19ecbc83873b05ecc99be07089c63e038a354d806217c"
114
  },
115
  "hf_artifacts": {
116
  "path": "hf_artifacts:docs/data/evidence_contract.json",
117
  "exists": true,
118
+ "bytes": 12007,
119
+ "sha256": "abf0923da5e24b2773b19ecbc83873b05ecc99be07089c63e038a354d806217c"
120
  },
121
  "hf_model": {
122
  "path": "hf_model:metrics/evidence_contract.json",
123
  "exists": true,
124
+ "bytes": 12007,
125
+ "sha256": "abf0923da5e24b2773b19ecbc83873b05ecc99be07089c63e038a354d806217c"
126
  }
127
  },
128
  "failures": []
 
288
  "local": {
289
  "path": "repo:docs/data/project_manifest.json",
290
  "exists": true,
291
+ "bytes": 4644,
292
+ "sha256": "cf5f477e09a2cdc45b3c44078ab260df532ddd9cb64725444447f8e8f7e8f99a"
293
  },
294
  "mirrors": {
295
  "hf_space": {
296
  "path": "hf_space:data/project_manifest.json",
297
  "exists": true,
298
+ "bytes": 4644,
299
+ "sha256": "cf5f477e09a2cdc45b3c44078ab260df532ddd9cb64725444447f8e8f7e8f99a"
300
  },
301
  "hf_artifacts": {
302
  "path": "hf_artifacts:docs/data/project_manifest.json",
303
  "exists": true,
304
+ "bytes": 4644,
305
+ "sha256": "cf5f477e09a2cdc45b3c44078ab260df532ddd9cb64725444447f8e8f7e8f99a"
306
  },
307
  "hf_model": {
308
  "path": "hf_model:metrics/project_manifest.json",
309
  "exists": true,
310
+ "bytes": 4644,
311
+ "sha256": "cf5f477e09a2cdc45b3c44078ab260df532ddd9cb64725444447f8e8f7e8f99a"
312
  }
313
  },
314
  "failures": []
 
377
  },
378
  {
379
  "name": "data/publication_audit.json",
380
+ "status": "fail",
381
  "local": {
382
  "path": "repo:docs/data/publication_audit.json",
383
  "exists": true,
384
+ "bytes": 10473,
385
+ "sha256": "8b3991fa9182d41b3b8da17af35e84de9ef16bbd77a6c88413f447246ee98535"
386
  },
387
  "mirrors": {
388
  "hf_space": {
389
  "path": "hf_space:data/publication_audit.json",
390
  "exists": true,
391
+ "bytes": 7096,
392
+ "sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
393
  },
394
  "hf_artifacts": {
395
  "path": "hf_artifacts:docs/data/publication_audit.json",
396
  "exists": true,
397
+ "bytes": 7096,
398
+ "sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
399
  },
400
  "hf_model": {
401
  "path": "hf_model:metrics/publication_audit.json",
402
  "exists": true,
403
+ "bytes": 7096,
404
+ "sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
405
  }
406
  },
407
+ "failures": [
408
+ {
409
+ "surface": "hf_space",
410
+ "kind": "hash_mismatch",
411
+ "path": "hf_space:data/publication_audit.json",
412
+ "expected_sha256": "8b3991fa9182d41b3b8da17af35e84de9ef16bbd77a6c88413f447246ee98535",
413
+ "actual_sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
414
+ },
415
+ {
416
+ "surface": "hf_artifacts",
417
+ "kind": "hash_mismatch",
418
+ "path": "hf_artifacts:docs/data/publication_audit.json",
419
+ "expected_sha256": "8b3991fa9182d41b3b8da17af35e84de9ef16bbd77a6c88413f447246ee98535",
420
+ "actual_sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
421
+ },
422
+ {
423
+ "surface": "hf_model",
424
+ "kind": "hash_mismatch",
425
+ "path": "hf_model:metrics/publication_audit.json",
426
+ "expected_sha256": "8b3991fa9182d41b3b8da17af35e84de9ef16bbd77a6c88413f447246ee98535",
427
+ "actual_sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
428
+ }
429
+ ]
430
  },
431
  {
432
  "name": "data/public_surface_qa.json",
 
434
  "local": {
435
  "path": "repo:docs/data/public_surface_qa.json",
436
  "exists": true,
437
+ "bytes": 5651,
438
+ "sha256": "92ead5e68cf9a3da42c8095397f15be8a75d248b5371147f7806bc5d8e83e3ad"
439
  },
440
  "mirrors": {
441
  "hf_space": {
442
  "path": "hf_space:data/public_surface_qa.json",
443
  "exists": true,
444
+ "bytes": 5651,
445
+ "sha256": "92ead5e68cf9a3da42c8095397f15be8a75d248b5371147f7806bc5d8e83e3ad"
446
  },
447
  "hf_artifacts": {
448
  "path": "hf_artifacts:docs/data/public_surface_qa.json",
449
  "exists": true,
450
+ "bytes": 5651,
451
+ "sha256": "92ead5e68cf9a3da42c8095397f15be8a75d248b5371147f7806bc5d8e83e3ad"
452
  },
453
  "hf_model": {
454
  "path": "hf_model:metrics/public_surface_qa.json",
455
  "exists": true,
456
+ "bytes": 5651,
457
+ "sha256": "92ead5e68cf9a3da42c8095397f15be8a75d248b5371147f7806bc5d8e83e3ad"
458
  }
459
  },
460
  "failures": []
 
465
  "local": {
466
  "path": "repo:docs/data/quality_gates.json",
467
  "exists": true,
468
+ "bytes": 8147,
469
+ "sha256": "fddf86398d7187175c7321ea645c421ee599093fb1c484b1e8aa0f2a23174c3e"
470
  },
471
  "mirrors": {
472
  "hf_space": {
473
  "path": "hf_space:data/quality_gates.json",
474
  "exists": true,
475
+ "bytes": 8147,
476
+ "sha256": "fddf86398d7187175c7321ea645c421ee599093fb1c484b1e8aa0f2a23174c3e"
477
  },
478
  "hf_artifacts": {
479
  "path": "hf_artifacts:docs/data/quality_gates.json",
480
  "exists": true,
481
+ "bytes": 8147,
482
+ "sha256": "fddf86398d7187175c7321ea645c421ee599093fb1c484b1e8aa0f2a23174c3e"
483
  },
484
  "hf_model": {
485
  "path": "hf_model:metrics/quality_gates.json",
486
  "exists": true,
487
+ "bytes": 8147,
488
+ "sha256": "fddf86398d7187175c7321ea645c421ee599093fb1c484b1e8aa0f2a23174c3e"
489
+ }
490
+ },
491
+ "failures": []
492
+ },
493
+ {
494
+ "name": "data/rendered_site_check.json",
495
+ "status": "pass",
496
+ "local": {
497
+ "path": "repo:docs/data/rendered_site_check.json",
498
+ "exists": true,
499
+ "bytes": 4032,
500
+ "sha256": "2390c3663e9a110b9ed2f9c581b88a95bbd811a72ffb3e8dc780dae420e0f919"
501
+ },
502
+ "mirrors": {
503
+ "hf_space": {
504
+ "path": "hf_space:data/rendered_site_check.json",
505
+ "exists": true,
506
+ "bytes": 4032,
507
+ "sha256": "2390c3663e9a110b9ed2f9c581b88a95bbd811a72ffb3e8dc780dae420e0f919"
508
+ },
509
+ "hf_artifacts": {
510
+ "path": "hf_artifacts:docs/data/rendered_site_check.json",
511
+ "exists": true,
512
+ "bytes": 4032,
513
+ "sha256": "2390c3663e9a110b9ed2f9c581b88a95bbd811a72ffb3e8dc780dae420e0f919"
514
+ },
515
+ "hf_model": {
516
+ "path": "hf_model:metrics/rendered_site_check.json",
517
+ "exists": true,
518
+ "bytes": 4032,
519
+ "sha256": "2390c3663e9a110b9ed2f9c581b88a95bbd811a72ffb3e8dc780dae420e0f919"
520
  }
521
  },
522
  "failures": []
 
558
  "local": {
559
  "path": "repo:docs/data/research_roadmap.json",
560
  "exists": true,
561
+ "bytes": 4594,
562
+ "sha256": "bbce65e803a0fad55cc739eb2dc6fdf50a69c81362f05d216324d0813ee4ccad"
563
  },
564
  "mirrors": {
565
  "hf_space": {
566
  "path": "hf_space:data/research_roadmap.json",
567
  "exists": true,
568
+ "bytes": 4594,
569
+ "sha256": "bbce65e803a0fad55cc739eb2dc6fdf50a69c81362f05d216324d0813ee4ccad"
570
  },
571
  "hf_artifacts": {
572
  "path": "hf_artifacts:docs/data/research_roadmap.json",
573
  "exists": true,
574
+ "bytes": 4594,
575
+ "sha256": "bbce65e803a0fad55cc739eb2dc6fdf50a69c81362f05d216324d0813ee4ccad"
576
  },
577
  "hf_model": {
578
  "path": "hf_model:metrics/research_roadmap.json",
579
  "exists": true,
580
+ "bytes": 4594,
581
+ "sha256": "bbce65e803a0fad55cc739eb2dc6fdf50a69c81362f05d216324d0813ee4ccad"
582
  }
583
  },
584
  "failures": []
 
683
  "path": "repo:docs/data/scope_claims_audit.json",
684
  "exists": true,
685
  "bytes": 20066,
686
+ "sha256": "02d7c586e9e6a2d8ce99271bd0b13d6c1975dae6fa8c8ccafd398359e61d35c9"
687
  },
688
  "mirrors": {
689
  "hf_space": {
690
  "path": "hf_space:data/scope_claims_audit.json",
691
  "exists": true,
692
  "bytes": 20066,
693
+ "sha256": "02d7c586e9e6a2d8ce99271bd0b13d6c1975dae6fa8c8ccafd398359e61d35c9"
694
  },
695
  "hf_artifacts": {
696
  "path": "hf_artifacts:docs/data/scope_claims_audit.json",
697
  "exists": true,
698
  "bytes": 20066,
699
+ "sha256": "02d7c586e9e6a2d8ce99271bd0b13d6c1975dae6fa8c8ccafd398359e61d35c9"
700
  },
701
  "hf_model": {
702
  "path": "hf_model:metrics/scope_claims_audit.json",
703
  "exists": true,
704
  "bytes": 20066,
705
+ "sha256": "02d7c586e9e6a2d8ce99271bd0b13d6c1975dae6fa8c8ccafd398359e61d35c9"
706
  }
707
  },
708
  "failures": []
 
776
  "path": "repo:docs/data/task_surface_integrity.json",
777
  "exists": true,
778
  "bytes": 45780,
779
+ "sha256": "f4d2894afa2aba013ed6728ee610d6665e08ae7baac9c28e94c86ac79144023e"
780
  },
781
  "mirrors": {
782
  "hf_space": {
783
  "path": "hf_space:data/task_surface_integrity.json",
784
  "exists": true,
785
  "bytes": 45780,
786
+ "sha256": "f4d2894afa2aba013ed6728ee610d6665e08ae7baac9c28e94c86ac79144023e"
787
  },
788
  "hf_artifacts": {
789
  "path": "hf_artifacts:docs/data/task_surface_integrity.json",
790
  "exists": true,
791
  "bytes": 45780,
792
+ "sha256": "f4d2894afa2aba013ed6728ee610d6665e08ae7baac9c28e94c86ac79144023e"
793
  },
794
  "hf_model": {
795
  "path": "hf_model:metrics/task_surface_integrity.json",
796
  "exists": true,
797
  "bytes": 45780,
798
+ "sha256": "f4d2894afa2aba013ed6728ee610d6665e08ae7baac9c28e94c86ac79144023e"
799
  }
800
  },
801
  "failures": []
 
837
  "local": {
838
  "path": "repo:docs/data/website_integrity.json",
839
  "exists": true,
840
+ "bytes": 13148,
841
+ "sha256": "f54adbe50d026febc5180412fdda6a7c7d44dfd2f733f3000e735e81261c1b27"
842
  },
843
  "mirrors": {
844
  "hf_space": {
845
  "path": "hf_space:data/website_integrity.json",
846
  "exists": true,
847
+ "bytes": 13148,
848
+ "sha256": "f54adbe50d026febc5180412fdda6a7c7d44dfd2f733f3000e735e81261c1b27"
849
  },
850
  "hf_artifacts": {
851
  "path": "hf_artifacts:docs/data/website_integrity.json",
852
  "exists": true,
853
+ "bytes": 13148,
854
+ "sha256": "f54adbe50d026febc5180412fdda6a7c7d44dfd2f733f3000e735e81261c1b27"
855
  },
856
  "hf_model": {
857
  "path": "hf_model:metrics/website_integrity.json",
858
  "exists": true,
859
+ "bytes": 13148,
860
+ "sha256": "f54adbe50d026febc5180412fdda6a7c7d44dfd2f733f3000e735e81261c1b27"
861
  }
862
  },
863
  "failures": []
 
1528
  "local": {
1529
  "path": "repo:scripts/build_artifact_index.py",
1530
  "exists": true,
1531
+ "bytes": 23604,
1532
+ "sha256": "e822eaa3fcbc805ac6869c16d46d41b78e1a1cfb921afa4956dc28c0a7c8daa3"
1533
  },
1534
  "mirrors": {
1535
  "hf_artifacts": {
1536
  "path": "hf_artifacts:scripts/build_artifact_index.py",
1537
  "exists": true,
1538
+ "bytes": 23604,
1539
+ "sha256": "e822eaa3fcbc805ac6869c16d46d41b78e1a1cfb921afa4956dc28c0a7c8daa3"
1540
  },
1541
  "hf_model": {
1542
  "path": "hf_model:scripts/build_artifact_index.py",
1543
  "exists": true,
1544
+ "bytes": 23604,
1545
+ "sha256": "e822eaa3fcbc805ac6869c16d46d41b78e1a1cfb921afa4956dc28c0a7c8daa3"
1546
  }
1547
  },
1548
  "failures": []
 
1628
  "local": {
1629
  "path": "repo:scripts/build_quality_gates.py",
1630
  "exists": true,
1631
+ "bytes": 11380,
1632
+ "sha256": "e8c99db9b2698f824b580882b238a881cffeafffc0b5f768d5fad0f9ac24ae18"
1633
  },
1634
  "mirrors": {
1635
  "hf_artifacts": {
1636
  "path": "hf_artifacts:scripts/build_quality_gates.py",
1637
  "exists": true,
1638
+ "bytes": 11380,
1639
+ "sha256": "e8c99db9b2698f824b580882b238a881cffeafffc0b5f768d5fad0f9ac24ae18"
1640
  },
1641
  "hf_model": {
1642
  "path": "hf_model:scripts/build_quality_gates.py",
1643
  "exists": true,
1644
+ "bytes": 11380,
1645
+ "sha256": "e8c99db9b2698f824b580882b238a881cffeafffc0b5f768d5fad0f9ac24ae18"
1646
  }
1647
  },
1648
  "failures": []
 
1653
  "local": {
1654
  "path": "repo:scripts/build_public_surface_qa.py",
1655
  "exists": true,
1656
+ "bytes": 11894,
1657
+ "sha256": "d0e86f45f2f23670e967c1a92024797a59106116ac9d948c35972512384f41de"
1658
  },
1659
  "mirrors": {
1660
  "hf_artifacts": {
1661
  "path": "hf_artifacts:scripts/build_public_surface_qa.py",
1662
  "exists": true,
1663
+ "bytes": 11894,
1664
+ "sha256": "d0e86f45f2f23670e967c1a92024797a59106116ac9d948c35972512384f41de"
1665
  },
1666
  "hf_model": {
1667
  "path": "hf_model:scripts/build_public_surface_qa.py",
1668
  "exists": true,
1669
+ "bytes": 11894,
1670
+ "sha256": "d0e86f45f2f23670e967c1a92024797a59106116ac9d948c35972512384f41de"
1671
+ }
1672
+ },
1673
+ "failures": []
1674
+ },
1675
+ {
1676
+ "name": "scripts/build_rendered_site_check.py",
1677
+ "status": "pass",
1678
+ "local": {
1679
+ "path": "repo:scripts/build_rendered_site_check.py",
1680
+ "exists": true,
1681
+ "bytes": 7820,
1682
+ "sha256": "670f31c75e9d641ef20f8ad761a63104e96fd631372c965c7f7746a692b4d514"
1683
+ },
1684
+ "mirrors": {
1685
+ "hf_artifacts": {
1686
+ "path": "hf_artifacts:scripts/build_rendered_site_check.py",
1687
+ "exists": true,
1688
+ "bytes": 7820,
1689
+ "sha256": "670f31c75e9d641ef20f8ad761a63104e96fd631372c965c7f7746a692b4d514"
1690
+ },
1691
+ "hf_model": {
1692
+ "path": "hf_model:scripts/build_rendered_site_check.py",
1693
+ "exists": true,
1694
+ "bytes": 7820,
1695
+ "sha256": "670f31c75e9d641ef20f8ad761a63104e96fd631372c965c7f7746a692b4d514"
1696
  }
1697
  },
1698
  "failures": []
 
1728
  "local": {
1729
  "path": "repo:scripts/verify_live_publication.py",
1730
  "exists": true,
1731
+ "bytes": 28398,
1732
+ "sha256": "bcc5377beea66e731866182f307be7ed2c51a56d7cd6055d6f5e8c9643e274d3"
1733
  },
1734
  "mirrors": {
1735
  "hf_artifacts": {
1736
  "path": "hf_artifacts:scripts/verify_live_publication.py",
1737
  "exists": true,
1738
+ "bytes": 28398,
1739
+ "sha256": "bcc5377beea66e731866182f307be7ed2c51a56d7cd6055d6f5e8c9643e274d3"
1740
  },
1741
  "hf_model": {
1742
  "path": "hf_model:scripts/verify_live_publication.py",
1743
  "exists": true,
1744
+ "bytes": 28398,
1745
+ "sha256": "bcc5377beea66e731866182f307be7ed2c51a56d7cd6055d6f5e8c9643e274d3"
1746
  }
1747
  },
1748
  "failures": []
 
1753
  "local": {
1754
  "path": "repo:scripts/validate_mirror_parity.py",
1755
  "exists": true,
1756
+ "bytes": 10446,
1757
+ "sha256": "77d1297b7faa1605e50b31e11f30e4f4b8af4b3d566d80bc93d9886295efd15e"
1758
  },
1759
  "mirrors": {
1760
  "hf_artifacts": {
1761
  "path": "hf_artifacts:scripts/validate_mirror_parity.py",
1762
  "exists": true,
1763
+ "bytes": 10446,
1764
+ "sha256": "77d1297b7faa1605e50b31e11f30e4f4b8af4b3d566d80bc93d9886295efd15e"
1765
  },
1766
  "hf_model": {
1767
  "path": "hf_model:scripts/validate_mirror_parity.py",
1768
  "exists": true,
1769
+ "bytes": 10446,
1770
+ "sha256": "77d1297b7faa1605e50b31e11f30e4f4b8af4b3d566d80bc93d9886295efd15e"
1771
  }
1772
  },
1773
  "failures": []
 
1778
  "local": {
1779
  "path": "repo:scripts/validate_publication_package.py",
1780
  "exists": true,
1781
+ "bytes": 19097,
1782
+ "sha256": "1073dd6539d4b998150a820e5eb2a5267ea9d492cbe1929f1d958567b3935649"
1783
  },
1784
  "mirrors": {
1785
  "hf_artifacts": {
1786
  "path": "hf_artifacts:scripts/validate_publication_package.py",
1787
  "exists": true,
1788
+ "bytes": 19097,
1789
+ "sha256": "1073dd6539d4b998150a820e5eb2a5267ea9d492cbe1929f1d958567b3935649"
1790
  },
1791
  "hf_model": {
1792
  "path": "hf_model:scripts/validate_publication_package.py",
1793
  "exists": true,
1794
+ "bytes": 19097,
1795
+ "sha256": "1073dd6539d4b998150a820e5eb2a5267ea9d492cbe1929f1d958567b3935649"
1796
  }
1797
  },
1798
  "failures": []
 
1878
  "local": {
1879
  "path": "repo:scripts/validate_website_integrity.py",
1880
  "exists": true,
1881
+ "bytes": 22821,
1882
+ "sha256": "6385dc491daad67f771df9d44895a2e930f572127684c421b132e2d1866040dc"
1883
  },
1884
  "mirrors": {
1885
  "hf_artifacts": {
1886
  "path": "hf_artifacts:scripts/validate_website_integrity.py",
1887
  "exists": true,
1888
+ "bytes": 22821,
1889
+ "sha256": "6385dc491daad67f771df9d44895a2e930f572127684c421b132e2d1866040dc"
1890
  },
1891
  "hf_model": {
1892
  "path": "hf_model:scripts/validate_website_integrity.py",
1893
  "exists": true,
1894
+ "bytes": 22821,
1895
+ "sha256": "6385dc491daad67f771df9d44895a2e930f572127684c421b132e2d1866040dc"
1896
  }
1897
  },
1898
  "failures": []
 
1903
  "local": {
1904
  "path": "repo:scripts/publish_hf_bundles.py",
1905
  "exists": true,
1906
+ "bytes": 8996,
1907
+ "sha256": "9790951493763e6490d01fec62661df2bbe2a3341466fe41298b95cda0900229"
1908
  },
1909
  "mirrors": {
1910
  "hf_artifacts": {
1911
  "path": "hf_artifacts:scripts/publish_hf_bundles.py",
1912
  "exists": true,
1913
+ "bytes": 8996,
1914
+ "sha256": "9790951493763e6490d01fec62661df2bbe2a3341466fe41298b95cda0900229"
1915
  },
1916
  "hf_model": {
1917
  "path": "hf_model:scripts/publish_hf_bundles.py",
1918
  "exists": true,
1919
+ "bytes": 8996,
1920
+ "sha256": "9790951493763e6490d01fec62661df2bbe2a3341466fe41298b95cda0900229"
1921
  }
1922
  },
1923
  "failures": []
 
1978
  "local": {
1979
  "path": "repo:docs/index.html",
1980
  "exists": true,
1981
+ "bytes": 159797,
1982
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
1983
  },
1984
  "mirrors": {
1985
  "hf_space": {
1986
  "path": "hf_space:index.html",
1987
  "exists": true,
1988
+ "bytes": 159797,
1989
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
1990
  },
1991
  "hf_artifacts_docs": {
1992
  "path": "hf_artifacts:docs/index.html",
1993
  "exists": true,
1994
+ "bytes": 159797,
1995
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
1996
  }
1997
  },
1998
  "failures": []
 
2028
  "local": {
2029
  "path": "repo:QUALITY_GATES.md",
2030
  "exists": true,
2031
+ "bytes": 4919,
2032
+ "sha256": "7138e99b116c44f128cd2f749e9d7427e496cb7596d30d54dd44af79be80df81"
2033
  },
2034
  "mirrors": {
2035
  "hf_space": {
2036
  "path": "hf_space:QUALITY_GATES.md",
2037
  "exists": true,
2038
+ "bytes": 4919,
2039
+ "sha256": "7138e99b116c44f128cd2f749e9d7427e496cb7596d30d54dd44af79be80df81"
2040
  },
2041
  "hf_artifacts": {
2042
  "path": "hf_artifacts:QUALITY_GATES.md",
2043
  "exists": true,
2044
+ "bytes": 4919,
2045
+ "sha256": "7138e99b116c44f128cd2f749e9d7427e496cb7596d30d54dd44af79be80df81"
2046
  },
2047
  "hf_model": {
2048
  "path": "hf_model:QUALITY_GATES.md",
2049
  "exists": true,
2050
+ "bytes": 4919,
2051
+ "sha256": "7138e99b116c44f128cd2f749e9d7427e496cb7596d30d54dd44af79be80df81"
2052
  }
2053
  },
2054
  "failures": []
 
2146
  },
2147
  "failures": []
2148
  },
2149
+ {
2150
+ "name": "docs/RENDERED_SITE_CHECK.md",
2151
+ "status": "pass",
2152
+ "local": {
2153
+ "path": "repo:RENDERED_SITE_CHECK.md",
2154
+ "exists": true,
2155
+ "bytes": 1922,
2156
+ "sha256": "be747c041579fa1b1131ad1f8935217c607d7307843c88fef5e656cd74a74471"
2157
+ },
2158
+ "mirrors": {
2159
+ "hf_space": {
2160
+ "path": "hf_space:RENDERED_SITE_CHECK.md",
2161
+ "exists": true,
2162
+ "bytes": 1922,
2163
+ "sha256": "be747c041579fa1b1131ad1f8935217c607d7307843c88fef5e656cd74a74471"
2164
+ },
2165
+ "hf_artifacts": {
2166
+ "path": "hf_artifacts:RENDERED_SITE_CHECK.md",
2167
+ "exists": true,
2168
+ "bytes": 1922,
2169
+ "sha256": "be747c041579fa1b1131ad1f8935217c607d7307843c88fef5e656cd74a74471"
2170
+ },
2171
+ "hf_model": {
2172
+ "path": "hf_model:RENDERED_SITE_CHECK.md",
2173
+ "exists": true,
2174
+ "bytes": 1922,
2175
+ "sha256": "be747c041579fa1b1131ad1f8935217c607d7307843c88fef5e656cd74a74471"
2176
+ }
2177
+ },
2178
+ "failures": []
2179
+ },
2180
  {
2181
  "name": "docs/RESEARCH_ROADMAP.md",
2182
  "status": "pass",
2183
  "local": {
2184
  "path": "repo:RESEARCH_ROADMAP.md",
2185
  "exists": true,
2186
+ "bytes": 5051,
2187
+ "sha256": "1d640dbc0bcba26d72dbedd4c2dacb04e38bc7c3b11ac79f57b52c2a6e8caec3"
2188
  },
2189
  "mirrors": {
2190
  "hf_space": {
2191
  "path": "hf_space:RESEARCH_ROADMAP.md",
2192
  "exists": true,
2193
+ "bytes": 5051,
2194
+ "sha256": "1d640dbc0bcba26d72dbedd4c2dacb04e38bc7c3b11ac79f57b52c2a6e8caec3"
2195
  },
2196
  "hf_artifacts": {
2197
  "path": "hf_artifacts:RESEARCH_ROADMAP.md",
2198
  "exists": true,
2199
+ "bytes": 5051,
2200
+ "sha256": "1d640dbc0bcba26d72dbedd4c2dacb04e38bc7c3b11ac79f57b52c2a6e8caec3"
2201
  },
2202
  "hf_model": {
2203
  "path": "hf_model:RESEARCH_ROADMAP.md",
2204
  "exists": true,
2205
+ "bytes": 5051,
2206
+ "sha256": "1d640dbc0bcba26d72dbedd4c2dacb04e38bc7c3b11ac79f57b52c2a6e8caec3"
2207
  }
2208
  },
2209
  "failures": []
 
2214
  "local": {
2215
  "path": "repo:PROJECT_STATUS.md",
2216
  "exists": true,
2217
+ "bytes": 5385,
2218
+ "sha256": "353e177fac7a2009c475b8ae833117ae4cf68ca69307d9e1c292b6e13a18be61"
2219
  },
2220
  "mirrors": {
2221
  "hf_space": {
2222
  "path": "hf_space:PROJECT_STATUS.md",
2223
  "exists": true,
2224
+ "bytes": 5385,
2225
+ "sha256": "353e177fac7a2009c475b8ae833117ae4cf68ca69307d9e1c292b6e13a18be61"
2226
  },
2227
  "hf_artifacts": {
2228
  "path": "hf_artifacts:PROJECT_STATUS.md",
2229
  "exists": true,
2230
+ "bytes": 5385,
2231
+ "sha256": "353e177fac7a2009c475b8ae833117ae4cf68ca69307d9e1c292b6e13a18be61"
2232
  },
2233
  "hf_model": {
2234
  "path": "hf_model:PROJECT_STATUS.md",
2235
  "exists": true,
2236
+ "bytes": 5385,
2237
+ "sha256": "353e177fac7a2009c475b8ae833117ae4cf68ca69307d9e1c292b6e13a18be61"
2238
  }
2239
  },
2240
  "failures": []
 
2245
  "local": {
2246
  "path": "repo:PUBLIC_SURFACE_QA.md",
2247
  "exists": true,
2248
+ "bytes": 1988,
2249
+ "sha256": "b93b5c16c87a5b9f87de937ae1ca68a59668c039fdec75765049c526b6e83326"
2250
  },
2251
  "mirrors": {
2252
  "hf_space": {
2253
  "path": "hf_space:PUBLIC_SURFACE_QA.md",
2254
  "exists": true,
2255
+ "bytes": 1988,
2256
+ "sha256": "b93b5c16c87a5b9f87de937ae1ca68a59668c039fdec75765049c526b6e83326"
2257
  },
2258
  "hf_artifacts": {
2259
  "path": "hf_artifacts:PUBLIC_SURFACE_QA.md",
2260
  "exists": true,
2261
+ "bytes": 1988,
2262
+ "sha256": "b93b5c16c87a5b9f87de937ae1ca68a59668c039fdec75765049c526b6e83326"
2263
  },
2264
  "hf_model": {
2265
  "path": "hf_model:PUBLIC_SURFACE_QA.md",
2266
  "exists": true,
2267
+ "bytes": 1988,
2268
+ "sha256": "b93b5c16c87a5b9f87de937ae1ca68a59668c039fdec75765049c526b6e83326"
2269
  }
2270
  },
2271
  "failures": []
 
2364
  "failures": []
2365
  }
2366
  ],
2367
+ "failures": [
2368
+ {
2369
+ "group": "data/publication_audit.json",
2370
+ "surface": "hf_space",
2371
+ "kind": "hash_mismatch",
2372
+ "path": "hf_space:data/publication_audit.json",
2373
+ "expected_sha256": "8b3991fa9182d41b3b8da17af35e84de9ef16bbd77a6c88413f447246ee98535",
2374
+ "actual_sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
2375
+ },
2376
+ {
2377
+ "group": "data/publication_audit.json",
2378
+ "surface": "hf_artifacts",
2379
+ "kind": "hash_mismatch",
2380
+ "path": "hf_artifacts:docs/data/publication_audit.json",
2381
+ "expected_sha256": "8b3991fa9182d41b3b8da17af35e84de9ef16bbd77a6c88413f447246ee98535",
2382
+ "actual_sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
2383
+ },
2384
+ {
2385
+ "group": "data/publication_audit.json",
2386
+ "surface": "hf_model",
2387
+ "kind": "hash_mismatch",
2388
+ "path": "hf_model:metrics/publication_audit.json",
2389
+ "expected_sha256": "8b3991fa9182d41b3b8da17af35e84de9ef16bbd77a6c88413f447246ee98535",
2390
+ "actual_sha256": "130753647d34a493d61988311215a2418de082a6ed55ecc2369672bb4f96b841"
2391
+ }
2392
+ ]
2393
  }
docs/data/publication_audit.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
- "status": "pass",
3
- "generated_at_utc": "2026-06-02T17:35:52+00:00",
4
  "checks": [
5
  {
6
  "name": "required_publication_assets_present",
@@ -29,8 +29,8 @@
29
  },
30
  {
31
  "name": "no_local_filesystem_paths_in_public_text",
32
- "status": "pass",
33
- "count": 0
34
  },
35
  {
36
  "name": "no_stale_task_suite_presentation_copy",
@@ -54,6 +54,7 @@
54
  "RESEARCH_TAKEAWAYS.md": true,
55
  "QUALITY_GATES.md": true,
56
  "PUBLIC_SURFACE_QA.md": true,
 
57
  "EVALUATION_PROTOCOL.md": true,
58
  "FIGURE_INDEX.md": true,
59
  "SOURCE_ALIGNMENT_AUDIT.md": true,
@@ -87,6 +88,7 @@
87
  "docs/data/modality_atlas.json": true,
88
  "docs/data/mirror_parity.json": true,
89
  "docs/data/public_surface_qa.json": true,
 
90
  "docs/data/scope_claims_audit.json": true,
91
  "docs/data/task_surface_integrity.json": true,
92
  "docs/data/website_integrity.json": true,
@@ -121,6 +123,7 @@
121
  "scripts/build_figure_index.py": true,
122
  "scripts/build_quality_gates.py": true,
123
  "scripts/build_public_surface_qa.py": true,
 
124
  "scripts/verify_live_publication.py": true,
125
  "scripts/validate_mirror_parity.py": true,
126
  "scripts/validate_scope_claims.py": true,
@@ -135,7 +138,7 @@
135
  "surface": "github_repo",
136
  "path": "README.md",
137
  "exists": true,
138
- "required_marker_count": 19,
139
  "missing_markers": [],
140
  "status": "pass"
141
  },
@@ -143,7 +146,7 @@
143
  "surface": "hf_space_bundle",
144
  "path": "README.md",
145
  "exists": true,
146
- "required_marker_count": 19,
147
  "missing_markers": [],
148
  "status": "pass"
149
  },
@@ -151,7 +154,7 @@
151
  "surface": "hf_artifact_bundle",
152
  "path": "README.md",
153
  "exists": true,
154
- "required_marker_count": 18,
155
  "missing_markers": [],
156
  "status": "pass"
157
  },
@@ -159,7 +162,7 @@
159
  "surface": "hf_artifact_bundle",
160
  "path": "PROJECT_README.md",
161
  "exists": true,
162
- "required_marker_count": 19,
163
  "missing_markers": [],
164
  "status": "pass"
165
  },
@@ -167,7 +170,7 @@
167
  "surface": "hf_model_bundle",
168
  "path": "README.md",
169
  "exists": true,
170
- "required_marker_count": 19,
171
  "missing_markers": [],
172
  "status": "pass"
173
  }
@@ -176,47 +179,140 @@
176
  "github_repo": {
177
  "root": "repo",
178
  "exists": true,
179
- "file_count": 330,
180
- "text_file_count": 266,
181
  "largest_file": {
182
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
183
  "bytes": 52601010
184
  },
185
- "violations": []
 
 
 
 
 
 
 
 
 
 
 
186
  },
187
  "hf_space_bundle": {
188
  "root": "hf_publish/space",
189
  "exists": true,
190
- "file_count": 116,
191
- "text_file_count": 89,
192
  "largest_file": {
193
- "path": "assets/task_suite_infographic.png",
194
- "bytes": 2618313
195
  },
196
- "violations": []
 
 
 
 
 
 
 
 
 
 
 
197
  },
198
  "hf_artifact_bundle": {
199
  "root": "hf_publish/artifacts",
200
  "exists": true,
201
- "file_count": 359,
202
- "text_file_count": 275,
203
  "largest_file": {
204
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
205
  "bytes": 52601010
206
  },
207
- "violations": []
 
 
 
 
 
 
 
 
 
 
 
208
  },
209
  "hf_model_bundle": {
210
  "root": "hf_publish/model",
211
  "exists": true,
212
- "file_count": 536,
213
- "text_file_count": 420,
214
  "largest_file": {
215
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
216
  "bytes": 52601010
217
  },
218
- "violations": []
 
 
 
 
 
 
 
 
 
 
 
219
  }
220
  },
221
- "violations": []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  }
 
1
  {
2
+ "status": "fail",
3
+ "generated_at_utc": "2026-06-03T04:04:18+00:00",
4
  "checks": [
5
  {
6
  "name": "required_publication_assets_present",
 
29
  },
30
  {
31
  "name": "no_local_filesystem_paths_in_public_text",
32
+ "status": "fail",
33
+ "count": 8
34
  },
35
  {
36
  "name": "no_stale_task_suite_presentation_copy",
 
54
  "RESEARCH_TAKEAWAYS.md": true,
55
  "QUALITY_GATES.md": true,
56
  "PUBLIC_SURFACE_QA.md": true,
57
+ "RENDERED_SITE_CHECK.md": true,
58
  "EVALUATION_PROTOCOL.md": true,
59
  "FIGURE_INDEX.md": true,
60
  "SOURCE_ALIGNMENT_AUDIT.md": true,
 
88
  "docs/data/modality_atlas.json": true,
89
  "docs/data/mirror_parity.json": true,
90
  "docs/data/public_surface_qa.json": true,
91
+ "docs/data/rendered_site_check.json": true,
92
  "docs/data/scope_claims_audit.json": true,
93
  "docs/data/task_surface_integrity.json": true,
94
  "docs/data/website_integrity.json": true,
 
123
  "scripts/build_figure_index.py": true,
124
  "scripts/build_quality_gates.py": true,
125
  "scripts/build_public_surface_qa.py": true,
126
+ "scripts/build_rendered_site_check.py": true,
127
  "scripts/verify_live_publication.py": true,
128
  "scripts/validate_mirror_parity.py": true,
129
  "scripts/validate_scope_claims.py": true,
 
138
  "surface": "github_repo",
139
  "path": "README.md",
140
  "exists": true,
141
+ "required_marker_count": 20,
142
  "missing_markers": [],
143
  "status": "pass"
144
  },
 
146
  "surface": "hf_space_bundle",
147
  "path": "README.md",
148
  "exists": true,
149
+ "required_marker_count": 20,
150
  "missing_markers": [],
151
  "status": "pass"
152
  },
 
154
  "surface": "hf_artifact_bundle",
155
  "path": "README.md",
156
  "exists": true,
157
+ "required_marker_count": 19,
158
  "missing_markers": [],
159
  "status": "pass"
160
  },
 
162
  "surface": "hf_artifact_bundle",
163
  "path": "PROJECT_README.md",
164
  "exists": true,
165
+ "required_marker_count": 20,
166
  "missing_markers": [],
167
  "status": "pass"
168
  },
 
170
  "surface": "hf_model_bundle",
171
  "path": "README.md",
172
  "exists": true,
173
+ "required_marker_count": 20,
174
  "missing_markers": [],
175
  "status": "pass"
176
  }
 
179
  "github_repo": {
180
  "root": "repo",
181
  "exists": true,
182
+ "file_count": 352,
183
+ "text_file_count": 288,
184
  "largest_file": {
185
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
186
  "bytes": 52601010
187
  },
188
+ "violations": [
189
+ {
190
+ "kind": "local_filesystem_path",
191
+ "path": "scripts/single_episode_diagnostics.py",
192
+ "detail": "local macOS user path in public text"
193
+ },
194
+ {
195
+ "kind": "local_filesystem_path",
196
+ "path": "scripts/single_episode_diagnostics.py",
197
+ "detail": "local scratch path in public text"
198
+ }
199
+ ]
200
  },
201
  "hf_space_bundle": {
202
  "root": "hf_publish/space",
203
  "exists": true,
204
+ "file_count": 135,
205
+ "text_file_count": 108,
206
  "largest_file": {
207
+ "path": "data/single_episode_explorer.json",
208
+ "bytes": 4101241
209
  },
210
+ "violations": [
211
+ {
212
+ "kind": "local_filesystem_path",
213
+ "path": "results/single_episode_diagnostics/provenance.json",
214
+ "detail": "local macOS user path in public text"
215
+ },
216
+ {
217
+ "kind": "local_filesystem_path",
218
+ "path": "results/single_episode_diagnostics/object_labels/object_vocab.json",
219
+ "detail": "local macOS user path in public text"
220
+ }
221
+ ]
222
  },
223
  "hf_artifact_bundle": {
224
  "root": "hf_publish/artifacts",
225
  "exists": true,
226
+ "file_count": 381,
227
+ "text_file_count": 297,
228
  "largest_file": {
229
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
230
  "bytes": 52601010
231
  },
232
+ "violations": [
233
+ {
234
+ "kind": "local_filesystem_path",
235
+ "path": "results/single_episode_diagnostics/provenance.json",
236
+ "detail": "local macOS user path in public text"
237
+ },
238
+ {
239
+ "kind": "local_filesystem_path",
240
+ "path": "results/single_episode_diagnostics/object_labels/object_vocab.json",
241
+ "detail": "local macOS user path in public text"
242
+ }
243
+ ]
244
  },
245
  "hf_model_bundle": {
246
  "root": "hf_publish/model",
247
  "exists": true,
248
+ "file_count": 561,
249
+ "text_file_count": 445,
250
  "largest_file": {
251
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
252
  "bytes": 52601010
253
  },
254
+ "violations": [
255
+ {
256
+ "kind": "local_filesystem_path",
257
+ "path": "results/single_episode_diagnostics/provenance.json",
258
+ "detail": "local macOS user path in public text"
259
+ },
260
+ {
261
+ "kind": "local_filesystem_path",
262
+ "path": "results/single_episode_diagnostics/object_labels/object_vocab.json",
263
+ "detail": "local macOS user path in public text"
264
+ }
265
+ ]
266
  }
267
  },
268
+ "violations": [
269
+ {
270
+ "root": "github_repo",
271
+ "kind": "local_filesystem_path",
272
+ "path": "scripts/single_episode_diagnostics.py",
273
+ "detail": "local macOS user path in public text"
274
+ },
275
+ {
276
+ "root": "github_repo",
277
+ "kind": "local_filesystem_path",
278
+ "path": "scripts/single_episode_diagnostics.py",
279
+ "detail": "local scratch path in public text"
280
+ },
281
+ {
282
+ "root": "hf_space_bundle",
283
+ "kind": "local_filesystem_path",
284
+ "path": "results/single_episode_diagnostics/provenance.json",
285
+ "detail": "local macOS user path in public text"
286
+ },
287
+ {
288
+ "root": "hf_space_bundle",
289
+ "kind": "local_filesystem_path",
290
+ "path": "results/single_episode_diagnostics/object_labels/object_vocab.json",
291
+ "detail": "local macOS user path in public text"
292
+ },
293
+ {
294
+ "root": "hf_artifact_bundle",
295
+ "kind": "local_filesystem_path",
296
+ "path": "results/single_episode_diagnostics/provenance.json",
297
+ "detail": "local macOS user path in public text"
298
+ },
299
+ {
300
+ "root": "hf_artifact_bundle",
301
+ "kind": "local_filesystem_path",
302
+ "path": "results/single_episode_diagnostics/object_labels/object_vocab.json",
303
+ "detail": "local macOS user path in public text"
304
+ },
305
+ {
306
+ "root": "hf_model_bundle",
307
+ "kind": "local_filesystem_path",
308
+ "path": "results/single_episode_diagnostics/provenance.json",
309
+ "detail": "local macOS user path in public text"
310
+ },
311
+ {
312
+ "root": "hf_model_bundle",
313
+ "kind": "local_filesystem_path",
314
+ "path": "results/single_episode_diagnostics/object_labels/object_vocab.json",
315
+ "detail": "local macOS user path in public text"
316
+ }
317
+ ]
318
  }
docs/data/single_episode_explorer.json ADDED
The diff for this file is too large to render. See raw diff
 
docs/data/website_integrity.json CHANGED
@@ -1,14 +1,14 @@
1
  {
2
  "status": "pass",
3
- "generated_at_utc": "2026-06-02T17:31:49+00:00",
4
  "docs_root": "docs",
5
  "site_base": "/ropedia-xperience-10m-task-suite/",
6
  "summary": {
7
- "html_pages": 2,
8
- "local_references": 99,
9
- "external_reference_count": 80,
10
- "json_files": 27,
11
- "image_assets_referenced": 19,
12
  "failure_count": 0
13
  },
14
  "failures": {
@@ -74,8 +74,8 @@
74
  "name": "project_overview_precedes_progress_ledger",
75
  "status": "pass",
76
  "reason": "The project overview should appear before the deeper progress ledger.",
77
- "overview_index": 60551,
78
- "evidence_index": 73976
79
  },
80
  {
81
  "name": "project_status_links_json",
@@ -83,13 +83,48 @@
83
  "reason": "The website should expose the machine-readable project status.",
84
  "marker_count": 2
85
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  {
87
  "name": "evaluation_protocol_between_overview_and_progress",
88
  "status": "pass",
89
  "reason": "The evaluation protocol should appear before the deeper evidence ledger.",
90
- "overview_index": 60551,
91
- "protocol_index": 71379,
92
- "evidence_index": 73976
93
  },
94
  {
95
  "name": "evaluation_protocol_links_json",
@@ -163,14 +198,20 @@
163
  {
164
  "path": "index.html",
165
  "id_count": 75,
166
- "reference_count": 98,
167
  "image_count": 22
 
 
 
 
 
 
168
  }
169
  ],
170
  "json_files": [
171
  {
172
  "path": "data/artifact_index.json",
173
- "bytes": 27749,
174
  "top_level_type": "dict"
175
  },
176
  {
@@ -185,7 +226,7 @@
185
  },
186
  {
187
  "path": "data/evidence_contract.json",
188
- "bytes": 11570,
189
  "top_level_type": "dict"
190
  },
191
  {
@@ -200,7 +241,7 @@
200
  },
201
  {
202
  "path": "data/mirror_parity.json",
203
- "bytes": 74690,
204
  "top_level_type": "dict"
205
  },
206
  {
@@ -215,7 +256,7 @@
215
  },
216
  {
217
  "path": "data/project_manifest.json",
218
- "bytes": 4468,
219
  "top_level_type": "dict"
220
  },
221
  {
@@ -230,17 +271,22 @@
230
  },
231
  {
232
  "path": "data/public_surface_qa.json",
233
- "bytes": 5454,
234
  "top_level_type": "dict"
235
  },
236
  {
237
  "path": "data/publication_audit.json",
238
- "bytes": 6883,
239
  "top_level_type": "dict"
240
  },
241
  {
242
  "path": "data/quality_gates.json",
243
- "bytes": 7528,
 
 
 
 
 
244
  "top_level_type": "dict"
245
  },
246
  {
@@ -260,7 +306,7 @@
260
  },
261
  {
262
  "path": "data/research_roadmap.json",
263
- "bytes": 4590,
264
  "top_level_type": "dict"
265
  },
266
  {
@@ -273,6 +319,11 @@
273
  "bytes": 20066,
274
  "top_level_type": "dict"
275
  },
 
 
 
 
 
276
  {
277
  "path": "data/source_alignment_audit.json",
278
  "bytes": 4432,
@@ -295,7 +346,7 @@
295
  },
296
  {
297
  "path": "data/website_integrity.json",
298
- "bytes": 11444,
299
  "top_level_type": "dict"
300
  },
301
  {
@@ -313,6 +364,14 @@
313
  "height": 64,
314
  "format": "PNG"
315
  },
 
 
 
 
 
 
 
 
316
  {
317
  "path": "assets/charts/cross_modal_retrieval.svg",
318
  "exists": true,
 
1
  {
2
  "status": "pass",
3
+ "generated_at_utc": "2026-06-03T04:04:17+00:00",
4
  "docs_root": "docs",
5
  "site_base": "/ropedia-xperience-10m-task-suite/",
6
  "summary": {
7
+ "html_pages": 3,
8
+ "local_references": 109,
9
+ "external_reference_count": 83,
10
+ "json_files": 29,
11
+ "image_assets_referenced": 20,
12
  "failure_count": 0
13
  },
14
  "failures": {
 
74
  "name": "project_overview_precedes_progress_ledger",
75
  "status": "pass",
76
  "reason": "The project overview should appear before the deeper progress ledger.",
77
+ "overview_index": 60611,
78
+ "evidence_index": 74036
79
  },
80
  {
81
  "name": "project_status_links_json",
 
83
  "reason": "The website should expose the machine-readable project status.",
84
  "marker_count": 2
85
  },
86
+ {
87
+ "name": "roadmap_links_json",
88
+ "status": "pass",
89
+ "reason": "The website should expose the machine-readable research roadmap.",
90
+ "marker_count": 2
91
+ },
92
+ {
93
+ "name": "rendered_site_check_links_json",
94
+ "status": "pass",
95
+ "reason": "The website should expose the browser-level rendered website check.",
96
+ "marker_count": 1
97
+ },
98
+ {
99
+ "name": "roadmap_html_matches_json_phases",
100
+ "status": "pass",
101
+ "reason": "The roadmap section should show every stage defined in research_roadmap.json.",
102
+ "phase_count": 5,
103
+ "missing_phase_names": [],
104
+ "roadmap_json_error": null
105
+ },
106
+ {
107
+ "name": "roadmap_status_chips_match_json",
108
+ "status": "pass",
109
+ "reason": "The roadmap status chips should match the phase statuses in research_roadmap.json.",
110
+ "phase_count": 5,
111
+ "statuses": [
112
+ "implemented",
113
+ "active",
114
+ "next",
115
+ "planned",
116
+ "planned"
117
+ ],
118
+ "missing_statuses": [],
119
+ "roadmap_json_error": null
120
+ },
121
  {
122
  "name": "evaluation_protocol_between_overview_and_progress",
123
  "status": "pass",
124
  "reason": "The evaluation protocol should appear before the deeper evidence ledger.",
125
+ "overview_index": 60611,
126
+ "protocol_index": 71439,
127
+ "evidence_index": 74036
128
  },
129
  {
130
  "name": "evaluation_protocol_links_json",
 
198
  {
199
  "path": "index.html",
200
  "id_count": 75,
201
+ "reference_count": 102,
202
  "image_count": 22
203
+ },
204
+ {
205
+ "path": "single_episode_explorer.html",
206
+ "id_count": 26,
207
+ "reference_count": 6,
208
+ "image_count": 1
209
  }
210
  ],
211
  "json_files": [
212
  {
213
  "path": "data/artifact_index.json",
214
+ "bytes": 29016,
215
  "top_level_type": "dict"
216
  },
217
  {
 
226
  },
227
  {
228
  "path": "data/evidence_contract.json",
229
+ "bytes": 12007,
230
  "top_level_type": "dict"
231
  },
232
  {
 
241
  },
242
  {
243
  "path": "data/mirror_parity.json",
244
+ "bytes": 81842,
245
  "top_level_type": "dict"
246
  },
247
  {
 
256
  },
257
  {
258
  "path": "data/project_manifest.json",
259
+ "bytes": 4644,
260
  "top_level_type": "dict"
261
  },
262
  {
 
271
  },
272
  {
273
  "path": "data/public_surface_qa.json",
274
+ "bytes": 5651,
275
  "top_level_type": "dict"
276
  },
277
  {
278
  "path": "data/publication_audit.json",
279
+ "bytes": 10473,
280
  "top_level_type": "dict"
281
  },
282
  {
283
  "path": "data/quality_gates.json",
284
+ "bytes": 8147,
285
+ "top_level_type": "dict"
286
+ },
287
+ {
288
+ "path": "data/rendered_site_check.json",
289
+ "bytes": 4032,
290
  "top_level_type": "dict"
291
  },
292
  {
 
306
  },
307
  {
308
  "path": "data/research_roadmap.json",
309
+ "bytes": 4594,
310
  "top_level_type": "dict"
311
  },
312
  {
 
319
  "bytes": 20066,
320
  "top_level_type": "dict"
321
  },
322
+ {
323
+ "path": "data/single_episode_explorer.json",
324
+ "bytes": 4101241,
325
+ "top_level_type": "dict"
326
+ },
327
  {
328
  "path": "data/source_alignment_audit.json",
329
  "bytes": 4432,
 
346
  },
347
  {
348
  "path": "data/website_integrity.json",
349
+ "bytes": 13148,
350
  "top_level_type": "dict"
351
  },
352
  {
 
364
  "height": 64,
365
  "format": "PNG"
366
  },
367
+ {
368
+ "path": "assets/brand/xperience10m-logo-mark-192.png",
369
+ "exists": true,
370
+ "bytes": 41318,
371
+ "width": 192,
372
+ "height": 192,
373
+ "format": "PNG"
374
+ },
375
  {
376
  "path": "assets/charts/cross_modal_retrieval.svg",
377
  "exists": true,
docs/index.html CHANGED
@@ -1880,6 +1880,7 @@
1880
  <a href="#models">Results</a>
1881
  <a href="#directions">Directions</a>
1882
  <a href="#walkthroughs">Walkthrough</a>
 
1883
  <a href="#artifacts">Resources</a>
1884
  <a class="nav-action" href="https://huggingface.co/spaces/cy0307/ropedia-xperience-10m-task-suite">HF Space</a>
1885
  <a class="nav-action" href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite">GitHub</a>
@@ -2711,6 +2712,7 @@
2711
  <img class="chart" src="assets/charts/episode_task_scores_neural_mlp.svg" alt="Neural MLP task score chart">
2712
  <img class="chart" src="assets/charts/episode_task_scores_minimal_vs_neural.svg" alt="Minimal versus neural score chart">
2713
  </div>
 
2714
  </div>
2715
  </section>
2716
 
@@ -2752,6 +2754,7 @@
2752
  <article class="artifact"><h3>Four-direction taxonomy</h3><p>Generated JSON, CSV, Markdown, and website data mapping all 12 tasks to the four research tracks.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/research_directions">research_directions/</a></article>
2753
  <article class="artifact"><h3>Direction extension probes</h3><p>Four coded probes, one per research direction, with minimal and neural metrics plus prediction/rank CSVs.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/research_direction_extensions">research_direction_extensions/</a></article>
2754
  <article class="artifact"><h3>Task walkthroughs</h3><p>Case studies for all 12 tasks, including input, middle process modules, output, metric, limitation, and task-player data.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/task_walkthroughs">task_walkthroughs/</a></article>
 
2755
  <article class="artifact"><h3>Cross-modal retrieval</h3><p>The strongest self-supervised signal from the single episode.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/blob/main/results/episode_task_suite/cross_modal_retrieval/metrics.json">metrics.json</a></article>
2756
  </div>
2757
  </section>
@@ -2795,6 +2798,7 @@
2795
  <article class="artifact"><h3>Artifact index</h3><p>Selective source-of-truth catalog with existence checks, sizes, and stable-file hashes.</p><a href="data/artifact_index.json">artifact_index.json</a></article>
2796
  <article class="artifact"><h3>Task-surface integrity</h3><p>Checks that public task cards use readable research names, modality thumbnails, and the interactive walkthrough/player contract.</p><a href="data/task_surface_integrity.json">task_surface_integrity.json</a></article>
2797
  <article class="artifact"><h3>Website integrity</h3><p>Checks local links, anchors, JSON files, and referenced website image dimensions.</p><a href="data/website_integrity.json">website_integrity.json</a></article>
 
2798
  <article class="artifact"><h3>Release checks</h3><p>One release map for automated validators and live post-publish checks.</p><a href="data/quality_gates.json">quality_gates.json</a></article>
2799
  <article class="artifact"><h3>Mirror parity</h3><p>Prepared repo, HF Space, artifact dataset, and model bundle parity for critical data, figures, website HTML, and validator files.</p><a href="data/mirror_parity.json">mirror_parity.json</a></article>
2800
  <article class="artifact"><h3>Live publication</h3><p>Last public GitHub/HF URL verification after upload.</p><a href="data/live_publication_status.json">live_publication_status.json</a></article>
 
1880
  <a href="#models">Results</a>
1881
  <a href="#directions">Directions</a>
1882
  <a href="#walkthroughs">Walkthrough</a>
1883
+ <a href="single_episode_explorer.html">Explorer</a>
1884
  <a href="#artifacts">Resources</a>
1885
  <a class="nav-action" href="https://huggingface.co/spaces/cy0307/ropedia-xperience-10m-task-suite">HF Space</a>
1886
  <a class="nav-action" href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite">GitHub</a>
 
2712
  <img class="chart" src="assets/charts/episode_task_scores_neural_mlp.svg" alt="Neural MLP task score chart">
2713
  <img class="chart" src="assets/charts/episode_task_scores_minimal_vs_neural.svg" alt="Minimal versus neural score chart">
2714
  </div>
2715
+ <p class="section-note"><a href="single_episode_explorer.html">Open the single-episode explorer</a> to inspect window-level labels, predictions, feature-block statistics, object labels, and diagnostic scores.</p>
2716
  </div>
2717
  </section>
2718
 
 
2754
  <article class="artifact"><h3>Four-direction taxonomy</h3><p>Generated JSON, CSV, Markdown, and website data mapping all 12 tasks to the four research tracks.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/research_directions">research_directions/</a></article>
2755
  <article class="artifact"><h3>Direction extension probes</h3><p>Four coded probes, one per research direction, with minimal and neural metrics plus prediction/rank CSVs.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/research_direction_extensions">research_direction_extensions/</a></article>
2756
  <article class="artifact"><h3>Task walkthroughs</h3><p>Case studies for all 12 tasks, including input, middle process modules, output, metric, limitation, and task-player data.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/task_walkthroughs">task_walkthroughs/</a></article>
2757
+ <article class="artifact"><h3>Single-episode explorer</h3><p>Interactive window-level view of labels, predictions, feature-block statistics, object labels, and diagnostics.</p><a href="single_episode_explorer.html">single_episode_explorer.html</a></article>
2758
  <article class="artifact"><h3>Cross-modal retrieval</h3><p>The strongest self-supervised signal from the single episode.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/blob/main/results/episode_task_suite/cross_modal_retrieval/metrics.json">metrics.json</a></article>
2759
  </div>
2760
  </section>
 
2798
  <article class="artifact"><h3>Artifact index</h3><p>Selective source-of-truth catalog with existence checks, sizes, and stable-file hashes.</p><a href="data/artifact_index.json">artifact_index.json</a></article>
2799
  <article class="artifact"><h3>Task-surface integrity</h3><p>Checks that public task cards use readable research names, modality thumbnails, and the interactive walkthrough/player contract.</p><a href="data/task_surface_integrity.json">task_surface_integrity.json</a></article>
2800
  <article class="artifact"><h3>Website integrity</h3><p>Checks local links, anchors, JSON files, and referenced website image dimensions.</p><a href="data/website_integrity.json">website_integrity.json</a></article>
2801
+ <article class="artifact"><h3>Rendered website check</h3><p>Records the latest browser-level load, tab, walkthrough deep-link, control-click, and console-health check.</p><a href="data/rendered_site_check.json">rendered_site_check.json</a></article>
2802
  <article class="artifact"><h3>Release checks</h3><p>One release map for automated validators and live post-publish checks.</p><a href="data/quality_gates.json">quality_gates.json</a></article>
2803
  <article class="artifact"><h3>Mirror parity</h3><p>Prepared repo, HF Space, artifact dataset, and model bundle parity for critical data, figures, website HTML, and validator files.</p><a href="data/mirror_parity.json">mirror_parity.json</a></article>
2804
  <article class="artifact"><h3>Live publication</h3><p>Last public GitHub/HF URL verification after upload.</p><a href="data/live_publication_status.json">live_publication_status.json</a></article>
docs/single_episode_explorer.html ADDED
The diff for this file is too large to render. See raw diff
 
index.html CHANGED
@@ -1880,6 +1880,7 @@
1880
  <a href="#models">Results</a>
1881
  <a href="#directions">Directions</a>
1882
  <a href="#walkthroughs">Walkthrough</a>
 
1883
  <a href="#artifacts">Resources</a>
1884
  <a class="nav-action" href="https://huggingface.co/spaces/cy0307/ropedia-xperience-10m-task-suite">HF Space</a>
1885
  <a class="nav-action" href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite">GitHub</a>
@@ -2711,6 +2712,7 @@
2711
  <img class="chart" src="assets/charts/episode_task_scores_neural_mlp.svg" alt="Neural MLP task score chart">
2712
  <img class="chart" src="assets/charts/episode_task_scores_minimal_vs_neural.svg" alt="Minimal versus neural score chart">
2713
  </div>
 
2714
  </div>
2715
  </section>
2716
 
@@ -2752,6 +2754,7 @@
2752
  <article class="artifact"><h3>Four-direction taxonomy</h3><p>Generated JSON, CSV, Markdown, and website data mapping all 12 tasks to the four research tracks.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/research_directions">research_directions/</a></article>
2753
  <article class="artifact"><h3>Direction extension probes</h3><p>Four coded probes, one per research direction, with minimal and neural metrics plus prediction/rank CSVs.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/research_direction_extensions">research_direction_extensions/</a></article>
2754
  <article class="artifact"><h3>Task walkthroughs</h3><p>Case studies for all 12 tasks, including input, middle process modules, output, metric, limitation, and task-player data.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/task_walkthroughs">task_walkthroughs/</a></article>
 
2755
  <article class="artifact"><h3>Cross-modal retrieval</h3><p>The strongest self-supervised signal from the single episode.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/blob/main/results/episode_task_suite/cross_modal_retrieval/metrics.json">metrics.json</a></article>
2756
  </div>
2757
  </section>
@@ -2795,6 +2798,7 @@
2795
  <article class="artifact"><h3>Artifact index</h3><p>Selective source-of-truth catalog with existence checks, sizes, and stable-file hashes.</p><a href="data/artifact_index.json">artifact_index.json</a></article>
2796
  <article class="artifact"><h3>Task-surface integrity</h3><p>Checks that public task cards use readable research names, modality thumbnails, and the interactive walkthrough/player contract.</p><a href="data/task_surface_integrity.json">task_surface_integrity.json</a></article>
2797
  <article class="artifact"><h3>Website integrity</h3><p>Checks local links, anchors, JSON files, and referenced website image dimensions.</p><a href="data/website_integrity.json">website_integrity.json</a></article>
 
2798
  <article class="artifact"><h3>Release checks</h3><p>One release map for automated validators and live post-publish checks.</p><a href="data/quality_gates.json">quality_gates.json</a></article>
2799
  <article class="artifact"><h3>Mirror parity</h3><p>Prepared repo, HF Space, artifact dataset, and model bundle parity for critical data, figures, website HTML, and validator files.</p><a href="data/mirror_parity.json">mirror_parity.json</a></article>
2800
  <article class="artifact"><h3>Live publication</h3><p>Last public GitHub/HF URL verification after upload.</p><a href="data/live_publication_status.json">live_publication_status.json</a></article>
 
1880
  <a href="#models">Results</a>
1881
  <a href="#directions">Directions</a>
1882
  <a href="#walkthroughs">Walkthrough</a>
1883
+ <a href="single_episode_explorer.html">Explorer</a>
1884
  <a href="#artifacts">Resources</a>
1885
  <a class="nav-action" href="https://huggingface.co/spaces/cy0307/ropedia-xperience-10m-task-suite">HF Space</a>
1886
  <a class="nav-action" href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite">GitHub</a>
 
2712
  <img class="chart" src="assets/charts/episode_task_scores_neural_mlp.svg" alt="Neural MLP task score chart">
2713
  <img class="chart" src="assets/charts/episode_task_scores_minimal_vs_neural.svg" alt="Minimal versus neural score chart">
2714
  </div>
2715
+ <p class="section-note"><a href="single_episode_explorer.html">Open the single-episode explorer</a> to inspect window-level labels, predictions, feature-block statistics, object labels, and diagnostic scores.</p>
2716
  </div>
2717
  </section>
2718
 
 
2754
  <article class="artifact"><h3>Four-direction taxonomy</h3><p>Generated JSON, CSV, Markdown, and website data mapping all 12 tasks to the four research tracks.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/research_directions">research_directions/</a></article>
2755
  <article class="artifact"><h3>Direction extension probes</h3><p>Four coded probes, one per research direction, with minimal and neural metrics plus prediction/rank CSVs.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/research_direction_extensions">research_direction_extensions/</a></article>
2756
  <article class="artifact"><h3>Task walkthroughs</h3><p>Case studies for all 12 tasks, including input, middle process modules, output, metric, limitation, and task-player data.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/tree/main/results/episode_task_suite/task_walkthroughs">task_walkthroughs/</a></article>
2757
+ <article class="artifact"><h3>Single-episode explorer</h3><p>Interactive window-level view of labels, predictions, feature-block statistics, object labels, and diagnostics.</p><a href="single_episode_explorer.html">single_episode_explorer.html</a></article>
2758
  <article class="artifact"><h3>Cross-modal retrieval</h3><p>The strongest self-supervised signal from the single episode.</p><a href="https://github.com/ChaoYue0307/ropedia-xperience-10m-task-suite/blob/main/results/episode_task_suite/cross_modal_retrieval/metrics.json">metrics.json</a></article>
2759
  </div>
2760
  </section>
 
2798
  <article class="artifact"><h3>Artifact index</h3><p>Selective source-of-truth catalog with existence checks, sizes, and stable-file hashes.</p><a href="data/artifact_index.json">artifact_index.json</a></article>
2799
  <article class="artifact"><h3>Task-surface integrity</h3><p>Checks that public task cards use readable research names, modality thumbnails, and the interactive walkthrough/player contract.</p><a href="data/task_surface_integrity.json">task_surface_integrity.json</a></article>
2800
  <article class="artifact"><h3>Website integrity</h3><p>Checks local links, anchors, JSON files, and referenced website image dimensions.</p><a href="data/website_integrity.json">website_integrity.json</a></article>
2801
+ <article class="artifact"><h3>Rendered website check</h3><p>Records the latest browser-level load, tab, walkthrough deep-link, control-click, and console-health check.</p><a href="data/rendered_site_check.json">rendered_site_check.json</a></article>
2802
  <article class="artifact"><h3>Release checks</h3><p>One release map for automated validators and live post-publish checks.</p><a href="data/quality_gates.json">quality_gates.json</a></article>
2803
  <article class="artifact"><h3>Mirror parity</h3><p>Prepared repo, HF Space, artifact dataset, and model bundle parity for critical data, figures, website HTML, and validator files.</p><a href="data/mirror_parity.json">mirror_parity.json</a></article>
2804
  <article class="artifact"><h3>Live publication</h3><p>Last public GitHub/HF URL verification after upload.</p><a href="data/live_publication_status.json">live_publication_status.json</a></article>
metrics/mirror_parity.json CHANGED
@@ -1,9 +1,9 @@
1
  {
2
  "status": "pass",
3
- "generated_at_utc": "2026-06-03T01:40:55+00:00",
4
  "hf_root": "hf_publish",
5
  "summary": {
6
- "group_count": 75,
7
  "failure_count": 0,
8
  "failures_by_surface": {}
9
  },
@@ -24,6 +24,10 @@
24
  "name": "repo_hf_website_html_parity",
25
  "status": "pass"
26
  },
 
 
 
 
27
  {
28
  "name": "repo_hf_quality_doc_parity",
29
  "status": "pass"
@@ -377,27 +381,27 @@
377
  "local": {
378
  "path": "repo:docs/data/publication_audit.json",
379
  "exists": true,
380
- "bytes": 7096,
381
- "sha256": "0c692c42c41414c716d642aa051842d8250b44e57df263d3a962cb5b078f7d09"
382
  },
383
  "mirrors": {
384
  "hf_space": {
385
  "path": "hf_space:data/publication_audit.json",
386
  "exists": true,
387
- "bytes": 7096,
388
- "sha256": "0c692c42c41414c716d642aa051842d8250b44e57df263d3a962cb5b078f7d09"
389
  },
390
  "hf_artifacts": {
391
  "path": "hf_artifacts:docs/data/publication_audit.json",
392
  "exists": true,
393
- "bytes": 7096,
394
- "sha256": "0c692c42c41414c716d642aa051842d8250b44e57df263d3a962cb5b078f7d09"
395
  },
396
  "hf_model": {
397
  "path": "hf_model:metrics/publication_audit.json",
398
  "exists": true,
399
- "bytes": 7096,
400
- "sha256": "0c692c42c41414c716d642aa051842d8250b44e57df263d3a962cb5b078f7d09"
401
  }
402
  },
403
  "failures": []
@@ -681,6 +685,37 @@
681
  },
682
  "failures": []
683
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
684
  {
685
  "name": "data/source_alignment_audit.json",
686
  "status": "pass",
@@ -811,27 +846,27 @@
811
  "local": {
812
  "path": "repo:docs/data/website_integrity.json",
813
  "exists": true,
814
- "bytes": 12715,
815
- "sha256": "b68904e5051827d97f4b28b23fe57e014773c23b1b648a6444391658eed395bf"
816
  },
817
  "mirrors": {
818
  "hf_space": {
819
  "path": "hf_space:data/website_integrity.json",
820
  "exists": true,
821
- "bytes": 12715,
822
- "sha256": "b68904e5051827d97f4b28b23fe57e014773c23b1b648a6444391658eed395bf"
823
  },
824
  "hf_artifacts": {
825
  "path": "hf_artifacts:docs/data/website_integrity.json",
826
  "exists": true,
827
- "bytes": 12715,
828
- "sha256": "b68904e5051827d97f4b28b23fe57e014773c23b1b648a6444391658eed395bf"
829
  },
830
  "hf_model": {
831
  "path": "hf_model:metrics/website_integrity.json",
832
  "exists": true,
833
- "bytes": 12715,
834
- "sha256": "b68904e5051827d97f4b28b23fe57e014773c23b1b648a6444391658eed395bf"
835
  }
836
  },
837
  "failures": []
@@ -1671,6 +1706,31 @@
1671
  },
1672
  "failures": []
1673
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1674
  {
1675
  "name": "scripts/build_research_takeaways.py",
1676
  "status": "pass",
@@ -1696,6 +1756,31 @@
1696
  },
1697
  "failures": []
1698
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1699
  {
1700
  "name": "scripts/verify_live_publication.py",
1701
  "status": "pass",
@@ -1727,21 +1812,21 @@
1727
  "local": {
1728
  "path": "repo:scripts/validate_mirror_parity.py",
1729
  "exists": true,
1730
- "bytes": 10446,
1731
- "sha256": "77d1297b7faa1605e50b31e11f30e4f4b8af4b3d566d80bc93d9886295efd15e"
1732
  },
1733
  "mirrors": {
1734
  "hf_artifacts": {
1735
  "path": "hf_artifacts:scripts/validate_mirror_parity.py",
1736
  "exists": true,
1737
- "bytes": 10446,
1738
- "sha256": "77d1297b7faa1605e50b31e11f30e4f4b8af4b3d566d80bc93d9886295efd15e"
1739
  },
1740
  "hf_model": {
1741
  "path": "hf_model:scripts/validate_mirror_parity.py",
1742
  "exists": true,
1743
- "bytes": 10446,
1744
- "sha256": "77d1297b7faa1605e50b31e11f30e4f4b8af4b3d566d80bc93d9886295efd15e"
1745
  }
1746
  },
1747
  "failures": []
@@ -1952,21 +2037,46 @@
1952
  "local": {
1953
  "path": "repo:docs/index.html",
1954
  "exists": true,
1955
- "bytes": 159244,
1956
- "sha256": "5c11e18e9974987d332fc0bdb2ca1dfadfaac98f37362710d1043e58b9074f73"
1957
  },
1958
  "mirrors": {
1959
  "hf_space": {
1960
  "path": "hf_space:index.html",
1961
  "exists": true,
1962
- "bytes": 159244,
1963
- "sha256": "5c11e18e9974987d332fc0bdb2ca1dfadfaac98f37362710d1043e58b9074f73"
1964
  },
1965
  "hf_artifacts_docs": {
1966
  "path": "hf_artifacts:docs/index.html",
1967
  "exists": true,
1968
- "bytes": 159244,
1969
- "sha256": "5c11e18e9974987d332fc0bdb2ca1dfadfaac98f37362710d1043e58b9074f73"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1970
  }
1971
  },
1972
  "failures": []
@@ -1996,6 +2106,285 @@
1996
  },
1997
  "failures": []
1998
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1999
  {
2000
  "name": "docs/QUALITY_GATES.md",
2001
  "status": "pass",
 
1
  {
2
  "status": "pass",
3
+ "generated_at_utc": "2026-06-03T04:07:33+00:00",
4
  "hf_root": "hf_publish",
5
  "summary": {
6
+ "group_count": 88,
7
  "failure_count": 0,
8
  "failures_by_surface": {}
9
  },
 
24
  "name": "repo_hf_website_html_parity",
25
  "status": "pass"
26
  },
27
+ {
28
+ "name": "repo_hf_diagnostic_result_parity",
29
+ "status": "pass"
30
+ },
31
  {
32
  "name": "repo_hf_quality_doc_parity",
33
  "status": "pass"
 
381
  "local": {
382
  "path": "repo:docs/data/publication_audit.json",
383
  "exists": true,
384
+ "bytes": 7097,
385
+ "sha256": "9ab8df8c416ccdf385c076caee6ad13b3b227e29d9467ee00c1e749c36e0909b"
386
  },
387
  "mirrors": {
388
  "hf_space": {
389
  "path": "hf_space:data/publication_audit.json",
390
  "exists": true,
391
+ "bytes": 7097,
392
+ "sha256": "9ab8df8c416ccdf385c076caee6ad13b3b227e29d9467ee00c1e749c36e0909b"
393
  },
394
  "hf_artifacts": {
395
  "path": "hf_artifacts:docs/data/publication_audit.json",
396
  "exists": true,
397
+ "bytes": 7097,
398
+ "sha256": "9ab8df8c416ccdf385c076caee6ad13b3b227e29d9467ee00c1e749c36e0909b"
399
  },
400
  "hf_model": {
401
  "path": "hf_model:metrics/publication_audit.json",
402
  "exists": true,
403
+ "bytes": 7097,
404
+ "sha256": "9ab8df8c416ccdf385c076caee6ad13b3b227e29d9467ee00c1e749c36e0909b"
405
  }
406
  },
407
  "failures": []
 
685
  },
686
  "failures": []
687
  },
688
+ {
689
+ "name": "data/single_episode_explorer.json",
690
+ "status": "pass",
691
+ "local": {
692
+ "path": "repo:docs/data/single_episode_explorer.json",
693
+ "exists": true,
694
+ "bytes": 4101241,
695
+ "sha256": "4ea0e34660de421a1a5ab0a4afcc44edec0ad0fc4e739f13d3af7974163f1897"
696
+ },
697
+ "mirrors": {
698
+ "hf_space": {
699
+ "path": "hf_space:data/single_episode_explorer.json",
700
+ "exists": true,
701
+ "bytes": 4101241,
702
+ "sha256": "4ea0e34660de421a1a5ab0a4afcc44edec0ad0fc4e739f13d3af7974163f1897"
703
+ },
704
+ "hf_artifacts": {
705
+ "path": "hf_artifacts:docs/data/single_episode_explorer.json",
706
+ "exists": true,
707
+ "bytes": 4101241,
708
+ "sha256": "4ea0e34660de421a1a5ab0a4afcc44edec0ad0fc4e739f13d3af7974163f1897"
709
+ },
710
+ "hf_model": {
711
+ "path": "hf_model:metrics/single_episode_explorer.json",
712
+ "exists": true,
713
+ "bytes": 4101241,
714
+ "sha256": "4ea0e34660de421a1a5ab0a4afcc44edec0ad0fc4e739f13d3af7974163f1897"
715
+ }
716
+ },
717
+ "failures": []
718
+ },
719
  {
720
  "name": "data/source_alignment_audit.json",
721
  "status": "pass",
 
846
  "local": {
847
  "path": "repo:docs/data/website_integrity.json",
848
  "exists": true,
849
+ "bytes": 13149,
850
+ "sha256": "d813e2b9dab44f290deed5dfd17af9949b6e064723f138117678e6f54e346df7"
851
  },
852
  "mirrors": {
853
  "hf_space": {
854
  "path": "hf_space:data/website_integrity.json",
855
  "exists": true,
856
+ "bytes": 13149,
857
+ "sha256": "d813e2b9dab44f290deed5dfd17af9949b6e064723f138117678e6f54e346df7"
858
  },
859
  "hf_artifacts": {
860
  "path": "hf_artifacts:docs/data/website_integrity.json",
861
  "exists": true,
862
+ "bytes": 13149,
863
+ "sha256": "d813e2b9dab44f290deed5dfd17af9949b6e064723f138117678e6f54e346df7"
864
  },
865
  "hf_model": {
866
  "path": "hf_model:metrics/website_integrity.json",
867
  "exists": true,
868
+ "bytes": 13149,
869
+ "sha256": "d813e2b9dab44f290deed5dfd17af9949b6e064723f138117678e6f54e346df7"
870
  }
871
  },
872
  "failures": []
 
1706
  },
1707
  "failures": []
1708
  },
1709
+ {
1710
+ "name": "scripts/build_single_episode_explorer.py",
1711
+ "status": "pass",
1712
+ "local": {
1713
+ "path": "repo:scripts/build_single_episode_explorer.py",
1714
+ "exists": true,
1715
+ "bytes": 29394,
1716
+ "sha256": "c837f4f4a0d7baff8d4e3bea36ea0f669c6a3eb073a0504c0a31bab481a38b73"
1717
+ },
1718
+ "mirrors": {
1719
+ "hf_artifacts": {
1720
+ "path": "hf_artifacts:scripts/build_single_episode_explorer.py",
1721
+ "exists": true,
1722
+ "bytes": 29394,
1723
+ "sha256": "c837f4f4a0d7baff8d4e3bea36ea0f669c6a3eb073a0504c0a31bab481a38b73"
1724
+ },
1725
+ "hf_model": {
1726
+ "path": "hf_model:scripts/build_single_episode_explorer.py",
1727
+ "exists": true,
1728
+ "bytes": 29394,
1729
+ "sha256": "c837f4f4a0d7baff8d4e3bea36ea0f669c6a3eb073a0504c0a31bab481a38b73"
1730
+ }
1731
+ },
1732
+ "failures": []
1733
+ },
1734
  {
1735
  "name": "scripts/build_research_takeaways.py",
1736
  "status": "pass",
 
1756
  },
1757
  "failures": []
1758
  },
1759
+ {
1760
+ "name": "scripts/single_episode_diagnostics.py",
1761
+ "status": "pass",
1762
+ "local": {
1763
+ "path": "repo:scripts/single_episode_diagnostics.py",
1764
+ "exists": true,
1765
+ "bytes": 57667,
1766
+ "sha256": "865ab2cd732e561fdf006516d50b337878592ab06708f231e9a864f82b3c867f"
1767
+ },
1768
+ "mirrors": {
1769
+ "hf_artifacts": {
1770
+ "path": "hf_artifacts:scripts/single_episode_diagnostics.py",
1771
+ "exists": true,
1772
+ "bytes": 57667,
1773
+ "sha256": "865ab2cd732e561fdf006516d50b337878592ab06708f231e9a864f82b3c867f"
1774
+ },
1775
+ "hf_model": {
1776
+ "path": "hf_model:scripts/single_episode_diagnostics.py",
1777
+ "exists": true,
1778
+ "bytes": 57667,
1779
+ "sha256": "865ab2cd732e561fdf006516d50b337878592ab06708f231e9a864f82b3c867f"
1780
+ }
1781
+ },
1782
+ "failures": []
1783
+ },
1784
  {
1785
  "name": "scripts/verify_live_publication.py",
1786
  "status": "pass",
 
1812
  "local": {
1813
  "path": "repo:scripts/validate_mirror_parity.py",
1814
  "exists": true,
1815
+ "bytes": 11942,
1816
+ "sha256": "730159d3136e1f7fd7db236157d4081096bde0fde5110faeb265eb2724509945"
1817
  },
1818
  "mirrors": {
1819
  "hf_artifacts": {
1820
  "path": "hf_artifacts:scripts/validate_mirror_parity.py",
1821
  "exists": true,
1822
+ "bytes": 11942,
1823
+ "sha256": "730159d3136e1f7fd7db236157d4081096bde0fde5110faeb265eb2724509945"
1824
  },
1825
  "hf_model": {
1826
  "path": "hf_model:scripts/validate_mirror_parity.py",
1827
  "exists": true,
1828
+ "bytes": 11942,
1829
+ "sha256": "730159d3136e1f7fd7db236157d4081096bde0fde5110faeb265eb2724509945"
1830
  }
1831
  },
1832
  "failures": []
 
2037
  "local": {
2038
  "path": "repo:docs/index.html",
2039
  "exists": true,
2040
+ "bytes": 159797,
2041
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
2042
  },
2043
  "mirrors": {
2044
  "hf_space": {
2045
  "path": "hf_space:index.html",
2046
  "exists": true,
2047
+ "bytes": 159797,
2048
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
2049
  },
2050
  "hf_artifacts_docs": {
2051
  "path": "hf_artifacts:docs/index.html",
2052
  "exists": true,
2053
+ "bytes": 159797,
2054
+ "sha256": "6071494e626ef88821cce4f6f9ee27b7d56011de345add95e1708c921ccc84e4"
2055
+ }
2056
+ },
2057
+ "failures": []
2058
+ },
2059
+ {
2060
+ "name": "website/single_episode_explorer.html",
2061
+ "status": "pass",
2062
+ "local": {
2063
+ "path": "repo:docs/single_episode_explorer.html",
2064
+ "exists": true,
2065
+ "bytes": 2641502,
2066
+ "sha256": "e97fede9233ce1329ea113dbbd06d0b6b9e5da986d35a9d6a3e20b626d741935"
2067
+ },
2068
+ "mirrors": {
2069
+ "hf_space": {
2070
+ "path": "hf_space:single_episode_explorer.html",
2071
+ "exists": true,
2072
+ "bytes": 2641502,
2073
+ "sha256": "e97fede9233ce1329ea113dbbd06d0b6b9e5da986d35a9d6a3e20b626d741935"
2074
+ },
2075
+ "hf_artifacts_docs": {
2076
+ "path": "hf_artifacts:docs/single_episode_explorer.html",
2077
+ "exists": true,
2078
+ "bytes": 2641502,
2079
+ "sha256": "e97fede9233ce1329ea113dbbd06d0b6b9e5da986d35a9d6a3e20b626d741935"
2080
  }
2081
  },
2082
  "failures": []
 
2106
  },
2107
  "failures": []
2108
  },
2109
+ {
2110
+ "name": "results/single_episode_diagnostics/provenance.json",
2111
+ "status": "pass",
2112
+ "local": {
2113
+ "path": "repo:results/single_episode_diagnostics/provenance.json",
2114
+ "exists": true,
2115
+ "bytes": 3962,
2116
+ "sha256": "48087224240941fd92444d4fee94a6146c96c35b5acc429a209db3c5cdb8d24b"
2117
+ },
2118
+ "mirrors": {
2119
+ "hf_space": {
2120
+ "path": "hf_space:results/single_episode_diagnostics/provenance.json",
2121
+ "exists": true,
2122
+ "bytes": 3962,
2123
+ "sha256": "48087224240941fd92444d4fee94a6146c96c35b5acc429a209db3c5cdb8d24b"
2124
+ },
2125
+ "hf_artifacts": {
2126
+ "path": "hf_artifacts:results/single_episode_diagnostics/provenance.json",
2127
+ "exists": true,
2128
+ "bytes": 3962,
2129
+ "sha256": "48087224240941fd92444d4fee94a6146c96c35b5acc429a209db3c5cdb8d24b"
2130
+ },
2131
+ "hf_model": {
2132
+ "path": "hf_model:results/single_episode_diagnostics/provenance.json",
2133
+ "exists": true,
2134
+ "bytes": 3962,
2135
+ "sha256": "48087224240941fd92444d4fee94a6146c96c35b5acc429a209db3c5cdb8d24b"
2136
+ }
2137
+ },
2138
+ "failures": []
2139
+ },
2140
+ {
2141
+ "name": "results/single_episode_diagnostics/README.md",
2142
+ "status": "pass",
2143
+ "local": {
2144
+ "path": "repo:results/single_episode_diagnostics/README.md",
2145
+ "exists": true,
2146
+ "bytes": 1058,
2147
+ "sha256": "e64b13f227f270dc545317636f432fb766d6f7ab8695f69234b2c24b6413a42e"
2148
+ },
2149
+ "mirrors": {
2150
+ "hf_space": {
2151
+ "path": "hf_space:results/single_episode_diagnostics/README.md",
2152
+ "exists": true,
2153
+ "bytes": 1058,
2154
+ "sha256": "e64b13f227f270dc545317636f432fb766d6f7ab8695f69234b2c24b6413a42e"
2155
+ },
2156
+ "hf_artifacts": {
2157
+ "path": "hf_artifacts:results/single_episode_diagnostics/README.md",
2158
+ "exists": true,
2159
+ "bytes": 1058,
2160
+ "sha256": "e64b13f227f270dc545317636f432fb766d6f7ab8695f69234b2c24b6413a42e"
2161
+ },
2162
+ "hf_model": {
2163
+ "path": "hf_model:results/single_episode_diagnostics/README.md",
2164
+ "exists": true,
2165
+ "bytes": 1058,
2166
+ "sha256": "e64b13f227f270dc545317636f432fb766d6f7ab8695f69234b2c24b6413a42e"
2167
+ }
2168
+ },
2169
+ "failures": []
2170
+ },
2171
+ {
2172
+ "name": "results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2173
+ "status": "pass",
2174
+ "local": {
2175
+ "path": "repo:results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2176
+ "exists": true,
2177
+ "bytes": 24871,
2178
+ "sha256": "8e43bfa9b90544d7b09e207de26d1b852dd115b3e7c957eaa4b45e520dc050b8"
2179
+ },
2180
+ "mirrors": {
2181
+ "hf_space": {
2182
+ "path": "hf_space:results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2183
+ "exists": true,
2184
+ "bytes": 24871,
2185
+ "sha256": "8e43bfa9b90544d7b09e207de26d1b852dd115b3e7c957eaa4b45e520dc050b8"
2186
+ },
2187
+ "hf_artifacts": {
2188
+ "path": "hf_artifacts:results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2189
+ "exists": true,
2190
+ "bytes": 24871,
2191
+ "sha256": "8e43bfa9b90544d7b09e207de26d1b852dd115b3e7c957eaa4b45e520dc050b8"
2192
+ },
2193
+ "hf_model": {
2194
+ "path": "hf_model:results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
2195
+ "exists": true,
2196
+ "bytes": 24871,
2197
+ "sha256": "8e43bfa9b90544d7b09e207de26d1b852dd115b3e7c957eaa4b45e520dc050b8"
2198
+ }
2199
+ },
2200
+ "failures": []
2201
+ },
2202
+ {
2203
+ "name": "results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2204
+ "status": "pass",
2205
+ "local": {
2206
+ "path": "repo:results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2207
+ "exists": true,
2208
+ "bytes": 735,
2209
+ "sha256": "2761e1777963473ffa5110ab25e863a6b8ee19ce2004d94ffa938cfa5e0d93fc"
2210
+ },
2211
+ "mirrors": {
2212
+ "hf_space": {
2213
+ "path": "hf_space:results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2214
+ "exists": true,
2215
+ "bytes": 735,
2216
+ "sha256": "2761e1777963473ffa5110ab25e863a6b8ee19ce2004d94ffa938cfa5e0d93fc"
2217
+ },
2218
+ "hf_artifacts": {
2219
+ "path": "hf_artifacts:results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2220
+ "exists": true,
2221
+ "bytes": 735,
2222
+ "sha256": "2761e1777963473ffa5110ab25e863a6b8ee19ce2004d94ffa938cfa5e0d93fc"
2223
+ },
2224
+ "hf_model": {
2225
+ "path": "hf_model:results/single_episode_diagnostics/modality_ablation/ablation_summary.json",
2226
+ "exists": true,
2227
+ "bytes": 735,
2228
+ "sha256": "2761e1777963473ffa5110ab25e863a6b8ee19ce2004d94ffa938cfa5e0d93fc"
2229
+ }
2230
+ },
2231
+ "failures": []
2232
+ },
2233
+ {
2234
+ "name": "results/single_episode_diagnostics/object_labels/object_vocab.json",
2235
+ "status": "pass",
2236
+ "local": {
2237
+ "path": "repo:results/single_episode_diagnostics/object_labels/object_vocab.json",
2238
+ "exists": true,
2239
+ "bytes": 995,
2240
+ "sha256": "813320bbe5d57c74803f5dfb080d440ef1804af41950e031d82ab80311eb04c7"
2241
+ },
2242
+ "mirrors": {
2243
+ "hf_space": {
2244
+ "path": "hf_space:results/single_episode_diagnostics/object_labels/object_vocab.json",
2245
+ "exists": true,
2246
+ "bytes": 995,
2247
+ "sha256": "813320bbe5d57c74803f5dfb080d440ef1804af41950e031d82ab80311eb04c7"
2248
+ },
2249
+ "hf_artifacts": {
2250
+ "path": "hf_artifacts:results/single_episode_diagnostics/object_labels/object_vocab.json",
2251
+ "exists": true,
2252
+ "bytes": 995,
2253
+ "sha256": "813320bbe5d57c74803f5dfb080d440ef1804af41950e031d82ab80311eb04c7"
2254
+ },
2255
+ "hf_model": {
2256
+ "path": "hf_model:results/single_episode_diagnostics/object_labels/object_vocab.json",
2257
+ "exists": true,
2258
+ "bytes": 995,
2259
+ "sha256": "813320bbe5d57c74803f5dfb080d440ef1804af41950e031d82ab80311eb04c7"
2260
+ }
2261
+ },
2262
+ "failures": []
2263
+ },
2264
+ {
2265
+ "name": "results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2266
+ "status": "pass",
2267
+ "local": {
2268
+ "path": "repo:results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2269
+ "exists": true,
2270
+ "bytes": 78160,
2271
+ "sha256": "a28e43bf88f5c4c0a193b7c0c574526822e5ca0757d78b168c8450730d804510"
2272
+ },
2273
+ "mirrors": {
2274
+ "hf_space": {
2275
+ "path": "hf_space:results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2276
+ "exists": true,
2277
+ "bytes": 78160,
2278
+ "sha256": "a28e43bf88f5c4c0a193b7c0c574526822e5ca0757d78b168c8450730d804510"
2279
+ },
2280
+ "hf_artifacts": {
2281
+ "path": "hf_artifacts:results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2282
+ "exists": true,
2283
+ "bytes": 78160,
2284
+ "sha256": "a28e43bf88f5c4c0a193b7c0c574526822e5ca0757d78b168c8450730d804510"
2285
+ },
2286
+ "hf_model": {
2287
+ "path": "hf_model:results/single_episode_diagnostics/object_labels/window_object_labels.csv",
2288
+ "exists": true,
2289
+ "bytes": 78160,
2290
+ "sha256": "a28e43bf88f5c4c0a193b7c0c574526822e5ca0757d78b168c8450730d804510"
2291
+ }
2292
+ },
2293
+ "failures": []
2294
+ },
2295
+ {
2296
+ "name": "results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2297
+ "status": "pass",
2298
+ "local": {
2299
+ "path": "repo:results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2300
+ "exists": true,
2301
+ "bytes": 293713,
2302
+ "sha256": "eebd53caf853aac5da51adea285e6623dd00860d23d3bc5703169ed6c53d0405"
2303
+ },
2304
+ "mirrors": {
2305
+ "hf_space": {
2306
+ "path": "hf_space:results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2307
+ "exists": true,
2308
+ "bytes": 293713,
2309
+ "sha256": "eebd53caf853aac5da51adea285e6623dd00860d23d3bc5703169ed6c53d0405"
2310
+ },
2311
+ "hf_artifacts": {
2312
+ "path": "hf_artifacts:results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2313
+ "exists": true,
2314
+ "bytes": 293713,
2315
+ "sha256": "eebd53caf853aac5da51adea285e6623dd00860d23d3bc5703169ed6c53d0405"
2316
+ },
2317
+ "hf_model": {
2318
+ "path": "hf_model:results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
2319
+ "exists": true,
2320
+ "bytes": 293713,
2321
+ "sha256": "eebd53caf853aac5da51adea285e6623dd00860d23d3bc5703169ed6c53d0405"
2322
+ }
2323
+ },
2324
+ "failures": []
2325
+ },
2326
+ {
2327
+ "name": "results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2328
+ "status": "pass",
2329
+ "local": {
2330
+ "path": "repo:results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2331
+ "exists": true,
2332
+ "bytes": 8203,
2333
+ "sha256": "8b0026b472a0c0fd8c6eb5c9c307b41ac7ed71fe0ae3d52c8b18dfd5721f0ef1"
2334
+ },
2335
+ "mirrors": {
2336
+ "hf_space": {
2337
+ "path": "hf_space:results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2338
+ "exists": true,
2339
+ "bytes": 8203,
2340
+ "sha256": "8b0026b472a0c0fd8c6eb5c9c307b41ac7ed71fe0ae3d52c8b18dfd5721f0ef1"
2341
+ },
2342
+ "hf_artifacts": {
2343
+ "path": "hf_artifacts:results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2344
+ "exists": true,
2345
+ "bytes": 8203,
2346
+ "sha256": "8b0026b472a0c0fd8c6eb5c9c307b41ac7ed71fe0ae3d52c8b18dfd5721f0ef1"
2347
+ },
2348
+ "hf_model": {
2349
+ "path": "hf_model:results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
2350
+ "exists": true,
2351
+ "bytes": 8203,
2352
+ "sha256": "8b0026b472a0c0fd8c6eb5c9c307b41ac7ed71fe0ae3d52c8b18dfd5721f0ef1"
2353
+ }
2354
+ },
2355
+ "failures": []
2356
+ },
2357
+ {
2358
+ "name": "results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2359
+ "status": "pass",
2360
+ "local": {
2361
+ "path": "repo:results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2362
+ "exists": true,
2363
+ "bytes": 332,
2364
+ "sha256": "2a467dae8e2f1606d77eccc8d1cbeb11507d462f95291d52b49d1057b7db9f14"
2365
+ },
2366
+ "mirrors": {
2367
+ "hf_space": {
2368
+ "path": "hf_space:results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2369
+ "exists": true,
2370
+ "bytes": 332,
2371
+ "sha256": "2a467dae8e2f1606d77eccc8d1cbeb11507d462f95291d52b49d1057b7db9f14"
2372
+ },
2373
+ "hf_artifacts": {
2374
+ "path": "hf_artifacts:results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2375
+ "exists": true,
2376
+ "bytes": 332,
2377
+ "sha256": "2a467dae8e2f1606d77eccc8d1cbeb11507d462f95291d52b49d1057b7db9f14"
2378
+ },
2379
+ "hf_model": {
2380
+ "path": "hf_model:results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
2381
+ "exists": true,
2382
+ "bytes": 332,
2383
+ "sha256": "2a467dae8e2f1606d77eccc8d1cbeb11507d462f95291d52b49d1057b7db9f14"
2384
+ }
2385
+ },
2386
+ "failures": []
2387
+ },
2388
  {
2389
  "name": "docs/QUALITY_GATES.md",
2390
  "status": "pass",
metrics/publication_audit.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "status": "pass",
3
- "generated_at_utc": "2026-06-03T01:40:56+00:00",
4
  "checks": [
5
  {
6
  "name": "required_publication_assets_present",
@@ -179,8 +179,8 @@
179
  "github_repo": {
180
  "root": "repo",
181
  "exists": true,
182
- "file_count": 333,
183
- "text_file_count": 269,
184
  "largest_file": {
185
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
186
  "bytes": 52601010
@@ -190,19 +190,19 @@
190
  "hf_space_bundle": {
191
  "root": "hf_publish/space",
192
  "exists": true,
193
- "file_count": 118,
194
- "text_file_count": 91,
195
  "largest_file": {
196
- "path": "assets/task_suite_infographic.png",
197
- "bytes": 2618313
198
  },
199
  "violations": []
200
  },
201
  "hf_artifact_bundle": {
202
  "root": "hf_publish/artifacts",
203
  "exists": true,
204
- "file_count": 362,
205
- "text_file_count": 278,
206
  "largest_file": {
207
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
208
  "bytes": 52601010
@@ -212,8 +212,8 @@
212
  "hf_model_bundle": {
213
  "root": "hf_publish/model",
214
  "exists": true,
215
- "file_count": 539,
216
- "text_file_count": 423,
217
  "largest_file": {
218
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
219
  "bytes": 52601010
 
1
  {
2
  "status": "pass",
3
+ "generated_at_utc": "2026-06-03T04:07:12+00:00",
4
  "checks": [
5
  {
6
  "name": "required_publication_assets_present",
 
179
  "github_repo": {
180
  "root": "repo",
181
  "exists": true,
182
+ "file_count": 352,
183
+ "text_file_count": 288,
184
  "largest_file": {
185
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
186
  "bytes": 52601010
 
190
  "hf_space_bundle": {
191
  "root": "hf_publish/space",
192
  "exists": true,
193
+ "file_count": 135,
194
+ "text_file_count": 108,
195
  "largest_file": {
196
+ "path": "data/single_episode_explorer.json",
197
+ "bytes": 4101241
198
  },
199
  "violations": []
200
  },
201
  "hf_artifact_bundle": {
202
  "root": "hf_publish/artifacts",
203
  "exists": true,
204
+ "file_count": 381,
205
+ "text_file_count": 297,
206
  "largest_file": {
207
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
208
  "bytes": 52601010
 
212
  "hf_model_bundle": {
213
  "root": "hf_publish/model",
214
  "exists": true,
215
+ "file_count": 561,
216
+ "text_file_count": 445,
217
  "largest_file": {
218
  "path": "results/episode_task_suite/modality_reconstruction/predictions.npz",
219
  "bytes": 52601010
metrics/single_episode_explorer.json ADDED
The diff for this file is too large to render. See raw diff
 
metrics/website_integrity.json CHANGED
@@ -1,14 +1,14 @@
1
  {
2
  "status": "pass",
3
- "generated_at_utc": "2026-06-03T01:38:40+00:00",
4
  "docs_root": "docs",
5
  "site_base": "/ropedia-xperience-10m-task-suite/",
6
  "summary": {
7
- "html_pages": 2,
8
- "local_references": 100,
9
- "external_reference_count": 80,
10
- "json_files": 28,
11
- "image_assets_referenced": 19,
12
  "failure_count": 0
13
  },
14
  "failures": {
@@ -74,8 +74,8 @@
74
  "name": "project_overview_precedes_progress_ledger",
75
  "status": "pass",
76
  "reason": "The project overview should appear before the deeper progress ledger.",
77
- "overview_index": 60551,
78
- "evidence_index": 73976
79
  },
80
  {
81
  "name": "project_status_links_json",
@@ -122,9 +122,9 @@
122
  "name": "evaluation_protocol_between_overview_and_progress",
123
  "status": "pass",
124
  "reason": "The evaluation protocol should appear before the deeper evidence ledger.",
125
- "overview_index": 60551,
126
- "protocol_index": 71379,
127
- "evidence_index": 73976
128
  },
129
  {
130
  "name": "evaluation_protocol_links_json",
@@ -198,14 +198,20 @@
198
  {
199
  "path": "index.html",
200
  "id_count": 75,
201
- "reference_count": 99,
202
  "image_count": 22
 
 
 
 
 
 
203
  }
204
  ],
205
  "json_files": [
206
  {
207
  "path": "data/artifact_index.json",
208
- "bytes": 27749,
209
  "top_level_type": "dict"
210
  },
211
  {
@@ -235,7 +241,7 @@
235
  },
236
  {
237
  "path": "data/mirror_parity.json",
238
- "bytes": 76733,
239
  "top_level_type": "dict"
240
  },
241
  {
@@ -270,12 +276,12 @@
270
  },
271
  {
272
  "path": "data/publication_audit.json",
273
- "bytes": 6962,
274
  "top_level_type": "dict"
275
  },
276
  {
277
  "path": "data/quality_gates.json",
278
- "bytes": 7528,
279
  "top_level_type": "dict"
280
  },
281
  {
@@ -313,6 +319,11 @@
313
  "bytes": 20066,
314
  "top_level_type": "dict"
315
  },
 
 
 
 
 
316
  {
317
  "path": "data/source_alignment_audit.json",
318
  "bytes": 4432,
@@ -335,7 +346,7 @@
335
  },
336
  {
337
  "path": "data/website_integrity.json",
338
- "bytes": 12406,
339
  "top_level_type": "dict"
340
  },
341
  {
@@ -353,6 +364,14 @@
353
  "height": 64,
354
  "format": "PNG"
355
  },
 
 
 
 
 
 
 
 
356
  {
357
  "path": "assets/charts/cross_modal_retrieval.svg",
358
  "exists": true,
 
1
  {
2
  "status": "pass",
3
+ "generated_at_utc": "2026-06-03T04:04:17+00:00",
4
  "docs_root": "docs",
5
  "site_base": "/ropedia-xperience-10m-task-suite/",
6
  "summary": {
7
+ "html_pages": 3,
8
+ "local_references": 109,
9
+ "external_reference_count": 83,
10
+ "json_files": 29,
11
+ "image_assets_referenced": 20,
12
  "failure_count": 0
13
  },
14
  "failures": {
 
74
  "name": "project_overview_precedes_progress_ledger",
75
  "status": "pass",
76
  "reason": "The project overview should appear before the deeper progress ledger.",
77
+ "overview_index": 60611,
78
+ "evidence_index": 74036
79
  },
80
  {
81
  "name": "project_status_links_json",
 
122
  "name": "evaluation_protocol_between_overview_and_progress",
123
  "status": "pass",
124
  "reason": "The evaluation protocol should appear before the deeper evidence ledger.",
125
+ "overview_index": 60611,
126
+ "protocol_index": 71439,
127
+ "evidence_index": 74036
128
  },
129
  {
130
  "name": "evaluation_protocol_links_json",
 
198
  {
199
  "path": "index.html",
200
  "id_count": 75,
201
+ "reference_count": 102,
202
  "image_count": 22
203
+ },
204
+ {
205
+ "path": "single_episode_explorer.html",
206
+ "id_count": 26,
207
+ "reference_count": 6,
208
+ "image_count": 1
209
  }
210
  ],
211
  "json_files": [
212
  {
213
  "path": "data/artifact_index.json",
214
+ "bytes": 29016,
215
  "top_level_type": "dict"
216
  },
217
  {
 
241
  },
242
  {
243
  "path": "data/mirror_parity.json",
244
+ "bytes": 81842,
245
  "top_level_type": "dict"
246
  },
247
  {
 
276
  },
277
  {
278
  "path": "data/publication_audit.json",
279
+ "bytes": 10473,
280
  "top_level_type": "dict"
281
  },
282
  {
283
  "path": "data/quality_gates.json",
284
+ "bytes": 8147,
285
  "top_level_type": "dict"
286
  },
287
  {
 
319
  "bytes": 20066,
320
  "top_level_type": "dict"
321
  },
322
+ {
323
+ "path": "data/single_episode_explorer.json",
324
+ "bytes": 4101241,
325
+ "top_level_type": "dict"
326
+ },
327
  {
328
  "path": "data/source_alignment_audit.json",
329
  "bytes": 4432,
 
346
  },
347
  {
348
  "path": "data/website_integrity.json",
349
+ "bytes": 13148,
350
  "top_level_type": "dict"
351
  },
352
  {
 
364
  "height": 64,
365
  "format": "PNG"
366
  },
367
+ {
368
+ "path": "assets/brand/xperience10m-logo-mark-192.png",
369
+ "exists": true,
370
+ "bytes": 41318,
371
+ "width": 192,
372
+ "height": 192,
373
+ "format": "PNG"
374
+ },
375
  {
376
  "path": "assets/charts/cross_modal_retrieval.svg",
377
  "exists": true,
results/single_episode_diagnostics/README.md ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Single-Episode Diagnostics Index
2
+
3
+ These outputs are local diagnostics built from the existing one-episode Xperience-10M artifacts. They are designed for manual verification while waiting for full multi-episode data access.
4
+
5
+ ## Generated Analyses
6
+
7
+ - `modality_ablation/`: compact ridge-head ablations across real feature blocks.
8
+ - `timeline_overlay/`: existing prediction CSVs aligned to the episode timeline.
9
+ - `alignment_stress/`: cross-modal retrieval under explicit time-shift perturbations.
10
+ - `provenance.json`: input hashes, feature dimensions, and source artifact identifiers.
11
+
12
+ ## Validity Boundaries
13
+
14
+ - This is a single-episode diagnostic, not a full Xperience-10M benchmark.
15
+ - Rows marked `not_computed` are intentionally left blank when train labels or valid splits are unavailable.
16
+ - Rows marked `derived_perturbation` use real features with deliberate time shifts for stress testing.
17
+
18
+ ## Counts
19
+
20
+ - Ablation rows: 96; computed: 96.
21
+ - Timeline overlay rows: 2079.
22
+ - Alignment stress rows: 45.
23
+ - Shared feature shape: 1161 windows x 8378 features.
results/single_episode_diagnostics/alignment_stress/ALIGNMENT_STRESS_REPORT.md ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Cross-Modal Alignment Stress Report
2
+
3
+ This diagnostic uses real held-out feature windows, then deliberately shifts the query modality in time at evaluation. The perturbation is derived; it is not treated as observed data.
4
+
5
+ ## Zero-Shift Versus Worst Shift
6
+
7
+ - Inertial: zero-shift MRR=0.2840; worst shift=-20 windows, MRR=0.0199
8
+ - Language: zero-shift MRR=0.0310; worst shift=-40 windows, MRR=0.0158
9
+ - Motion Capture: zero-shift MRR=0.2553; worst shift=-10 windows, MRR=0.0183
10
+ - Motion + Pose + IMU: zero-shift MRR=0.3897; worst shift=-20 windows, MRR=0.0238
11
+ - Pose + SLAM: zero-shift MRR=0.4262; worst shift=-20 windows, MRR=0.0206
12
+
13
+ ## Files
14
+
15
+ - `alignment_shift_metrics.csv`: MRR/rank metrics for each query group and time shift.
16
+ - `alignment_shift_curves.svg`: MRR curves across time shifts.
17
+ - `alignment_stress_summary.json`: perturbation definition and status.
results/single_episode_diagnostics/alignment_stress/alignment_shift_curves.svg ADDED
results/single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ query_group,query_display,target_group,shift_windows,shift_frames,status,mrr,top1_accuracy,top5_accuracy,top10_accuracy,median_rank,mean_rank,num_queries
2
+ motion_capture,Motion Capture,depth_plus_video,-40,-200,derived_perturbation,0.02984776347875595,0.006493506493506494,0.032467532467532464,0.048701298701298704,119.0,125.72402954101562,308
3
+ motion_capture,Motion Capture,depth_plus_video,-20,-100,derived_perturbation,0.019169922918081284,0.003048780487804878,0.003048780487804878,0.018292682926829267,153.0,154.24085998535156,328
4
+ motion_capture,Motion Capture,depth_plus_video,-10,-50,derived_perturbation,0.01829293556511402,0.0,0.0029585798816568047,0.023668639053254437,106.0,130.5325469970703,338
5
+ motion_capture,Motion Capture,depth_plus_video,-5,-25,derived_perturbation,0.028951412066817284,0.0,0.014577259475218658,0.05830903790087463,67.0,89.93585968017578,343
6
+ motion_capture,Motion Capture,depth_plus_video,0,0,derived_perturbation,0.2553335726261139,0.15804597701149425,0.35344827586206895,0.3994252873563218,21.5,49.181034088134766,348
7
+ motion_capture,Motion Capture,depth_plus_video,5,25,derived_perturbation,0.04436318948864937,0.008746355685131196,0.037900874635568516,0.08746355685131195,64.0,83.76384735107422,343
8
+ motion_capture,Motion Capture,depth_plus_video,10,50,derived_perturbation,0.026273079216480255,0.0,0.014792899408284023,0.047337278106508875,77.0,106.73668670654297,338
9
+ motion_capture,Motion Capture,depth_plus_video,20,100,derived_perturbation,0.023496314883232117,0.003048780487804878,0.018292682926829267,0.04573170731707317,108.5,137.9176788330078,328
10
+ motion_capture,Motion Capture,depth_plus_video,40,200,derived_perturbation,0.02917252667248249,0.006493506493506494,0.025974025974025976,0.05519480519480519,110.5,121.33441925048828,308
11
+ pose_slam,Pose + SLAM,depth_plus_video,-40,-200,derived_perturbation,0.03615332394838333,0.003246753246753247,0.03571428571428571,0.07467532467532467,98.0,114.43506622314453,308
12
+ pose_slam,Pose + SLAM,depth_plus_video,-20,-100,derived_perturbation,0.02059117704629898,0.003048780487804878,0.012195121951219513,0.024390243902439025,109.5,137.0731658935547,328
13
+ pose_slam,Pose + SLAM,depth_plus_video,-10,-50,derived_perturbation,0.04128313437104225,0.005917159763313609,0.038461538461538464,0.07692307692307693,72.0,103.94674682617188,338
14
+ pose_slam,Pose + SLAM,depth_plus_video,-5,-25,derived_perturbation,0.05835483595728874,0.011661807580174927,0.061224489795918366,0.119533527696793,43.0,58.218658447265625,343
15
+ pose_slam,Pose + SLAM,depth_plus_video,0,0,derived_perturbation,0.42622581124305725,0.3017241379310345,0.5488505747126436,0.6551724137931034,4.0,15.623562812805176,348
16
+ pose_slam,Pose + SLAM,depth_plus_video,5,25,derived_perturbation,0.04654298722743988,0.0058309037900874635,0.04956268221574344,0.11661807580174927,55.0,66.43148803710938,343
17
+ pose_slam,Pose + SLAM,depth_plus_video,10,50,derived_perturbation,0.034309279173612595,0.005917159763313609,0.023668639053254437,0.05621301775147929,71.0,100.44082641601562,338
18
+ pose_slam,Pose + SLAM,depth_plus_video,20,100,derived_perturbation,0.03287472575902939,0.006097560975609756,0.03048780487804878,0.06097560975609756,97.5,127.41158294677734,328
19
+ pose_slam,Pose + SLAM,depth_plus_video,40,200,derived_perturbation,0.024975253269076347,0.003246753246753247,0.016233766233766232,0.03571428571428571,88.5,116.36363983154297,308
20
+ inertial,Inertial,depth_plus_video,-40,-200,derived_perturbation,0.042965441942214966,0.00974025974025974,0.045454545454545456,0.09090909090909091,90.0,116.86363983154297,308
21
+ inertial,Inertial,depth_plus_video,-20,-100,derived_perturbation,0.019861916080117226,0.003048780487804878,0.009146341463414634,0.01524390243902439,112.0,135.9573211669922,328
22
+ inertial,Inertial,depth_plus_video,-10,-50,derived_perturbation,0.04950016736984253,0.011834319526627219,0.05325443786982249,0.10946745562130178,74.0,102.37574005126953,338
23
+ inertial,Inertial,depth_plus_video,-5,-25,derived_perturbation,0.05499911680817604,0.0029154518950437317,0.05830903790087463,0.13994169096209913,39.0,63.70845413208008,343
24
+ inertial,Inertial,depth_plus_video,0,0,derived_perturbation,0.2840072810649872,0.16379310344827586,0.3735632183908046,0.5229885057471264,10.0,20.577587127685547,348
25
+ inertial,Inertial,depth_plus_video,5,25,derived_perturbation,0.054161082953214645,0.014577259475218658,0.04956268221574344,0.10495626822157435,53.0,68.86006164550781,343
26
+ inertial,Inertial,depth_plus_video,10,50,derived_perturbation,0.03178250044584274,0.005917159763313609,0.008875739644970414,0.05917159763313609,76.0,103.02071380615234,338
27
+ inertial,Inertial,depth_plus_video,20,100,derived_perturbation,0.03213934600353241,0.009146341463414634,0.021341463414634148,0.042682926829268296,93.5,125.67987823486328,328
28
+ inertial,Inertial,depth_plus_video,40,200,derived_perturbation,0.031400587409734726,0.003246753246753247,0.03896103896103896,0.05194805194805195,91.0,115.68830871582031,308
29
+ language,Language,depth_plus_video,-40,-200,derived_perturbation,0.015811588615179062,0.0,0.003246753246753247,0.016233766233766232,145.5,141.49026489257812,308
30
+ language,Language,depth_plus_video,-20,-100,derived_perturbation,0.027325116097927094,0.006097560975609756,0.024390243902439025,0.06097560975609756,174.0,162.0792694091797,328
31
+ language,Language,depth_plus_video,-10,-50,derived_perturbation,0.02521640993654728,0.0029585798816568047,0.023668639053254437,0.05621301775147929,165.0,162.10354614257812,338
32
+ language,Language,depth_plus_video,-5,-25,derived_perturbation,0.02469729632139206,0.0029154518950437317,0.02040816326530612,0.04956268221574344,165.0,158.99708557128906,343
33
+ language,Language,depth_plus_video,0,0,derived_perturbation,0.031006580218672752,0.005747126436781609,0.031609195402298854,0.05747126436781609,138.0,146.83045959472656,348
34
+ language,Language,depth_plus_video,5,25,derived_perturbation,0.04090346768498421,0.008746355685131196,0.04956268221574344,0.08454810495626822,102.0,135.07289123535156,343
35
+ language,Language,depth_plus_video,10,50,derived_perturbation,0.0362100675702095,0.008875739644970414,0.03254437869822485,0.07692307692307693,101.5,131.18934631347656,338
36
+ language,Language,depth_plus_video,20,100,derived_perturbation,0.03773954510688782,0.009146341463414634,0.036585365853658534,0.08231707317073171,111.0,137.8353729248047,328
37
+ language,Language,depth_plus_video,40,200,derived_perturbation,0.037675727158784866,0.00974025974025974,0.04220779220779221,0.08116883116883117,139.5,144.4837646484375,308
38
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,-40,-200,derived_perturbation,0.05048111826181412,0.016233766233766232,0.05519480519480519,0.1038961038961039,99.5,116.717529296875,308
39
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,-20,-100,derived_perturbation,0.023761091753840446,0.003048780487804878,0.01524390243902439,0.021341463414634148,111.0,140.868896484375,328
40
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,-10,-50,derived_perturbation,0.039904821664094925,0.008875739644970414,0.03550295857988166,0.07988165680473373,81.5,107.72189331054688,338
41
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,-5,-25,derived_perturbation,0.051686227321624756,0.008746355685131196,0.043731778425655975,0.12244897959183673,47.0,63.40524673461914,343
42
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,0,0,derived_perturbation,0.38971078395843506,0.28448275862068967,0.4827586206896552,0.5718390804597702,6.0,25.27011489868164,348
43
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,5,25,derived_perturbation,0.05908266454935074,0.014577259475218658,0.0641399416909621,0.13119533527696792,48.0,64.80757904052734,343
44
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,10,50,derived_perturbation,0.03273069113492966,0.0029585798816568047,0.01775147928994083,0.06804733727810651,63.0,96.31952667236328,338
45
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,20,100,derived_perturbation,0.028844518586993217,0.006097560975609756,0.024390243902439025,0.04573170731707317,81.5,131.6280517578125,328
46
+ motion_pose_inertial,Motion + Pose + IMU,depth_plus_video,40,200,derived_perturbation,0.033500298857688904,0.00974025974025974,0.032467532467532464,0.048701298701298704,99.0,120.70130157470703,308
results/single_episode_diagnostics/alignment_stress/alignment_stress_summary.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "description": "Real feature windows are deliberately time-shifted at evaluation time to test cross-modal alignment sensitivity.",
3
+ "target_group": "depth_confidence + video_*",
4
+ "status_meaning": "derived_perturbation means the features are real but the time shift is an explicit diagnostic perturbation.",
5
+ "num_rows": 45
6
+ }
results/single_episode_diagnostics/modality_ablation/MODALITY_ABLATION_REPORT.md ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Single-Episode Modality Ablation Report
2
+
3
+ This diagnostic reruns compact ridge heads on the exported one-episode feature matrix. It is useful for checking which real feature blocks can support each task on this episode, not for estimating dataset-wide generalization.
4
+
5
+ No synthetic labels are introduced. Derived proxy targets are marked in `target_variant`, and feature groups that overlap with the target source are marked in `target_source_overlap`.
6
+
7
+ ## Best Computed Group Per Task
8
+
9
+ - Current Action Recognition: Language score=0.0278, macro_f1=0.0278, target overlap=false
10
+ - Current Subtask Recognition: Language score=0.0483, macro_f1=0.0483, target overlap=false
11
+ - Action Transition Detection: Language score=0.7052, macro_f1=0.7052, target overlap=false
12
+ - Next-Action Prediction: Language score=0.0419, macro_f1=0.0419, target overlap=false
13
+ - Future Hand Motion Forecasting: Inertial score=0.5679, mae=0.7608, target overlap=false
14
+ - Contact State Prediction: All Features score=1.0000, macro_f1=1.0000, target overlap=false
15
+ - Relevant Object Prediction: Language score=0.2302, micro_f1=0.2302, target overlap=true; best non-overlap: Depth score=0.2013, micro_f1=0.2013
16
+ - Language-to-Time Grounding: Language score=0.2453, mrr=0.2453, target overlap=true; best non-overlap: Motion Capture score=0.0306, mrr=0.0306
17
+ - Cross-Modal Window Retrieval: All Features score=0.9724, mrr=0.9724, target overlap=true; best non-overlap: Pose + SLAM score=0.4262, mrr=0.4262
18
+ - Sensor-to-Visual Reconstruction: Video score=0.6113, mae=0.6358, target overlap=true; best non-overlap: Pose + SLAM score=0.5359, mae=0.8659
19
+ - Temporal Order Verification: Pose + SLAM score=0.5259, macro_f1=0.5259, target overlap=false
20
+ - Cross-Modal Misalignment Detection: Video score=0.4949, macro_f1=0.4949, target overlap=false
21
+
22
+ ## Files
23
+
24
+ - `ablation_metrics.csv`: every task/modality pair, including not-computed rows and reasons.
25
+ - `ablation_matrix.svg`: compact heatmap for manual inspection.
26
+ - `ablation_summary.json`: group dimensions and computed/not-computed counts.
results/single_episode_diagnostics/modality_ablation/ablation_matrix.svg ADDED
results/single_episode_diagnostics/modality_ablation/ablation_metrics.csv ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ task,task_display,modality_group,modality_display,status,score,primary_metric,primary_metric_value,target_variant,target_source_overlap,reason,accuracy,macro_f1,balanced_accuracy,num_classes,num_train,num_test,unseen_test_classes,unseen_test_class_count,mse,mae,r2,micro_f1,exact_match,precision,recall,num_objects,mrr,top1_accuracy,top5_accuracy,top10_accuracy,median_rank,mean_rank,num_queries
2
+ timeline_action,Current Action Recognition,all_features,All Features,computed,0.008771929824561405,macro_f1,0.008771929824561405,,false,,0.020114942528735632,0.008771929824561405,0.005668016194331984,19,813,348,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
3
+ timeline_action,Current Action Recognition,video,Video,computed,0.0066280033140016575,macro_f1,0.0066280033140016575,,false,,0.011494252873563218,0.0066280033140016575,0.0036199095022624436,19,813,348,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
4
+ timeline_action,Current Action Recognition,depth,Depth,computed,0.0030075187969924814,macro_f1,0.0030075187969924814,,false,,0.005747126436781609,0.0030075187969924814,0.001619433198380567,19,813,348,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
5
+ timeline_action,Current Action Recognition,pose_slam,Pose + SLAM,computed,0.0,macro_f1,0.0,,false,,0.0,0.0,0.0,19,813,348,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
6
+ timeline_action,Current Action Recognition,motion_capture,Motion Capture,computed,0.0055147058823529415,macro_f1,0.0055147058823529415,,false,,0.008620689655172414,0.0055147058823529415,0.0028846153846153848,19,813,348,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
7
+ timeline_action,Current Action Recognition,inertial,Inertial,computed,0.003055767761650115,macro_f1,0.003055767761650115,,false,,0.005747126436781609,0.003055767761650115,0.0018099547511312218,19,813,348,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
8
+ timeline_action,Current Action Recognition,language,Language,computed,0.027777777777777776,macro_f1,0.027777777777777776,,false,,0.05747126436781609,0.027777777777777776,0.03615384615384616,19,813,348,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
9
+ timeline_action,Current Action Recognition,no_language,All Except Language,computed,0.007112375533428165,macro_f1,0.007112375533428165,,false,,0.014367816091954023,0.007112375533428165,0.004048582995951417,19,813,348,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
10
+ timeline_subtask,Current Subtask Recognition,all_features,All Features,computed,0.0111731843575419,macro_f1,0.0111731843575419,,false,,0.040229885057471264,0.0111731843575419,0.017543859649122806,15,813,348,Move bottle to coffee equipment|Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
11
+ timeline_subtask,Current Subtask Recognition,video,Video,computed,0.011740041928721174,macro_f1,0.011740041928721174,,false,,0.040229885057471264,0.011740041928721174,0.01637426900584795,15,813,348,Move bottle to coffee equipment|Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
12
+ timeline_subtask,Current Subtask Recognition,depth,Depth,computed,0.009467455621301775,macro_f1,0.009467455621301775,,false,,0.022988505747126436,0.009467455621301775,0.010796221322537112,15,813,348,Move bottle to coffee equipment|Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
13
+ timeline_subtask,Current Subtask Recognition,pose_slam,Pose + SLAM,computed,0.002331002331002331,macro_f1,0.002331002331002331,,false,,0.0028735632183908046,0.002331002331002331,0.001349527665317139,15,813,348,Move bottle to coffee equipment|Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
14
+ timeline_subtask,Current Subtask Recognition,motion_capture,Motion Capture,computed,0.006756756756756756,macro_f1,0.006756756756756756,,false,,0.008620689655172414,0.006756756756756756,0.0043859649122807015,15,813,348,Move bottle to coffee equipment|Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
15
+ timeline_subtask,Current Subtask Recognition,inertial,Inertial,computed,0.004662004662004662,macro_f1,0.004662004662004662,,false,,0.005747126436781609,0.004662004662004662,0.002699055330634278,15,813,348,Move bottle to coffee equipment|Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
16
+ timeline_subtask,Current Subtask Recognition,language,Language,computed,0.04828150572831424,macro_f1,0.04828150572831424,,false,,0.14655172413793102,0.04828150572831424,0.0939327485380117,15,813,348,Move bottle to coffee equipment|Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
17
+ timeline_subtask,Current Subtask Recognition,no_language,All Except Language,computed,0.012658227848101266,macro_f1,0.012658227848101266,,false,,0.03735632183908046,0.012658227848101266,0.017543859649122806,15,813,348,Move bottle to coffee equipment|Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
18
+ transition_detection,Action Transition Detection,all_features,All Features,computed,0.46870229007633585,macro_f1,0.46870229007633585,,false,,0.882183908045977,0.46870229007633585,0.4623493975903614,2,813,348,,0,,,,,,,,,,,,,,,
19
+ transition_detection,Action Transition Detection,video,Video,computed,0.46625766871165636,macro_f1,0.46625766871165636,,false,,0.8735632183908046,0.46625766871165636,0.4578313253012048,2,813,348,,0,,,,,,,,,,,,,,,
20
+ transition_detection,Action Transition Detection,depth,Depth,computed,0.4604651162790698,macro_f1,0.4604651162790698,,false,,0.853448275862069,0.4604651162790698,0.44728915662650603,2,813,348,,0,,,,,,,,,,,,,,,
21
+ transition_detection,Action Transition Detection,pose_slam,Pose + SLAM,computed,0.48444444444444446,macro_f1,0.48444444444444446,,false,,0.9396551724137931,0.48444444444444446,0.4924698795180723,2,813,348,,0,,,,,,,,,,,,,,,
22
+ transition_detection,Action Transition Detection,motion_capture,Motion Capture,computed,0.5439056356487549,macro_f1,0.5439056356487549,,false,,0.896551724137931,0.5439056356487549,0.5591114457831325,2,813,348,,0,,,,,,,,,,,,,,,
23
+ transition_detection,Action Transition Detection,inertial,Inertial,computed,0.48520710059171596,macro_f1,0.48520710059171596,,false,,0.9425287356321839,0.48520710059171596,0.4939759036144578,2,813,348,,0,,,,,,,,,,,,,,,
24
+ transition_detection,Action Transition Detection,language,Language,computed,0.7051957831325302,macro_f1,0.7051957831325302,,false,,0.9482758620689655,0.7051957831325302,0.7051957831325302,2,813,348,,0,,,,,,,,,,,,,,,
25
+ transition_detection,Action Transition Detection,no_language,All Except Language,computed,0.46543778801843316,macro_f1,0.46543778801843316,,false,,0.8706896551724138,0.46543778801843316,0.4563253012048193,2,813,348,,0,,,,,,,,,,,,,,,
26
+ next_action,Next-Action Prediction,all_features,All Features,computed,0.0060882800608828,macro_f1,0.0060882800608828,future action label from windows.csv,false,,0.011527377521613832,0.0060882800608828,0.003472222222222222,19,810,347,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
27
+ next_action,Next-Action Prediction,video,Video,computed,0.006349206349206349,macro_f1,0.006349206349206349,future action label from windows.csv,false,,0.011527377521613832,0.006349206349206349,0.003472222222222222,19,810,347,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
28
+ next_action,Next-Action Prediction,depth,Depth,computed,0.001594896331738437,macro_f1,0.001594896331738437,future action label from windows.csv,false,,0.002881844380403458,0.001594896331738437,0.0008223684210526315,19,810,347,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
29
+ next_action,Next-Action Prediction,pose_slam,Pose + SLAM,computed,0.0,macro_f1,0.0,future action label from windows.csv,false,,0.0,0.0,0.0,19,810,347,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
30
+ next_action,Next-Action Prediction,motion_capture,Motion Capture,computed,0.00322061191626409,macro_f1,0.00322061191626409,future action label from windows.csv,false,,0.005763688760806916,0.00322061191626409,0.001736111111111111,19,810,347,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
31
+ next_action,Next-Action Prediction,inertial,Inertial,computed,0.00196078431372549,macro_f1,0.00196078431372549,future action label from windows.csv,false,,0.002881844380403458,0.00196078431372549,0.0010416666666666667,19,810,347,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
32
+ next_action,Next-Action Prediction,language,Language,computed,0.04193971166448231,macro_f1,0.04193971166448231,future action label from windows.csv,false,,0.1844380403458213,0.04193971166448231,0.07142857142857142,19,810,347,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
33
+ next_action,Next-Action Prediction,no_language,All Except Language,computed,0.004511278195488722,macro_f1,0.004511278195488722,future action label from windows.csv,false,,0.008645533141210375,0.004511278195488722,0.0024671052631578946,19,810,347,Place item on table|Wait/Prepare for pouring|Pour coffee|Pour milk into coffee,4,,,,,,,,,,,,,,,
34
+ hand_trajectory_forecast,Future Hand Motion Forecasting,all_features,All Features,computed,0.1047945346490482,mae,8.542482376098633,future hand feature vector from shared_windows.npz,true,,,,,,,,,,6413.8505859375,8.542482376098633,-6684.484259411514,,,,,,,,,,,,
35
+ hand_trajectory_forecast,Future Hand Motion Forecasting,video,Video,computed,0.4956350584748486,mae,1.0176135301589966,future hand feature vector from shared_windows.npz,false,,,,,,,,,,1.7896661758422852,1.0176135301589966,-0.8654605965108897,,,,,,,,,,,,
36
+ hand_trajectory_forecast,Future Hand Motion Forecasting,depth,Depth,computed,0.04014931629731973,mae,23.907024383544922,future hand feature vector from shared_windows.npz,false,,,,,,,,,,72553.34375,23.907024383544922,-75625.0610993949,,,,,,,,,,,,
37
+ hand_trajectory_forecast,Future Hand Motion Forecasting,pose_slam,Pose + SLAM,computed,0.5611809661721311,mae,0.7819563746452332,future hand feature vector from shared_windows.npz,false,,,,,,,,,,1.2600995302200317,0.7819563746452332,-0.3134661692106211,,,,,,,,,,,,
38
+ hand_trajectory_forecast,Future Hand Motion Forecasting,motion_capture,Motion Capture,computed,0.0839705207556719,mae,10.908941268920898,future hand feature vector from shared_windows.npz,true,,,,,,,,,,6293.8876953125,10.908941268920898,-6559.441194341517,,,,,,,,,,,,
39
+ hand_trajectory_forecast,Future Hand Motion Forecasting,inertial,Inertial,computed,0.5679183061202404,mae,0.7608166337013245,future hand feature vector from shared_windows.npz,false,,,,,,,,,,1.1916581392288208,0.7608166337013245,-0.24212624676650907,,,,,,,,,,,,
40
+ hand_trajectory_forecast,Future Hand Motion Forecasting,language,Language,computed,0.451525705011023,mae,1.2147133350372314,future hand feature vector from shared_windows.npz,false,,,,,,,,,,2.3450045585632324,1.2147133350372314,-1.4443180759924243,,,,,,,,,,,,
41
+ hand_trajectory_forecast,Future Hand Motion Forecasting,no_language,All Except Language,computed,0.09737268805379895,mae,9.269820213317871,future hand feature vector from shared_windows.npz,true,,,,,,,,,,7166.751953125,9.269820213317871,-7469.272088447983,,,,,,,,,,,,
42
+ contact_prediction,Contact State Prediction,all_features,All Features,computed,1.0,macro_f1,1.0,contact proxy derived from body_contacts feature block,false,,1.0,1.0,1.0,1,813,348,,0,,,,,,,,,,,,,,,
43
+ contact_prediction,Contact State Prediction,video,Video,computed,1.0,macro_f1,1.0,contact proxy derived from body_contacts feature block,false,,1.0,1.0,1.0,1,813,348,,0,,,,,,,,,,,,,,,
44
+ contact_prediction,Contact State Prediction,depth,Depth,computed,1.0,macro_f1,1.0,contact proxy derived from body_contacts feature block,false,,1.0,1.0,1.0,1,813,348,,0,,,,,,,,,,,,,,,
45
+ contact_prediction,Contact State Prediction,pose_slam,Pose + SLAM,computed,1.0,macro_f1,1.0,contact proxy derived from body_contacts feature block,false,,1.0,1.0,1.0,1,813,348,,0,,,,,,,,,,,,,,,
46
+ contact_prediction,Contact State Prediction,motion_capture,Motion Capture,computed,1.0,macro_f1,1.0,contact proxy derived from body_contacts feature block,false,,1.0,1.0,1.0,1,813,348,,0,,,,,,,,,,,,,,,
47
+ contact_prediction,Contact State Prediction,inertial,Inertial,computed,1.0,macro_f1,1.0,contact proxy derived from body_contacts feature block,false,,1.0,1.0,1.0,1,813,348,,0,,,,,,,,,,,,,,,
48
+ contact_prediction,Contact State Prediction,language,Language,computed,1.0,macro_f1,1.0,contact proxy derived from body_contacts feature block,false,,1.0,1.0,1.0,1,813,348,,0,,,,,,,,,,,,,,,
49
+ contact_prediction,Contact State Prediction,no_language,All Except Language,computed,1.0,macro_f1,1.0,contact proxy derived from body_contacts feature block,false,,1.0,1.0,1.0,1,813,348,,0,,,,,,,,,,,,,,,
50
+ object_relevance,Relevant Object Prediction,all_features,All Features,computed,0.175914508836827,micro_f1,0.175914508836827,object sets exported from annotation.hdf5 caption_frame_info_map,true,,,0.06322379109578449,,,813,348,,,,,,0.175914508836827,0.020114942528735632,0.19888475836431227,0.15770081061164334,34,,,,,,,
51
+ object_relevance,Relevant Object Prediction,video,Video,computed,0.14804270462633454,micro_f1,0.14804270462633454,object sets exported from annotation.hdf5 caption_frame_info_map,false,,,0.04379950367755125,,,813,348,,,,,,0.14804270462633454,0.008620689655172414,0.14315209910529939,0.15327929255711129,34,,,,,,,
52
+ object_relevance,Relevant Object Prediction,depth,Depth,computed,0.20134228187919462,micro_f1,0.20134228187919462,object sets exported from annotation.hdf5 caption_frame_info_map,false,,,0.0649677953734521,,,813,348,,,,,,0.20134228187919462,0.011494252873563218,0.18484288354898337,0.2210759027266028,34,,,,,,,
53
+ object_relevance,Relevant Object Prediction,pose_slam,Pose + SLAM,computed,0.19528071602929212,micro_f1,0.19528071602929212,object sets exported from annotation.hdf5 caption_frame_info_map,false,,,0.05592381693865655,,,813,348,,,,,,0.19528071602929212,0.0,0.21798365122615804,0.17686072218128224,34,,,,,,,
54
+ object_relevance,Relevant Object Prediction,motion_capture,Motion Capture,computed,0.11607786589762077,micro_f1,0.11607786589762077,object sets exported from annotation.hdf5 caption_frame_info_map,false,,,0.045395437036303915,,,813,348,,,,,,0.11607786589762077,0.0028735632183908046,0.11362032462949895,0.11864406779661017,34,,,,,,,
55
+ object_relevance,Relevant Object Prediction,inertial,Inertial,computed,0.1716082659478886,micro_f1,0.1716082659478886,object sets exported from annotation.hdf5 caption_frame_info_map,false,,,0.04806995854957751,,,813,348,,,,,,0.1716082659478886,0.0,0.21979286536248563,0.14075165806927045,34,,,,,,,
56
+ object_relevance,Relevant Object Prediction,language,Language,computed,0.23021032504780117,micro_f1,0.23021032504780117,object sets exported from annotation.hdf5 caption_frame_info_map,true,,,0.0947530205484707,,,813,348,,,,,,0.23021032504780117,0.15229885057471265,0.23926868044515104,0.22181282240235814,34,,,,,,,
57
+ object_relevance,Relevant Object Prediction,no_language,All Except Language,computed,0.14793328498912256,micro_f1,0.14793328498912256,object sets exported from annotation.hdf5 caption_frame_info_map,false,,,0.05137956064750565,,,813,348,,,,,,0.14793328498912256,0.008620689655172414,0.145610278372591,0.1503316138540899,34,,,,,,,
58
+ caption_grounding,Language-to-Time Grounding,all_features,All Features,computed,0.21027426421642303,mrr,0.21027426421642303,,true,,,,,,,,,,,,,,,,,,0.21027426421642303,0.08908045977011494,0.33045977011494254,0.4482758620689655,13.0,22.55172348022461,348
59
+ caption_grounding,Language-to-Time Grounding,video,Video,computed,0.022670436650514603,mrr,0.022670436650514603,,false,,,,,,,,,,,,,,,,,,0.022670436650514603,0.0028735632183908046,0.02586206896551724,0.034482758620689655,162.0,161.4770050048828,348
60
+ caption_grounding,Language-to-Time Grounding,depth,Depth,computed,0.02443847246468067,mrr,0.02443847246468067,,false,,,,,,,,,,,,,,,,,,0.02443847246468067,0.0028735632183908046,0.020114942528735632,0.03735632183908046,114.0,137.90805053710938,348
61
+ caption_grounding,Language-to-Time Grounding,pose_slam,Pose + SLAM,computed,0.02946249581873417,mrr,0.02946249581873417,,false,,,,,,,,,,,,,,,,,,0.02946249581873417,0.008620689655172414,0.028735632183908046,0.04597701149425287,143.5,155.4712677001953,348
62
+ caption_grounding,Language-to-Time Grounding,motion_capture,Motion Capture,computed,0.030569594353437424,mrr,0.030569594353437424,,false,,,,,,,,,,,,,,,,,,0.030569594353437424,0.008620689655172414,0.02586206896551724,0.04885057471264368,110.5,130.32470703125,348
63
+ caption_grounding,Language-to-Time Grounding,inertial,Inertial,computed,0.02470344305038452,mrr,0.02470344305038452,,false,,,,,,,,,,,,,,,,,,0.02470344305038452,0.0028735632183908046,0.022988505747126436,0.04597701149425287,123.0,138.61207580566406,348
64
+ caption_grounding,Language-to-Time Grounding,language,Language,computed,0.24527303874492645,mrr,0.24527303874492645,,true,,,,,,,,,,,,,,,,,,0.24527303874492645,0.12643678160919541,0.34770114942528735,0.47126436781609193,12.0,15.106322288513184,348
65
+ caption_grounding,Language-to-Time Grounding,no_language,All Except Language,computed,0.02722795307636261,mrr,0.02722795307636261,,false,,,,,,,,,,,,,,,,,,0.02722795307636261,0.005747126436781609,0.028735632183908046,0.04597701149425287,134.0,142.65516662597656,348
66
+ cross_modal_retrieval,Cross-Modal Window Retrieval,all_features,All Features,computed,0.9723829030990601,mrr,0.9723829030990601,,true,,,,,,,,,,,,,,,,,,0.9723829030990601,0.9683908045977011,0.9741379310344828,0.9827586206896551,1.0,2.347701072692871,348
67
+ cross_modal_retrieval,Cross-Modal Window Retrieval,video,Video,computed,0.9701701402664185,mrr,0.9701701402664185,,true,,,,,,,,,,,,,,,,,,0.9701701402664185,0.9626436781609196,0.9798850574712644,0.9798850574712644,1.0,3.844827651977539,348
68
+ cross_modal_retrieval,Cross-Modal Window Retrieval,depth,Depth,computed,0.6656051278114319,mrr,0.6656051278114319,,true,,,,,,,,,,,,,,,,,,0.6656051278114319,0.5660919540229885,0.7902298850574713,0.8620689655172413,1.0,5.729885101318359,348
69
+ cross_modal_retrieval,Cross-Modal Window Retrieval,pose_slam,Pose + SLAM,computed,0.42622581124305725,mrr,0.42622581124305725,,false,,,,,,,,,,,,,,,,,,0.42622581124305725,0.3017241379310345,0.5488505747126436,0.6551724137931034,4.0,15.623562812805176,348
70
+ cross_modal_retrieval,Cross-Modal Window Retrieval,motion_capture,Motion Capture,computed,0.2553335726261139,mrr,0.2553335726261139,,false,,,,,,,,,,,,,,,,,,0.2553335726261139,0.15804597701149425,0.35344827586206895,0.3994252873563218,21.5,49.181034088134766,348
71
+ cross_modal_retrieval,Cross-Modal Window Retrieval,inertial,Inertial,computed,0.2840072810649872,mrr,0.2840072810649872,,false,,,,,,,,,,,,,,,,,,0.2840072810649872,0.16379310344827586,0.3735632183908046,0.5229885057471264,10.0,20.577587127685547,348
72
+ cross_modal_retrieval,Cross-Modal Window Retrieval,language,Language,computed,0.031006580218672752,mrr,0.031006580218672752,,false,,,,,,,,,,,,,,,,,,0.031006580218672752,0.005747126436781609,0.031609195402298854,0.05747126436781609,138.0,146.83045959472656,348
73
+ cross_modal_retrieval,Cross-Modal Window Retrieval,no_language,All Except Language,computed,0.9722298979759216,mrr,0.9722298979759216,,true,,,,,,,,,,,,,,,,,,0.9722298979759216,0.9683908045977011,0.9741379310344828,0.9827586206896551,1.0,2.55747127532959,348
74
+ modality_reconstruction,Sensor-to-Visual Reconstruction,all_features,All Features,computed,0.1979444902694729,mae,4.051921367645264,,true,,,,,,,,,,4260.24853515625,4.051921367645264,0.5054433122397289,,,,,,,,,,,,
75
+ modality_reconstruction,Sensor-to-Visual Reconstruction,video,Video,computed,0.611318891594774,mae,0.635807454586029,,true,,,,,,,,,,8679.7548828125,0.635807454586029,-0.007601057526781085,,,,,,,,,,,,
76
+ modality_reconstruction,Sensor-to-Visual Reconstruction,depth,Depth,computed,0.062215385980961393,mae,15.07319450378418,,true,,,,,,,,,,38000.71875,15.07319450378418,-3.4113648334674167,,,,,,,,,,,,
77
+ modality_reconstruction,Sensor-to-Visual Reconstruction,pose_slam,Pose + SLAM,computed,0.5359235021455191,mae,0.8659379482269287,,false,,,,,,,,,,8678.9697265625,0.8659379482269287,-0.007509963078260462,,,,,,,,,,,,
78
+ modality_reconstruction,Sensor-to-Visual Reconstruction,motion_capture,Motion Capture,computed,0.07724422027114182,mae,11.945952415466309,,false,,,,,,,,,,16462.224609375,11.945952415466309,-0.911039534454414,,,,,,,,,,,,
79
+ modality_reconstruction,Sensor-to-Visual Reconstruction,inertial,Inertial,computed,0.5185351442505587,mae,0.9285095930099487,,false,,,,,,,,,,8680.1376953125,0.9285095930099487,-0.007645498747803181,,,,,,,,,,,,
80
+ modality_reconstruction,Sensor-to-Visual Reconstruction,language,Language,computed,0.411308516935754,mae,1.4312649965286255,,false,,,,,,,,,,8681.390625,1.4312649965286255,-0.00779095493123938,,,,,,,,,,,,
81
+ modality_reconstruction,Sensor-to-Visual Reconstruction,no_language,All Except Language,computed,0.19605900415414898,mae,4.100505352020264,,true,,,,,,,,,,4129.71484375,4.100505352020264,0.5205964615135674,,,,,,,,,,,,
82
+ temporal_order,Temporal Order Verification,all_features,All Features,computed,0.4942528735632184,macro_f1,0.4942528735632184,,false,,0.4942528735632184,0.4942528735632184,0.4942528735632184,2,1624,696,,0,,,,,,,,,,,,,,,
83
+ temporal_order,Temporal Order Verification,video,Video,computed,0.5172413793103449,macro_f1,0.5172413793103449,,false,,0.5172413793103449,0.5172413793103449,0.5172413793103449,2,1624,696,,0,,,,,,,,,,,,,,,
84
+ temporal_order,Temporal Order Verification,depth,Depth,computed,0.49424869738982513,macro_f1,0.49424869738982513,,false,,0.4942528735632184,0.49424869738982513,0.49425287356321834,2,1624,696,,0,,,,,,,,,,,,,,,
85
+ temporal_order,Temporal Order Verification,pose_slam,Pose + SLAM,computed,0.5258620689655172,macro_f1,0.5258620689655172,,false,,0.5258620689655172,0.5258620689655172,0.5258620689655172,2,1624,696,,0,,,,,,,,,,,,,,,
86
+ temporal_order,Temporal Order Verification,motion_capture,Motion Capture,computed,0.4942528735632184,macro_f1,0.4942528735632184,,false,,0.4942528735632184,0.4942528735632184,0.4942528735632184,2,1624,696,,0,,,,,,,,,,,,,,,
87
+ temporal_order,Temporal Order Verification,inertial,Inertial,computed,0.5,macro_f1,0.5,,false,,0.5,0.5,0.5,2,1624,696,,0,,,,,,,,,,,,,,,
88
+ temporal_order,Temporal Order Verification,language,Language,computed,0.4236751152073733,macro_f1,0.4236751152073733,,false,,0.47126436781609193,0.4236751152073733,0.47126436781609193,2,1624,696,,0,,,,,,,,,,,,,,,
89
+ temporal_order,Temporal Order Verification,no_language,All Except Language,computed,0.49856218325196366,macro_f1,0.49856218325196366,,false,,0.4985632183908046,0.49856218325196366,0.4985632183908046,2,1624,696,,0,,,,,,,,,,,,,,,
90
+ misalignment_detection,Cross-Modal Misalignment Detection,all_features,All Features,computed,0.4134495778430919,macro_f1,0.4134495778430919,,false,,0.4436416184971098,0.4134495778430919,0.4436416184971098,2,1614,692,,0,,,,,,,,,,,,,,,
91
+ misalignment_detection,Cross-Modal Misalignment Detection,video,Video,computed,0.49488307322727143,macro_f1,0.49488307322727143,,false,,0.4985549132947977,0.49488307322727143,0.4985549132947977,2,1614,692,,0,,,,,,,,,,,,,,,
92
+ misalignment_detection,Cross-Modal Misalignment Detection,depth,Depth,computed,0.46659963973021656,macro_f1,0.46659963973021656,,false,,0.4682080924855491,0.46659963973021656,0.4682080924855491,2,1614,692,,0,,,,,,,,,,,,,,,
93
+ misalignment_detection,Cross-Modal Misalignment Detection,pose_slam,Pose + SLAM,computed,0.4929686094043242,macro_f1,0.4929686094043242,,false,,0.5057803468208093,0.4929686094043242,0.5057803468208092,2,1614,692,,0,,,,,,,,,,,,,,,
94
+ misalignment_detection,Cross-Modal Misalignment Detection,motion_capture,Motion Capture,computed,0.4133918268956141,macro_f1,0.4133918268956141,,false,,0.4638728323699422,0.4133918268956141,0.4638728323699422,2,1614,692,,0,,,,,,,,,,,,,,,
95
+ misalignment_detection,Cross-Modal Misalignment Detection,inertial,Inertial,computed,0.48899072503396884,macro_f1,0.48899072503396884,,false,,0.49421965317919075,0.48899072503396884,0.49421965317919075,2,1614,692,,0,,,,,,,,,,,,,,,
96
+ misalignment_detection,Cross-Modal Misalignment Detection,language,Language,computed,0.4942161609504254,macro_f1,0.4942161609504254,,false,,0.5,0.4942161609504254,0.5,2,1614,692,,0,,,,,,,,,,,,,,,
97
+ misalignment_detection,Cross-Modal Misalignment Detection,no_language,All Except Language,computed,0.41142741665056637,macro_f1,0.41142741665056637,,false,,0.44653179190751446,0.41142741665056637,0.44653179190751446,2,1614,692,,0,,,,,,,,,,,,,,,
results/single_episode_diagnostics/modality_ablation/ablation_summary.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "description": "Compact ridge-head ablation over real shared_windows.npz feature blocks.",
3
+ "num_rows": 96,
4
+ "num_computed": 96,
5
+ "num_not_computed": 0,
6
+ "groups": {
7
+ "all_features": 8378,
8
+ "video": 4116,
9
+ "depth": 980,
10
+ "pose_slam": 223,
11
+ "motion_capture": 2121,
12
+ "inertial": 42,
13
+ "language": 896,
14
+ "no_language": 7482
15
+ },
16
+ "tasks": [
17
+ "timeline_action",
18
+ "timeline_subtask",
19
+ "transition_detection",
20
+ "next_action",
21
+ "hand_trajectory_forecast",
22
+ "contact_prediction",
23
+ "object_relevance",
24
+ "caption_grounding",
25
+ "cross_modal_retrieval",
26
+ "modality_reconstruction",
27
+ "temporal_order",
28
+ "misalignment_detection"
29
+ ],
30
+ "object_relevance_labels": "annotation.hdf5"
31
+ }
results/single_episode_diagnostics/object_labels/object_vocab.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "vocab": [
3
+ "kettle",
4
+ "coffee dripper",
5
+ "scale",
6
+ "bottle",
7
+ "gooseneck kettle",
8
+ "digital scale",
9
+ "table",
10
+ "dripper",
11
+ "coffee filter",
12
+ "glass carafe",
13
+ "coffee scale",
14
+ "white mug",
15
+ "wooden scoop",
16
+ "coffee jar",
17
+ "coffee scoop",
18
+ "coffee container",
19
+ "lid",
20
+ "closed coffee container",
21
+ "water bottle",
22
+ "coffee mug",
23
+ "mug",
24
+ "white cup",
25
+ "white bottle",
26
+ "coffee equipment",
27
+ "small bottle",
28
+ "weighing scale",
29
+ "white coffee cup",
30
+ "digital scale with dripper",
31
+ "metal pitcher",
32
+ "carafe",
33
+ "milk pitcher",
34
+ "coffee cup",
35
+ "stainless steel milk pitcher",
36
+ "milk bottle"
37
+ ],
38
+ "num_objects": 34,
39
+ "source_annotation": "external_raw_sample/annotation.hdf5",
40
+ "source_toolkit": "HOMIE-toolkit",
41
+ "source_note": "Object labels were exported from a raw Xperience-10M sample annotation. The public artifact stores source type and hash instead of machine-specific file paths."
42
+ }
results/single_episode_diagnostics/object_labels/window_object_labels.csv ADDED
@@ -0,0 +1,1162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ window_index,start_frame,end_frame,center_frame,objects,object_count
2
+ 0,0,19,9,kettle|coffee dripper|scale|bottle,4
3
+ 1,5,24,14,kettle|coffee dripper|scale|bottle,4
4
+ 2,10,29,19,kettle|coffee dripper|scale|bottle,4
5
+ 3,15,34,24,kettle|coffee dripper|scale|bottle,4
6
+ 4,20,39,29,kettle|coffee dripper|scale|bottle,4
7
+ 5,25,44,34,kettle|coffee dripper|scale|bottle,4
8
+ 6,30,49,39,kettle|coffee dripper|scale|bottle,4
9
+ 7,35,54,44,kettle|coffee dripper|scale|bottle,4
10
+ 8,40,59,49,kettle|coffee dripper|scale|bottle,4
11
+ 9,45,64,54,kettle|coffee dripper|scale|bottle,4
12
+ 10,50,69,59,kettle|coffee dripper|scale|bottle,4
13
+ 11,55,74,64,kettle|coffee dripper|scale|bottle,4
14
+ 12,60,79,69,kettle|coffee dripper|scale|bottle,4
15
+ 13,65,84,74,kettle|coffee dripper|scale|bottle,4
16
+ 14,70,89,79,kettle|coffee dripper|scale|bottle,4
17
+ 15,75,94,84,kettle|coffee dripper|scale|bottle,4
18
+ 16,80,99,89,kettle|coffee dripper|scale|bottle,4
19
+ 17,85,104,94,kettle|coffee dripper|scale|bottle,4
20
+ 18,90,109,99,kettle|coffee dripper|scale|bottle,4
21
+ 19,95,114,104,kettle|coffee dripper|scale|bottle,4
22
+ 20,100,119,109,kettle|coffee dripper|scale|bottle,4
23
+ 21,105,124,114,kettle|coffee dripper|scale|bottle,4
24
+ 22,110,129,119,kettle|coffee dripper|scale|bottle,4
25
+ 23,115,134,124,kettle|coffee dripper|scale|bottle,4
26
+ 24,120,139,129,kettle,1
27
+ 25,125,144,134,kettle,1
28
+ 26,130,149,139,kettle,1
29
+ 27,135,154,144,kettle,1
30
+ 28,140,159,149,kettle,1
31
+ 29,145,164,154,kettle,1
32
+ 30,150,169,159,kettle,1
33
+ 31,155,174,164,kettle,1
34
+ 32,160,179,169,kettle,1
35
+ 33,165,184,174,kettle,1
36
+ 34,170,189,179,kettle,1
37
+ 35,175,194,184,kettle,1
38
+ 36,180,199,189,kettle,1
39
+ 37,185,204,194,kettle,1
40
+ 38,190,209,199,kettle,1
41
+ 39,195,214,204,kettle,1
42
+ 40,200,219,209,kettle,1
43
+ 41,205,224,214,kettle,1
44
+ 42,210,229,219,kettle,1
45
+ 43,215,234,224,kettle,1
46
+ 44,220,239,229,kettle,1
47
+ 45,225,244,234,kettle,1
48
+ 46,230,249,239,kettle,1
49
+ 47,235,254,244,kettle,1
50
+ 48,240,259,249,kettle,1
51
+ 49,245,264,254,kettle,1
52
+ 50,250,269,259,kettle,1
53
+ 51,255,274,264,kettle,1
54
+ 52,260,279,269,kettle,1
55
+ 53,265,284,274,kettle,1
56
+ 54,270,289,279,kettle,1
57
+ 55,275,294,284,kettle,1
58
+ 56,280,299,289,kettle,1
59
+ 57,285,304,294,kettle,1
60
+ 58,290,309,299,kettle,1
61
+ 59,295,314,304,kettle,1
62
+ 60,300,319,309,kettle,1
63
+ 61,305,324,314,kettle,1
64
+ 62,310,329,319,kettle,1
65
+ 63,315,334,324,kettle,1
66
+ 64,320,339,329,kettle,1
67
+ 65,325,344,334,kettle,1
68
+ 66,330,349,339,kettle,1
69
+ 67,335,354,344,kettle,1
70
+ 68,340,359,349,kettle,1
71
+ 69,345,364,354,kettle|coffee dripper|scale,3
72
+ 70,350,369,359,kettle|coffee dripper|scale,3
73
+ 71,355,374,364,kettle|coffee dripper|scale,3
74
+ 72,360,379,369,kettle|coffee dripper|scale,3
75
+ 73,365,384,374,kettle|coffee dripper|scale,3
76
+ 74,370,389,379,kettle|coffee dripper|scale,3
77
+ 75,375,394,384,kettle|coffee dripper|scale,3
78
+ 76,380,399,389,kettle|coffee dripper|scale,3
79
+ 77,385,404,394,kettle|coffee dripper|scale|gooseneck kettle|digital scale|table,6
80
+ 78,390,409,399,kettle|coffee dripper|scale|gooseneck kettle|digital scale|table,6
81
+ 79,395,414,404,kettle|coffee dripper|scale|gooseneck kettle|digital scale|table,6
82
+ 80,400,419,409,gooseneck kettle|coffee dripper|digital scale|table,4
83
+ 81,405,424,414,gooseneck kettle|coffee dripper|digital scale|table,4
84
+ 82,410,429,419,gooseneck kettle|coffee dripper|digital scale|table,4
85
+ 83,415,434,424,gooseneck kettle|coffee dripper|digital scale|table,4
86
+ 84,420,439,429,gooseneck kettle|coffee dripper|digital scale|table,4
87
+ 85,425,444,434,gooseneck kettle|coffee dripper|digital scale|table,4
88
+ 86,430,449,439,gooseneck kettle|coffee dripper|digital scale|table,4
89
+ 87,435,454,444,gooseneck kettle|coffee dripper|digital scale|table,4
90
+ 88,440,459,449,gooseneck kettle|coffee dripper|digital scale|table,4
91
+ 89,445,464,454,gooseneck kettle|coffee dripper|digital scale|table,4
92
+ 90,450,469,459,gooseneck kettle|coffee dripper|digital scale|table,4
93
+ 91,455,474,464,gooseneck kettle|coffee dripper|digital scale|table,4
94
+ 92,460,479,469,gooseneck kettle|coffee dripper|digital scale|table,4
95
+ 93,465,484,474,gooseneck kettle|coffee dripper|digital scale|table,4
96
+ 94,470,489,479,gooseneck kettle|coffee dripper|digital scale|table,4
97
+ 95,475,494,484,gooseneck kettle|coffee dripper|digital scale|table,4
98
+ 96,480,499,489,gooseneck kettle|coffee dripper|digital scale|table,4
99
+ 97,485,504,494,gooseneck kettle|coffee dripper|digital scale|table,4
100
+ 98,490,509,499,gooseneck kettle|coffee dripper|digital scale|table,4
101
+ 99,495,514,504,gooseneck kettle|coffee dripper|digital scale|table,4
102
+ 100,500,519,509,gooseneck kettle|coffee dripper|digital scale|table,4
103
+ 101,505,524,514,gooseneck kettle|coffee dripper|digital scale|table,4
104
+ 102,510,529,519,gooseneck kettle|coffee dripper|digital scale|table,4
105
+ 103,515,534,524,gooseneck kettle|coffee dripper|digital scale|table,4
106
+ 104,520,539,529,gooseneck kettle|coffee dripper|digital scale,3
107
+ 105,525,544,534,gooseneck kettle|coffee dripper|digital scale,3
108
+ 106,530,549,539,gooseneck kettle|coffee dripper|digital scale,3
109
+ 107,535,554,544,gooseneck kettle|coffee dripper|digital scale,3
110
+ 108,540,559,549,gooseneck kettle|coffee dripper|digital scale,3
111
+ 109,545,564,554,gooseneck kettle|coffee dripper|digital scale,3
112
+ 110,550,569,559,gooseneck kettle|coffee dripper|digital scale,3
113
+ 111,555,574,564,gooseneck kettle|coffee dripper|digital scale,3
114
+ 112,560,579,569,gooseneck kettle|coffee dripper|digital scale,3
115
+ 113,565,584,574,gooseneck kettle|coffee dripper|digital scale,3
116
+ 114,570,589,579,gooseneck kettle|coffee dripper|digital scale,3
117
+ 115,575,594,584,gooseneck kettle|coffee dripper|digital scale,3
118
+ 116,580,599,589,gooseneck kettle|coffee dripper|digital scale,3
119
+ 117,585,604,594,gooseneck kettle|coffee dripper|digital scale,3
120
+ 118,590,609,599,gooseneck kettle|coffee dripper|digital scale,3
121
+ 119,595,614,604,gooseneck kettle|coffee dripper|digital scale,3
122
+ 120,600,619,609,gooseneck kettle|coffee dripper|digital scale,3
123
+ 121,605,624,614,gooseneck kettle|coffee dripper|digital scale,3
124
+ 122,610,629,619,gooseneck kettle|coffee dripper|digital scale,3
125
+ 123,615,634,624,gooseneck kettle|coffee dripper|digital scale,3
126
+ 124,620,639,629,gooseneck kettle|coffee dripper|digital scale,3
127
+ 125,625,644,634,gooseneck kettle|coffee dripper|digital scale,3
128
+ 126,630,649,639,gooseneck kettle|coffee dripper|digital scale,3
129
+ 127,635,654,644,gooseneck kettle|coffee dripper|digital scale,3
130
+ 128,640,659,649,gooseneck kettle|coffee dripper|digital scale,3
131
+ 129,645,664,654,gooseneck kettle|coffee dripper|digital scale,3
132
+ 130,650,669,659,gooseneck kettle|coffee dripper|digital scale,3
133
+ 131,655,674,664,gooseneck kettle|coffee dripper|digital scale,3
134
+ 132,660,679,669,gooseneck kettle|coffee dripper|digital scale,3
135
+ 133,665,684,674,gooseneck kettle|coffee dripper|digital scale,3
136
+ 134,670,689,679,gooseneck kettle|coffee dripper|digital scale,3
137
+ 135,675,694,684,gooseneck kettle|coffee dripper|digital scale,3
138
+ 136,680,699,689,gooseneck kettle|coffee dripper|digital scale,3
139
+ 137,685,704,694,gooseneck kettle|coffee dripper|digital scale,3
140
+ 138,690,709,699,gooseneck kettle|coffee dripper|digital scale,3
141
+ 139,695,714,704,gooseneck kettle|coffee dripper|digital scale,3
142
+ 140,700,719,709,gooseneck kettle|coffee dripper|digital scale,3
143
+ 141,705,724,714,gooseneck kettle|coffee dripper|digital scale,3
144
+ 142,710,729,719,gooseneck kettle|coffee dripper|digital scale,3
145
+ 143,715,734,724,gooseneck kettle|coffee dripper|digital scale,3
146
+ 144,720,739,729,gooseneck kettle|coffee dripper|digital scale,3
147
+ 145,725,744,734,gooseneck kettle|coffee dripper|digital scale,3
148
+ 146,730,749,739,gooseneck kettle|coffee dripper|digital scale,3
149
+ 147,735,754,744,gooseneck kettle|coffee dripper|digital scale,3
150
+ 148,740,759,749,gooseneck kettle|coffee dripper|digital scale,3
151
+ 149,745,764,754,gooseneck kettle|coffee dripper|digital scale,3
152
+ 150,750,769,759,gooseneck kettle|coffee dripper|digital scale,3
153
+ 151,755,774,764,gooseneck kettle|coffee dripper|digital scale,3
154
+ 152,760,779,769,gooseneck kettle|coffee dripper|digital scale,3
155
+ 153,765,784,774,gooseneck kettle|coffee dripper|digital scale,3
156
+ 154,770,789,779,gooseneck kettle|coffee dripper|digital scale,3
157
+ 155,775,794,784,gooseneck kettle|coffee dripper|digital scale,3
158
+ 156,780,799,789,gooseneck kettle|coffee dripper|digital scale,3
159
+ 157,785,804,794,gooseneck kettle|coffee dripper|digital scale|kettle|dripper|scale|coffee filter|table,8
160
+ 158,790,809,799,gooseneck kettle|coffee dripper|digital scale|kettle|dripper|scale|coffee filter|table,8
161
+ 159,795,814,804,gooseneck kettle|coffee dripper|digital scale|kettle|dripper|scale|coffee filter|table,8
162
+ 160,800,819,809,kettle|dripper|scale|coffee filter|table,5
163
+ 161,805,824,814,kettle|dripper|scale|coffee filter|table,5
164
+ 162,810,829,819,kettle|dripper|scale|coffee filter|table,5
165
+ 163,815,834,824,kettle|dripper|scale|coffee filter|table,5
166
+ 164,820,839,829,kettle|dripper|scale|coffee filter|table,5
167
+ 165,825,844,834,kettle|dripper|scale|coffee filter|table,5
168
+ 166,830,849,839,kettle|dripper|scale|coffee filter|table,5
169
+ 167,835,854,844,kettle|dripper|scale|coffee filter|table,5
170
+ 168,840,859,849,kettle|dripper|scale|coffee filter|table,5
171
+ 169,845,864,854,kettle|dripper|scale|coffee filter|table,5
172
+ 170,850,869,859,kettle|dripper|scale|coffee filter|table,5
173
+ 171,855,874,864,kettle|dripper|scale|coffee filter|table,5
174
+ 172,860,879,869,kettle|dripper|scale|coffee filter|table,5
175
+ 173,865,884,874,kettle|dripper|scale|coffee filter|table,5
176
+ 174,870,889,879,kettle|dripper|scale|coffee filter|table,5
177
+ 175,875,894,884,kettle|dripper|scale|coffee filter|table,5
178
+ 176,880,899,889,kettle|dripper|scale|coffee filter|table,5
179
+ 177,885,904,894,kettle|dripper|scale|coffee filter|table,5
180
+ 178,890,909,899,kettle|dripper|scale|coffee filter|table,5
181
+ 179,895,914,904,kettle|dripper|scale|coffee filter|table,5
182
+ 180,900,919,909,kettle|dripper|scale|coffee filter|table,5
183
+ 181,905,924,914,kettle|dripper|scale|coffee filter|table,5
184
+ 182,910,929,919,kettle|dripper|scale|coffee filter|table,5
185
+ 183,915,934,924,kettle|dripper|scale|coffee filter|table,5
186
+ 184,920,939,929,kettle|dripper|scale|coffee filter|table,5
187
+ 185,925,944,934,kettle|dripper|scale|coffee filter|table,5
188
+ 186,930,949,939,kettle|dripper|scale|coffee filter|table,5
189
+ 187,935,954,944,kettle|dripper|scale|coffee filter|table,5
190
+ 188,940,959,949,kettle|dripper|scale|coffee filter|table,5
191
+ 189,945,964,954,kettle|dripper|scale|coffee filter|table,5
192
+ 190,950,969,959,kettle|dripper|scale|coffee filter|table,5
193
+ 191,955,974,964,kettle|dripper|scale|coffee filter|table,5
194
+ 192,960,979,969,kettle|dripper|scale|coffee filter|table,5
195
+ 193,965,984,974,kettle|dripper|scale|coffee filter|table,5
196
+ 194,970,989,979,kettle|dripper|scale|coffee filter|table,5
197
+ 195,975,994,984,kettle|dripper|scale|coffee filter|table,5
198
+ 196,980,999,989,kettle|dripper|scale|coffee filter|table,5
199
+ 197,985,1004,994,kettle|dripper|scale|coffee filter|table|glass carafe|coffee scale|coffee dripper|white mug|bottle,10
200
+ 198,990,1009,999,kettle|dripper|scale|coffee filter|table|glass carafe|coffee scale|coffee dripper|white mug|bottle,10
201
+ 199,995,1014,1004,kettle|dripper|scale|coffee filter|table|glass carafe|coffee scale|coffee dripper|white mug|bottle,10
202
+ 200,1000,1019,1009,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
203
+ 201,1005,1024,1014,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
204
+ 202,1010,1029,1019,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
205
+ 203,1015,1034,1024,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
206
+ 204,1020,1039,1029,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
207
+ 205,1025,1044,1034,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
208
+ 206,1030,1049,1039,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
209
+ 207,1035,1054,1044,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
210
+ 208,1040,1059,1049,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
211
+ 209,1045,1064,1054,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
212
+ 210,1050,1069,1059,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
213
+ 211,1055,1074,1064,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
214
+ 212,1060,1079,1069,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
215
+ 213,1065,1084,1074,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
216
+ 214,1070,1089,1079,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
217
+ 215,1075,1094,1084,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
218
+ 216,1080,1099,1089,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
219
+ 217,1085,1104,1094,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
220
+ 218,1090,1109,1099,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
221
+ 219,1095,1114,1104,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
222
+ 220,1100,1119,1109,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
223
+ 221,1105,1124,1114,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
224
+ 222,1110,1129,1119,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
225
+ 223,1115,1134,1124,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
226
+ 224,1120,1139,1129,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
227
+ 225,1125,1144,1134,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
228
+ 226,1130,1149,1139,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
229
+ 227,1135,1154,1144,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
230
+ 228,1140,1159,1149,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
231
+ 229,1145,1164,1154,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
232
+ 230,1150,1169,1159,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
233
+ 231,1155,1174,1164,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
234
+ 232,1160,1179,1169,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
235
+ 233,1165,1184,1174,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
236
+ 234,1170,1189,1179,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
237
+ 235,1175,1194,1184,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
238
+ 236,1180,1199,1189,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
239
+ 237,1185,1204,1194,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
240
+ 238,1190,1209,1199,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
241
+ 239,1195,1214,1204,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
242
+ 240,1200,1219,1209,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
243
+ 241,1205,1224,1214,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
244
+ 242,1210,1229,1219,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
245
+ 243,1215,1234,1224,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
246
+ 244,1220,1239,1229,glass carafe|coffee scale|coffee dripper|white mug|bottle,5
247
+ 245,1225,1244,1234,glass carafe|coffee scale|coffee dripper|white mug|bottle|wooden scoop,6
248
+ 246,1230,1249,1239,glass carafe|coffee scale|coffee dripper|white mug|bottle|wooden scoop,6
249
+ 247,1235,1254,1244,glass carafe|coffee scale|coffee dripper|white mug|bottle|wooden scoop,6
250
+ 248,1240,1259,1249,glass carafe|wooden scoop,2
251
+ 249,1245,1264,1254,glass carafe|wooden scoop,2
252
+ 250,1250,1269,1259,glass carafe|wooden scoop,2
253
+ 251,1255,1274,1264,glass carafe|wooden scoop,2
254
+ 252,1260,1279,1269,glass carafe|wooden scoop,2
255
+ 253,1265,1284,1274,glass carafe|wooden scoop,2
256
+ 254,1270,1289,1279,glass carafe|wooden scoop,2
257
+ 255,1275,1294,1284,glass carafe|wooden scoop,2
258
+ 256,1280,1299,1289,glass carafe|wooden scoop,2
259
+ 257,1285,1304,1294,glass carafe|wooden scoop,2
260
+ 258,1290,1309,1299,glass carafe|wooden scoop,2
261
+ 259,1295,1314,1304,glass carafe|wooden scoop,2
262
+ 260,1300,1319,1309,glass carafe|wooden scoop,2
263
+ 261,1305,1324,1314,glass carafe|wooden scoop,2
264
+ 262,1310,1329,1319,glass carafe|wooden scoop,2
265
+ 263,1315,1334,1324,glass carafe|wooden scoop,2
266
+ 264,1320,1339,1329,glass carafe|wooden scoop,2
267
+ 265,1325,1344,1334,glass carafe|wooden scoop,2
268
+ 266,1330,1349,1339,glass carafe|wooden scoop,2
269
+ 267,1335,1354,1344,glass carafe|wooden scoop,2
270
+ 268,1340,1359,1349,glass carafe|wooden scoop,2
271
+ 269,1345,1364,1354,glass carafe|wooden scoop,2
272
+ 270,1350,1369,1359,glass carafe|wooden scoop,2
273
+ 271,1355,1374,1364,glass carafe|wooden scoop,2
274
+ 272,1360,1379,1369,glass carafe|wooden scoop,2
275
+ 273,1365,1384,1374,glass carafe|wooden scoop,2
276
+ 274,1370,1389,1379,glass carafe|wooden scoop,2
277
+ 275,1375,1394,1384,glass carafe|wooden scoop,2
278
+ 276,1380,1399,1389,glass carafe|wooden scoop,2
279
+ 277,1385,1404,1394,glass carafe|wooden scoop|coffee jar|coffee scoop|dripper,5
280
+ 278,1390,1409,1399,glass carafe|wooden scoop|coffee jar|coffee scoop|dripper,5
281
+ 279,1395,1414,1404,glass carafe|wooden scoop|coffee jar|coffee scoop|dripper,5
282
+ 280,1400,1419,1409,coffee jar|coffee scoop|dripper,3
283
+ 281,1405,1424,1414,coffee jar|coffee scoop|dripper,3
284
+ 282,1410,1429,1419,coffee jar|coffee scoop|dripper,3
285
+ 283,1415,1434,1424,coffee jar|coffee scoop|dripper,3
286
+ 284,1420,1439,1429,coffee jar|coffee scoop|dripper,3
287
+ 285,1425,1444,1434,coffee jar|coffee scoop|dripper,3
288
+ 286,1430,1449,1439,coffee jar|coffee scoop|dripper,3
289
+ 287,1435,1454,1444,coffee jar|coffee scoop|dripper,3
290
+ 288,1440,1459,1449,coffee jar|coffee scoop|dripper,3
291
+ 289,1445,1464,1454,coffee jar|coffee scoop|dripper,3
292
+ 290,1450,1469,1459,coffee jar|coffee scoop|dripper,3
293
+ 291,1455,1474,1464,coffee jar|coffee scoop|dripper,3
294
+ 292,1460,1479,1469,coffee jar|coffee scoop|dripper,3
295
+ 293,1465,1484,1474,coffee jar|coffee scoop|dripper,3
296
+ 294,1470,1489,1479,coffee jar|coffee scoop|dripper,3
297
+ 295,1475,1494,1484,coffee jar|coffee scoop|dripper,3
298
+ 296,1480,1499,1489,coffee jar|coffee scoop,2
299
+ 297,1485,1504,1494,coffee jar|coffee scoop,2
300
+ 298,1490,1509,1499,coffee jar|coffee scoop,2
301
+ 299,1495,1514,1504,coffee jar|coffee scoop,2
302
+ 300,1500,1519,1509,coffee jar|coffee scoop,2
303
+ 301,1505,1524,1514,coffee jar|coffee scoop,2
304
+ 302,1510,1529,1519,coffee jar|coffee scoop,2
305
+ 303,1515,1534,1524,coffee jar|coffee scoop,2
306
+ 304,1520,1539,1529,coffee jar|coffee scoop,2
307
+ 305,1525,1544,1534,coffee jar|coffee scoop,2
308
+ 306,1530,1549,1539,coffee jar|coffee scoop,2
309
+ 307,1535,1554,1544,coffee jar|coffee scoop,2
310
+ 308,1540,1559,1549,coffee jar|coffee scoop,2
311
+ 309,1545,1564,1554,coffee jar|coffee scoop,2
312
+ 310,1550,1569,1559,coffee jar|coffee scoop,2
313
+ 311,1555,1574,1564,coffee jar|coffee scoop,2
314
+ 312,1560,1579,1569,coffee jar|coffee scoop,2
315
+ 313,1565,1584,1574,coffee jar|coffee scoop,2
316
+ 314,1570,1589,1579,coffee jar|coffee scoop,2
317
+ 315,1575,1594,1584,coffee jar|coffee scoop,2
318
+ 316,1580,1599,1589,coffee jar|coffee scoop,2
319
+ 317,1585,1604,1594,coffee jar|coffee scoop|dripper,3
320
+ 318,1590,1609,1599,coffee jar|coffee scoop|dripper,3
321
+ 319,1595,1614,1604,coffee jar|coffee scoop|dripper,3
322
+ 320,1600,1619,1609,coffee scoop|dripper,2
323
+ 321,1605,1624,1614,coffee scoop|dripper,2
324
+ 322,1610,1629,1619,coffee scoop|dripper,2
325
+ 323,1615,1634,1624,coffee scoop|dripper,2
326
+ 324,1620,1639,1629,coffee scoop|dripper,2
327
+ 325,1625,1644,1634,coffee scoop|dripper,2
328
+ 326,1630,1649,1639,coffee scoop|dripper,2
329
+ 327,1635,1654,1644,coffee scoop|dripper,2
330
+ 328,1640,1659,1649,coffee scoop|dripper,2
331
+ 329,1645,1664,1654,coffee scoop|dripper,2
332
+ 330,1650,1669,1659,coffee scoop|dripper,2
333
+ 331,1655,1674,1664,coffee scoop|dripper,2
334
+ 332,1660,1679,1669,coffee scoop|dripper,2
335
+ 333,1665,1684,1674,coffee scoop|dripper,2
336
+ 334,1670,1689,1679,coffee scoop|dripper,2
337
+ 335,1675,1694,1684,coffee scoop|dripper,2
338
+ 336,1680,1699,1689,coffee scoop|dripper,2
339
+ 337,1685,1704,1694,coffee scoop|dripper,2
340
+ 338,1690,1709,1699,coffee scoop|dripper,2
341
+ 339,1695,1714,1704,coffee scoop|dripper,2
342
+ 340,1700,1719,1709,coffee scoop|dripper,2
343
+ 341,1705,1724,1714,coffee scoop|dripper,2
344
+ 342,1710,1729,1719,coffee scoop|dripper,2
345
+ 343,1715,1734,1724,coffee scoop|dripper,2
346
+ 344,1720,1739,1729,coffee scoop|dripper,2
347
+ 345,1725,1744,1734,coffee scoop|dripper,2
348
+ 346,1730,1749,1739,coffee scoop|dripper,2
349
+ 347,1735,1754,1744,coffee scoop|dripper,2
350
+ 348,1740,1759,1749,coffee scoop|dripper,2
351
+ 349,1745,1764,1754,coffee scoop|dripper,2
352
+ 350,1750,1769,1759,coffee scoop|dripper,2
353
+ 351,1755,1774,1764,coffee scoop|dripper,2
354
+ 352,1760,1779,1769,coffee scoop|dripper,2
355
+ 353,1765,1784,1774,coffee scoop|dripper,2
356
+ 354,1770,1789,1779,coffee scoop|dripper,2
357
+ 355,1775,1794,1784,coffee scoop|dripper,2
358
+ 356,1780,1799,1789,coffee scoop|dripper,2
359
+ 357,1785,1804,1794,coffee scoop|dripper|coffee container|lid|scale,5
360
+ 358,1790,1809,1799,coffee scoop|dripper|coffee container|lid|scale,5
361
+ 359,1795,1814,1804,coffee scoop|dripper|coffee container|lid|scale,5
362
+ 360,1800,1819,1809,coffee container|lid|coffee scoop|dripper|scale,5
363
+ 361,1805,1824,1814,coffee container|lid|coffee scoop|dripper|scale,5
364
+ 362,1810,1829,1819,coffee container|lid|coffee scoop|dripper|scale,5
365
+ 363,1815,1834,1824,coffee container|lid|coffee scoop|dripper|scale,5
366
+ 364,1820,1839,1829,coffee container|lid|coffee scoop|dripper|scale,5
367
+ 365,1825,1844,1834,coffee container|lid|coffee scoop|dripper|scale,5
368
+ 366,1830,1849,1839,coffee container|lid|coffee scoop|dripper|scale,5
369
+ 367,1835,1854,1844,coffee container|lid|coffee scoop|dripper|scale,5
370
+ 368,1840,1859,1849,coffee container|lid|coffee scoop|dripper|scale,5
371
+ 369,1845,1864,1854,coffee container|lid|coffee scoop|dripper|scale,5
372
+ 370,1850,1869,1859,coffee container|lid|coffee scoop|dripper|scale,5
373
+ 371,1855,1874,1864,coffee container|lid|coffee scoop|dripper|scale,5
374
+ 372,1860,1879,1869,coffee container|lid|coffee scoop|dripper|scale,5
375
+ 373,1865,1884,1874,coffee container|lid|coffee scoop|dripper|scale,5
376
+ 374,1870,1889,1879,coffee container|lid|coffee scoop|dripper|scale,5
377
+ 375,1875,1894,1884,coffee container|lid|coffee scoop|dripper|scale,5
378
+ 376,1880,1899,1889,coffee container|lid|coffee scoop|dripper|scale,5
379
+ 377,1885,1904,1894,coffee container|lid|coffee scoop|dripper|scale,5
380
+ 378,1890,1909,1899,coffee container|lid|coffee scoop|dripper|scale,5
381
+ 379,1895,1914,1904,coffee container|lid|coffee scoop|dripper|scale,5
382
+ 380,1900,1919,1909,coffee container|lid|coffee scoop|dripper|scale,5
383
+ 381,1905,1924,1914,coffee container|lid|coffee scoop|dripper|scale,5
384
+ 382,1910,1929,1919,coffee container|lid|coffee scoop|dripper|scale,5
385
+ 383,1915,1934,1924,coffee container|lid|coffee scoop|dripper|scale,5
386
+ 384,1920,1939,1929,coffee container|lid|coffee scoop|dripper|scale,5
387
+ 385,1925,1944,1934,coffee container|lid|coffee scoop|dripper|scale,5
388
+ 386,1930,1949,1939,coffee container|lid|coffee scoop|dripper|scale,5
389
+ 387,1935,1954,1944,coffee container|lid|coffee scoop|dripper|scale,5
390
+ 388,1940,1959,1949,coffee container|lid|coffee scoop|dripper|scale,5
391
+ 389,1945,1964,1954,coffee container|lid|coffee scoop|dripper|scale|closed coffee container,6
392
+ 390,1950,1969,1959,coffee container|lid|coffee scoop|dripper|scale|closed coffee container,6
393
+ 391,1955,1974,1964,coffee container|lid|coffee scoop|dripper|scale|closed coffee container,6
394
+ 392,1960,1979,1969,closed coffee container|dripper|scale,3
395
+ 393,1965,1984,1974,closed coffee container|dripper|scale,3
396
+ 394,1970,1989,1979,closed coffee container|dripper|scale,3
397
+ 395,1975,1994,1984,closed coffee container|dripper|scale,3
398
+ 396,1980,1999,1989,closed coffee container|dripper|scale,3
399
+ 397,1985,2004,1994,closed coffee container|dripper|scale|gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,8
400
+ 398,1990,2009,1999,closed coffee container|dripper|scale|gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,8
401
+ 399,1995,2014,2004,closed coffee container|dripper|scale|gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,8
402
+ 400,2000,2019,2009,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
403
+ 401,2005,2024,2014,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
404
+ 402,2010,2029,2019,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
405
+ 403,2015,2034,2024,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
406
+ 404,2020,2039,2029,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
407
+ 405,2025,2044,2034,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
408
+ 406,2030,2049,2039,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
409
+ 407,2035,2054,2044,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
410
+ 408,2040,2059,2049,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
411
+ 409,2045,2064,2054,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
412
+ 410,2050,2069,2059,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
413
+ 411,2055,2074,2064,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
414
+ 412,2060,2079,2069,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
415
+ 413,2065,2084,2074,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
416
+ 414,2070,2089,2079,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
417
+ 415,2075,2094,2084,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
418
+ 416,2080,2099,2089,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
419
+ 417,2085,2104,2094,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
420
+ 418,2090,2109,2099,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
421
+ 419,2095,2114,2104,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
422
+ 420,2100,2119,2109,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
423
+ 421,2105,2124,2114,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
424
+ 422,2110,2129,2119,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
425
+ 423,2115,2134,2124,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
426
+ 424,2120,2139,2129,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
427
+ 425,2125,2144,2134,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
428
+ 426,2130,2149,2139,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
429
+ 427,2135,2154,2144,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
430
+ 428,2140,2159,2149,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
431
+ 429,2145,2164,2154,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
432
+ 430,2150,2169,2159,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
433
+ 431,2155,2174,2164,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
434
+ 432,2160,2179,2169,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
435
+ 433,2165,2184,2174,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
436
+ 434,2170,2189,2179,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
437
+ 435,2175,2194,2184,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
438
+ 436,2180,2199,2189,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
439
+ 437,2185,2204,2194,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
440
+ 438,2190,2209,2199,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
441
+ 439,2195,2214,2204,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
442
+ 440,2200,2219,2209,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
443
+ 441,2205,2224,2214,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
444
+ 442,2210,2229,2219,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
445
+ 443,2215,2234,2224,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
446
+ 444,2220,2239,2229,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
447
+ 445,2225,2244,2234,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
448
+ 446,2230,2249,2239,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
449
+ 447,2235,2254,2244,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
450
+ 448,2240,2259,2249,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
451
+ 449,2245,2264,2254,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
452
+ 450,2250,2269,2259,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
453
+ 451,2255,2274,2264,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
454
+ 452,2260,2279,2269,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
455
+ 453,2265,2284,2274,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
456
+ 454,2270,2289,2279,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
457
+ 455,2275,2294,2284,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
458
+ 456,2280,2299,2289,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
459
+ 457,2285,2304,2294,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
460
+ 458,2290,2309,2299,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
461
+ 459,2295,2314,2304,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
462
+ 460,2300,2319,2309,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
463
+ 461,2305,2324,2314,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
464
+ 462,2310,2329,2319,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
465
+ 463,2315,2334,2324,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
466
+ 464,2320,2339,2329,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
467
+ 465,2325,2344,2334,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
468
+ 466,2330,2349,2339,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
469
+ 467,2335,2354,2344,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
470
+ 468,2340,2359,2349,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
471
+ 469,2345,2364,2354,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
472
+ 470,2350,2369,2359,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
473
+ 471,2355,2374,2364,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
474
+ 472,2360,2379,2369,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
475
+ 473,2365,2384,2374,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
476
+ 474,2370,2389,2379,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
477
+ 475,2375,2394,2384,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
478
+ 476,2380,2399,2389,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug,5
479
+ 477,2385,2404,2394,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug|scale|mug,7
480
+ 478,2390,2409,2399,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug|scale|mug,7
481
+ 479,2395,2414,2404,gooseneck kettle|coffee dripper|digital scale|water bottle|coffee mug|scale|mug,7
482
+ 480,2400,2419,2409,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
483
+ 481,2405,2424,2414,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
484
+ 482,2410,2429,2419,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
485
+ 483,2415,2434,2424,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
486
+ 484,2420,2439,2429,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
487
+ 485,2425,2444,2434,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
488
+ 486,2430,2449,2439,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
489
+ 487,2435,2454,2444,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
490
+ 488,2440,2459,2449,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
491
+ 489,2445,2464,2454,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
492
+ 490,2450,2469,2459,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
493
+ 491,2455,2474,2464,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
494
+ 492,2460,2479,2469,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
495
+ 493,2465,2484,2474,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
496
+ 494,2470,2489,2479,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
497
+ 495,2475,2494,2484,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
498
+ 496,2480,2499,2489,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
499
+ 497,2485,2504,2494,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
500
+ 498,2490,2509,2499,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
501
+ 499,2495,2514,2504,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
502
+ 500,2500,2519,2509,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
503
+ 501,2505,2524,2514,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
504
+ 502,2510,2529,2519,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
505
+ 503,2515,2534,2524,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
506
+ 504,2520,2539,2529,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
507
+ 505,2525,2544,2534,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
508
+ 506,2530,2549,2539,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
509
+ 507,2535,2554,2544,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
510
+ 508,2540,2559,2549,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
511
+ 509,2545,2564,2554,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
512
+ 510,2550,2569,2559,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
513
+ 511,2555,2574,2564,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
514
+ 512,2560,2579,2569,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
515
+ 513,2565,2584,2574,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
516
+ 514,2570,2589,2579,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
517
+ 515,2575,2594,2584,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
518
+ 516,2580,2599,2589,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
519
+ 517,2585,2604,2594,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
520
+ 518,2590,2609,2599,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
521
+ 519,2595,2614,2604,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
522
+ 520,2600,2619,2609,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
523
+ 521,2605,2624,2614,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
524
+ 522,2610,2629,2619,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
525
+ 523,2615,2634,2624,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
526
+ 524,2620,2639,2629,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
527
+ 525,2625,2644,2634,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
528
+ 526,2630,2649,2639,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
529
+ 527,2635,2654,2644,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
530
+ 528,2640,2659,2649,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
531
+ 529,2645,2664,2654,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
532
+ 530,2650,2669,2659,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
533
+ 531,2655,2674,2664,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
534
+ 532,2660,2679,2669,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
535
+ 533,2665,2684,2674,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
536
+ 534,2670,2689,2679,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
537
+ 535,2675,2694,2684,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
538
+ 536,2680,2699,2689,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
539
+ 537,2685,2704,2694,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
540
+ 538,2690,2709,2699,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
541
+ 539,2695,2714,2704,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
542
+ 540,2700,2719,2709,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
543
+ 541,2705,2724,2714,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
544
+ 542,2710,2729,2719,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
545
+ 543,2715,2734,2724,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
546
+ 544,2720,2739,2729,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
547
+ 545,2725,2744,2734,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
548
+ 546,2730,2749,2739,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
549
+ 547,2735,2754,2744,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
550
+ 548,2740,2759,2749,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
551
+ 549,2745,2764,2754,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
552
+ 550,2750,2769,2759,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
553
+ 551,2755,2774,2764,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
554
+ 552,2760,2779,2769,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
555
+ 553,2765,2784,2774,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
556
+ 554,2770,2789,2779,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
557
+ 555,2775,2794,2784,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
558
+ 556,2780,2799,2789,gooseneck kettle|coffee dripper|scale|mug|water bottle,5
559
+ 557,2785,2804,2794,gooseneck kettle|coffee dripper|scale|mug|water bottle|white cup,6
560
+ 558,2790,2809,2799,gooseneck kettle|coffee dripper|scale|mug|water bottle|white cup,6
561
+ 559,2795,2814,2804,gooseneck kettle|coffee dripper|scale|mug|water bottle|white cup,6
562
+ 560,2800,2819,2809,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
563
+ 561,2805,2824,2814,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
564
+ 562,2810,2829,2819,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
565
+ 563,2815,2834,2824,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
566
+ 564,2820,2839,2829,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
567
+ 565,2825,2844,2834,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
568
+ 566,2830,2849,2839,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
569
+ 567,2835,2854,2844,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
570
+ 568,2840,2859,2849,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
571
+ 569,2845,2864,2854,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
572
+ 570,2850,2869,2859,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
573
+ 571,2855,2874,2864,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
574
+ 572,2860,2879,2869,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
575
+ 573,2865,2884,2874,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
576
+ 574,2870,2889,2879,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
577
+ 575,2875,2894,2884,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
578
+ 576,2880,2899,2889,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
579
+ 577,2885,2904,2894,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
580
+ 578,2890,2909,2899,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
581
+ 579,2895,2914,2904,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
582
+ 580,2900,2919,2909,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
583
+ 581,2905,2924,2914,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
584
+ 582,2910,2929,2919,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
585
+ 583,2915,2934,2924,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
586
+ 584,2920,2939,2929,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
587
+ 585,2925,2944,2934,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
588
+ 586,2930,2949,2939,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
589
+ 587,2935,2954,2944,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
590
+ 588,2940,2959,2949,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
591
+ 589,2945,2964,2954,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
592
+ 590,2950,2969,2959,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
593
+ 591,2955,2974,2964,gooseneck kettle|coffee dripper|scale|water bottle|white cup,5
594
+ 592,2960,2979,2969,gooseneck kettle|coffee dripper|scale,3
595
+ 593,2965,2984,2974,gooseneck kettle|coffee dripper|scale,3
596
+ 594,2970,2989,2979,gooseneck kettle|coffee dripper|scale,3
597
+ 595,2975,2994,2984,gooseneck kettle|coffee dripper|scale,3
598
+ 596,2980,2999,2989,gooseneck kettle|coffee dripper|scale,3
599
+ 597,2985,3004,2994,gooseneck kettle|coffee dripper|scale|digital scale|white mug,5
600
+ 598,2990,3009,2999,gooseneck kettle|coffee dripper|scale|digital scale|white mug,5
601
+ 599,2995,3014,3004,gooseneck kettle|coffee dripper|scale|digital scale|white mug,5
602
+ 600,3000,3019,3009,gooseneck kettle|coffee dripper|digital scale|white mug,4
603
+ 601,3005,3024,3014,gooseneck kettle|coffee dripper|digital scale|white mug,4
604
+ 602,3010,3029,3019,gooseneck kettle|coffee dripper|digital scale|white mug,4
605
+ 603,3015,3034,3024,gooseneck kettle|coffee dripper|digital scale|white mug,4
606
+ 604,3020,3039,3029,gooseneck kettle|coffee dripper|digital scale|white mug,4
607
+ 605,3025,3044,3034,gooseneck kettle|coffee dripper|digital scale|white mug,4
608
+ 606,3030,3049,3039,gooseneck kettle|coffee dripper|digital scale|white mug,4
609
+ 607,3035,3054,3044,gooseneck kettle|coffee dripper|digital scale|white mug,4
610
+ 608,3040,3059,3049,gooseneck kettle|coffee dripper|digital scale|white mug,4
611
+ 609,3045,3064,3054,gooseneck kettle|coffee dripper|digital scale|white mug,4
612
+ 610,3050,3069,3059,gooseneck kettle|coffee dripper|digital scale|white mug,4
613
+ 611,3055,3074,3064,gooseneck kettle|coffee dripper|digital scale|white mug,4
614
+ 612,3060,3079,3069,gooseneck kettle|coffee dripper|digital scale|white mug,4
615
+ 613,3065,3084,3074,gooseneck kettle|coffee dripper|digital scale|white mug,4
616
+ 614,3070,3089,3079,gooseneck kettle|coffee dripper|digital scale|white mug,4
617
+ 615,3075,3094,3084,gooseneck kettle|coffee dripper|digital scale|white mug,4
618
+ 616,3080,3099,3089,gooseneck kettle|coffee dripper|digital scale|white mug,4
619
+ 617,3085,3104,3094,gooseneck kettle|coffee dripper|digital scale|white mug,4
620
+ 618,3090,3109,3099,gooseneck kettle|coffee dripper|digital scale|white mug,4
621
+ 619,3095,3114,3104,gooseneck kettle|coffee dripper|digital scale|white mug,4
622
+ 620,3100,3119,3109,gooseneck kettle|coffee dripper|digital scale|white mug,4
623
+ 621,3105,3124,3114,gooseneck kettle|coffee dripper|digital scale|white mug,4
624
+ 622,3110,3129,3119,gooseneck kettle|coffee dripper|digital scale|white mug,4
625
+ 623,3115,3134,3124,gooseneck kettle|coffee dripper|digital scale|white mug,4
626
+ 624,3120,3139,3129,gooseneck kettle|coffee dripper|digital scale|white mug,4
627
+ 625,3125,3144,3134,gooseneck kettle|coffee dripper|digital scale|white mug,4
628
+ 626,3130,3149,3139,gooseneck kettle|coffee dripper|digital scale|white mug,4
629
+ 627,3135,3154,3144,gooseneck kettle|coffee dripper|digital scale|white mug,4
630
+ 628,3140,3159,3149,gooseneck kettle|coffee dripper|digital scale|white mug,4
631
+ 629,3145,3164,3154,gooseneck kettle|coffee dripper|digital scale|white mug,4
632
+ 630,3150,3169,3159,gooseneck kettle|coffee dripper|digital scale|white mug,4
633
+ 631,3155,3174,3164,gooseneck kettle|coffee dripper|digital scale|white mug,4
634
+ 632,3160,3179,3169,gooseneck kettle|coffee dripper|digital scale|white mug,4
635
+ 633,3165,3184,3174,gooseneck kettle|coffee dripper|digital scale|white mug,4
636
+ 634,3170,3189,3179,gooseneck kettle|coffee dripper|digital scale|white mug,4
637
+ 635,3175,3194,3184,gooseneck kettle|coffee dripper|digital scale|white mug,4
638
+ 636,3180,3199,3189,gooseneck kettle|coffee dripper|digital scale|white mug,4
639
+ 637,3185,3204,3194,gooseneck kettle|coffee dripper|digital scale|white mug,4
640
+ 638,3190,3209,3199,gooseneck kettle|coffee dripper|digital scale|white mug,4
641
+ 639,3195,3214,3204,gooseneck kettle|coffee dripper|digital scale|white mug,4
642
+ 640,3200,3219,3209,gooseneck kettle|coffee dripper|digital scale|white mug,4
643
+ 641,3205,3224,3214,gooseneck kettle|coffee dripper|digital scale|white mug,4
644
+ 642,3210,3229,3219,gooseneck kettle|coffee dripper|digital scale|white mug,4
645
+ 643,3215,3234,3224,gooseneck kettle|coffee dripper|digital scale|white mug,4
646
+ 644,3220,3239,3229,gooseneck kettle|coffee dripper|digital scale|white mug,4
647
+ 645,3225,3244,3234,gooseneck kettle|coffee dripper|digital scale|white mug,4
648
+ 646,3230,3249,3239,gooseneck kettle|coffee dripper|digital scale|white mug,4
649
+ 647,3235,3254,3244,gooseneck kettle|coffee dripper|digital scale|white mug,4
650
+ 648,3240,3259,3249,gooseneck kettle|coffee dripper|digital scale|white mug,4
651
+ 649,3245,3264,3254,gooseneck kettle|coffee dripper|digital scale|white mug,4
652
+ 650,3250,3269,3259,gooseneck kettle|coffee dripper|digital scale|white mug,4
653
+ 651,3255,3274,3264,gooseneck kettle|coffee dripper|digital scale|white mug,4
654
+ 652,3260,3279,3269,gooseneck kettle|coffee dripper|digital scale|white mug,4
655
+ 653,3265,3284,3274,gooseneck kettle|coffee dripper|digital scale|white mug,4
656
+ 654,3270,3289,3279,gooseneck kettle|coffee dripper|digital scale|white mug,4
657
+ 655,3275,3294,3284,gooseneck kettle|coffee dripper|digital scale|white mug,4
658
+ 656,3280,3299,3289,gooseneck kettle|coffee dripper|digital scale|white mug,4
659
+ 657,3285,3304,3294,gooseneck kettle|coffee dripper|digital scale|white mug,4
660
+ 658,3290,3309,3299,gooseneck kettle|coffee dripper|digital scale|white mug,4
661
+ 659,3295,3314,3304,gooseneck kettle|coffee dripper|digital scale|white mug,4
662
+ 660,3300,3319,3309,gooseneck kettle|coffee dripper|digital scale|white mug,4
663
+ 661,3305,3324,3314,gooseneck kettle|coffee dripper|digital scale|white mug,4
664
+ 662,3310,3329,3319,gooseneck kettle|coffee dripper|digital scale|white mug,4
665
+ 663,3315,3334,3324,gooseneck kettle|coffee dripper|digital scale|white mug,4
666
+ 664,3320,3339,3329,gooseneck kettle|coffee dripper|digital scale|white mug,4
667
+ 665,3325,3344,3334,gooseneck kettle|coffee dripper|digital scale|white mug,4
668
+ 666,3330,3349,3339,gooseneck kettle|coffee dripper|digital scale|white mug,4
669
+ 667,3335,3354,3344,gooseneck kettle|coffee dripper|digital scale|white mug,4
670
+ 668,3340,3359,3349,gooseneck kettle|coffee dripper|digital scale|white mug,4
671
+ 669,3345,3364,3354,gooseneck kettle|coffee dripper|digital scale|white mug,4
672
+ 670,3350,3369,3359,gooseneck kettle|coffee dripper|digital scale|white mug,4
673
+ 671,3355,3374,3364,gooseneck kettle|coffee dripper|digital scale|white mug,4
674
+ 672,3360,3379,3369,gooseneck kettle|coffee dripper|digital scale|white mug,4
675
+ 673,3365,3384,3374,gooseneck kettle|coffee dripper|digital scale|white mug,4
676
+ 674,3370,3389,3379,gooseneck kettle|coffee dripper|digital scale|white mug,4
677
+ 675,3375,3394,3384,gooseneck kettle|coffee dripper|digital scale|white mug,4
678
+ 676,3380,3399,3389,gooseneck kettle|coffee dripper|digital scale|white mug,4
679
+ 677,3385,3404,3394,gooseneck kettle|coffee dripper|digital scale|white mug|scale|white bottle,6
680
+ 678,3390,3409,3399,gooseneck kettle|coffee dripper|digital scale|white mug|scale|white bottle,6
681
+ 679,3395,3414,3404,gooseneck kettle|coffee dripper|digital scale|white mug|scale|white bottle,6
682
+ 680,3400,3419,3409,gooseneck kettle|coffee dripper|scale|white bottle,4
683
+ 681,3405,3424,3414,gooseneck kettle|coffee dripper|scale|white bottle,4
684
+ 682,3410,3429,3419,gooseneck kettle|coffee dripper|scale|white bottle,4
685
+ 683,3415,3434,3424,gooseneck kettle|coffee dripper|scale|white bottle,4
686
+ 684,3420,3439,3429,gooseneck kettle|coffee dripper|scale|white bottle,4
687
+ 685,3425,3444,3434,gooseneck kettle|coffee dripper|scale|white bottle,4
688
+ 686,3430,3449,3439,gooseneck kettle|coffee dripper|scale|white bottle,4
689
+ 687,3435,3454,3444,gooseneck kettle|coffee dripper|scale|white bottle,4
690
+ 688,3440,3459,3449,gooseneck kettle|coffee dripper|scale|white bottle,4
691
+ 689,3445,3464,3454,gooseneck kettle|coffee dripper|scale|white bottle,4
692
+ 690,3450,3469,3459,gooseneck kettle|coffee dripper|scale|white bottle,4
693
+ 691,3455,3474,3464,gooseneck kettle|coffee dripper|scale|white bottle,4
694
+ 692,3460,3479,3469,gooseneck kettle|coffee dripper|scale|white bottle,4
695
+ 693,3465,3484,3474,gooseneck kettle|coffee dripper|scale|white bottle,4
696
+ 694,3470,3489,3479,gooseneck kettle|coffee dripper|scale|white bottle,4
697
+ 695,3475,3494,3484,gooseneck kettle|coffee dripper|scale|white bottle,4
698
+ 696,3480,3499,3489,gooseneck kettle|coffee dripper|scale|white bottle,4
699
+ 697,3485,3504,3494,gooseneck kettle|coffee dripper|scale|white bottle,4
700
+ 698,3490,3509,3499,gooseneck kettle|coffee dripper|scale|white bottle,4
701
+ 699,3495,3514,3504,gooseneck kettle|coffee dripper|scale|white bottle,4
702
+ 700,3500,3519,3509,gooseneck kettle|coffee dripper|scale|white bottle,4
703
+ 701,3505,3524,3514,gooseneck kettle|coffee dripper|scale|white bottle,4
704
+ 702,3510,3529,3519,gooseneck kettle|coffee dripper|scale|white bottle,4
705
+ 703,3515,3534,3524,gooseneck kettle|coffee dripper|scale|white bottle,4
706
+ 704,3520,3539,3529,gooseneck kettle|coffee dripper|scale|white bottle,4
707
+ 705,3525,3544,3534,gooseneck kettle|coffee dripper|scale|white bottle,4
708
+ 706,3530,3549,3539,gooseneck kettle|coffee dripper|scale|white bottle,4
709
+ 707,3535,3554,3544,gooseneck kettle|coffee dripper|scale|white bottle,4
710
+ 708,3540,3559,3549,gooseneck kettle|coffee dripper|scale|white bottle,4
711
+ 709,3545,3564,3554,gooseneck kettle|coffee dripper|scale|white bottle,4
712
+ 710,3550,3569,3559,gooseneck kettle|coffee dripper|scale|white bottle,4
713
+ 711,3555,3574,3564,gooseneck kettle|coffee dripper|scale|white bottle,4
714
+ 712,3560,3579,3569,gooseneck kettle|coffee dripper|scale|white bottle,4
715
+ 713,3565,3584,3574,gooseneck kettle|coffee dripper|scale|white bottle,4
716
+ 714,3570,3589,3579,gooseneck kettle|coffee dripper|scale|white bottle,4
717
+ 715,3575,3594,3584,gooseneck kettle|coffee dripper|scale|white bottle,4
718
+ 716,3580,3599,3589,gooseneck kettle|coffee dripper|scale|white bottle,4
719
+ 717,3585,3604,3594,gooseneck kettle|coffee dripper|scale|white bottle,4
720
+ 718,3590,3609,3599,gooseneck kettle|coffee dripper|scale|white bottle,4
721
+ 719,3595,3614,3604,gooseneck kettle|coffee dripper|scale|white bottle,4
722
+ 720,3600,3619,3609,gooseneck kettle|coffee dripper|scale|white bottle,4
723
+ 721,3605,3624,3614,gooseneck kettle|coffee dripper|scale|white bottle,4
724
+ 722,3610,3629,3619,gooseneck kettle|coffee dripper|scale|white bottle,4
725
+ 723,3615,3634,3624,gooseneck kettle|coffee dripper|scale|white bottle,4
726
+ 724,3620,3639,3629,gooseneck kettle|coffee dripper|scale|white bottle,4
727
+ 725,3625,3644,3634,gooseneck kettle|coffee dripper|scale|white bottle,4
728
+ 726,3630,3649,3639,gooseneck kettle|coffee dripper|scale|white bottle,4
729
+ 727,3635,3654,3644,gooseneck kettle|coffee dripper|scale|white bottle,4
730
+ 728,3640,3659,3649,gooseneck kettle|coffee dripper|scale|white bottle,4
731
+ 729,3645,3664,3654,gooseneck kettle|coffee dripper|scale|white bottle,4
732
+ 730,3650,3669,3659,gooseneck kettle|coffee dripper|scale|white bottle,4
733
+ 731,3655,3674,3664,gooseneck kettle|coffee dripper|scale|white bottle,4
734
+ 732,3660,3679,3669,gooseneck kettle|coffee dripper|scale|white bottle,4
735
+ 733,3665,3684,3674,gooseneck kettle|coffee dripper|scale|white bottle,4
736
+ 734,3670,3689,3679,gooseneck kettle|coffee dripper|scale|white bottle,4
737
+ 735,3675,3694,3684,gooseneck kettle|coffee dripper|scale|white bottle,4
738
+ 736,3680,3699,3689,gooseneck kettle|coffee dripper|scale|white bottle,4
739
+ 737,3685,3704,3694,gooseneck kettle|coffee dripper|scale|white bottle,4
740
+ 738,3690,3709,3699,gooseneck kettle|coffee dripper|scale|white bottle,4
741
+ 739,3695,3714,3704,gooseneck kettle|coffee dripper|scale|white bottle,4
742
+ 740,3700,3719,3709,gooseneck kettle|coffee dripper|scale|white bottle,4
743
+ 741,3705,3724,3714,gooseneck kettle|coffee dripper|scale|white bottle,4
744
+ 742,3710,3729,3719,gooseneck kettle|coffee dripper|scale|white bottle,4
745
+ 743,3715,3734,3724,gooseneck kettle|coffee dripper|scale|white bottle,4
746
+ 744,3720,3739,3729,gooseneck kettle|coffee dripper|scale|white bottle,4
747
+ 745,3725,3744,3734,gooseneck kettle|coffee dripper|scale|white bottle,4
748
+ 746,3730,3749,3739,gooseneck kettle|coffee dripper|scale|white bottle,4
749
+ 747,3735,3754,3744,gooseneck kettle|coffee dripper|scale|white bottle,4
750
+ 748,3740,3759,3749,gooseneck kettle|coffee dripper|scale|white bottle,4
751
+ 749,3745,3764,3754,gooseneck kettle|coffee dripper|scale|white bottle,4
752
+ 750,3750,3769,3759,gooseneck kettle|coffee dripper|scale|white bottle,4
753
+ 751,3755,3774,3764,gooseneck kettle|coffee dripper|scale|white bottle,4
754
+ 752,3760,3779,3769,gooseneck kettle|coffee dripper|scale|white bottle,4
755
+ 753,3765,3784,3774,gooseneck kettle|coffee dripper|scale|white bottle,4
756
+ 754,3770,3789,3779,gooseneck kettle|coffee dripper|scale|white bottle,4
757
+ 755,3775,3794,3784,gooseneck kettle|coffee dripper|scale|white bottle,4
758
+ 756,3780,3799,3789,gooseneck kettle|coffee dripper|scale|white bottle,4
759
+ 757,3785,3804,3794,gooseneck kettle|coffee dripper|scale|white bottle,4
760
+ 758,3790,3809,3799,gooseneck kettle|coffee dripper|scale|white bottle,4
761
+ 759,3795,3814,3804,gooseneck kettle|coffee dripper|scale|white bottle,4
762
+ 760,3800,3819,3809,white bottle|coffee dripper|scale,3
763
+ 761,3805,3824,3814,white bottle|coffee dripper|scale,3
764
+ 762,3810,3829,3819,white bottle|coffee dripper|scale,3
765
+ 763,3815,3834,3824,white bottle|coffee dripper|scale,3
766
+ 764,3820,3839,3829,white bottle|coffee dripper|scale,3
767
+ 765,3825,3844,3834,white bottle|coffee dripper|scale,3
768
+ 766,3830,3849,3839,white bottle|coffee dripper|scale,3
769
+ 767,3835,3854,3844,white bottle|coffee dripper|scale,3
770
+ 768,3840,3859,3849,white bottle|coffee dripper|scale,3
771
+ 769,3845,3864,3854,white bottle|coffee dripper|scale,3
772
+ 770,3850,3869,3859,white bottle|coffee dripper|scale,3
773
+ 771,3855,3874,3864,white bottle|coffee dripper|scale,3
774
+ 772,3860,3879,3869,white bottle|coffee dripper|scale,3
775
+ 773,3865,3884,3874,white bottle|coffee dripper|scale,3
776
+ 774,3870,3889,3879,white bottle|coffee dripper|scale,3
777
+ 775,3875,3894,3884,white bottle|coffee dripper|scale,3
778
+ 776,3880,3899,3889,white bottle|coffee dripper|scale,3
779
+ 777,3885,3904,3894,white bottle|coffee dripper|scale,3
780
+ 778,3890,3909,3899,white bottle|coffee dripper|scale,3
781
+ 779,3895,3914,3904,white bottle|coffee dripper|scale,3
782
+ 780,3900,3919,3909,white bottle|coffee dripper|scale,3
783
+ 781,3905,3924,3914,white bottle|coffee dripper|scale,3
784
+ 782,3910,3929,3919,white bottle|coffee dripper|scale,3
785
+ 783,3915,3934,3924,white bottle|coffee dripper|scale,3
786
+ 784,3920,3939,3929,white bottle,1
787
+ 785,3925,3944,3934,white bottle,1
788
+ 786,3930,3949,3939,white bottle,1
789
+ 787,3935,3954,3944,white bottle,1
790
+ 788,3940,3959,3949,white bottle,1
791
+ 789,3945,3964,3954,white bottle,1
792
+ 790,3950,3969,3959,white bottle,1
793
+ 791,3955,3974,3964,white bottle,1
794
+ 792,3960,3979,3969,white bottle,1
795
+ 793,3965,3984,3974,white bottle,1
796
+ 794,3970,3989,3979,white bottle,1
797
+ 795,3975,3994,3984,white bottle,1
798
+ 796,3980,3999,3989,white bottle,1
799
+ 797,3985,4004,3994,white bottle|coffee dripper|scale|mug,4
800
+ 798,3990,4009,3999,white bottle|coffee dripper|scale|mug,4
801
+ 799,3995,4014,4004,white bottle|coffee dripper|scale|mug,4
802
+ 800,4000,4019,4009,white bottle|coffee dripper|scale|mug,4
803
+ 801,4005,4024,4014,white bottle|coffee dripper|scale|mug,4
804
+ 802,4010,4029,4019,white bottle|coffee dripper|scale|mug,4
805
+ 803,4015,4034,4024,white bottle|coffee dripper|scale|mug,4
806
+ 804,4020,4039,4029,white bottle|coffee dripper|scale|mug,4
807
+ 805,4025,4044,4034,white bottle|coffee dripper|scale|mug,4
808
+ 806,4030,4049,4039,white bottle|coffee dripper|scale|mug,4
809
+ 807,4035,4054,4044,white bottle|coffee dripper|scale|mug,4
810
+ 808,4040,4059,4049,white bottle|coffee dripper|scale|mug,4
811
+ 809,4045,4064,4054,white bottle|coffee dripper|scale|mug,4
812
+ 810,4050,4069,4059,white bottle|coffee dripper|scale|mug,4
813
+ 811,4055,4074,4064,white bottle|coffee dripper|scale|mug,4
814
+ 812,4060,4079,4069,white bottle|coffee dripper|scale|mug,4
815
+ 813,4065,4084,4074,white bottle|coffee dripper|scale|mug,4
816
+ 814,4070,4089,4079,white bottle|coffee dripper|scale|mug,4
817
+ 815,4075,4094,4084,white bottle|coffee dripper|scale|mug,4
818
+ 816,4080,4099,4089,white bottle|coffee dripper|scale|mug,4
819
+ 817,4085,4104,4094,white bottle|coffee dripper|scale|mug,4
820
+ 818,4090,4109,4099,white bottle|coffee dripper|scale|mug,4
821
+ 819,4095,4114,4104,white bottle|coffee dripper|scale|mug,4
822
+ 820,4100,4119,4109,white bottle|coffee dripper|scale|mug,4
823
+ 821,4105,4124,4114,white bottle|coffee dripper|scale|mug,4
824
+ 822,4110,4129,4119,white bottle|coffee dripper|scale|mug,4
825
+ 823,4115,4134,4124,white bottle|coffee dripper|scale|mug,4
826
+ 824,4120,4139,4129,white bottle|coffee dripper|scale,3
827
+ 825,4125,4144,4134,white bottle|coffee dripper|scale,3
828
+ 826,4130,4149,4139,white bottle|coffee dripper|scale,3
829
+ 827,4135,4154,4144,white bottle|coffee dripper|scale,3
830
+ 828,4140,4159,4149,white bottle|coffee dripper|scale,3
831
+ 829,4145,4164,4154,white bottle|coffee dripper|scale,3
832
+ 830,4150,4169,4159,white bottle|coffee dripper|scale,3
833
+ 831,4155,4174,4164,white bottle|coffee dripper|scale,3
834
+ 832,4160,4179,4169,white bottle|coffee dripper|scale,3
835
+ 833,4165,4184,4174,white bottle|coffee dripper|scale,3
836
+ 834,4170,4189,4179,white bottle|coffee dripper|scale,3
837
+ 835,4175,4194,4184,white bottle|coffee dripper|scale,3
838
+ 836,4180,4199,4189,white bottle|coffee dripper|scale,3
839
+ 837,4185,4204,4194,white bottle|coffee dripper|scale,3
840
+ 838,4190,4209,4199,white bottle|coffee dripper|scale,3
841
+ 839,4195,4214,4204,white bottle|coffee dripper|scale,3
842
+ 840,4200,4219,4209,white bottle|coffee dripper|scale,3
843
+ 841,4205,4224,4214,white bottle|coffee dripper|scale,3
844
+ 842,4210,4229,4219,white bottle|coffee dripper|scale,3
845
+ 843,4215,4234,4224,white bottle|coffee dripper|scale,3
846
+ 844,4220,4239,4229,white bottle|coffee dripper|scale,3
847
+ 845,4225,4244,4234,white bottle|coffee dripper|scale,3
848
+ 846,4230,4249,4239,white bottle|coffee dripper|scale,3
849
+ 847,4235,4254,4244,white bottle|coffee dripper|scale,3
850
+ 848,4240,4259,4249,white bottle|coffee dripper|scale,3
851
+ 849,4245,4264,4254,white bottle|coffee dripper|scale,3
852
+ 850,4250,4269,4259,white bottle|coffee dripper|scale,3
853
+ 851,4255,4274,4264,white bottle|coffee dripper|scale,3
854
+ 852,4260,4279,4269,white bottle|coffee dripper|scale,3
855
+ 853,4265,4284,4274,white bottle|coffee dripper|scale,3
856
+ 854,4270,4289,4279,white bottle|coffee dripper|scale,3
857
+ 855,4275,4294,4284,white bottle|coffee dripper|scale,3
858
+ 856,4280,4299,4289,white bottle|coffee dripper|scale,3
859
+ 857,4285,4304,4294,white bottle|coffee dripper|scale,3
860
+ 858,4290,4309,4299,white bottle|coffee dripper|scale,3
861
+ 859,4295,4314,4304,white bottle|coffee dripper|scale,3
862
+ 860,4300,4319,4309,white bottle|coffee dripper|scale,3
863
+ 861,4305,4324,4314,white bottle|coffee dripper|scale,3
864
+ 862,4310,4329,4319,white bottle|coffee dripper|scale,3
865
+ 863,4315,4334,4324,white bottle|coffee dripper|scale,3
866
+ 864,4320,4339,4329,white bottle|coffee dripper|scale,3
867
+ 865,4325,4344,4334,white bottle|coffee dripper|scale,3
868
+ 866,4330,4349,4339,white bottle|coffee dripper|scale,3
869
+ 867,4335,4354,4344,white bottle|coffee dripper|scale,3
870
+ 868,4340,4359,4349,white bottle|coffee dripper|scale,3
871
+ 869,4345,4364,4354,white bottle|coffee dripper|scale,3
872
+ 870,4350,4369,4359,white bottle|coffee dripper|scale,3
873
+ 871,4355,4374,4364,white bottle|coffee dripper|scale,3
874
+ 872,4360,4379,4369,white bottle|coffee dripper|scale,3
875
+ 873,4365,4384,4374,white bottle|coffee dripper|scale,3
876
+ 874,4370,4389,4379,white bottle|coffee dripper|scale,3
877
+ 875,4375,4394,4384,white bottle|coffee dripper|scale,3
878
+ 876,4380,4399,4389,white bottle|coffee dripper|scale,3
879
+ 877,4385,4404,4394,white bottle|coffee dripper|scale|coffee equipment|small bottle|white mug|weighing scale,7
880
+ 878,4390,4409,4399,white bottle|coffee dripper|scale|coffee equipment|small bottle|white mug|weighing scale,7
881
+ 879,4395,4414,4404,white bottle|coffee dripper|scale|coffee equipment|small bottle|white mug|weighing scale,7
882
+ 880,4400,4419,4409,coffee equipment|small bottle|white mug|weighing scale,4
883
+ 881,4405,4424,4414,coffee equipment|small bottle|white mug|weighing scale,4
884
+ 882,4410,4429,4419,coffee equipment|small bottle|white mug|weighing scale,4
885
+ 883,4415,4434,4424,coffee equipment|small bottle|white mug|weighing scale,4
886
+ 884,4420,4439,4429,coffee equipment|small bottle|white mug|weighing scale,4
887
+ 885,4425,4444,4434,coffee equipment|small bottle|white mug|weighing scale,4
888
+ 886,4430,4449,4439,coffee equipment|small bottle|white mug|weighing scale,4
889
+ 887,4435,4454,4444,coffee equipment|small bottle|white mug|weighing scale,4
890
+ 888,4440,4459,4449,coffee equipment|small bottle|white mug|weighing scale,4
891
+ 889,4445,4464,4454,coffee equipment|small bottle|white mug|weighing scale,4
892
+ 890,4450,4469,4459,coffee equipment|small bottle|white mug|weighing scale,4
893
+ 891,4455,4474,4464,coffee equipment|small bottle|white mug|weighing scale,4
894
+ 892,4460,4479,4469,coffee equipment|small bottle|white mug|weighing scale,4
895
+ 893,4465,4484,4474,coffee equipment|small bottle|white mug|weighing scale,4
896
+ 894,4470,4489,4479,coffee equipment|small bottle|white mug|weighing scale,4
897
+ 895,4475,4494,4484,coffee equipment|small bottle|white mug|weighing scale,4
898
+ 896,4480,4499,4489,coffee equipment|small bottle|white mug|weighing scale,4
899
+ 897,4485,4504,4494,coffee equipment|small bottle|white mug|weighing scale,4
900
+ 898,4490,4509,4499,coffee equipment|small bottle|white mug|weighing scale,4
901
+ 899,4495,4514,4504,coffee equipment|small bottle|white mug|weighing scale,4
902
+ 900,4500,4519,4509,coffee equipment|small bottle|white mug|weighing scale,4
903
+ 901,4505,4524,4514,coffee equipment|small bottle|white mug|weighing scale,4
904
+ 902,4510,4529,4519,coffee equipment|small bottle|white mug|weighing scale,4
905
+ 903,4515,4534,4524,coffee equipment|small bottle|white mug|weighing scale,4
906
+ 904,4520,4539,4529,coffee equipment|small bottle|white mug|weighing scale,4
907
+ 905,4525,4544,4534,coffee equipment|small bottle|white mug|weighing scale,4
908
+ 906,4530,4549,4539,coffee equipment|small bottle|white mug|weighing scale,4
909
+ 907,4535,4554,4544,coffee equipment|small bottle|white mug|weighing scale,4
910
+ 908,4540,4559,4549,coffee equipment|small bottle|white mug|weighing scale,4
911
+ 909,4545,4564,4554,coffee equipment|small bottle|white mug|weighing scale,4
912
+ 910,4550,4569,4559,coffee equipment|small bottle|white mug|weighing scale,4
913
+ 911,4555,4574,4564,coffee equipment|small bottle|white mug|weighing scale,4
914
+ 912,4560,4579,4569,coffee equipment|small bottle|white mug|weighing scale,4
915
+ 913,4565,4584,4574,coffee equipment|small bottle|white mug|weighing scale,4
916
+ 914,4570,4589,4579,coffee equipment|small bottle|white mug|weighing scale,4
917
+ 915,4575,4594,4584,coffee equipment|small bottle|white mug|weighing scale,4
918
+ 916,4580,4599,4589,coffee equipment|small bottle|white mug|weighing scale,4
919
+ 917,4585,4604,4594,coffee equipment|small bottle|white mug|weighing scale,4
920
+ 918,4590,4609,4599,coffee equipment|small bottle|white mug|weighing scale,4
921
+ 919,4595,4614,4604,coffee equipment|small bottle|white mug|weighing scale,4
922
+ 920,4600,4619,4609,coffee equipment|small bottle|white mug|weighing scale,4
923
+ 921,4605,4624,4614,coffee equipment|small bottle|white mug|weighing scale,4
924
+ 922,4610,4629,4619,coffee equipment|small bottle|white mug|weighing scale,4
925
+ 923,4615,4634,4624,coffee equipment|small bottle|white mug|weighing scale,4
926
+ 924,4620,4639,4629,coffee equipment|small bottle|white mug|weighing scale,4
927
+ 925,4625,4644,4634,coffee equipment|small bottle|white mug|weighing scale,4
928
+ 926,4630,4649,4639,coffee equipment|small bottle|white mug|weighing scale,4
929
+ 927,4635,4654,4644,coffee equipment|small bottle|white mug|weighing scale,4
930
+ 928,4640,4659,4649,coffee equipment|small bottle|white mug|weighing scale,4
931
+ 929,4645,4664,4654,coffee equipment|small bottle|white mug|weighing scale,4
932
+ 930,4650,4669,4659,coffee equipment|small bottle|white mug|weighing scale,4
933
+ 931,4655,4674,4664,coffee equipment|small bottle|white mug|weighing scale,4
934
+ 932,4660,4679,4669,coffee equipment|small bottle|white mug|weighing scale,4
935
+ 933,4665,4684,4674,coffee equipment|small bottle|white mug|weighing scale,4
936
+ 934,4670,4689,4679,coffee equipment|small bottle|white mug|weighing scale,4
937
+ 935,4675,4694,4684,coffee equipment|small bottle|white mug|weighing scale,4
938
+ 936,4680,4699,4689,coffee equipment|small bottle|white mug|weighing scale,4
939
+ 937,4685,4704,4694,coffee equipment|small bottle|white mug|weighing scale,4
940
+ 938,4690,4709,4699,coffee equipment|small bottle|white mug|weighing scale,4
941
+ 939,4695,4714,4704,coffee equipment|small bottle|white mug|weighing scale,4
942
+ 940,4700,4719,4709,coffee equipment|small bottle|white mug|weighing scale,4
943
+ 941,4705,4724,4714,coffee equipment|small bottle|white mug|weighing scale,4
944
+ 942,4710,4729,4719,coffee equipment|small bottle|white mug|weighing scale,4
945
+ 943,4715,4734,4724,coffee equipment|small bottle|white mug|weighing scale,4
946
+ 944,4720,4739,4729,coffee equipment|small bottle|white mug|weighing scale,4
947
+ 945,4725,4744,4734,coffee equipment|small bottle|white mug|weighing scale,4
948
+ 946,4730,4749,4739,coffee equipment|small bottle|white mug|weighing scale,4
949
+ 947,4735,4754,4744,coffee equipment|small bottle|white mug|weighing scale,4
950
+ 948,4740,4759,4749,coffee equipment|small bottle|white mug|weighing scale,4
951
+ 949,4745,4764,4754,coffee equipment|small bottle|white mug|weighing scale,4
952
+ 950,4750,4769,4759,coffee equipment|small bottle|white mug|weighing scale,4
953
+ 951,4755,4774,4764,coffee equipment|small bottle|white mug|weighing scale,4
954
+ 952,4760,4779,4769,coffee equipment|small bottle|white mug|weighing scale,4
955
+ 953,4765,4784,4774,coffee equipment|small bottle|white mug|weighing scale,4
956
+ 954,4770,4789,4779,coffee equipment|small bottle|white mug|weighing scale,4
957
+ 955,4775,4794,4784,coffee equipment|small bottle|white mug|weighing scale,4
958
+ 956,4780,4799,4789,coffee equipment|small bottle|white mug|weighing scale,4
959
+ 957,4785,4804,4794,coffee equipment|small bottle|white mug|weighing scale|white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,9
960
+ 958,4790,4809,4799,coffee equipment|small bottle|white mug|weighing scale|white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,9
961
+ 959,4795,4814,4804,coffee equipment|small bottle|white mug|weighing scale|white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,9
962
+ 960,4800,4819,4809,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
963
+ 961,4805,4824,4814,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
964
+ 962,4810,4829,4819,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
965
+ 963,4815,4834,4824,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
966
+ 964,4820,4839,4829,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
967
+ 965,4825,4844,4834,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
968
+ 966,4830,4849,4839,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
969
+ 967,4835,4854,4844,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
970
+ 968,4840,4859,4849,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
971
+ 969,4845,4864,4854,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
972
+ 970,4850,4869,4859,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
973
+ 971,4855,4874,4864,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
974
+ 972,4860,4879,4869,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
975
+ 973,4865,4884,4874,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
976
+ 974,4870,4889,4879,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
977
+ 975,4875,4894,4884,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
978
+ 976,4880,4899,4889,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
979
+ 977,4885,4904,4894,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
980
+ 978,4890,4909,4899,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
981
+ 979,4895,4914,4904,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
982
+ 980,4900,4919,4909,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
983
+ 981,4905,4924,4914,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
984
+ 982,4910,4929,4919,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
985
+ 983,4915,4934,4924,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
986
+ 984,4920,4939,4929,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
987
+ 985,4925,4944,4934,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
988
+ 986,4930,4949,4939,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
989
+ 987,4935,4954,4944,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
990
+ 988,4940,4959,4949,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
991
+ 989,4945,4964,4954,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
992
+ 990,4950,4969,4959,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
993
+ 991,4955,4974,4964,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
994
+ 992,4960,4979,4969,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
995
+ 993,4965,4984,4974,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
996
+ 994,4970,4989,4979,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
997
+ 995,4975,4994,4984,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
998
+ 996,4980,4999,4989,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe,5
999
+ 997,4985,5004,4994,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe|carafe|coffee mug|scale,8
1000
+ 998,4990,5009,4999,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe|carafe|coffee mug|scale,8
1001
+ 999,4995,5014,5004,white coffee cup|digital scale with dripper|water bottle|metal pitcher|glass carafe|carafe|coffee mug|scale,8
1002
+ 1000,5000,5019,5009,carafe|coffee mug|scale,3
1003
+ 1001,5005,5024,5014,carafe|coffee mug|scale,3
1004
+ 1002,5010,5029,5019,carafe|coffee mug|scale,3
1005
+ 1003,5015,5034,5024,carafe|coffee mug|scale,3
1006
+ 1004,5020,5039,5029,carafe|coffee mug|scale,3
1007
+ 1005,5025,5044,5034,carafe|coffee mug|scale,3
1008
+ 1006,5030,5049,5039,carafe|coffee mug|scale,3
1009
+ 1007,5035,5054,5044,carafe|coffee mug|scale,3
1010
+ 1008,5040,5059,5049,carafe|coffee mug|scale,3
1011
+ 1009,5045,5064,5054,carafe|coffee mug|scale,3
1012
+ 1010,5050,5069,5059,carafe|coffee mug|scale,3
1013
+ 1011,5055,5074,5064,carafe|coffee mug|scale,3
1014
+ 1012,5060,5079,5069,carafe|coffee mug|scale,3
1015
+ 1013,5065,5084,5074,carafe|coffee mug|scale,3
1016
+ 1014,5070,5089,5079,carafe|coffee mug|scale,3
1017
+ 1015,5075,5094,5084,carafe|coffee mug|scale,3
1018
+ 1016,5080,5099,5089,carafe|coffee mug|scale,3
1019
+ 1017,5085,5104,5094,carafe|coffee mug|scale,3
1020
+ 1018,5090,5109,5099,carafe|coffee mug|scale,3
1021
+ 1019,5095,5114,5104,carafe|coffee mug|scale,3
1022
+ 1020,5100,5119,5109,carafe|coffee mug|scale,3
1023
+ 1021,5105,5124,5114,carafe|coffee mug|scale,3
1024
+ 1022,5110,5129,5119,carafe|coffee mug|scale,3
1025
+ 1023,5115,5134,5124,carafe|coffee mug|scale,3
1026
+ 1024,5120,5139,5129,carafe|coffee mug|scale,3
1027
+ 1025,5125,5144,5134,carafe|coffee mug|scale,3
1028
+ 1026,5130,5149,5139,carafe|coffee mug|scale,3
1029
+ 1027,5135,5154,5144,carafe|coffee mug|scale,3
1030
+ 1028,5140,5159,5149,carafe|coffee mug|scale,3
1031
+ 1029,5145,5164,5154,carafe|coffee mug|scale,3
1032
+ 1030,5150,5169,5159,carafe|coffee mug|scale,3
1033
+ 1031,5155,5174,5164,carafe|coffee mug|scale,3
1034
+ 1032,5160,5179,5169,carafe|coffee mug|scale,3
1035
+ 1033,5165,5184,5174,carafe|coffee mug|scale,3
1036
+ 1034,5170,5189,5179,carafe|coffee mug|scale,3
1037
+ 1035,5175,5194,5184,carafe|coffee mug|scale,3
1038
+ 1036,5180,5199,5189,carafe|coffee mug|scale,3
1039
+ 1037,5185,5204,5194,carafe|coffee mug|scale,3
1040
+ 1038,5190,5209,5199,carafe|coffee mug|scale,3
1041
+ 1039,5195,5214,5204,carafe|coffee mug|scale,3
1042
+ 1040,5200,5219,5209,carafe|coffee mug|scale,3
1043
+ 1041,5205,5224,5214,carafe|coffee mug|scale,3
1044
+ 1042,5210,5229,5219,carafe|coffee mug|scale,3
1045
+ 1043,5215,5234,5224,carafe|coffee mug|scale,3
1046
+ 1044,5220,5239,5229,carafe|coffee mug|scale,3
1047
+ 1045,5225,5244,5234,carafe|coffee mug|scale,3
1048
+ 1046,5230,5249,5239,carafe|coffee mug|scale,3
1049
+ 1047,5235,5254,5244,carafe|coffee mug|scale,3
1050
+ 1048,5240,5259,5249,carafe|coffee mug|scale,3
1051
+ 1049,5245,5264,5254,carafe|coffee mug|scale,3
1052
+ 1050,5250,5269,5259,carafe|coffee mug|scale,3
1053
+ 1051,5255,5274,5264,carafe|coffee mug|scale,3
1054
+ 1052,5260,5279,5269,carafe|coffee mug|scale,3
1055
+ 1053,5265,5284,5274,carafe|coffee mug|scale,3
1056
+ 1054,5270,5289,5279,carafe|coffee mug|scale,3
1057
+ 1055,5275,5294,5284,carafe|coffee mug|scale,3
1058
+ 1056,5280,5299,5289,carafe|coffee mug|scale,3
1059
+ 1057,5285,5304,5294,carafe|coffee mug|scale,3
1060
+ 1058,5290,5309,5299,carafe|coffee mug|scale,3
1061
+ 1059,5295,5314,5304,carafe|coffee mug|scale,3
1062
+ 1060,5300,5319,5309,carafe|coffee mug|scale,3
1063
+ 1061,5305,5324,5314,carafe|coffee mug|scale,3
1064
+ 1062,5310,5329,5319,carafe|coffee mug|scale,3
1065
+ 1063,5315,5334,5324,carafe|coffee mug|scale,3
1066
+ 1064,5320,5339,5329,carafe|coffee mug|scale,3
1067
+ 1065,5325,5344,5334,carafe|coffee mug|scale,3
1068
+ 1066,5330,5349,5339,carafe|coffee mug|scale,3
1069
+ 1067,5335,5354,5344,carafe|coffee mug|scale,3
1070
+ 1068,5340,5359,5349,carafe|coffee mug|scale,3
1071
+ 1069,5345,5364,5354,carafe|coffee mug|scale,3
1072
+ 1070,5350,5369,5359,carafe|coffee mug|scale,3
1073
+ 1071,5355,5374,5364,carafe|coffee mug|scale,3
1074
+ 1072,5360,5379,5369,carafe|coffee mug|scale,3
1075
+ 1073,5365,5384,5374,carafe|coffee mug|scale,3
1076
+ 1074,5370,5389,5379,carafe|coffee mug|scale,3
1077
+ 1075,5375,5394,5384,carafe|coffee mug|scale,3
1078
+ 1076,5380,5399,5389,carafe|coffee mug|scale,3
1079
+ 1077,5385,5404,5394,carafe|coffee mug|scale|milk pitcher|coffee cup|digital scale|bottle,7
1080
+ 1078,5390,5409,5399,carafe|coffee mug|scale|milk pitcher|coffee cup|digital scale|bottle,7
1081
+ 1079,5395,5414,5404,carafe|coffee mug|scale|milk pitcher|coffee cup|digital scale|bottle,7
1082
+ 1080,5400,5419,5409,milk pitcher|coffee cup|digital scale|bottle,4
1083
+ 1081,5405,5424,5414,milk pitcher|coffee cup|digital scale|bottle,4
1084
+ 1082,5410,5429,5419,milk pitcher|coffee cup|digital scale|bottle,4
1085
+ 1083,5415,5434,5424,milk pitcher|coffee cup|digital scale|bottle,4
1086
+ 1084,5420,5439,5429,milk pitcher|coffee cup|digital scale|bottle,4
1087
+ 1085,5425,5444,5434,milk pitcher|coffee cup|digital scale|bottle,4
1088
+ 1086,5430,5449,5439,milk pitcher|coffee cup|digital scale|bottle,4
1089
+ 1087,5435,5454,5444,milk pitcher|coffee cup|digital scale|bottle,4
1090
+ 1088,5440,5459,5449,milk pitcher|coffee cup|digital scale|bottle,4
1091
+ 1089,5445,5464,5454,milk pitcher|coffee cup|digital scale|bottle,4
1092
+ 1090,5450,5469,5459,milk pitcher|coffee cup|digital scale|bottle,4
1093
+ 1091,5455,5474,5464,milk pitcher|coffee cup|digital scale|bottle,4
1094
+ 1092,5460,5479,5469,milk pitcher|coffee cup|digital scale|bottle,4
1095
+ 1093,5465,5484,5474,milk pitcher|coffee cup|digital scale|bottle,4
1096
+ 1094,5470,5489,5479,milk pitcher|coffee cup|digital scale|bottle,4
1097
+ 1095,5475,5494,5484,milk pitcher|coffee cup|digital scale|bottle,4
1098
+ 1096,5480,5499,5489,milk pitcher|coffee cup|digital scale|bottle,4
1099
+ 1097,5485,5504,5494,milk pitcher|coffee cup|digital scale|bottle,4
1100
+ 1098,5490,5509,5499,milk pitcher|coffee cup|digital scale|bottle,4
1101
+ 1099,5495,5514,5504,milk pitcher|coffee cup|digital scale|bottle,4
1102
+ 1100,5500,5519,5509,milk pitcher|coffee cup|digital scale|bottle,4
1103
+ 1101,5505,5524,5514,milk pitcher|coffee cup|digital scale|bottle,4
1104
+ 1102,5510,5529,5519,milk pitcher|coffee cup|digital scale|bottle,4
1105
+ 1103,5515,5534,5524,milk pitcher|coffee cup|digital scale|bottle,4
1106
+ 1104,5520,5539,5529,milk pitcher|coffee cup|digital scale|bottle,4
1107
+ 1105,5525,5544,5534,milk pitcher|coffee cup|digital scale|bottle,4
1108
+ 1106,5530,5549,5539,milk pitcher|coffee cup|digital scale|bottle,4
1109
+ 1107,5535,5554,5544,milk pitcher|coffee cup|digital scale|bottle,4
1110
+ 1108,5540,5559,5549,milk pitcher|coffee cup|digital scale|bottle,4
1111
+ 1109,5545,5564,5554,milk pitcher|coffee cup|digital scale|bottle,4
1112
+ 1110,5550,5569,5559,milk pitcher|coffee cup|digital scale|bottle,4
1113
+ 1111,5555,5574,5564,milk pitcher|coffee cup|digital scale|bottle,4
1114
+ 1112,5560,5579,5569,milk pitcher|coffee cup|digital scale|bottle,4
1115
+ 1113,5565,5584,5574,milk pitcher|coffee cup|digital scale|bottle,4
1116
+ 1114,5570,5589,5579,milk pitcher|coffee cup|digital scale|bottle,4
1117
+ 1115,5575,5594,5584,milk pitcher|coffee cup|digital scale|bottle,4
1118
+ 1116,5580,5599,5589,milk pitcher|coffee cup|digital scale|bottle,4
1119
+ 1117,5585,5604,5594,milk pitcher|coffee cup|digital scale|bottle,4
1120
+ 1118,5590,5609,5599,milk pitcher|coffee cup|digital scale|bottle,4
1121
+ 1119,5595,5614,5604,milk pitcher|coffee cup|digital scale|bottle,4
1122
+ 1120,5600,5619,5609,milk pitcher|coffee cup|digital scale|bottle,4
1123
+ 1121,5605,5624,5614,milk pitcher|coffee cup|digital scale|bottle,4
1124
+ 1122,5610,5629,5619,milk pitcher|coffee cup|digital scale|bottle,4
1125
+ 1123,5615,5634,5624,milk pitcher|coffee cup|digital scale|bottle,4
1126
+ 1124,5620,5639,5629,milk pitcher|coffee cup|digital scale|bottle,4
1127
+ 1125,5625,5644,5634,milk pitcher|coffee cup|digital scale|bottle,4
1128
+ 1126,5630,5649,5639,milk pitcher|coffee cup|digital scale|bottle,4
1129
+ 1127,5635,5654,5644,milk pitcher|coffee cup|digital scale|bottle,4
1130
+ 1128,5640,5659,5649,milk pitcher|coffee cup|digital scale|bottle,4
1131
+ 1129,5645,5664,5654,milk pitcher|coffee cup|digital scale|bottle,4
1132
+ 1130,5650,5669,5659,milk pitcher|coffee cup|digital scale|bottle,4
1133
+ 1131,5655,5674,5664,milk pitcher|coffee cup|digital scale|bottle,4
1134
+ 1132,5660,5679,5669,milk pitcher|coffee cup|digital scale|bottle,4
1135
+ 1133,5665,5684,5674,milk pitcher|coffee cup|digital scale|bottle,4
1136
+ 1134,5670,5689,5679,milk pitcher|coffee cup|digital scale|bottle,4
1137
+ 1135,5675,5694,5684,milk pitcher|coffee cup|digital scale|bottle,4
1138
+ 1136,5680,5699,5689,milk pitcher|coffee cup|digital scale|bottle,4
1139
+ 1137,5685,5704,5694,milk pitcher|coffee cup|digital scale|bottle,4
1140
+ 1138,5690,5709,5699,milk pitcher|coffee cup|digital scale|bottle,4
1141
+ 1139,5695,5714,5704,milk pitcher|coffee cup|digital scale|bottle,4
1142
+ 1140,5700,5719,5709,milk pitcher|coffee cup|digital scale|bottle,4
1143
+ 1141,5705,5724,5714,milk pitcher|coffee cup|digital scale|bottle,4
1144
+ 1142,5710,5729,5719,milk pitcher|coffee cup|digital scale|bottle,4
1145
+ 1143,5715,5734,5724,milk pitcher|coffee cup|digital scale|bottle,4
1146
+ 1144,5720,5739,5729,milk pitcher|coffee cup|digital scale|bottle,4
1147
+ 1145,5725,5744,5734,milk pitcher|coffee cup|digital scale|bottle,4
1148
+ 1146,5730,5749,5739,milk pitcher|coffee cup|digital scale|bottle,4
1149
+ 1147,5735,5754,5744,milk pitcher|coffee cup|digital scale|bottle,4
1150
+ 1148,5740,5759,5749,milk pitcher|coffee cup|digital scale|bottle,4
1151
+ 1149,5745,5764,5754,milk pitcher|coffee cup|digital scale|bottle,4
1152
+ 1150,5750,5769,5759,milk pitcher|coffee cup|digital scale|bottle,4
1153
+ 1151,5755,5774,5764,milk pitcher|coffee cup|digital scale|bottle,4
1154
+ 1152,5760,5779,5769,milk pitcher|coffee cup|digital scale|bottle,4
1155
+ 1153,5765,5784,5774,milk pitcher|coffee cup|digital scale|bottle,4
1156
+ 1154,5770,5789,5779,milk pitcher|coffee cup|digital scale|bottle,4
1157
+ 1155,5775,5794,5784,milk pitcher|coffee cup|digital scale|bottle,4
1158
+ 1156,5780,5799,5789,milk pitcher|coffee cup|digital scale|bottle,4
1159
+ 1157,5785,5804,5794,milk pitcher|coffee cup|digital scale|bottle|coffee mug|stainless steel milk pitcher|table|milk bottle,8
1160
+ 1158,5790,5809,5799,milk pitcher|coffee cup|digital scale|bottle|coffee mug|stainless steel milk pitcher|table|milk bottle,8
1161
+ 1159,5795,5814,5804,milk pitcher|coffee cup|digital scale|bottle|coffee mug|stainless steel milk pitcher|table|milk bottle,8
1162
+ 1160,5800,5819,5809,coffee mug|stainless steel milk pitcher|table|milk bottle|digital scale,5
results/single_episode_diagnostics/provenance.json ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "artifact_policy": "Only existing local artifacts are consumed. Missing labels/tasks are marked not_computed instead of filled.",
3
+ "source_suite_dir": "results/episode_task_suite",
4
+ "output_dir": "results/single_episode_diagnostics",
5
+ "shared_windows_shape": [
6
+ 1161,
7
+ 8378
8
+ ],
9
+ "starts_first_last": [
10
+ 0,
11
+ 5800
12
+ ],
13
+ "ends_first_last": [
14
+ 19,
15
+ 5819
16
+ ],
17
+ "feature_blocks": [
18
+ {
19
+ "name": "hand_left_joints",
20
+ "start": 0,
21
+ "end": 441,
22
+ "dim": 441
23
+ },
24
+ {
25
+ "name": "hand_right_joints",
26
+ "start": 441,
27
+ "end": 882,
28
+ "dim": 441
29
+ },
30
+ {
31
+ "name": "body_joints",
32
+ "start": 882,
33
+ "end": 1974,
34
+ "dim": 1092
35
+ },
36
+ {
37
+ "name": "body_contacts",
38
+ "start": 1974,
39
+ "end": 2121,
40
+ "dim": 147
41
+ },
42
+ {
43
+ "name": "camera_translation",
44
+ "start": 2121,
45
+ "end": 2142,
46
+ "dim": 21
47
+ },
48
+ {
49
+ "name": "camera_rotation_matrix",
50
+ "start": 2142,
51
+ "end": 2205,
52
+ "dim": 63
53
+ },
54
+ {
55
+ "name": "imu_accel_gyro",
56
+ "start": 2205,
57
+ "end": 2247,
58
+ "dim": 42
59
+ },
60
+ {
61
+ "name": "depth_confidence",
62
+ "start": 2247,
63
+ "end": 3227,
64
+ "dim": 980
65
+ },
66
+ {
67
+ "name": "video_fisheye_cam0",
68
+ "start": 3227,
69
+ "end": 3913,
70
+ "dim": 686
71
+ },
72
+ {
73
+ "name": "video_fisheye_cam1",
74
+ "start": 3913,
75
+ "end": 4599,
76
+ "dim": 686
77
+ },
78
+ {
79
+ "name": "video_fisheye_cam2",
80
+ "start": 4599,
81
+ "end": 5285,
82
+ "dim": 686
83
+ },
84
+ {
85
+ "name": "video_fisheye_cam3",
86
+ "start": 5285,
87
+ "end": 5971,
88
+ "dim": 686
89
+ },
90
+ {
91
+ "name": "video_stereo_left",
92
+ "start": 5971,
93
+ "end": 6657,
94
+ "dim": 686
95
+ },
96
+ {
97
+ "name": "video_stereo_right",
98
+ "start": 6657,
99
+ "end": 7343,
100
+ "dim": 686
101
+ },
102
+ {
103
+ "name": "caption_objects_interaction_text",
104
+ "start": 7343,
105
+ "end": 8239,
106
+ "dim": 896
107
+ },
108
+ {
109
+ "name": "slam_point_cloud",
110
+ "start": 8239,
111
+ "end": 8261,
112
+ "dim": 22
113
+ },
114
+ {
115
+ "name": "calibration",
116
+ "start": 8261,
117
+ "end": 8378,
118
+ "dim": 117
119
+ }
120
+ ],
121
+ "summary_report_core": {
122
+ "num_windows": 1161,
123
+ "feature_dim": 8378,
124
+ "window_frames": 20,
125
+ "stride_frames": 5,
126
+ "annotation": "data/sample/xperience-10m-sample/annotation.hdf5"
127
+ },
128
+ "input_file_hashes": {
129
+ "results/episode_task_suite/shared_windows.npz": "72ca8566186080580e7181ae08d5659dd19f2ad55a2a9613f5cee75467e501e6",
130
+ "results/episode_task_suite/windows.csv": "c075e43518a96934b68da97dceb45926c5fd71c846c8df5d94cc1a3d9e250739",
131
+ "results/episode_task_suite/feature_manifest.json": "a6662295f44c325490d3575edb1a0e88585554c57c3988263b78b59bec3970a0",
132
+ "results/episode_task_suite/summary_report.json": "04d2badfaa149cce10e218ea8e13745e620d062e4ec5fa9f209a3ed9926a2ef4",
133
+ "results/episode_task_suite/transition_detection/true_boundaries.csv": "5445144c216666d66e725be8313d7e2954670761a45d234df983acd94f7007f0",
134
+ "results/episode_task_suite/timeline_action/predictions.csv": "0ed609f2b5a2dc47b678a0b5d5fb6fc23d9a1cdd4f88dd85da8d8c9123c5565b",
135
+ "results/episode_task_suite/timeline_subtask/predictions.csv": "f12336affe6b907fc8b4b7655e4a16772e0cffb594789ebfc6a041bd7a251600",
136
+ "results/episode_task_suite/transition_detection/predictions.csv": "601a611bd9abf14bfac69d7fe44785b6567f4972fa6a80cb5d55f47b76c4d18c",
137
+ "results/episode_task_suite/next_action/predictions.csv": "1182cdeafe0282704d8b6a2c482a161d0bd97275a153e53d0501f3371ac61066",
138
+ "results/episode_task_suite/contact_prediction/predictions.csv": "161d7ddc9abc1d9cab08ce733f5f476c686a6a5046e81c9a8a4afbcf8064f43b",
139
+ "results/episode_task_suite/object_relevance/predictions.csv": "cd3a30437de815deafe67ac894e606c6fa87d0cccef15ae76757f9cf7cad5708",
140
+ "external_raw_sample/annotation.hdf5": "4a44b773c92715091c8d70e19f25e41a503160d2d6e7da98b47b99a538f9cad3"
141
+ }
142
+ }
results/single_episode_diagnostics/timeline_overlay/TIMELINE_OVERLAY_REPORT.md ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Timeline Prediction Overlay Report
2
+
3
+ This report aligns existing prediction CSV files to the exported episode timeline. It does not rerun training.
4
+
5
+ ## Task-Level Correctness
6
+
7
+ - Current Action Recognition: 10/343 correct (0.0292)
8
+ - Current Subtask Recognition: 20/344 correct (0.0581)
9
+ - Action Transition Detection: 322/348 correct (0.9253)
10
+ - Next-Action Prediction: 12/348 correct (0.0345)
11
+ - Contact State Prediction: 348/348 correct (1.0000)
12
+ - Relevant Object Prediction: 2/348 correct (0.0057)
13
+
14
+ ## Files
15
+
16
+ - `timeline_overlay.csv`: prediction rows with frame positions.
17
+ - `timeline_overlay.svg`: visual overlay across the episode.
results/single_episode_diagnostics/timeline_overlay/timeline_overlay.csv ADDED
The diff for this file is too large to render. See raw diff
 
results/single_episode_diagnostics/timeline_overlay/timeline_overlay.svg ADDED
scripts/build_single_episode_explorer.py ADDED
@@ -0,0 +1,565 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Build a static interactive explorer for the single Xperience-10M sample episode.
4
+
5
+ The explorer is generated from committed/exported artifacts only. Raw MP4/HDF5
6
+ files are not embedded or redistributed.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import argparse
12
+ import csv
13
+ import json
14
+ from datetime import datetime, timezone
15
+ from pathlib import Path
16
+
17
+ import numpy as np
18
+
19
+
20
+ TASK_DISPLAY = {
21
+ "timeline_action": "Current Action Recognition",
22
+ "timeline_subtask": "Current Subtask Recognition",
23
+ "transition_detection": "Action Transition Detection",
24
+ "next_action": "Next-Action Prediction",
25
+ "contact_prediction": "Contact State Prediction",
26
+ "object_relevance": "Relevant Object Prediction",
27
+ }
28
+
29
+
30
+ BLOCK_DISPLAY = {
31
+ "hand_left_joints": "Left Hand",
32
+ "hand_right_joints": "Right Hand",
33
+ "body_joints": "Body Joints",
34
+ "body_contacts": "Body Contacts",
35
+ "camera_translation": "Camera Translation",
36
+ "camera_rotation_matrix": "Camera Rotation",
37
+ "imu_accel_gyro": "IMU Accel/Gyro",
38
+ "depth_confidence": "Depth + Confidence",
39
+ "caption_objects_interaction_text": "Language Text",
40
+ "slam_point_cloud": "SLAM Point Cloud",
41
+ "calibration": "Calibration",
42
+ }
43
+
44
+
45
+ def parse_args() -> argparse.Namespace:
46
+ root = Path(__file__).resolve().parents[1]
47
+ parser = argparse.ArgumentParser(description="Build static single-episode explorer page.")
48
+ parser.add_argument("--workspace", type=Path, default=root)
49
+ parser.add_argument("--suite-dir", type=Path, default=root / "results/episode_task_suite")
50
+ parser.add_argument("--diagnostics-dir", type=Path, default=root / "results/single_episode_diagnostics")
51
+ parser.add_argument("--docs-dir", type=Path, default=root / "docs")
52
+ return parser.parse_args()
53
+
54
+
55
+ def read_csv(path: Path) -> list[dict]:
56
+ with path.open(newline="", encoding="utf-8") as fp:
57
+ return list(csv.DictReader(fp))
58
+
59
+
60
+ def read_json(path: Path):
61
+ return json.loads(path.read_text(encoding="utf-8"))
62
+
63
+
64
+ def write_json(path: Path, data: dict) -> None:
65
+ path.parent.mkdir(parents=True, exist_ok=True)
66
+ path.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")
67
+
68
+
69
+ def block_modality(name: str) -> str:
70
+ if name.startswith("video_"):
71
+ return "video"
72
+ if name.startswith("hand_") or name.startswith("body_"):
73
+ return "motion_capture"
74
+ if name.startswith("camera_") or name in {"slam_point_cloud", "calibration"}:
75
+ return "pose_slam"
76
+ if name.startswith("depth_"):
77
+ return "depth"
78
+ if name.startswith("imu_"):
79
+ return "inertial"
80
+ if name.startswith("caption_"):
81
+ return "language"
82
+ return "other"
83
+
84
+
85
+ def load_predictions(suite_dir: Path) -> dict[str, dict[int, dict]]:
86
+ out: dict[str, dict[int, dict]] = {}
87
+ for task in TASK_DISPLAY:
88
+ path = suite_dir / task / "predictions.csv"
89
+ rows_by_window: dict[int, dict] = {}
90
+ if not path.exists():
91
+ out[task] = rows_by_window
92
+ continue
93
+ for row in read_csv(path):
94
+ if "window_index" not in row:
95
+ continue
96
+ idx = int(row["window_index"])
97
+ true_value = row.get("true_label") or row.get("true_objects") or row.get("true") or ""
98
+ pred_value = row.get("predicted_label") or row.get("predicted_objects") or row.get("predicted") or ""
99
+ if "correct" in row and row["correct"] != "":
100
+ correct = int(float(row["correct"]))
101
+ else:
102
+ correct = int(str(true_value) == str(pred_value))
103
+ rows_by_window[idx] = {
104
+ "true": true_value,
105
+ "predicted": pred_value,
106
+ "correct": correct,
107
+ "confidence": row.get("confidence", ""),
108
+ }
109
+ out[task] = rows_by_window
110
+ return out
111
+
112
+
113
+ def build_action_segments(windows: list[dict]) -> list[dict]:
114
+ segments = []
115
+ if not windows:
116
+ return segments
117
+ current = windows[0]["action_label"]
118
+ start = int(windows[0]["start_frame"])
119
+ start_idx = int(windows[0]["window_index"])
120
+ last = windows[0]
121
+ for row in windows[1:]:
122
+ if row["action_label"] != current:
123
+ segments.append({
124
+ "action": current,
125
+ "start_frame": start,
126
+ "end_frame": int(last["end_frame"]),
127
+ "start_window": start_idx,
128
+ "end_window": int(last["window_index"]),
129
+ })
130
+ current = row["action_label"]
131
+ start = int(row["start_frame"])
132
+ start_idx = int(row["window_index"])
133
+ last = row
134
+ segments.append({
135
+ "action": current,
136
+ "start_frame": start,
137
+ "end_frame": int(last["end_frame"]),
138
+ "start_window": start_idx,
139
+ "end_window": int(last["window_index"]),
140
+ })
141
+ return segments
142
+
143
+
144
+ def build_data(args: argparse.Namespace) -> dict:
145
+ suite_dir = args.suite_dir
146
+ diagnostics_dir = args.diagnostics_dir
147
+ windows = read_csv(suite_dir / "windows.csv")
148
+ manifest = read_json(suite_dir / "feature_manifest.json")
149
+ summary = read_json(suite_dir / "summary_report.json")
150
+ provenance = read_json(diagnostics_dir / "provenance.json")
151
+ object_rows = {int(r["window_index"]): r for r in read_csv(diagnostics_dir / "object_labels/window_object_labels.csv")}
152
+ ablation_rows = read_csv(diagnostics_dir / "modality_ablation/ablation_metrics.csv")
153
+ alignment_rows = read_csv(diagnostics_dir / "alignment_stress/alignment_shift_metrics.csv")
154
+ timeline_rows = read_csv(diagnostics_dir / "timeline_overlay/timeline_overlay.csv")
155
+ predictions = load_predictions(suite_dir)
156
+ X = np.load(suite_dir / "shared_windows.npz")["X"].astype(np.float32)
157
+
158
+ block_stats = {}
159
+ block_meta = []
160
+ for block in manifest:
161
+ name = block["name"]
162
+ start, end = int(block["start"]), int(block["end"])
163
+ values = X[:, start:end]
164
+ l2 = np.linalg.norm(values, axis=1)
165
+ mean_abs = np.mean(np.abs(values), axis=1)
166
+ max_l2 = float(max(l2.max(), 1e-8))
167
+ block_stats[name] = {
168
+ "l2": l2,
169
+ "mean_abs": mean_abs,
170
+ "relative": l2 / max_l2,
171
+ }
172
+ block_meta.append({
173
+ "name": name,
174
+ "display": BLOCK_DISPLAY.get(name, name.replace("_", " ").title()),
175
+ "modality": block_modality(name),
176
+ "start": start,
177
+ "end": end,
178
+ "dim": int(block["dim"]),
179
+ })
180
+
181
+ explorer_windows = []
182
+ for i, row in enumerate(windows):
183
+ idx = int(row["window_index"])
184
+ obj = object_rows.get(idx, {})
185
+ feature_stats = []
186
+ for block in block_meta:
187
+ s = block_stats[block["name"]]
188
+ feature_stats.append({
189
+ "name": block["name"],
190
+ "l2": round(float(s["l2"][i]), 6),
191
+ "mean_abs": round(float(s["mean_abs"][i]), 6),
192
+ "relative": round(float(s["relative"][i]), 6),
193
+ })
194
+ task_predictions = {}
195
+ for task, rows_by_window in predictions.items():
196
+ task_predictions[task] = rows_by_window.get(idx)
197
+ explorer_windows.append({
198
+ "window_index": idx,
199
+ "start_frame": int(row["start_frame"]),
200
+ "end_frame": int(row["end_frame"]),
201
+ "center_frame": int(row["center_frame"]),
202
+ "action": row["action_label"],
203
+ "subtask": row["subtask_label"],
204
+ "objects": [x for x in obj.get("objects", "").split("|") if x],
205
+ "feature_stats": feature_stats,
206
+ "predictions": task_predictions,
207
+ })
208
+
209
+ best_ablation = {}
210
+ for task in sorted({r["task"] for r in ablation_rows}):
211
+ computed = [r for r in ablation_rows if r["task"] == task and r["status"] == "computed" and r["score"]]
212
+ if not computed:
213
+ continue
214
+ best = max(computed, key=lambda r: float(r["score"]))
215
+ non_overlap = [r for r in computed if r.get("target_source_overlap") == "false"]
216
+ best_non_overlap = max(non_overlap, key=lambda r: float(r["score"])) if non_overlap else None
217
+ best_ablation[task] = {
218
+ "best": {
219
+ "modality_group": best["modality_group"],
220
+ "modality_display": best["modality_display"],
221
+ "score": float(best["score"]),
222
+ "primary_metric": best["primary_metric"],
223
+ "target_source_overlap": best["target_source_overlap"],
224
+ },
225
+ "best_non_overlap": None if best_non_overlap is None else {
226
+ "modality_group": best_non_overlap["modality_group"],
227
+ "modality_display": best_non_overlap["modality_display"],
228
+ "score": float(best_non_overlap["score"]),
229
+ "primary_metric": best_non_overlap["primary_metric"],
230
+ },
231
+ }
232
+
233
+ return {
234
+ "meta": {
235
+ "generated_at": datetime.now(timezone.utc).isoformat(),
236
+ "window_count": len(explorer_windows),
237
+ "feature_dim": int(X.shape[1]),
238
+ "object_label_rows": len(object_rows),
239
+ "object_vocab_count": len(read_json(diagnostics_dir / "object_labels/object_vocab.json")["vocab"]),
240
+ "timeline_prediction_rows": len(timeline_rows),
241
+ "source_policy": "Window-level labels, features, predictions, and diagnostics only. Raw Xperience-10M MP4/HDF5/RRD files are not embedded.",
242
+ "annotation_hash_recorded": any("annotation.hdf5" in key for key in provenance["input_file_hashes"]),
243
+ "summary": {
244
+ "num_windows": summary.get("num_windows"),
245
+ "feature_dim": summary.get("feature_dim"),
246
+ "window_frames": summary.get("window_frames"),
247
+ "stride_frames": summary.get("stride_frames"),
248
+ },
249
+ },
250
+ "tasks": TASK_DISPLAY,
251
+ "feature_blocks": block_meta,
252
+ "segments": build_action_segments(windows),
253
+ "windows": explorer_windows,
254
+ "ablation": {
255
+ "best_by_task": best_ablation,
256
+ "rows": ablation_rows,
257
+ },
258
+ "alignment": alignment_rows,
259
+ }
260
+
261
+
262
+ HTML_TEMPLATE = """<!doctype html>
263
+ <html lang="en">
264
+ <head>
265
+ <meta charset="utf-8">
266
+ <meta name="viewport" content="width=device-width, initial-scale=1">
267
+ <title>Single-Episode Explorer | Ropedia Xperience-10M</title>
268
+ <meta name="description" content="Interactive window-level explorer for the Ropedia Xperience-10M single-episode diagnostics.">
269
+ <meta name="theme-color" content="#020502">
270
+ <link rel="icon" href="favicon.png" type="image/png" sizes="64x64">
271
+ <link rel="preconnect" href="https://fonts.googleapis.com">
272
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
273
+ <link href="https://fonts.googleapis.com/css2?family=Inter+Tight:wght@500;600;700;800&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
274
+ <style>
275
+ :root { color-scheme: dark; --page:#020502; --panel:#071207; --surface:#0b1709; --ink:#f4f8ef; --muted:#a7b5a3; --line:rgba(164,242,127,.22); --soft:rgba(164,242,127,.12); --green:#a7f078; --cyan:#7ae5c3; --blue:#9bdfff; --red:#ff8f7a; --amber:#d8f4a5; --font-ui:"Inter Tight",system-ui,sans-serif; --font-copy:"Space Grotesk",system-ui,sans-serif; --max:1400px; }
276
+ * { box-sizing:border-box; }
277
+ body { margin:0; background: radial-gradient(circle at 80% 12%, rgba(164,242,127,.13), transparent 28%), radial-gradient(circle, rgba(164,242,127,.10) 1px, transparent 1.4px), var(--page); background-size:auto,22px 22px,auto; color:var(--ink); font-family:var(--font-copy); line-height:1.5; }
278
+ a { color:inherit; }
279
+ .wrap { width:min(var(--max), calc(100% - 42px)); margin:0 auto; }
280
+ header { position:sticky; top:0; z-index:10; background:rgba(2,5,2,.88); backdrop-filter:blur(16px); border-bottom:1px solid var(--soft); }
281
+ .nav { height:64px; display:flex; align-items:center; justify-content:space-between; gap:18px; }
282
+ .brand { display:flex; gap:11px; align-items:center; text-decoration:none; font-family:var(--font-ui); font-weight:760; }
283
+ .brand img { width:38px; height:38px; border:1px solid rgba(164,242,127,.42); border-radius:8px; background:#061006; }
284
+ .nav-links { display:flex; gap:14px; color:#c9d5c5; font-size:14px; }
285
+ .nav-links a { text-decoration:none; }
286
+ .hero { padding:54px 0 30px; border-bottom:1px solid var(--soft); }
287
+ h1 { max-width:900px; margin:0; font-family:var(--font-ui); font-size:clamp(42px, 6vw, 76px); line-height:.98; letter-spacing:0; }
288
+ .hero p { max-width:820px; margin:22px 0 0; color:#c7d1c3; font-size:18px; line-height:1.62; }
289
+ .stats { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin-top:28px; max-width:900px; }
290
+ .stat { border:1px solid var(--line); border-radius:8px; background:rgba(7,18,7,.82); padding:13px 14px; }
291
+ .stat strong { display:block; font-family:var(--font-ui); font-size:24px; line-height:1; }
292
+ .stat span { display:block; margin-top:6px; color:var(--muted); font-size:12px; }
293
+ main { padding:26px 0 70px; }
294
+ .shell { display:grid; grid-template-columns:330px minmax(0,1fr); gap:18px; align-items:start; }
295
+ .panel { border:1px solid var(--line); border-radius:8px; background:linear-gradient(180deg, rgba(164,242,127,.06), rgba(7,18,7,.88)); box-shadow:0 18px 48px rgba(0,0,0,.32); }
296
+ .side { position:sticky; top:84px; padding:18px; }
297
+ label { display:block; color:var(--muted); font-size:12px; font-family:var(--font-ui); font-weight:720; margin:14px 0 7px; }
298
+ input[type=range] { width:100%; accent-color:var(--green); }
299
+ select, input[type=search] { width:100%; min-height:40px; border:1px solid var(--soft); border-radius:6px; background:#020802; color:var(--ink); padding:9px 10px; font:inherit; }
300
+ .button-row { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:12px; }
301
+ button { border:1px solid var(--line); border-radius:6px; background:#10200d; color:var(--ink); min-height:38px; font:700 13px var(--font-ui); cursor:pointer; }
302
+ button:hover { border-color:var(--green); }
303
+ .timeline { padding:18px; margin-bottom:18px; }
304
+ .timeline-strip { position:relative; height:60px; border:1px solid var(--soft); border-radius:8px; overflow:hidden; background:#030803; }
305
+ .segment { position:absolute; top:0; bottom:0; border-right:1px solid rgba(2,5,2,.45); opacity:.92; }
306
+ .marker { position:absolute; top:0; bottom:0; width:3px; background:var(--ink); box-shadow:0 0 0 2px rgba(2,5,2,.9), 0 0 18px rgba(164,242,127,.6); }
307
+ .timeline-meta { display:flex; justify-content:space-between; gap:12px; margin-top:10px; color:var(--muted); font-size:12px; }
308
+ .content { display:grid; gap:18px; }
309
+ .window-panel { padding:22px; }
310
+ .window-head { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:18px; align-items:start; border-bottom:1px solid var(--soft); padding-bottom:18px; }
311
+ h2 { margin:0; font-family:var(--font-ui); font-size:30px; line-height:1.1; }
312
+ .frame-pill { border:1px solid var(--line); border-radius:6px; padding:8px 10px; color:var(--green); font-family:var(--font-ui); font-size:13px; font-weight:760; white-space:nowrap; }
313
+ .subtle { color:var(--muted); }
314
+ .chips { display:flex; flex-wrap:wrap; gap:7px; margin-top:12px; }
315
+ .chip { border:1px solid var(--soft); background:rgba(164,242,127,.08); color:#e7f2df; border-radius:999px; padding:5px 8px; font-size:12px; }
316
+ .grid { display:grid; gap:12px; }
317
+ .pred-grid { grid-template-columns:repeat(3,minmax(0,1fr)); margin-top:18px; }
318
+ .pred { border:1px solid var(--soft); border-radius:8px; background:rgba(2,8,2,.72); padding:13px; min-height:118px; }
319
+ .pred h3 { margin:0 0 8px; font-family:var(--font-ui); font-size:15px; }
320
+ .pred p { margin:4px 0; color:#cdd8c8; font-size:13px; overflow-wrap:anywhere; }
321
+ .pred .ok { color:var(--green); font-weight:800; }
322
+ .pred .bad { color:var(--red); font-weight:800; }
323
+ .feature-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
324
+ .feature { display:grid; grid-template-columns:130px 1fr 62px; gap:10px; align-items:center; border-bottom:1px solid var(--soft); padding:10px 0; }
325
+ .feature:last-child { border-bottom:0; }
326
+ .feature-name { font-family:var(--font-ui); font-size:13px; color:#edf6e8; }
327
+ .bar { height:10px; border-radius:999px; background:rgba(164,242,127,.13); overflow:hidden; }
328
+ .bar span { display:block; height:100%; width:calc(var(--w) * 1%); background:linear-gradient(90deg,var(--cyan),var(--green)); }
329
+ .num { text-align:right; color:var(--muted); font-size:12px; font-variant-numeric:tabular-nums; }
330
+ .analysis-grid { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
331
+ .analysis { padding:18px; }
332
+ .analysis h3 { margin:0 0 12px; font-family:var(--font-ui); font-size:20px; }
333
+ .rows { display:grid; gap:8px; }
334
+ .row { display:grid; grid-template-columns:1fr auto; gap:12px; border-bottom:1px solid var(--soft); padding:8px 0; color:#d8e4d3; font-size:13px; }
335
+ .row strong { color:var(--green); font-variant-numeric:tabular-nums; }
336
+ .note { margin-top:12px; color:var(--muted); font-size:12px; line-height:1.55; }
337
+ @media (max-width: 980px) { .shell,.analysis-grid { grid-template-columns:1fr; } .side { position:static; } .pred-grid,.feature-grid,.stats { grid-template-columns:1fr; } .window-head { grid-template-columns:1fr; } .nav-links { display:none; } }
338
+ </style>
339
+ </head>
340
+ <body>
341
+ <header>
342
+ <div class="wrap nav">
343
+ <a class="brand" href="index.html"><img src="assets/brand/xperience10m-logo-mark-192.png" alt=""><span>Ropedia Xperience-10M</span></a>
344
+ <nav class="nav-links"><a href="index.html">Project</a><a href="single_episode_explorer.html">Explorer</a><a href="data/single_episode_explorer.json">Data JSON</a></nav>
345
+ </div>
346
+ </header>
347
+ <section class="hero">
348
+ <div class="wrap">
349
+ <h1>Single-Episode Research Explorer</h1>
350
+ <p>Inspect the exported Xperience-10M sample windows, real object labels, model predictions, feature-block statistics, and diagnostic scores from one aligned episode.</p>
351
+ <div class="stats">
352
+ <div class="stat"><strong id="statWindows">-</strong><span>windows</span></div>
353
+ <div class="stat"><strong id="statDim">-</strong><span>feature dimensions</span></div>
354
+ <div class="stat"><strong id="statObjects">-</strong><span>object labels</span></div>
355
+ <div class="stat"><strong id="statPreds">-</strong><span>prediction rows</span></div>
356
+ </div>
357
+ </div>
358
+ </section>
359
+ <main>
360
+ <div class="wrap shell">
361
+ <aside class="panel side">
362
+ <label for="windowRange">Window</label>
363
+ <input id="windowRange" type="range" min="0" max="0" value="0">
364
+ <div class="button-row"><button id="prevWindow" type="button">Previous</button><button id="nextWindow" type="button">Next</button></div>
365
+ <label for="taskSelect">Task Focus</label>
366
+ <select id="taskSelect"></select>
367
+ <label for="searchBox">Search Action or Object</label>
368
+ <input id="searchBox" type="search" placeholder="e.g. Pour coffee, kettle">
369
+ <div class="button-row"><button id="firstMatch" type="button">First Match</button><button id="firstPred" type="button">First Predicted</button></div>
370
+ <p class="note">The page uses window-level exported artifacts only. Raw video, raw HDF5, and RRD assets are not embedded.</p>
371
+ </aside>
372
+ <section class="content">
373
+ <div class="panel timeline">
374
+ <div class="timeline-strip" id="timelineStrip"></div>
375
+ <div class="timeline-meta"><span id="timelineLeft"></span><span id="timelineRight"></span></div>
376
+ </div>
377
+ <section class="panel window-panel">
378
+ <div class="window-head">
379
+ <div>
380
+ <h2 id="windowTitle">Window</h2>
381
+ <p id="windowSubtitle" class="subtle"></p>
382
+ <div class="chips" id="objectChips"></div>
383
+ </div>
384
+ <div class="frame-pill" id="framePill"></div>
385
+ </div>
386
+ <div class="grid pred-grid" id="predictionGrid"></div>
387
+ </section>
388
+ <section class="analysis-grid">
389
+ <div class="panel analysis">
390
+ <h3>Feature Blocks</h3>
391
+ <div class="grid feature-grid" id="featureGrid"></div>
392
+ </div>
393
+ <div class="panel analysis">
394
+ <h3>Diagnostics</h3>
395
+ <div class="rows" id="diagnosticRows"></div>
396
+ <p class="note" id="diagnosticNote"></p>
397
+ </div>
398
+ </section>
399
+ </section>
400
+ </div>
401
+ </main>
402
+ <script id="explorer-data" type="application/json">__DATA__</script>
403
+ <script>
404
+ const DATA = JSON.parse(document.getElementById("explorer-data").textContent);
405
+ function hasPrediction(windowRecord, taskKey) {
406
+ return taskKey === "all" ? Object.values(windowRecord.predictions).some(Boolean) : Boolean(windowRecord.predictions[taskKey]);
407
+ }
408
+ function defaultWindowIndex() {
409
+ let best = 0;
410
+ let bestCount = -1;
411
+ DATA.windows.forEach((w) => {
412
+ const count = Object.values(w.predictions).filter(Boolean).length;
413
+ if (count > bestCount) { best = w.window_index; bestCount = count; }
414
+ });
415
+ return best;
416
+ }
417
+ const state = { index: defaultWindowIndex(), task: "all" };
418
+ const range = document.getElementById("windowRange");
419
+ const taskSelect = document.getElementById("taskSelect");
420
+ const searchBox = document.getElementById("searchBox");
421
+ const colors = ["#5ccf7d", "#7ae5c3", "#9bdfff", "#d8f4a5", "#f0a45e", "#cba8ff", "#ff8f7a"];
422
+ document.getElementById("statWindows").textContent = DATA.meta.window_count;
423
+ document.getElementById("statDim").textContent = DATA.meta.feature_dim;
424
+ document.getElementById("statObjects").textContent = DATA.meta.object_vocab_count;
425
+ document.getElementById("statPreds").textContent = DATA.meta.timeline_prediction_rows;
426
+ range.max = DATA.windows.length - 1;
427
+ for (const [key, label] of Object.entries(DATA.tasks)) {
428
+ const option = document.createElement("option");
429
+ option.value = key;
430
+ option.textContent = label;
431
+ taskSelect.appendChild(option);
432
+ }
433
+ const allOption = document.createElement("option");
434
+ allOption.value = "all";
435
+ allOption.textContent = "All Prediction Cards";
436
+ taskSelect.insertBefore(allOption, taskSelect.firstChild);
437
+ taskSelect.value = state.task;
438
+ function pct(value, min, max) { return ((value - min) / Math.max(1, max - min)) * 100; }
439
+ function splitObjects(value) { return String(value || "").split("|").filter(Boolean); }
440
+ function renderTimeline() {
441
+ const strip = document.getElementById("timelineStrip");
442
+ strip.innerHTML = "";
443
+ const minFrame = DATA.windows[0].start_frame;
444
+ const maxFrame = DATA.windows[DATA.windows.length - 1].end_frame;
445
+ DATA.segments.forEach((seg, i) => {
446
+ const el = document.createElement("div");
447
+ el.className = "segment";
448
+ el.style.left = pct(seg.start_frame, minFrame, maxFrame) + "%";
449
+ el.style.width = Math.max(0.3, pct(seg.end_frame, minFrame, maxFrame) - pct(seg.start_frame, minFrame, maxFrame)) + "%";
450
+ el.style.background = colors[i % colors.length];
451
+ el.title = `${seg.action} (${seg.start_frame}-${seg.end_frame})`;
452
+ el.addEventListener("click", () => { state.index = seg.start_window; render(); });
453
+ strip.appendChild(el);
454
+ });
455
+ const marker = document.createElement("div");
456
+ marker.className = "marker";
457
+ marker.style.left = pct(DATA.windows[state.index].center_frame, minFrame, maxFrame) + "%";
458
+ strip.appendChild(marker);
459
+ document.getElementById("timelineLeft").textContent = `frame ${minFrame}`;
460
+ document.getElementById("timelineRight").textContent = `frame ${maxFrame}`;
461
+ }
462
+ function renderPredictions(w) {
463
+ const grid = document.getElementById("predictionGrid");
464
+ grid.innerHTML = "";
465
+ const taskEntries = Object.entries(DATA.tasks).filter(([key]) => state.task === "all" || key === state.task);
466
+ for (const [key, label] of taskEntries) {
467
+ const pred = w.predictions[key];
468
+ const card = document.createElement("article");
469
+ card.className = "pred";
470
+ let body = "";
471
+ if (!pred) {
472
+ body = `<p class="subtle">No held-out prediction row for this window.</p>`;
473
+ } else {
474
+ const status = pred.correct ? `<span class="ok">correct</span>` : `<span class="bad">mismatch</span>`;
475
+ body = `<p>${status}</p><p><strong>true</strong>: ${escapeHtml(pred.true || "")}</p><p><strong>pred</strong>: ${escapeHtml(pred.predicted || "")}</p>`;
476
+ if (pred.confidence) body += `<p><strong>confidence</strong>: ${Number(pred.confidence).toFixed(3)}</p>`;
477
+ }
478
+ card.innerHTML = `<h3>${escapeHtml(label)}</h3>${body}`;
479
+ grid.appendChild(card);
480
+ }
481
+ }
482
+ function renderFeatures(w) {
483
+ const grid = document.getElementById("featureGrid");
484
+ grid.innerHTML = "";
485
+ for (const stat of w.feature_stats) {
486
+ const block = DATA.feature_blocks.find((b) => b.name === stat.name);
487
+ const row = document.createElement("div");
488
+ row.className = "feature";
489
+ row.innerHTML = `<span class="feature-name">${escapeHtml(block.display)}</span><span class="bar"><span style="--w:${Math.round(stat.relative * 100)}"></span></span><span class="num">${stat.l2.toFixed(2)}</span>`;
490
+ grid.appendChild(row);
491
+ }
492
+ }
493
+ function renderDiagnostics() {
494
+ const rows = document.getElementById("diagnosticRows");
495
+ rows.innerHTML = "";
496
+ const task = state.task === "all" ? "object_relevance" : state.task;
497
+ const diag = DATA.ablation.best_by_task[task];
498
+ if (diag) {
499
+ rows.innerHTML += `<div class="row"><span>Best modality for ${escapeHtml(DATA.tasks[task] || task)}</span><strong>${escapeHtml(diag.best.modality_display)} ${diag.best.score.toFixed(3)}</strong></div>`;
500
+ if (diag.best_non_overlap) rows.innerHTML += `<div class="row"><span>Best non-overlap modality</span><strong>${escapeHtml(diag.best_non_overlap.modality_display)} ${diag.best_non_overlap.score.toFixed(3)}</strong></div>`;
501
+ }
502
+ const zeroRows = DATA.alignment.filter((r) => Number(r.shift_windows) === 0);
503
+ zeroRows.slice(0, 5).forEach((r) => {
504
+ rows.innerHTML += `<div class="row"><span>${escapeHtml(r.query_display)} zero-shift retrieval MRR</span><strong>${Number(r.mrr).toFixed(3)}</strong></div>`;
505
+ });
506
+ document.getElementById("diagnosticNote").textContent = DATA.meta.source_policy;
507
+ }
508
+ function renderWindow() {
509
+ const w = DATA.windows[state.index];
510
+ range.value = state.index;
511
+ document.getElementById("windowTitle").textContent = `Window ${w.window_index}: ${w.action || "unlabeled action"}`;
512
+ document.getElementById("windowSubtitle").textContent = w.subtask || "No subtask label";
513
+ document.getElementById("framePill").textContent = `frames ${w.start_frame}-${w.end_frame}`;
514
+ const chips = document.getElementById("objectChips");
515
+ chips.innerHTML = "";
516
+ (w.objects.length ? w.objects : ["no object label"]).forEach((obj) => {
517
+ const chip = document.createElement("span");
518
+ chip.className = "chip";
519
+ chip.textContent = obj;
520
+ chips.appendChild(chip);
521
+ });
522
+ renderPredictions(w);
523
+ renderFeatures(w);
524
+ renderDiagnostics();
525
+ }
526
+ function render() { renderTimeline(); renderWindow(); }
527
+ function escapeHtml(s) { return String(s).replace(/[&<>"']/g, (c) => ({ "&":"&amp;", "<":"&lt;", ">":"&gt;", '"':"&quot;", "'":"&#39;" }[c])); }
528
+ range.addEventListener("input", () => { state.index = Number(range.value); render(); });
529
+ taskSelect.addEventListener("change", () => { state.task = taskSelect.value; render(); });
530
+ document.getElementById("prevWindow").addEventListener("click", () => { state.index = Math.max(0, state.index - 1); render(); });
531
+ document.getElementById("nextWindow").addEventListener("click", () => { state.index = Math.min(DATA.windows.length - 1, state.index + 1); render(); });
532
+ document.getElementById("firstPred").addEventListener("click", () => {
533
+ const found = DATA.windows.find((w) => hasPrediction(w, state.task));
534
+ if (found) { state.index = found.window_index; render(); }
535
+ });
536
+ document.getElementById("firstMatch").addEventListener("click", () => {
537
+ const q = searchBox.value.trim().toLowerCase();
538
+ if (!q) return;
539
+ const found = DATA.windows.find((w) => [w.action, w.subtask, ...w.objects].join(" ").toLowerCase().includes(q));
540
+ if (found) { state.index = found.window_index; render(); }
541
+ });
542
+ render();
543
+ </script>
544
+ </body>
545
+ </html>
546
+ """
547
+
548
+
549
+ def write_html(path: Path, data: dict) -> None:
550
+ path.parent.mkdir(parents=True, exist_ok=True)
551
+ payload = json.dumps(data, ensure_ascii=False).replace("</script", "<\\/script")
552
+ path.write_text(HTML_TEMPLATE.replace("__DATA__", payload), encoding="utf-8")
553
+
554
+
555
+ def main() -> None:
556
+ args = parse_args()
557
+ data = build_data(args)
558
+ write_json(args.docs_dir / "data/single_episode_explorer.json", data)
559
+ write_html(args.docs_dir / "single_episode_explorer.html", data)
560
+ print(f"Wrote {args.docs_dir / 'data/single_episode_explorer.json'}")
561
+ print(f"Wrote {args.docs_dir / 'single_episode_explorer.html'}")
562
+
563
+
564
+ if __name__ == "__main__":
565
+ main()
scripts/single_episode_diagnostics.py ADDED
@@ -0,0 +1,1254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Single-episode diagnostics for the Xperience-10M task suite artifacts.
4
+
5
+ This script is intentionally artifact-driven. It consumes the already exported
6
+ one-episode shared feature table and prediction files, validates their shape and
7
+ hashes, and writes diagnostics that can be manually traced back to those inputs.
8
+
9
+ It does not invent labels or claim multi-episode generalization.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import argparse
15
+ import csv
16
+ import hashlib
17
+ import html
18
+ import json
19
+ import math
20
+ import sys
21
+ from collections import OrderedDict
22
+ from pathlib import Path
23
+ from typing import Iterable
24
+
25
+ import numpy as np
26
+
27
+
28
+ TASKS = [
29
+ "timeline_action",
30
+ "timeline_subtask",
31
+ "transition_detection",
32
+ "next_action",
33
+ "hand_trajectory_forecast",
34
+ "contact_prediction",
35
+ "object_relevance",
36
+ "caption_grounding",
37
+ "cross_modal_retrieval",
38
+ "modality_reconstruction",
39
+ "temporal_order",
40
+ "misalignment_detection",
41
+ ]
42
+
43
+
44
+ TASK_DISPLAY = {
45
+ "timeline_action": "Current Action Recognition",
46
+ "timeline_subtask": "Current Subtask Recognition",
47
+ "transition_detection": "Action Transition Detection",
48
+ "next_action": "Next-Action Prediction",
49
+ "hand_trajectory_forecast": "Future Hand Motion Forecasting",
50
+ "contact_prediction": "Contact State Prediction",
51
+ "object_relevance": "Relevant Object Prediction",
52
+ "caption_grounding": "Language-to-Time Grounding",
53
+ "cross_modal_retrieval": "Cross-Modal Window Retrieval",
54
+ "modality_reconstruction": "Sensor-to-Visual Reconstruction",
55
+ "temporal_order": "Temporal Order Verification",
56
+ "misalignment_detection": "Cross-Modal Misalignment Detection",
57
+ }
58
+
59
+
60
+ GROUP_DISPLAY = {
61
+ "all_features": "All Features",
62
+ "video": "Video",
63
+ "depth": "Depth",
64
+ "pose_slam": "Pose + SLAM",
65
+ "motion_capture": "Motion Capture",
66
+ "inertial": "Inertial",
67
+ "language": "Language",
68
+ "no_language": "All Except Language",
69
+ "motion_pose_inertial": "Motion + Pose + IMU",
70
+ }
71
+
72
+
73
+ def parse_args() -> argparse.Namespace:
74
+ workspace_default = Path(__file__).resolve().parents[1]
75
+ parser = argparse.ArgumentParser(description="Run single-episode diagnostics on real exported artifacts.")
76
+ parser.add_argument("--workspace", type=Path, default=workspace_default)
77
+ parser.add_argument(
78
+ "--suite-dir",
79
+ type=Path,
80
+ default=workspace_default / "results/episode_task_suite",
81
+ help="Existing single-episode task-suite artifact directory.",
82
+ )
83
+ parser.add_argument(
84
+ "--output-dir",
85
+ type=Path,
86
+ default=workspace_default / "results/single_episode_diagnostics",
87
+ help="Where to write new diagnostics. Existing task-suite outputs are not overwritten.",
88
+ )
89
+ parser.add_argument("--test-fraction", type=float, default=0.30)
90
+ parser.add_argument("--future-offset-windows", type=int, default=4)
91
+ parser.add_argument("--misalignment-shift-windows", type=int, default=8)
92
+ parser.add_argument("--ridge-l2", type=float, default=10.0)
93
+ parser.add_argument(
94
+ "--annotation",
95
+ type=Path,
96
+ default=None,
97
+ help="Optional raw annotation.hdf5. When provided, object relevance labels are exported from caption_frame_info_map.",
98
+ )
99
+ parser.add_argument(
100
+ "--homie-toolkit",
101
+ type=Path,
102
+ default=None,
103
+ help="Optional HOMIE-toolkit path. If omitted, inferred from --annotation when possible.",
104
+ )
105
+ return parser.parse_args()
106
+
107
+
108
+ def write_json(path: Path, data: dict | list) -> None:
109
+ path.parent.mkdir(parents=True, exist_ok=True)
110
+ path.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")
111
+
112
+
113
+ def write_text(path: Path, text: str) -> None:
114
+ path.parent.mkdir(parents=True, exist_ok=True)
115
+ path.write_text(text, encoding="utf-8")
116
+
117
+
118
+ def write_csv(path: Path, rows: list[dict], fieldnames: list[str] | None = None) -> None:
119
+ path.parent.mkdir(parents=True, exist_ok=True)
120
+ if fieldnames is None:
121
+ keys: OrderedDict[str, None] = OrderedDict()
122
+ for row in rows:
123
+ for key in row:
124
+ keys.setdefault(key, None)
125
+ fieldnames = list(keys.keys())
126
+ with path.open("w", newline="", encoding="utf-8") as fp:
127
+ writer = csv.DictWriter(fp, fieldnames=fieldnames, lineterminator="\n")
128
+ writer.writeheader()
129
+ for row in rows:
130
+ writer.writerow({k: row.get(k, "") for k in fieldnames})
131
+
132
+
133
+ def read_csv(path: Path) -> list[dict]:
134
+ with path.open(newline="", encoding="utf-8") as fp:
135
+ return list(csv.DictReader(fp))
136
+
137
+
138
+ def sha256(path: Path) -> str:
139
+ h = hashlib.sha256()
140
+ with path.open("rb") as fp:
141
+ for chunk in iter(lambda: fp.read(1024 * 1024), b""):
142
+ h.update(chunk)
143
+ return h.hexdigest()
144
+
145
+
146
+ def public_artifact_path(path: Path, repo_root: Path) -> str:
147
+ path = path.resolve()
148
+ try:
149
+ return str(path.relative_to(repo_root))
150
+ except ValueError:
151
+ pass
152
+ if path.name == "annotation.hdf5":
153
+ return "external_raw_sample/annotation.hdf5"
154
+ return path.name
155
+
156
+
157
+ def public_source_reference(value: object) -> object:
158
+ if value in (None, ""):
159
+ return value
160
+ text = str(value)
161
+ if text.startswith("/") or "/" + "Users/" in text or "/" + "private/" in text:
162
+ path = Path(text)
163
+ if path.name == "annotation.hdf5":
164
+ return "external_raw_sample/annotation.hdf5"
165
+ return path.name
166
+ return text
167
+
168
+
169
+ def load_inputs(suite_dir: Path) -> tuple[np.ndarray, np.ndarray, np.ndarray, list[dict], list[dict], dict]:
170
+ npz_path = suite_dir / "shared_windows.npz"
171
+ windows_path = suite_dir / "windows.csv"
172
+ manifest_path = suite_dir / "feature_manifest.json"
173
+ summary_path = suite_dir / "summary_report.json"
174
+ required = [npz_path, windows_path, manifest_path, summary_path]
175
+ missing = [str(p) for p in required if not p.exists()]
176
+ if missing:
177
+ raise FileNotFoundError(f"Missing required input artifacts: {missing}")
178
+
179
+ npz = np.load(npz_path)
180
+ X = np.asarray(npz["X"], dtype=np.float32)
181
+ starts = np.asarray(npz["starts"], dtype=np.int64)
182
+ ends = np.asarray(npz["ends"], dtype=np.int64)
183
+ windows = read_csv(windows_path)
184
+ manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
185
+ summary = json.loads(summary_path.read_text(encoding="utf-8"))
186
+
187
+ if X.ndim != 2:
188
+ raise ValueError(f"Expected X to be 2-D, got shape {X.shape}")
189
+ if len(windows) != X.shape[0]:
190
+ raise ValueError(f"windows.csv rows ({len(windows)}) do not match X rows ({X.shape[0]})")
191
+ if len(starts) != X.shape[0] or len(ends) != X.shape[0]:
192
+ raise ValueError("starts/ends arrays do not match X rows")
193
+
194
+ for i, row in enumerate(windows):
195
+ if int(row["start_frame"]) != int(starts[i]) or int(row["end_frame"]) != int(ends[i]):
196
+ raise ValueError(f"Window start/end mismatch at row {i}")
197
+
198
+ cursor = 0
199
+ for block in manifest:
200
+ start, end, dim = int(block["start"]), int(block["end"]), int(block["dim"])
201
+ if start != cursor or end <= start or end - start != dim:
202
+ raise ValueError(f"Feature manifest has a gap, overlap, or bad dim at block {block}")
203
+ cursor = end
204
+ if cursor != X.shape[1]:
205
+ raise ValueError(f"Feature manifest ends at {cursor}, but X has {X.shape[1]} columns")
206
+
207
+ return X, starts, ends, windows, manifest, summary
208
+
209
+
210
+ def chronological_split(n: int, test_fraction: float) -> tuple[np.ndarray, np.ndarray]:
211
+ if n < 2:
212
+ raise ValueError("Need at least two samples for a chronological split.")
213
+ split = int(round(n * (1.0 - test_fraction)))
214
+ split = max(1, min(split, n - 1))
215
+ return np.arange(split, dtype=np.int64), np.arange(split, n, dtype=np.int64)
216
+
217
+
218
+ def block_indices(manifest: list[dict], include: Iterable[str] | None = None, exclude: Iterable[str] | None = None) -> np.ndarray:
219
+ include = list(include or [])
220
+ exclude = list(exclude or [])
221
+ idxs: list[int] = []
222
+ for block in manifest:
223
+ name = str(block["name"])
224
+ if include and not any(name == p or name.startswith(p) for p in include):
225
+ continue
226
+ if exclude and any(name == p or name.startswith(p) for p in exclude):
227
+ continue
228
+ idxs.extend(range(int(block["start"]), int(block["end"])))
229
+ return np.asarray(idxs, dtype=np.int64)
230
+
231
+
232
+ def modality_groups(manifest: list[dict]) -> dict[str, np.ndarray]:
233
+ all_idx = block_indices(manifest)
234
+ language = block_indices(manifest, ["caption_objects_interaction_text"])
235
+ groups = {
236
+ "all_features": all_idx,
237
+ "video": block_indices(manifest, ["video_"]),
238
+ "depth": block_indices(manifest, ["depth_confidence"]),
239
+ "pose_slam": block_indices(manifest, ["camera_translation", "camera_rotation_matrix", "slam_point_cloud", "calibration"]),
240
+ "motion_capture": block_indices(manifest, ["hand_left_joints", "hand_right_joints", "body_joints", "body_contacts"]),
241
+ "inertial": block_indices(manifest, ["imu_accel_gyro"]),
242
+ "language": language,
243
+ "no_language": np.setdiff1d(all_idx, language),
244
+ }
245
+ return {name: idx for name, idx in groups.items() if len(idx) > 0}
246
+
247
+
248
+ def encode_labels(labels: Iterable[str]) -> tuple[np.ndarray, list[str]]:
249
+ seen: OrderedDict[str, int] = OrderedDict()
250
+ encoded = []
251
+ for label in labels:
252
+ label = str(label)
253
+ if label not in seen:
254
+ seen[label] = len(seen)
255
+ encoded.append(seen[label])
256
+ return np.asarray(encoded, dtype=np.int64), list(seen.keys())
257
+
258
+
259
+ def extract_objects(info: dict) -> list[str]:
260
+ objects = info.get("objects")
261
+ if isinstance(objects, list):
262
+ return [str(x).strip() for x in objects if str(x).strip()]
263
+ if objects:
264
+ return [str(objects).strip()]
265
+ return []
266
+
267
+
268
+ def infer_homie_toolkit(annotation: Path, explicit: Path | None) -> Path | None:
269
+ if explicit is not None:
270
+ return explicit
271
+ annotation = annotation.resolve()
272
+ candidates = []
273
+ for parent in annotation.parents:
274
+ candidates.append(parent / "HOMIE-toolkit")
275
+ for candidate in candidates:
276
+ if candidate.exists():
277
+ return candidate
278
+ return None
279
+
280
+
281
+ def load_object_targets_from_annotation(annotation: Path, windows: list[dict], toolkit: Path | None) -> dict:
282
+ annotation = annotation.resolve()
283
+ if not annotation.exists():
284
+ raise FileNotFoundError(annotation)
285
+ toolkit = infer_homie_toolkit(annotation, toolkit)
286
+ if toolkit is None or not toolkit.exists():
287
+ raise FileNotFoundError(f"HOMIE-toolkit not found for annotation {annotation}")
288
+ sys.path.insert(0, str(toolkit))
289
+ from data_loader import load_from_annotation_hdf5
290
+
291
+ ann = load_from_annotation_hdf5(annotation, 0, None, load_slam_point_cloud=False)
292
+ frame_info = ann["caption_frame_info_map"]
293
+ vocab: OrderedDict[str, int] = OrderedDict()
294
+ labels: list[list[str]] = []
295
+ rows_out: list[dict] = []
296
+ for row in windows:
297
+ counts: OrderedDict[str, int] = OrderedDict()
298
+ for frame in range(int(row["start_frame"]), int(row["end_frame"]) + 1):
299
+ for obj in extract_objects(frame_info.get(frame, {})):
300
+ counts[obj] = counts.get(obj, 0) + 1
301
+ objects = list(counts.keys())
302
+ for obj in objects:
303
+ if obj not in vocab:
304
+ vocab[obj] = len(vocab)
305
+ labels.append(objects)
306
+ rows_out.append({
307
+ "window_index": int(row["window_index"]),
308
+ "start_frame": int(row["start_frame"]),
309
+ "end_frame": int(row["end_frame"]),
310
+ "center_frame": int(row["center_frame"]),
311
+ "objects": "|".join(objects),
312
+ "object_count": int(len(objects)),
313
+ })
314
+ if not vocab:
315
+ raise ValueError("No object labels found in annotation caption_frame_info_map.")
316
+ Y = np.zeros((len(windows), len(vocab)), dtype=np.float32)
317
+ for i, objects in enumerate(labels):
318
+ for obj in objects:
319
+ Y[i, vocab[obj]] = 1.0
320
+ return {
321
+ "Y": Y,
322
+ "labels": labels,
323
+ "vocab": list(vocab.keys()),
324
+ "rows": rows_out,
325
+ "annotation": "external_raw_sample/annotation.hdf5",
326
+ "toolkit": "HOMIE-toolkit",
327
+ "source_note": (
328
+ "Object labels were exported from a raw Xperience-10M sample annotation. "
329
+ "The public artifact stores source type and hash instead of machine-specific file paths."
330
+ ),
331
+ }
332
+
333
+
334
+ def standardize(train: np.ndarray, test: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
335
+ mean = train.mean(axis=0, keepdims=True)
336
+ std = train.std(axis=0, keepdims=True)
337
+ std[std < 1e-6] = 1.0
338
+ return (train - mean) / std, (test - mean) / std
339
+
340
+
341
+ def standardize_train_apply(train: np.ndarray, *arrays: np.ndarray) -> list[np.ndarray]:
342
+ mean = train.mean(axis=0, keepdims=True)
343
+ std = train.std(axis=0, keepdims=True)
344
+ std[std < 1e-6] = 1.0
345
+ return [(arr - mean) / std for arr in arrays]
346
+
347
+
348
+ def ridge_predict(X_train: np.ndarray, Y_train: np.ndarray, X_test: np.ndarray, l2: float) -> np.ndarray:
349
+ X_train = np.asarray(X_train, dtype=np.float32)
350
+ X_test = np.asarray(X_test, dtype=np.float32)
351
+ Y_train = np.asarray(Y_train, dtype=np.float32)
352
+ Xb = np.concatenate([X_train, np.ones((X_train.shape[0], 1), dtype=np.float32)], axis=1)
353
+ Xtb = np.concatenate([X_test, np.ones((X_test.shape[0], 1), dtype=np.float32)], axis=1)
354
+ if Xb.shape[0] <= Xb.shape[1]:
355
+ K = Xb @ Xb.T
356
+ K.flat[:: K.shape[0] + 1] += l2
357
+ alpha = np.linalg.solve(K, Y_train)
358
+ return Xtb @ Xb.T @ alpha
359
+ A = Xb.T @ Xb
360
+ A.flat[:: A.shape[0] + 1] += l2
361
+ W = np.linalg.solve(A, Xb.T @ Y_train)
362
+ return Xtb @ W
363
+
364
+
365
+ def classification_metrics(y_true: np.ndarray, y_pred: np.ndarray) -> dict:
366
+ classes = np.unique(np.concatenate([y_true, y_pred]))
367
+ f1s = []
368
+ recalls = []
369
+ for cls in classes:
370
+ tp = int(((y_true == cls) & (y_pred == cls)).sum())
371
+ fp = int(((y_true != cls) & (y_pred == cls)).sum())
372
+ fn = int(((y_true == cls) & (y_pred != cls)).sum())
373
+ precision = tp / (tp + fp) if tp + fp else 0.0
374
+ recall = tp / (tp + fn) if tp + fn else 0.0
375
+ f1 = 2 * precision * recall / (precision + recall) if precision + recall else 0.0
376
+ f1s.append(f1)
377
+ recalls.append(recall)
378
+ return {
379
+ "accuracy": float((y_true == y_pred).mean()) if len(y_true) else 0.0,
380
+ "macro_f1": float(np.mean(f1s)) if f1s else 0.0,
381
+ "balanced_accuracy": float(np.mean(recalls)) if recalls else 0.0,
382
+ }
383
+
384
+
385
+ def multilabel_metrics(Y_true: np.ndarray, Y_pred: np.ndarray) -> dict:
386
+ Y_true = Y_true.astype(np.int64)
387
+ Y_pred = Y_pred.astype(np.int64)
388
+ tp = int(((Y_true == 1) & (Y_pred == 1)).sum())
389
+ fp = int(((Y_true == 0) & (Y_pred == 1)).sum())
390
+ fn = int(((Y_true == 1) & (Y_pred == 0)).sum())
391
+ precision = tp / (tp + fp) if tp + fp else 0.0
392
+ recall = tp / (tp + fn) if tp + fn else 0.0
393
+ micro_f1 = 2 * precision * recall / (precision + recall) if precision + recall else 0.0
394
+ per_f1 = []
395
+ for j in range(Y_true.shape[1]):
396
+ tpj = int(((Y_true[:, j] == 1) & (Y_pred[:, j] == 1)).sum())
397
+ fpj = int(((Y_true[:, j] == 0) & (Y_pred[:, j] == 1)).sum())
398
+ fnj = int(((Y_true[:, j] == 1) & (Y_pred[:, j] == 0)).sum())
399
+ pj = tpj / (tpj + fpj) if tpj + fpj else 0.0
400
+ rj = tpj / (tpj + fnj) if tpj + fnj else 0.0
401
+ per_f1.append(2 * pj * rj / (pj + rj) if pj + rj else 0.0)
402
+ return {
403
+ "micro_f1": float(micro_f1),
404
+ "macro_f1": float(np.mean(per_f1)) if per_f1 else 0.0,
405
+ "exact_match": float(np.mean(np.all(Y_true == Y_pred, axis=1))) if len(Y_true) else 0.0,
406
+ "precision": float(precision),
407
+ "recall": float(recall),
408
+ }
409
+
410
+
411
+ def regression_metrics(y_true: np.ndarray, y_pred: np.ndarray) -> dict:
412
+ err = y_pred - y_true
413
+ mse = float(np.mean(err ** 2))
414
+ mae = float(np.mean(np.abs(err)))
415
+ denom = float(np.sum((y_true - y_true.mean(axis=0, keepdims=True)) ** 2))
416
+ r2 = 1.0 - float(np.sum(err ** 2)) / denom if denom > 1e-12 else 0.0
417
+ return {"mse": mse, "mae": mae, "r2": r2}
418
+
419
+
420
+ def retrieval_metrics(pred_query: np.ndarray, target: np.ndarray) -> dict:
421
+ pred_query = pred_query.astype(np.float32)
422
+ target = target.astype(np.float32)
423
+ q_norm = pred_query / np.maximum(np.linalg.norm(pred_query, axis=1, keepdims=True), 1e-8)
424
+ t_norm = target / np.maximum(np.linalg.norm(target, axis=1, keepdims=True), 1e-8)
425
+ sims = q_norm @ t_norm.T
426
+ ranks = []
427
+ for i in range(sims.shape[0]):
428
+ order = np.argsort(-sims[i])
429
+ rank = int(np.where(order == i)[0][0]) + 1
430
+ ranks.append(rank)
431
+ ranks_arr = np.asarray(ranks, dtype=np.float32)
432
+ return {
433
+ "mrr": float(np.mean(1.0 / ranks_arr)) if len(ranks_arr) else 0.0,
434
+ "top1_accuracy": float(np.mean(ranks_arr <= 1)) if len(ranks_arr) else 0.0,
435
+ "top5_accuracy": float(np.mean(ranks_arr <= 5)) if len(ranks_arr) else 0.0,
436
+ "top10_accuracy": float(np.mean(ranks_arr <= 10)) if len(ranks_arr) else 0.0,
437
+ "median_rank": float(np.median(ranks_arr)) if len(ranks_arr) else 0.0,
438
+ "mean_rank": float(np.mean(ranks_arr)) if len(ranks_arr) else 0.0,
439
+ "num_queries": int(len(ranks_arr)),
440
+ }
441
+
442
+
443
+ def onehot(y: np.ndarray, n_classes: int) -> np.ndarray:
444
+ out = np.zeros((len(y), n_classes), dtype=np.float32)
445
+ out[np.arange(len(y)), y] = 1.0
446
+ return out
447
+
448
+
449
+ def fit_classification(
450
+ X: np.ndarray,
451
+ labels: np.ndarray,
452
+ train_idx: np.ndarray,
453
+ test_idx: np.ndarray,
454
+ l2: float,
455
+ ) -> tuple[dict, np.ndarray]:
456
+ y, class_names = encode_labels(labels)
457
+ train_classes = set(int(x) for x in y[train_idx])
458
+ test_classes = set(int(x) for x in y[test_idx])
459
+ unseen = [class_names[i] for i in sorted(test_classes - train_classes)]
460
+ X_train, X_test = standardize(X[train_idx], X[test_idx])
461
+ scores = ridge_predict(X_train, onehot(y[train_idx], len(class_names)), X_test, l2)
462
+ pred = scores.argmax(axis=1)
463
+ metrics = classification_metrics(y[test_idx], pred)
464
+ metrics.update({
465
+ "num_classes": len(class_names),
466
+ "num_train": int(len(train_idx)),
467
+ "num_test": int(len(test_idx)),
468
+ "unseen_test_classes": "|".join(unseen),
469
+ "unseen_test_class_count": int(len(unseen)),
470
+ })
471
+ return metrics, pred
472
+
473
+
474
+ def fit_multilabel(
475
+ X: np.ndarray,
476
+ Y: np.ndarray,
477
+ train_idx: np.ndarray,
478
+ test_idx: np.ndarray,
479
+ l2: float,
480
+ ) -> tuple[dict, np.ndarray]:
481
+ X_train, X_test = standardize(X[train_idx], X[test_idx])
482
+ scores = ridge_predict(X_train, Y[train_idx], X_test, l2)
483
+ pred = (scores >= 0.5).astype(np.float32)
484
+ empty = np.where(pred.sum(axis=1) == 0)[0]
485
+ if len(empty):
486
+ pred[empty, np.argmax(scores[empty], axis=1)] = 1.0
487
+ metrics = multilabel_metrics(Y[test_idx], pred)
488
+ metrics.update({
489
+ "num_objects": int(Y.shape[1]),
490
+ "num_train": int(len(train_idx)),
491
+ "num_test": int(len(test_idx)),
492
+ })
493
+ return metrics, pred
494
+
495
+
496
+ def frame_centers(windows: list[dict]) -> np.ndarray:
497
+ return np.asarray([int(row["center_frame"]) for row in windows], dtype=np.int64)
498
+
499
+
500
+ def labels_from_windows(windows: list[dict], key: str) -> np.ndarray:
501
+ return np.asarray([str(row.get(key, "") or "") for row in windows], dtype=object)
502
+
503
+
504
+ def transition_labels_from_boundaries(suite_dir: Path, centers: np.ndarray, tolerance_frames: int = 10) -> np.ndarray:
505
+ boundaries_path = suite_dir / "transition_detection/true_boundaries.csv"
506
+ if not boundaries_path.exists():
507
+ raise FileNotFoundError(boundaries_path)
508
+ rows = read_csv(boundaries_path)
509
+ boundary_frames = np.asarray([int(row.get("boundary_frame") or row.get("frame")) for row in rows], dtype=np.int64)
510
+ labels = np.zeros(len(centers), dtype=np.int64)
511
+ for i, center in enumerate(centers):
512
+ if len(boundary_frames) and np.min(np.abs(boundary_frames - center)) <= tolerance_frames:
513
+ labels[i] = 1
514
+ return np.asarray(["transition" if x else "steady" for x in labels], dtype=object)
515
+
516
+
517
+ def task_target(
518
+ task: str,
519
+ X: np.ndarray,
520
+ windows: list[dict],
521
+ manifest: list[dict],
522
+ suite_dir: Path,
523
+ future_offset_windows: int,
524
+ object_targets: dict | None = None,
525
+ ) -> dict:
526
+ centers = frame_centers(windows)
527
+ n = len(windows)
528
+ train_idx, test_idx = chronological_split(n, 0.30)
529
+ all_idx = np.arange(n, dtype=np.int64)
530
+ if task == "timeline_action":
531
+ return {"kind": "classification", "labels": labels_from_windows(windows, "action_label"), "rows": all_idx}
532
+ if task == "timeline_subtask":
533
+ return {"kind": "classification", "labels": labels_from_windows(windows, "subtask_label"), "rows": all_idx}
534
+ if task == "transition_detection":
535
+ return {"kind": "classification", "labels": transition_labels_from_boundaries(suite_dir, centers), "rows": all_idx}
536
+ if task == "next_action":
537
+ rows = np.arange(0, n - future_offset_windows, dtype=np.int64)
538
+ labels = labels_from_windows(windows, "action_label")[rows + future_offset_windows]
539
+ return {"kind": "classification", "labels": labels, "rows": rows, "target_variant": "future action label from windows.csv"}
540
+ if task == "contact_prediction":
541
+ contacts = block_indices(manifest, ["body_contacts"])
542
+ rows = all_idx
543
+ labels = np.where(np.abs(X[:, contacts]).sum(axis=1) > 1e-8, "contact", "no_contact")
544
+ return {
545
+ "kind": "classification",
546
+ "labels": labels,
547
+ "rows": rows,
548
+ "target_source_blocks": "body_contacts",
549
+ "target_variant": "contact proxy derived from body_contacts feature block",
550
+ }
551
+ if task == "hand_trajectory_forecast":
552
+ rows = np.arange(0, n - future_offset_windows, dtype=np.int64)
553
+ hand = block_indices(manifest, ["hand_left_joints", "hand_right_joints"])
554
+ target = X[rows + future_offset_windows][:, hand]
555
+ return {
556
+ "kind": "regression",
557
+ "target": target,
558
+ "rows": rows,
559
+ "target_source_blocks": "future hand_left_joints|hand_right_joints",
560
+ "target_variant": "future hand feature vector from shared_windows.npz",
561
+ }
562
+ if task == "caption_grounding":
563
+ rows = all_idx
564
+ text = block_indices(manifest, ["caption_objects_interaction_text"])
565
+ return {"kind": "retrieval", "target": X[:, text], "rows": rows, "target_source_blocks": "caption_objects_interaction_text"}
566
+ if task in {"cross_modal_retrieval", "modality_reconstruction"}:
567
+ rows = all_idx
568
+ visual = block_indices(manifest, ["depth_confidence", "video_"])
569
+ return {"kind": "retrieval" if task == "cross_modal_retrieval" else "regression", "target": X[:, visual], "rows": rows, "target_source_blocks": "depth_confidence|video_*"}
570
+ if task == "temporal_order":
571
+ pairs = []
572
+ labels = []
573
+ for i in range(n - 1):
574
+ pairs.append((i, i + 1))
575
+ labels.append("forward")
576
+ pairs.append((i + 1, i))
577
+ labels.append("reversed")
578
+ return {"kind": "pair_classification", "pairs": np.asarray(pairs, dtype=np.int64), "labels": np.asarray(labels, dtype=object)}
579
+ if task == "misalignment_detection":
580
+ shift = 8
581
+ pairs = []
582
+ labels = []
583
+ for i in range(n - shift):
584
+ pairs.append((i, i))
585
+ labels.append("aligned")
586
+ pairs.append((i, i + shift))
587
+ labels.append("shifted")
588
+ return {"kind": "pair_classification", "pairs": np.asarray(pairs, dtype=np.int64), "labels": np.asarray(labels, dtype=object)}
589
+ if task == "object_relevance":
590
+ if object_targets is None:
591
+ return {
592
+ "kind": "not_available",
593
+ "reason": "raw annotation.hdf5 was not provided, so full-train object relevance labels could not be exported",
594
+ }
595
+ rows = all_idx
596
+ return {
597
+ "kind": "multilabel",
598
+ "target": object_targets["Y"],
599
+ "rows": rows,
600
+ "target_source_blocks": "caption_objects_interaction_text",
601
+ "target_variant": "object sets exported from annotation.hdf5 caption_frame_info_map",
602
+ }
603
+ raise KeyError(task)
604
+
605
+
606
+ def target_overlap(group_idx: np.ndarray, target_info: dict, manifest: list[dict]) -> bool:
607
+ blocks = str(target_info.get("target_source_blocks", ""))
608
+ if not blocks:
609
+ return False
610
+ target_idx: list[int] = []
611
+ for part in blocks.split("|"):
612
+ part = part.strip()
613
+ if not part:
614
+ continue
615
+ prefix = part[:-1] if part.endswith("*") else part
616
+ target_idx.extend(block_indices(manifest, [prefix]).tolist())
617
+ if not target_idx:
618
+ return False
619
+ return bool(np.intersect1d(group_idx, np.asarray(target_idx, dtype=np.int64)).size)
620
+
621
+
622
+ def pair_features(X: np.ndarray, pairs: np.ndarray, group_idx: np.ndarray, visual_idx: np.ndarray | None = None, task: str = "") -> np.ndarray:
623
+ left = X[pairs[:, 0]][:, group_idx]
624
+ right_source = X[pairs[:, 1]]
625
+ if task == "misalignment_detection" and visual_idx is not None:
626
+ right = right_source[:, visual_idx]
627
+ else:
628
+ right = right_source[:, group_idx]
629
+ diff = right[:, : min(left.shape[1], right.shape[1])] - left[:, : min(left.shape[1], right.shape[1])]
630
+ return np.concatenate([left, right, diff], axis=1).astype(np.float32)
631
+
632
+
633
+ def run_modality_ablation(
634
+ X: np.ndarray,
635
+ windows: list[dict],
636
+ manifest: list[dict],
637
+ suite_dir: Path,
638
+ out_dir: Path,
639
+ args: argparse.Namespace,
640
+ object_targets: dict | None = None,
641
+ ) -> list[dict]:
642
+ groups = modality_groups(manifest)
643
+ visual_idx = block_indices(manifest, ["depth_confidence", "video_"])
644
+ contact_idx = block_indices(manifest, ["body_contacts"])
645
+ rows: list[dict] = []
646
+
647
+ for task in TASKS:
648
+ info = task_target(task, X, windows, manifest, suite_dir, args.future_offset_windows, object_targets)
649
+ for group_name, group_idx_raw in groups.items():
650
+ row = {
651
+ "task": task,
652
+ "task_display": TASK_DISPLAY[task],
653
+ "modality_group": group_name,
654
+ "modality_display": GROUP_DISPLAY[group_name],
655
+ "status": "computed",
656
+ "score": "",
657
+ "primary_metric": "",
658
+ "primary_metric_value": "",
659
+ "target_variant": info.get("target_variant", ""),
660
+ "target_source_overlap": "",
661
+ "reason": "",
662
+ }
663
+ if info["kind"] == "not_available":
664
+ row.update({"status": "not_computed", "reason": info["reason"]})
665
+ rows.append(row)
666
+ continue
667
+
668
+ group_idx = group_idx_raw
669
+ if task == "contact_prediction":
670
+ group_idx = np.setdiff1d(group_idx_raw, contact_idx)
671
+ if len(group_idx) == 0:
672
+ row.update({"status": "not_computed", "reason": "input group would contain only contact target-source features"})
673
+ rows.append(row)
674
+ continue
675
+
676
+ try:
677
+ if info["kind"] == "classification":
678
+ data_rows = np.asarray(info["rows"], dtype=np.int64)
679
+ labels = np.asarray(info["labels"], dtype=object)
680
+ train_local, test_local = chronological_split(len(data_rows), args.test_fraction)
681
+ metrics, _ = fit_classification(
682
+ X[data_rows][:, group_idx],
683
+ labels,
684
+ train_local,
685
+ test_local,
686
+ args.ridge_l2,
687
+ )
688
+ if metrics.get("status") == "not_computed":
689
+ row.update(metrics)
690
+ else:
691
+ row.update(metrics)
692
+ row["primary_metric"] = "macro_f1"
693
+ row["primary_metric_value"] = metrics["macro_f1"]
694
+ row["score"] = metrics["macro_f1"]
695
+ elif info["kind"] == "regression":
696
+ data_rows = np.asarray(info["rows"], dtype=np.int64)
697
+ target = np.asarray(info["target"], dtype=np.float32)
698
+ train_local, test_local = chronological_split(len(data_rows), args.test_fraction)
699
+ Xin_train, Xin_test = standardize(X[data_rows[train_local]][:, group_idx], X[data_rows[test_local]][:, group_idx])
700
+ Y_train, Y_test = standardize(info["target"][train_local], info["target"][test_local])
701
+ pred = ridge_predict(Xin_train, Y_train, Xin_test, args.ridge_l2)
702
+ metrics = regression_metrics(Y_test, pred)
703
+ row.update(metrics)
704
+ row["primary_metric"] = "mae"
705
+ row["primary_metric_value"] = metrics["mae"]
706
+ row["score"] = 1.0 / (1.0 + metrics["mae"])
707
+ elif info["kind"] == "multilabel":
708
+ data_rows = np.asarray(info["rows"], dtype=np.int64)
709
+ target = np.asarray(info["target"], dtype=np.float32)
710
+ train_local, test_local = chronological_split(len(data_rows), args.test_fraction)
711
+ metrics, _ = fit_multilabel(X[data_rows][:, group_idx], target, train_local, test_local, args.ridge_l2)
712
+ row.update(metrics)
713
+ row["primary_metric"] = "micro_f1"
714
+ row["primary_metric_value"] = metrics["micro_f1"]
715
+ row["score"] = metrics["micro_f1"]
716
+ elif info["kind"] == "retrieval":
717
+ data_rows = np.asarray(info["rows"], dtype=np.int64)
718
+ target = np.asarray(info["target"], dtype=np.float32)
719
+ train_local, test_local = chronological_split(len(data_rows), args.test_fraction)
720
+ Xin_train, Xin_test = standardize(X[data_rows[train_local]][:, group_idx], X[data_rows[test_local]][:, group_idx])
721
+ Y_train, Y_test = standardize(target[train_local], target[test_local])
722
+ pred = ridge_predict(Xin_train, Y_train, Xin_test, args.ridge_l2)
723
+ metrics = retrieval_metrics(pred, Y_test)
724
+ row.update(metrics)
725
+ row["primary_metric"] = "mrr"
726
+ row["primary_metric_value"] = metrics["mrr"]
727
+ row["score"] = metrics["mrr"]
728
+ elif info["kind"] == "pair_classification":
729
+ pairs = np.asarray(info["pairs"], dtype=np.int64)
730
+ labels = np.asarray(info["labels"], dtype=object)
731
+ train_local, test_local = chronological_split(len(pairs), args.test_fraction)
732
+ feats = pair_features(X, pairs, group_idx, visual_idx=visual_idx, task=task)
733
+ metrics, _ = fit_classification(feats, labels, train_local, test_local, args.ridge_l2)
734
+ if metrics.get("status") == "not_computed":
735
+ row.update(metrics)
736
+ else:
737
+ row.update(metrics)
738
+ row["primary_metric"] = "macro_f1"
739
+ row["primary_metric_value"] = metrics["macro_f1"]
740
+ row["score"] = metrics["macro_f1"]
741
+ else:
742
+ raise ValueError(info["kind"])
743
+ row["target_source_overlap"] = str(target_overlap(group_idx, info, manifest)).lower()
744
+ except Exception as exc: # keep the matrix auditable instead of silently dropping failures
745
+ row.update({"status": "not_computed", "reason": f"{type(exc).__name__}: {exc}"})
746
+ rows.append(row)
747
+
748
+ write_csv(out_dir / "modality_ablation/ablation_metrics.csv", rows)
749
+ write_json(
750
+ out_dir / "modality_ablation/ablation_summary.json",
751
+ {
752
+ "description": "Compact ridge-head ablation over real shared_windows.npz feature blocks.",
753
+ "num_rows": len(rows),
754
+ "num_computed": sum(1 for r in rows if r.get("status") == "computed"),
755
+ "num_not_computed": sum(1 for r in rows if r.get("status") != "computed"),
756
+ "groups": {name: int(len(idx)) for name, idx in groups.items()},
757
+ "tasks": TASKS,
758
+ "object_relevance_labels": "annotation.hdf5" if object_targets is not None else "not_available",
759
+ },
760
+ )
761
+ render_ablation_svg(rows, out_dir / "modality_ablation/ablation_matrix.svg")
762
+ write_modality_report(rows, out_dir / "modality_ablation/MODALITY_ABLATION_REPORT.md")
763
+ return rows
764
+
765
+
766
+ def color_for_score(score: float | None) -> str:
767
+ if score is None or math.isnan(score):
768
+ return "#20251f"
769
+ score = max(0.0, min(1.0, score))
770
+ r = int(37 + (154 - 37) * (1.0 - score))
771
+ g = int(72 + (224 - 72) * score)
772
+ b = int(54 + (101 - 54) * score)
773
+ return f"#{r:02x}{g:02x}{b:02x}"
774
+
775
+
776
+ def render_ablation_svg(rows: list[dict], path: Path) -> None:
777
+ groups = list(GROUP_DISPLAY.keys())
778
+ tasks = TASKS
779
+ cell_w, cell_h = 132, 34
780
+ left, top = 300, 98
781
+ width = left + cell_w * len(groups) + 44
782
+ height = top + cell_h * len(tasks) + 86
783
+ by_key = {(r["task"], r["modality_group"]): r for r in rows}
784
+ parts = [
785
+ f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" viewBox="0 0 {width} {height}">',
786
+ '<rect width="100%" height="100%" fill="#10160f"/>',
787
+ '<text x="28" y="38" fill="#eef5e8" font-family="Inter, Arial" font-size="24" font-weight="700">Single-Episode Modality Ablation Matrix</text>',
788
+ '<text x="28" y="66" fill="#a7b5a3" font-family="Inter, Arial" font-size="13">Scores are recomputed from shared_windows.npz; gray cells are intentionally not computed.</text>',
789
+ ]
790
+ for j, group in enumerate(groups):
791
+ x = left + j * cell_w + 6
792
+ parts.append(
793
+ f'<text x="{x}" y="{top - 18}" fill="#cbd8c8" font-family="Inter, Arial" font-size="12" transform="rotate(-25 {x} {top - 18})">{html.escape(GROUP_DISPLAY[group])}</text>'
794
+ )
795
+ for i, task in enumerate(tasks):
796
+ y = top + i * cell_h
797
+ parts.append(f'<text x="28" y="{y + 22}" fill="#e7efe2" font-family="Inter, Arial" font-size="13">{html.escape(TASK_DISPLAY[task])}</text>')
798
+ for j, group in enumerate(groups):
799
+ x = left + j * cell_w
800
+ row = by_key.get((task, group), {})
801
+ if row.get("status") == "computed" and row.get("score") != "":
802
+ score = float(row["score"])
803
+ fill = color_for_score(score)
804
+ label = f'{score:.2f}'
805
+ label_fill = "#061006" if score > 0.62 else "#edf5e7"
806
+ else:
807
+ fill = "#222720"
808
+ label = "n/a"
809
+ label_fill = "#7b8678"
810
+ parts.append(f'<rect x="{x}" y="{y}" width="{cell_w - 8}" height="{cell_h - 7}" rx="5" fill="{fill}" stroke="#34402f" stroke-width="1"/>')
811
+ parts.append(f'<text x="{x + (cell_w - 8) / 2}" y="{y + 19}" text-anchor="middle" fill="{label_fill}" font-family="Inter, Arial" font-size="12" font-weight="700">{label}</text>')
812
+ parts.extend(
813
+ [
814
+ f'<text x="28" y="{height - 34}" fill="#a7b5a3" font-family="Inter, Arial" font-size="12">Metric: macro-F1 / MRR / 1/(1+MAE), depending on task type. See CSV for raw values and overlap flags.</text>',
815
+ "</svg>",
816
+ ]
817
+ )
818
+ write_text(path, "\n".join(parts))
819
+
820
+
821
+ def write_modality_report(rows: list[dict], path: Path) -> None:
822
+ computed = [r for r in rows if r.get("status") == "computed" and r.get("score") != ""]
823
+ by_task: dict[str, list[dict]] = {t: [] for t in TASKS}
824
+ for row in computed:
825
+ by_task[row["task"]].append(row)
826
+ lines = [
827
+ "# Single-Episode Modality Ablation Report",
828
+ "",
829
+ "This diagnostic reruns compact ridge heads on the exported one-episode feature matrix. It is useful for checking which real feature blocks can support each task on this episode, not for estimating dataset-wide generalization.",
830
+ "",
831
+ "No synthetic labels are introduced. Derived proxy targets are marked in `target_variant`, and feature groups that overlap with the target source are marked in `target_source_overlap`.",
832
+ "",
833
+ "## Best Computed Group Per Task",
834
+ "",
835
+ ]
836
+ for task in TASKS:
837
+ task_rows = by_task.get(task, [])
838
+ if not task_rows:
839
+ reasons = sorted({r.get("reason", "") for r in rows if r["task"] == task and r.get("reason")})
840
+ lines.append(f"- {TASK_DISPLAY[task]}: not computed ({'; '.join(reasons)})")
841
+ continue
842
+ best = max(task_rows, key=lambda r: float(r["score"]))
843
+ line = (
844
+ f"- {TASK_DISPLAY[task]}: {best['modality_display']} score={float(best['score']):.4f}, "
845
+ f"{best['primary_metric']}={float(best['primary_metric_value']):.4f}, target overlap={best['target_source_overlap']}"
846
+ )
847
+ if best["target_source_overlap"] == "true":
848
+ no_overlap = [r for r in task_rows if r.get("target_source_overlap") == "false"]
849
+ if no_overlap:
850
+ alt = max(no_overlap, key=lambda r: float(r["score"]))
851
+ line += (
852
+ f"; best non-overlap: {alt['modality_display']} score={float(alt['score']):.4f}, "
853
+ f"{alt['primary_metric']}={float(alt['primary_metric_value']):.4f}"
854
+ )
855
+ lines.append(line)
856
+ lines.extend(
857
+ [
858
+ "",
859
+ "## Files",
860
+ "",
861
+ "- `ablation_metrics.csv`: every task/modality pair, including not-computed rows and reasons.",
862
+ "- `ablation_matrix.svg`: compact heatmap for manual inspection.",
863
+ "- `ablation_summary.json`: group dimensions and computed/not-computed counts.",
864
+ ]
865
+ )
866
+ write_text(path, "\n".join(lines) + "\n")
867
+
868
+
869
+ def run_timeline_overlay(suite_dir: Path, windows: list[dict], out_dir: Path) -> list[dict]:
870
+ overlay_tasks = [
871
+ "timeline_action",
872
+ "timeline_subtask",
873
+ "transition_detection",
874
+ "next_action",
875
+ "contact_prediction",
876
+ "object_relevance",
877
+ ]
878
+ window_by_index = {int(row["window_index"]): row for row in windows}
879
+ rows: list[dict] = []
880
+ for task in overlay_tasks:
881
+ pred_path = suite_dir / task / "predictions.csv"
882
+ if not pred_path.exists():
883
+ rows.append({"task": task, "status": "not_available", "reason": f"missing {pred_path}"})
884
+ continue
885
+ for pred in read_csv(pred_path):
886
+ try:
887
+ idx = int(pred["window_index"])
888
+ except KeyError:
889
+ continue
890
+ window = window_by_index.get(idx, {})
891
+ true_value = pred.get("true_label") or pred.get("true_objects") or pred.get("true") or ""
892
+ pred_value = pred.get("predicted_label") or pred.get("predicted_objects") or pred.get("predicted") or ""
893
+ if "correct" in pred and pred["correct"] != "":
894
+ correct = int(float(pred["correct"]))
895
+ else:
896
+ correct = int(str(true_value) == str(pred_value))
897
+ rows.append(
898
+ {
899
+ "task": task,
900
+ "task_display": TASK_DISPLAY[task],
901
+ "status": "observed_prediction",
902
+ "window_index": idx,
903
+ "start_frame": pred.get("start_frame") or window.get("start_frame", ""),
904
+ "end_frame": pred.get("end_frame") or window.get("end_frame", ""),
905
+ "center_frame": pred.get("center_frame") or window.get("center_frame", ""),
906
+ "true_value": true_value,
907
+ "predicted_value": pred_value,
908
+ "confidence": pred.get("confidence", ""),
909
+ "correct": correct,
910
+ }
911
+ )
912
+
913
+ write_csv(out_dir / "timeline_overlay/timeline_overlay.csv", rows)
914
+ render_timeline_svg(rows, windows, suite_dir, out_dir / "timeline_overlay/timeline_overlay.svg")
915
+ write_timeline_report(rows, out_dir / "timeline_overlay/TIMELINE_OVERLAY_REPORT.md")
916
+ return rows
917
+
918
+
919
+ def render_timeline_svg(rows: list[dict], windows: list[dict], suite_dir: Path, path: Path) -> None:
920
+ tasks = ["timeline_action", "timeline_subtask", "transition_detection", "next_action", "contact_prediction", "object_relevance"]
921
+ min_frame = min(int(r["start_frame"]) for r in windows)
922
+ max_frame = max(int(r["end_frame"]) for r in windows)
923
+ left, top = 260, 84
924
+ row_h, plot_w = 48, 1100
925
+ width = left + plot_w + 38
926
+ height = top + row_h * len(tasks) + 92
927
+ by_task: dict[str, list[dict]] = {t: [] for t in tasks}
928
+ for row in rows:
929
+ if row.get("status") == "observed_prediction":
930
+ by_task[row["task"]].append(row)
931
+
932
+ def x_for(frame: int) -> float:
933
+ return left + (frame - min_frame) / max(1, max_frame - min_frame) * plot_w
934
+
935
+ parts = [
936
+ f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" viewBox="0 0 {width} {height}">',
937
+ '<rect width="100%" height="100%" fill="#10160f"/>',
938
+ '<text x="28" y="38" fill="#eef5e8" font-family="Inter, Arial" font-size="24" font-weight="700">Held-Out Timeline Prediction Overlay</text>',
939
+ '<text x="28" y="64" fill="#a7b5a3" font-family="Inter, Arial" font-size="13">Bars are existing real prediction rows aligned back to the exported episode timeline.</text>',
940
+ ]
941
+ boundaries_path = suite_dir / "transition_detection/true_boundaries.csv"
942
+ boundary_frames = []
943
+ if boundaries_path.exists():
944
+ boundary_frames = [int(r.get("boundary_frame") or r.get("frame")) for r in read_csv(boundaries_path)]
945
+ for i, task in enumerate(tasks):
946
+ y = top + i * row_h
947
+ parts.append(f'<text x="28" y="{y + 25}" fill="#e7efe2" font-family="Inter, Arial" font-size="13">{html.escape(TASK_DISPLAY[task])}</text>')
948
+ parts.append(f'<line x1="{left}" y1="{y + 20}" x2="{left + plot_w}" y2="{y + 20}" stroke="#2a3428" stroke-width="18" stroke-linecap="round"/>')
949
+ for row in by_task[task]:
950
+ if not row.get("start_frame") or not row.get("end_frame"):
951
+ continue
952
+ x1 = x_for(int(float(row["start_frame"])))
953
+ x2 = max(x1 + 2, x_for(int(float(row["end_frame"]))))
954
+ fill = "#8ee06a" if int(row["correct"]) else "#e46b5f"
955
+ parts.append(f'<rect x="{x1:.2f}" y="{y + 11}" width="{x2 - x1:.2f}" height="18" rx="3" fill="{fill}" opacity="0.86"/>')
956
+ for frame in boundary_frames:
957
+ x = x_for(frame)
958
+ parts.append(f'<line x1="{x:.2f}" y1="{y + 4}" x2="{x:.2f}" y2="{y + 36}" stroke="#d8e887" stroke-width="1.2" opacity="0.70"/>')
959
+ parts.extend(
960
+ [
961
+ f'<text x="{left}" y="{height - 42}" fill="#8ee06a" font-family="Inter, Arial" font-size="12">green = exact/correct prediction</text>',
962
+ f'<text x="{left + 220}" y="{height - 42}" fill="#e46b5f" font-family="Inter, Arial" font-size="12">red = mismatch</text>',
963
+ f'<text x="{left + 390}" y="{height - 42}" fill="#d8e887" font-family="Inter, Arial" font-size="12">vertical lines = real transition boundaries</text>',
964
+ "</svg>",
965
+ ]
966
+ )
967
+ write_text(path, "\n".join(parts))
968
+
969
+
970
+ def write_timeline_report(rows: list[dict], path: Path) -> None:
971
+ observed = [r for r in rows if r.get("status") == "observed_prediction"]
972
+ lines = [
973
+ "# Timeline Prediction Overlay Report",
974
+ "",
975
+ "This report aligns existing prediction CSV files to the exported episode timeline. It does not rerun training.",
976
+ "",
977
+ "## Task-Level Correctness",
978
+ "",
979
+ ]
980
+ for task in ["timeline_action", "timeline_subtask", "transition_detection", "next_action", "contact_prediction", "object_relevance"]:
981
+ task_rows = [r for r in observed if r["task"] == task]
982
+ if not task_rows:
983
+ lines.append(f"- {TASK_DISPLAY[task]}: no prediction rows found")
984
+ continue
985
+ correct = sum(int(r["correct"]) for r in task_rows)
986
+ lines.append(f"- {TASK_DISPLAY[task]}: {correct}/{len(task_rows)} correct ({correct / len(task_rows):.4f})")
987
+ lines.extend(
988
+ [
989
+ "",
990
+ "## Files",
991
+ "",
992
+ "- `timeline_overlay.csv`: prediction rows with frame positions.",
993
+ "- `timeline_overlay.svg`: visual overlay across the episode.",
994
+ ]
995
+ )
996
+ write_text(path, "\n".join(lines) + "\n")
997
+
998
+
999
+ def run_alignment_stress(
1000
+ X: np.ndarray,
1001
+ manifest: list[dict],
1002
+ windows: list[dict],
1003
+ out_dir: Path,
1004
+ args: argparse.Namespace,
1005
+ ) -> list[dict]:
1006
+ groups = modality_groups(manifest)
1007
+ stress_groups = {
1008
+ "motion_capture": groups["motion_capture"],
1009
+ "pose_slam": groups["pose_slam"],
1010
+ "inertial": groups["inertial"],
1011
+ "language": groups["language"],
1012
+ "motion_pose_inertial": np.unique(np.concatenate([groups["motion_capture"], groups["pose_slam"], groups["inertial"]])),
1013
+ }
1014
+ target_idx = block_indices(manifest, ["depth_confidence", "video_"])
1015
+ n = X.shape[0]
1016
+ train_idx, test_idx = chronological_split(n, args.test_fraction)
1017
+ shifts = [-40, -20, -10, -5, 0, 5, 10, 20, 40]
1018
+ rows: list[dict] = []
1019
+ stride = int(windows[1]["start_frame"]) - int(windows[0]["start_frame"]) if len(windows) > 1 else 1
1020
+ for group, q_idx in stress_groups.items():
1021
+ q_train, q_test_all = standardize(X[train_idx][:, q_idx], X[test_idx][:, q_idx])
1022
+ t_train, t_test_all = standardize(X[train_idx][:, target_idx], X[test_idx][:, target_idx])
1023
+ projector_pred_all = ridge_predict(q_train, t_train, q_test_all, args.ridge_l2)
1024
+ for shift in shifts:
1025
+ valid = []
1026
+ for local_i in range(len(test_idx)):
1027
+ shifted_local = local_i + shift
1028
+ if 0 <= shifted_local < len(test_idx):
1029
+ valid.append((local_i, shifted_local))
1030
+ if not valid:
1031
+ continue
1032
+ original = np.asarray([a for a, _ in valid], dtype=np.int64)
1033
+ shifted = np.asarray([b for _, b in valid], dtype=np.int64)
1034
+ pred = projector_pred_all[shifted]
1035
+ target = t_test_all[original]
1036
+ metrics = retrieval_metrics(pred, target)
1037
+ row = {
1038
+ "query_group": group,
1039
+ "query_display": GROUP_DISPLAY[group],
1040
+ "target_group": "depth_plus_video",
1041
+ "shift_windows": shift,
1042
+ "shift_frames": int(shift * stride),
1043
+ "status": "derived_perturbation",
1044
+ **metrics,
1045
+ }
1046
+ rows.append(row)
1047
+ write_csv(out_dir / "alignment_stress/alignment_shift_metrics.csv", rows)
1048
+ render_alignment_svg(rows, out_dir / "alignment_stress/alignment_shift_curves.svg")
1049
+ write_json(
1050
+ out_dir / "alignment_stress/alignment_stress_summary.json",
1051
+ {
1052
+ "description": "Real feature windows are deliberately time-shifted at evaluation time to test cross-modal alignment sensitivity.",
1053
+ "target_group": "depth_confidence + video_*",
1054
+ "status_meaning": "derived_perturbation means the features are real but the time shift is an explicit diagnostic perturbation.",
1055
+ "num_rows": len(rows),
1056
+ },
1057
+ )
1058
+ write_alignment_report(rows, out_dir / "alignment_stress/ALIGNMENT_STRESS_REPORT.md")
1059
+ return rows
1060
+
1061
+
1062
+ def render_alignment_svg(rows: list[dict], path: Path) -> None:
1063
+ groups = sorted({r["query_group"] for r in rows})
1064
+ width, height = 1020, 520
1065
+ left, top, plot_w, plot_h = 94, 80, 810, 330
1066
+ shifts = sorted({int(r["shift_windows"]) for r in rows})
1067
+ if not shifts:
1068
+ write_text(path, "<svg xmlns=\"http://www.w3.org/2000/svg\"></svg>")
1069
+ return
1070
+ min_shift, max_shift = min(shifts), max(shifts)
1071
+ max_mrr = max(float(r["mrr"]) for r in rows) if rows else 1.0
1072
+ max_mrr = max(max_mrr, 1e-6)
1073
+ palette = ["#8ee06a", "#d8e887", "#7bd3ff", "#f0a45e", "#cba8ff"]
1074
+
1075
+ def x_for(shift: int) -> float:
1076
+ return left + (shift - min_shift) / max(1, max_shift - min_shift) * plot_w
1077
+
1078
+ def y_for(mrr: float) -> float:
1079
+ return top + plot_h - mrr / max_mrr * plot_h
1080
+
1081
+ parts = [
1082
+ f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" viewBox="0 0 {width} {height}">',
1083
+ '<rect width="100%" height="100%" fill="#10160f"/>',
1084
+ '<text x="28" y="38" fill="#eef5e8" font-family="Inter, Arial" font-size="24" font-weight="700">Cross-Modal Alignment Stress Test</text>',
1085
+ '<text x="28" y="64" fill="#a7b5a3" font-family="Inter, Arial" font-size="13">Query features are shifted in time; the target visual window remains the original held-out window.</text>',
1086
+ f'<rect x="{left}" y="{top}" width="{plot_w}" height="{plot_h}" fill="#151d14" stroke="#34402f"/>',
1087
+ ]
1088
+ for tick in shifts:
1089
+ x = x_for(tick)
1090
+ parts.append(f'<line x1="{x:.2f}" y1="{top}" x2="{x:.2f}" y2="{top + plot_h}" stroke="#263024" stroke-width="1"/>')
1091
+ parts.append(f'<text x="{x:.2f}" y="{top + plot_h + 24}" fill="#a7b5a3" font-family="Inter, Arial" font-size="11" text-anchor="middle">{tick}</text>')
1092
+ parts.append(f'<text x="{left + plot_w / 2}" y="{height - 48}" fill="#cbd8c8" font-family="Inter, Arial" font-size="13" text-anchor="middle">shift in windows</text>')
1093
+ parts.append(f'<text x="30" y="{top + plot_h / 2}" fill="#cbd8c8" font-family="Inter, Arial" font-size="13" transform="rotate(-90 30 {top + plot_h / 2})">MRR</text>')
1094
+
1095
+ for gi, group in enumerate(groups):
1096
+ color = palette[gi % len(palette)]
1097
+ group_rows = sorted([r for r in rows if r["query_group"] == group], key=lambda r: int(r["shift_windows"]))
1098
+ points = [(x_for(int(r["shift_windows"])), y_for(float(r["mrr"]))) for r in group_rows]
1099
+ if points:
1100
+ d = " ".join(f"{x:.2f},{y:.2f}" for x, y in points)
1101
+ parts.append(f'<polyline points="{d}" fill="none" stroke="{color}" stroke-width="2.4"/>')
1102
+ for x, y in points:
1103
+ parts.append(f'<circle cx="{x:.2f}" cy="{y:.2f}" r="4" fill="{color}"/>')
1104
+ parts.append(f'<rect x="{left + plot_w + 28}" y="{top + gi * 25}" width="12" height="12" fill="{color}"/>')
1105
+ parts.append(f'<text x="{left + plot_w + 46}" y="{top + 11 + gi * 25}" fill="#e7efe2" font-family="Inter, Arial" font-size="12">{html.escape(GROUP_DISPLAY.get(group, group))}</text>')
1106
+ parts.append("</svg>")
1107
+ write_text(path, "\n".join(parts))
1108
+
1109
+
1110
+ def write_alignment_report(rows: list[dict], path: Path) -> None:
1111
+ lines = [
1112
+ "# Cross-Modal Alignment Stress Report",
1113
+ "",
1114
+ "This diagnostic uses real held-out feature windows, then deliberately shifts the query modality in time at evaluation. The perturbation is derived; it is not treated as observed data.",
1115
+ "",
1116
+ "## Zero-Shift Versus Worst Shift",
1117
+ "",
1118
+ ]
1119
+ for group in sorted({r["query_group"] for r in rows}):
1120
+ group_rows = [r for r in rows if r["query_group"] == group]
1121
+ zero = next((r for r in group_rows if int(r["shift_windows"]) == 0), None)
1122
+ worst = min(group_rows, key=lambda r: float(r["mrr"])) if group_rows else None
1123
+ if zero and worst:
1124
+ lines.append(
1125
+ f"- {GROUP_DISPLAY.get(group, group)}: zero-shift MRR={float(zero['mrr']):.4f}; "
1126
+ f"worst shift={worst['shift_windows']} windows, MRR={float(worst['mrr']):.4f}"
1127
+ )
1128
+ lines.extend(
1129
+ [
1130
+ "",
1131
+ "## Files",
1132
+ "",
1133
+ "- `alignment_shift_metrics.csv`: MRR/rank metrics for each query group and time shift.",
1134
+ "- `alignment_shift_curves.svg`: MRR curves across time shifts.",
1135
+ "- `alignment_stress_summary.json`: perturbation definition and status.",
1136
+ ]
1137
+ )
1138
+ write_text(path, "\n".join(lines) + "\n")
1139
+
1140
+
1141
+ def build_provenance(
1142
+ suite_dir: Path,
1143
+ out_dir: Path,
1144
+ X: np.ndarray,
1145
+ starts: np.ndarray,
1146
+ ends: np.ndarray,
1147
+ manifest: list[dict],
1148
+ summary: dict,
1149
+ annotation: Path | None = None,
1150
+ ) -> dict:
1151
+ repo_root = suite_dir.parent.parent.resolve()
1152
+ input_files = [
1153
+ suite_dir / "shared_windows.npz",
1154
+ suite_dir / "windows.csv",
1155
+ suite_dir / "feature_manifest.json",
1156
+ suite_dir / "summary_report.json",
1157
+ suite_dir / "transition_detection/true_boundaries.csv",
1158
+ ]
1159
+ for task in ["timeline_action", "timeline_subtask", "transition_detection", "next_action", "contact_prediction", "object_relevance"]:
1160
+ pred_path = suite_dir / task / "predictions.csv"
1161
+ if pred_path.exists():
1162
+ input_files.append(pred_path)
1163
+ if annotation is not None and annotation.exists():
1164
+ input_files.append(annotation)
1165
+ provenance = {
1166
+ "artifact_policy": "Only existing local artifacts are consumed. Missing labels/tasks are marked not_computed instead of filled.",
1167
+ "source_suite_dir": public_artifact_path(suite_dir, repo_root),
1168
+ "output_dir": public_artifact_path(out_dir, repo_root),
1169
+ "shared_windows_shape": [int(X.shape[0]), int(X.shape[1])],
1170
+ "starts_first_last": [int(starts[0]), int(starts[-1])],
1171
+ "ends_first_last": [int(ends[0]), int(ends[-1])],
1172
+ "feature_blocks": manifest,
1173
+ "summary_report_core": {
1174
+ "num_windows": summary.get("num_windows"),
1175
+ "feature_dim": summary.get("feature_dim"),
1176
+ "window_frames": summary.get("window_frames"),
1177
+ "stride_frames": summary.get("stride_frames"),
1178
+ "annotation": public_source_reference(summary.get("annotation")),
1179
+ },
1180
+ "input_file_hashes": {
1181
+ public_artifact_path(path, repo_root): sha256(path)
1182
+ for path in input_files
1183
+ if path.exists()
1184
+ },
1185
+ }
1186
+ write_json(out_dir / "provenance.json", provenance)
1187
+ return provenance
1188
+
1189
+
1190
+ def write_index(out_dir: Path, provenance: dict, ablation_rows: list[dict], timeline_rows: list[dict], stress_rows: list[dict]) -> None:
1191
+ lines = [
1192
+ "# Single-Episode Diagnostics Index",
1193
+ "",
1194
+ "These outputs are local diagnostics built from the existing one-episode Xperience-10M artifacts. They are designed for manual verification while waiting for full multi-episode data access.",
1195
+ "",
1196
+ "## Generated Analyses",
1197
+ "",
1198
+ "- `modality_ablation/`: compact ridge-head ablations across real feature blocks.",
1199
+ "- `timeline_overlay/`: existing prediction CSVs aligned to the episode timeline.",
1200
+ "- `alignment_stress/`: cross-modal retrieval under explicit time-shift perturbations.",
1201
+ "- `provenance.json`: input hashes, feature dimensions, and source artifact identifiers.",
1202
+ "",
1203
+ "## Validity Boundaries",
1204
+ "",
1205
+ "- This is a single-episode diagnostic, not a full Xperience-10M benchmark.",
1206
+ "- Rows marked `not_computed` are intentionally left blank when train labels or valid splits are unavailable.",
1207
+ "- Rows marked `derived_perturbation` use real features with deliberate time shifts for stress testing.",
1208
+ "",
1209
+ "## Counts",
1210
+ "",
1211
+ f"- Ablation rows: {len(ablation_rows)}; computed: {sum(1 for r in ablation_rows if r.get('status') == 'computed')}.",
1212
+ f"- Timeline overlay rows: {sum(1 for r in timeline_rows if r.get('status') == 'observed_prediction')}.",
1213
+ f"- Alignment stress rows: {len(stress_rows)}.",
1214
+ f"- Shared feature shape: {provenance['shared_windows_shape'][0]} windows x {provenance['shared_windows_shape'][1]} features.",
1215
+ ]
1216
+ write_text(out_dir / "README.md", "\n".join(lines) + "\n")
1217
+
1218
+
1219
+ def main() -> None:
1220
+ args = parse_args()
1221
+ suite_dir = args.suite_dir.resolve()
1222
+ out_dir = args.output_dir.resolve()
1223
+ X, starts, ends, windows, manifest, summary = load_inputs(suite_dir)
1224
+ object_targets = None
1225
+ if args.annotation is not None:
1226
+ object_targets = load_object_targets_from_annotation(args.annotation, windows, args.homie_toolkit)
1227
+ write_csv(
1228
+ out_dir / "object_labels/window_object_labels.csv",
1229
+ object_targets["rows"],
1230
+ ["window_index", "start_frame", "end_frame", "center_frame", "objects", "object_count"],
1231
+ )
1232
+ write_json(
1233
+ out_dir / "object_labels/object_vocab.json",
1234
+ {
1235
+ "vocab": object_targets["vocab"],
1236
+ "num_objects": len(object_targets["vocab"]),
1237
+ "source_annotation": object_targets["annotation"],
1238
+ "source_toolkit": object_targets["toolkit"],
1239
+ "source_note": object_targets["source_note"],
1240
+ },
1241
+ )
1242
+ provenance = build_provenance(suite_dir, out_dir, X, starts, ends, manifest, summary, args.annotation)
1243
+ ablation_rows = run_modality_ablation(X, windows, manifest, suite_dir, out_dir, args, object_targets)
1244
+ timeline_rows = run_timeline_overlay(suite_dir, windows, out_dir)
1245
+ stress_rows = run_alignment_stress(X, manifest, windows, out_dir, args)
1246
+ write_index(out_dir, provenance, ablation_rows, timeline_rows, stress_rows)
1247
+ print(f"Wrote diagnostics to {out_dir}")
1248
+ print(f"Ablation computed rows: {sum(1 for r in ablation_rows if r.get('status') == 'computed')}/{len(ablation_rows)}")
1249
+ print(f"Timeline observed rows: {sum(1 for r in timeline_rows if r.get('status') == 'observed_prediction')}")
1250
+ print(f"Alignment stress rows: {len(stress_rows)}")
1251
+
1252
+
1253
+ if __name__ == "__main__":
1254
+ main()
scripts/validate_mirror_parity.py CHANGED
@@ -41,6 +41,7 @@ DATA_FILES = [
41
  "research_direction_extensions.json",
42
  "research_directions.json",
43
  "scope_claims_audit.json",
 
44
  "source_alignment_audit.json",
45
  "summary_metrics.json",
46
  "task_surface_integrity.json",
@@ -77,7 +78,9 @@ SCRIPT_FILES = [
77
  "build_quality_gates.py",
78
  "build_public_surface_qa.py",
79
  "build_rendered_site_check.py",
 
80
  "build_research_takeaways.py",
 
81
  "verify_live_publication.py",
82
  "validate_mirror_parity.py",
83
  "validate_publication_package.py",
@@ -92,9 +95,22 @@ WEBSITE_FILES = [
92
  "apple-touch-icon.png",
93
  "favicon.png",
94
  "index.html",
 
95
  "site.webmanifest",
96
  ]
97
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  DOC_FILES = [
99
  "QUALITY_GATES.md",
100
  "EVALUATION_PROTOCOL.md",
@@ -236,6 +252,20 @@ def build_report(hf_root: Path) -> dict:
236
  )
237
  )
238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  for filename in DOC_FILES:
240
  groups.append(
241
  parity_group(
@@ -293,6 +323,12 @@ def build_report(hf_root: Path) -> dict:
293
  if not any(failure["group"].startswith("website/") for failure in failures)
294
  else "fail",
295
  },
 
 
 
 
 
 
296
  {
297
  "name": "repo_hf_quality_doc_parity",
298
  "status": "pass"
 
41
  "research_direction_extensions.json",
42
  "research_directions.json",
43
  "scope_claims_audit.json",
44
+ "single_episode_explorer.json",
45
  "source_alignment_audit.json",
46
  "summary_metrics.json",
47
  "task_surface_integrity.json",
 
78
  "build_quality_gates.py",
79
  "build_public_surface_qa.py",
80
  "build_rendered_site_check.py",
81
+ "build_single_episode_explorer.py",
82
  "build_research_takeaways.py",
83
+ "single_episode_diagnostics.py",
84
  "verify_live_publication.py",
85
  "validate_mirror_parity.py",
86
  "validate_publication_package.py",
 
95
  "apple-touch-icon.png",
96
  "favicon.png",
97
  "index.html",
98
+ "single_episode_explorer.html",
99
  "site.webmanifest",
100
  ]
101
 
102
+ RESULT_FILES = [
103
+ "single_episode_diagnostics/provenance.json",
104
+ "single_episode_diagnostics/README.md",
105
+ "single_episode_diagnostics/modality_ablation/ablation_metrics.csv",
106
+ "single_episode_diagnostics/modality_ablation/ablation_summary.json",
107
+ "single_episode_diagnostics/object_labels/object_vocab.json",
108
+ "single_episode_diagnostics/object_labels/window_object_labels.csv",
109
+ "single_episode_diagnostics/timeline_overlay/timeline_overlay.csv",
110
+ "single_episode_diagnostics/alignment_stress/alignment_shift_metrics.csv",
111
+ "single_episode_diagnostics/alignment_stress/alignment_stress_summary.json",
112
+ ]
113
+
114
  DOC_FILES = [
115
  "QUALITY_GATES.md",
116
  "EVALUATION_PROTOCOL.md",
 
252
  )
253
  )
254
 
255
+ for filename in RESULT_FILES:
256
+ groups.append(
257
+ parity_group(
258
+ f"results/{filename}",
259
+ ROOT / "results" / filename,
260
+ {
261
+ "hf_space": hf_root / "space/results" / filename,
262
+ "hf_artifacts": hf_root / "artifacts/results" / filename,
263
+ "hf_model": hf_root / "model/results" / filename,
264
+ },
265
+ hf_root,
266
+ )
267
+ )
268
+
269
  for filename in DOC_FILES:
270
  groups.append(
271
  parity_group(
 
323
  if not any(failure["group"].startswith("website/") for failure in failures)
324
  else "fail",
325
  },
326
+ {
327
+ "name": "repo_hf_diagnostic_result_parity",
328
+ "status": "pass"
329
+ if not any(failure["group"].startswith("results/") for failure in failures)
330
+ else "fail",
331
+ },
332
  {
333
  "name": "repo_hf_quality_doc_parity",
334
  "status": "pass"
single_episode_explorer.html ADDED
The diff for this file is too large to render. See raw diff