DarthSoluke commited on
Commit
271b60d
·
verified ·
1 Parent(s): 831819e

Refresh actual terminal progress and distinguish generation completion

Browse files
README.md CHANGED
@@ -74,5 +74,8 @@ python3 -m http.server 8767 --bind 127.0.0.1
74
  页面保留最近一次成功快照,不把网络失败当成进度归零。执行修订不等于数据发布版本。
75
 
76
  状态发布器保留在内部工作区,复用原有SSH master;HF凭据不进入浏览器或PRO。
 
 
 
77
  公开Space仅包含静态页面、脱敏摘要、样例与读取器,没有生产控制API。
78
  维护者本机睡眠或发布器结束会导致公开进度过期,不代表远端生产已经停止。
 
74
  页面保留最近一次成功快照,不把网络失败当成进度归零。执行修订不等于数据发布版本。
75
 
76
  状态发布器保留在内部工作区,复用原有SSH master;HF凭据不进入浏览器或PRO。
77
+ 连接丢失后,发布器在本机互斥锁下重建同一个配置的master;存在匹配的活进程或
78
+ 残留socket时不另开连接、不删除socket。发布器保持原有限截止时间,可用`--until`
79
+ 指定恢复时不得延长的截止时间;不建立cron或新的聊天定时任务。
80
  公开Space仅包含静态页面、脱敏摘要、样例与读取器,没有生产控制API。
81
  维护者本机睡眠或发布器结束会导致公开进度过期,不代表远端生产已经停止。
data/egorender-progress.json CHANGED
@@ -1 +1 @@
1
- {"schema": "egorenderer.public_progress.v1", "collected_at": 1793561995.05394, "refresh_seconds": 60, "dataset_release": "V006", "execution_revision": "351", "queue_alive": true, "admission_held": false, "counts": {"complete": 159, "running": 8, "ready": 128, "failed": 6, "total": 301}, "scope": {"sources": 301, "source_frames": 218273, "variants": 1, "expected_variant_frames": 218273, "historical_extra_complete": 2, "cancelled_extra": 600}, "coverage": {"completed_variant_frames": 116068, "sources_with_any_variant": 159, "sources_with_all_variants": 159}, "throughput": {"packages_last_hour": 15, "queued_eta_hours": 9.1}, "training_ready": null, "known_gt_missing": [{"source": "arctic_s01_capsulemachine_grab_01", "variant": 1}, {"source": "arctic_s09_laptop_use_03", "variant": 1}], "auxiliary_fits": "PENDING_UPSTREAM_HANDOFF", "jobs": [{"source": "arctic_s01_laptop_use_04", "variant": 1, "state": "FAILED", "frames": 1012, "phase": "FAILED", "storage": null}, {"source": "arctic_s01_mixer_grab_01", "variant": 1, "state": "FAILED", "frames": 593, "phase": "FAILED", "storage": null}, {"source": "arctic_s01_mixer_use_01", "variant": 1, "state": "FAILED", "frames": 638, "phase": "FAILED", "storage": null}, {"source": "arctic_s01_waffleiron_grab_01", "variant": 1, "state": "FAILED", "frames": 600, "phase": "FAILED", "storage": null}, {"source": "arctic_s02_waffleiron_use_02", "variant": 1, "state": "FAILED", "frames": 652, "phase": "FAILED", "storage": null}, {"source": "arctic_s05_scissors_use_02", "variant": 1, "state": "FAILED", "frames": 687, "phase": "FAILED", "storage": "SSD"}, {"source": "arctic_s06_microwave_use_02", "variant": 1, "state": "RUNNING", "frames": 965, "phase": "VIDEO_POST_AND_DEPTH_OVERLAPPED", "storage": "NAS"}, {"source": "arctic_s06_mixer_grab_01", "variant": 1, "state": "RUNNING", "frames": 734, "phase": "VIDEO_POST_AND_DEPTH_OVERLAPPED", "storage": "NAS"}, {"source": "arctic_s06_notebook_use_02", "variant": 1, "state": "RUNNING", "frames": 624, "phase": "VIDEO_POST_AND_DEPTH_OVERLAPPED", "storage": "NAS"}, {"source": "arctic_s06_waffleiron_grab_01_retake", "variant": 1, "state": "RUNNING", "frames": 714, "phase": "VIDEO_POST_AND_DEPTH_OVERLAPPED", "storage": "SSD"}, {"source": "arctic_s06_waffleiron_use_01", "variant": 1, "state": "RUNNING", "frames": 690, "phase": "VIDEO_POST_AND_DEPTH_OVERLAPPED", "storage": "SSD"}, {"source": "arctic_s06_waffleiron_use_02", "variant": 1, "state": "RUNNING", "frames": 723, "phase": "CYCLES_OPTIX_16SPP_GPU_OIDN", "storage": "SSD"}, {"source": "arctic_s06_waffleiron_use_03", "variant": 1, "state": "RUNNING", "frames": 599, "phase": "CYCLES_OPTIX_16SPP_GPU_OIDN", "storage": "SSD"}, {"source": "arctic_s06_waffleiron_use_04", "variant": 1, "state": "RUNNING", "frames": 690, "phase": "CYCLES_OPTIX_16SPP_GPU_OIDN", "storage": "SSD"}], "recent": [{"at": 1793561827.8088584, "source": "arctic_s06_scissors_use_01", "variant": 1}, {"at": 1793561812.168203, "source": "arctic_s06_scissors_grab_01", "variant": 1}, {"at": 1793561764.1672587, "source": "arctic_s06_notebook_grab_01", "variant": 1}, {"at": 1793561725.8721547, "source": "arctic_s06_phone_use_01", "variant": 1}, {"at": 1793561483.8885045, "source": "arctic_s06_phone_use_02", "variant": 1}, {"at": 1793561214.4836638, "source": "arctic_s06_phone_grab_01", "variant": 1}, {"at": 1793560584.2242293, "source": "arctic_s06_notebook_use_01", "variant": 1}, {"at": 1793560423.6040416, "source": "arctic_s06_mixer_use_01", "variant": 1}], "hardware": {"gpus": [{"index": 0, "utilization": 41, "used_mib": 11422, "total_mib": 97887}, {"index": 1, "utilization": 46, "used_mib": 10731, "total_mib": 97887}, {"index": 2, "utilization": 92, "used_mib": 10735, "total_mib": 97887}, {"index": 3, "utilization": 73, "used_mib": 10739, "total_mib": 97887}], "cpu_percent": 26.9, "cpu_logical": 72}, "storage": {"ssd_available_gib": 1249.5, "nas_available_gib": 3830.4, "ssd_budget_gib": 896.0, "ssd_reserved_gib": 772.7, "nas_active": 3, "nas_limit": 4}, "hardcases": {"complete": 15, "expected": 15, "frames": 10838, "training_ready": false}, "oakink_assets": {"counts": {"COMPLETE": 571, "FAILED": 13, "READY": 38}, "total": 622, "final_render_count": null}, "history": [{"at": 1793560194.9028523, "complete": 152}, {"at": 1793560254.9093049, "complete": 153}, {"at": 1793560314.913588, "complete": 153}, {"at": 1793560374.9164462, "complete": 153}, {"at": 1793560434.9241967, "complete": 154}, {"at": 1793560494.9244776, "complete": 154}, {"at": 1793560554.929612, "complete": 154}, {"at": 1793560614.9338765, "complete": 155}, {"at": 1793560674.9339721, "complete": 155}, {"at": 1793560734.944439, "complete": 155}, {"at": 1793560794.9559937, "complete": 155}, {"at": 1793560854.9517612, "complete": 155}, {"at": 1793560914.9608405, "complete": 155}, {"at": 1793560974.9625483, "complete": 155}, {"at": 1793561034.9707916, "complete": 155}, {"at": 1793561094.970671, "complete": 155}, {"at": 1793561154.9777608, "complete": 155}, {"at": 1793561214.9871912, "complete": 156}, {"at": 1793561274.9890206, "complete": 156}, {"at": 1793561334.9856167, "complete": 156}, {"at": 1793561394.9947417, "complete": 156}, {"at": 1793561455.0131683, "complete": 156}, {"at": 1793561515.007791, "complete": 157}, {"at": 1793561575.010105, "complete": 157}, {"at": 1793561635.0153518, "complete": 157}, {"at": 1793561695.0213096, "complete": 157}, {"at": 1793561755.0185287, "complete": 156}, {"at": 1793561815.0226088, "complete": 158}, {"at": 1793561875.039098, "complete": 159}, {"at": 1793561935.036926, "complete": 159}, {"at": 1793561995.05394, "complete": 159}]}
 
1
+ {"schema": "egorenderer.public_progress.v1", "collected_at": 1793603390.1547627, "refresh_seconds": 60, "dataset_release": "V006", "execution_revision": "353", "queue_alive": false, "admission_held": false, "counts": {"complete": 301, "running": 0, "ready": 0, "failed": 0, "total": 301}, "scope": {"sources": 301, "source_frames": 218273, "variants": 1, "expected_variant_frames": 218273, "historical_extra_complete": 2, "cancelled_extra": 600}, "coverage": {"completed_variant_frames": 218273, "sources_with_any_variant": 301, "sources_with_all_variants": 301}, "throughput": {"packages_last_hour": 1, "queued_eta_hours": null}, "training_ready": null, "known_gt_missing": [{"source": "arctic_s01_capsulemachine_grab_01", "variant": 1}, {"source": "arctic_s09_laptop_use_03", "variant": 1}], "auxiliary_fits": "PENDING_UPSTREAM_HANDOFF", "jobs": [], "recent": [{"at": 1793599829.9072523, "source": "arctic_s10_laptop_use_02", "variant": 1}, {"at": 1793599581.3385708, "source": "arctic_s10_notebook_use_02", "variant": 1}, {"at": 1793599567.6335635, "source": "arctic_s10_waffleiron_use_02", "variant": 1}, {"at": 1793599500.593456, "source": "arctic_s10_waffleiron_grab_01", "variant": 1}, {"at": 1793599276.667639, "source": "arctic_s10_phone_grab_01", "variant": 1}, {"at": 1793599134.962276, "source": "arctic_s10_phone_use_02", "variant": 1}, {"at": 1793598927.6839998, "source": "arctic_s10_waffleiron_use_01", "variant": 1}, {"at": 1793598411.1581776, "source": "arctic_s10_phone_use_01_retake", "variant": 1}], "hardware": {"gpus": [{"index": 0, "utilization": 0, "used_mib": 423, "total_mib": 97887}, {"index": 1, "utilization": 0, "used_mib": 2, "total_mib": 97887}, {"index": 2, "utilization": 0, "used_mib": 3, "total_mib": 97887}, {"index": 3, "utilization": 0, "used_mib": 3, "total_mib": 97887}], "cpu_percent": 4.5, "cpu_logical": 72}, "storage": {"ssd_available_gib": 1256.6, "nas_available_gib": 2762.9, "ssd_budget_gib": 896.0, "ssd_reserved_gib": 3.5, "nas_active": 0, "nas_limit": 4}, "hardcases": {"complete": 15, "expected": 15, "frames": 10838, "training_ready": false}, "oakink_assets": {"counts": {"COMPLETE": 571, "FAILED": 13, "READY": 38}, "total": 622, "final_render_count": null}, "history": [{"at": 1793585572.6428823, "complete": 238}, {"at": 1793585632.6541576, "complete": 238}, {"at": 1793585692.64007, "complete": 238}, {"at": 1793585752.6562395, "complete": 238}, {"at": 1793585812.6489515, "complete": 238}, {"at": 1793585872.6555843, "complete": 238}, {"at": 1793585932.6725898, "complete": 238}, {"at": 1793585992.67241, "complete": 238}, {"at": 1793586052.6740882, "complete": 240}, {"at": 1793586112.6896026, "complete": 240}, {"at": 1793586172.6817977, "complete": 240}, {"at": 1793586232.6999586, "complete": 240}, {"at": 1793586292.6935673, "complete": 240}, {"at": 1793586352.7005577, "complete": 241}, {"at": 1793586412.698628, "complete": 241}, {"at": 1793586472.7076387, "complete": 241}, {"at": 1793586532.7080545, "complete": 242}, {"at": 1793586592.7165608, "complete": 242}, {"at": 1793586652.7186508, "complete": 242}, {"at": 1793586712.7307124, "complete": 244}, {"at": 1793586772.7324688, "complete": 244}, {"at": 1793586832.732423, "complete": 244}, {"at": 1793586892.7384965, "complete": 244}, {"at": 1793586952.73996, "complete": 244}, {"at": 1793587012.7585795, "complete": 246}, {"at": 1793587072.7481163, "complete": 246}, {"at": 1793587132.7537265, "complete": 246}, {"at": 1793587192.766892, "complete": 246}, {"at": 1793587252.7595913, "complete": 246}, {"at": 1793587312.76958, "complete": 246}, {"at": 1793587372.768897, "complete": 247}, {"at": 1793587432.7750099, "complete": 247}, {"at": 1793587492.7745407, "complete": 247}, {"at": 1793587552.7930424, "complete": 247}, {"at": 1793587612.8053164, "complete": 247}, {"at": 1793587672.7856402, "complete": 247}, {"at": 1793587732.7871742, "complete": 247}, {"at": 1793587792.8020053, "complete": 247}, {"at": 1793587852.7928832, "complete": 247}, {"at": 1793587912.796153, "complete": 247}, {"at": 1793587972.8033156, "complete": 248}, {"at": 1793588032.8107262, "complete": 248}, {"at": 1793588092.804908, "complete": 248}, {"at": 1793588152.8170915, "complete": 249}, {"at": 1793588212.8319278, "complete": 249}, {"at": 1793588272.8149095, "complete": 249}, {"at": 1793588332.8232622, "complete": 250}, {"at": 1793588392.8363435, "complete": 250}, {"at": 1793588452.826002, "complete": 250}, {"at": 1793588512.8354306, "complete": 250}, {"at": 1793588572.8402731, "complete": 250}, {"at": 1793588632.8354247, "complete": 250}, {"at": 1793588692.8391652, "complete": 250}, {"at": 1793588752.84502, "complete": 250}, {"at": 1793588812.846456, "complete": 250}, {"at": 1793588872.853451, "complete": 250}, {"at": 1793588932.857277, "complete": 251}, {"at": 1793588992.8619945, "complete": 252}, {"at": 1793589052.8602152, "complete": 252}, {"at": 1793589112.8695726, "complete": 253}, {"at": 1793589172.8678432, "complete": 253}, {"at": 1793589232.8858323, "complete": 253}, {"at": 1793589292.878223, "complete": 253}, {"at": 1793589352.87894, "complete": 253}, {"at": 1793589412.8853755, "complete": 254}, {"at": 1793589472.8892503, "complete": 255}, {"at": 1793589532.8936496, "complete": 255}, {"at": 1793589592.9017978, "complete": 255}, {"at": 1793589652.9032779, "complete": 255}, {"at": 1793589712.9053748, "complete": 256}, {"at": 1793589772.911792, "complete": 256}, {"at": 1793589832.9077463, "complete": 256}, {"at": 1793589892.9143932, "complete": 256}, {"at": 1793589952.9186475, "complete": 256}, {"at": 1793590012.9178839, "complete": 256}, {"at": 1793590072.917188, "complete": 258}, {"at": 1793590132.920904, "complete": 258}, {"at": 1793590192.9273474, "complete": 258}, {"at": 1793590252.925796, "complete": 258}, {"at": 1793590312.9291472, "complete": 258}, {"at": 1793590372.9324937, "complete": 259}, {"at": 1793590432.9325993, "complete": 259}, {"at": 1793590492.9385545, "complete": 259}, {"at": 1793590552.9388545, "complete": 259}, {"at": 1793590612.949204, "complete": 259}, {"at": 1793590672.948536, "complete": 259}, {"at": 1793590732.946759, "complete": 259}, {"at": 1793590792.9570494, "complete": 260}, {"at": 1793590852.9840841, "complete": 260}, {"at": 1793590912.9737308, "complete": 260}, {"at": 1793590972.9717226, "complete": 260}, {"at": 1793591032.988772, "complete": 260}, {"at": 1793591092.9769633, "complete": 260}, {"at": 1793591152.9761393, "complete": 260}, {"at": 1793591212.9866748, "complete": 260}, {"at": 1793591272.9835074, "complete": 260}, {"at": 1793591332.9883168, "complete": 260}, {"at": 1793591392.992159, "complete": 261}, {"at": 1793591452.9865608, "complete": 261}, {"at": 1793591512.994905, "complete": 261}, {"at": 1793591572.9926765, "complete": 261}, {"at": 1793591633.0139134, "complete": 262}, {"at": 1793591693.0181448, "complete": 262}, {"at": 1793591753.01163, "complete": 262}, {"at": 1793591813.0136478, "complete": 262}, {"at": 1793591873.0142226, "complete": 263}, {"at": 1793591933.0351496, "complete": 263}, {"at": 1793591993.0256884, "complete": 263}, {"at": 1793592053.0333943, "complete": 263}, {"at": 1793592113.0402043, "complete": 263}, {"at": 1793592173.044423, "complete": 264}, {"at": 1793602949.75292, "complete": 301}, {"at": 1793603009.8428822, "complete": 301}, {"at": 1793603069.835964, "complete": 301}, {"at": 1793603129.775828, "complete": 301}, {"at": 1793603189.767979, "complete": 301}, {"at": 1793603249.8072236, "complete": 301}, {"at": 1793603270.3492634, "complete": 301}, {"at": 1793603330.1520753, "complete": 301}, {"at": 1793603390.1547627, "complete": 301}]}
deployment_manifest.json CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "repo_id": "DarthSoluke/EgoNetDatasetResearch",
3
  "repo_type": "space",
4
- "base_revision": "8d93a57090e6db66b8458c8687d18a34a60d761a",
5
  "sdk": "static",
6
  "app_file": "index.html",
7
  "original_archive_sha256": "9d437cf8f781dd25354e3de6bdccf4a3e63c5eeb01efab5943ecfee709769160",
@@ -22,8 +22,8 @@
22
  },
23
  {
24
  "path": "README.md",
25
- "bytes": 3294,
26
- "sha256": "2247d72efcf90abf850a5f3d56cd9b12eff7e5dedd349ebd878a5f7e6ecd72f1"
27
  },
28
  {
29
  "path": "data/datasets.json",
@@ -32,8 +32,8 @@
32
  },
33
  {
34
  "path": "data/egorender-progress.json",
35
- "bytes": 5603,
36
- "sha256": "02bf0d363d76e2a3d34e4513726d754d6cfa2f5c79e99e54867da97e6a4ef960"
37
  },
38
  {
39
  "path": "data/egorender-registry.json",
@@ -87,8 +87,8 @@
87
  },
88
  {
89
  "path": "index.html",
90
- "bytes": 3178,
91
- "sha256": "894b4eee33fcb11bda457d48975cc2b3914f46f6d4d793e371f9c95930ab840b"
92
  },
93
  {
94
  "path": "media/.gitkeep",
@@ -1442,8 +1442,8 @@
1442
  },
1443
  {
1444
  "path": "src/app.js",
1445
- "bytes": 6506,
1446
- "sha256": "a0633061ef30f26537a2b7bc9e37f2b2de99c3d628ddd1b403a38c26a77884e5"
1447
  },
1448
  {
1449
  "path": "src/catalog.js",
@@ -1452,8 +1452,8 @@
1452
  },
1453
  {
1454
  "path": "src/page.html",
1455
- "bytes": 3178,
1456
- "sha256": "894b4eee33fcb11bda457d48975cc2b3914f46f6d4d793e371f9c95930ab840b"
1457
  },
1458
  {
1459
  "path": "src/preview.js",
@@ -1477,8 +1477,8 @@
1477
  },
1478
  {
1479
  "path": "src/synthetic.js",
1480
- "bytes": 21637,
1481
- "sha256": "67e77d3ffd68d456c06224aece4028f5cf8c2e48e1d0a8628fd6656aa18db30e"
1482
  },
1483
  {
1484
  "path": "src/ui.js",
@@ -1556,5 +1556,12 @@
1556
  },
1557
  "dataset_content_changed": false,
1558
  "production_changes": false
 
 
 
 
 
 
 
1559
  }
1560
  }
 
1
  {
2
  "repo_id": "DarthSoluke/EgoNetDatasetResearch",
3
  "repo_type": "space",
4
+ "base_revision": "831819ed416a0fade2cb3295a0035719b9c897bf",
5
  "sdk": "static",
6
  "app_file": "index.html",
7
  "original_archive_sha256": "9d437cf8f781dd25354e3de6bdccf4a3e63c5eeb01efab5943ecfee709769160",
 
22
  },
23
  {
24
  "path": "README.md",
25
+ "bytes": 3598,
26
+ "sha256": "1d289040ec8c0c72a8976104f859a76f8d26dabf8af2d456a30c4278f293f918"
27
  },
28
  {
29
  "path": "data/datasets.json",
 
32
  },
33
  {
34
  "path": "data/egorender-progress.json",
35
+ "bytes": 7585,
36
+ "sha256": "2eb9a5a7c3382f0476e737a0f70699059679215e228a0a56bf341e2ccf8a42e4"
37
  },
38
  {
39
  "path": "data/egorender-registry.json",
 
87
  },
88
  {
89
  "path": "index.html",
90
+ "bytes": 3182,
91
+ "sha256": "626d0f1927867c59aab0fdbc78e4eab47f4b9d7b81d39bcd90beb4df77630ba2"
92
  },
93
  {
94
  "path": "media/.gitkeep",
 
1442
  },
1443
  {
1444
  "path": "src/app.js",
1445
+ "bytes": 6510,
1446
+ "sha256": "33caa2d1f44b946ce4c65afc8d5ecc7e74511ee8c8aeed1ba153440b9181154a"
1447
  },
1448
  {
1449
  "path": "src/catalog.js",
 
1452
  },
1453
  {
1454
  "path": "src/page.html",
1455
+ "bytes": 3182,
1456
+ "sha256": "626d0f1927867c59aab0fdbc78e4eab47f4b9d7b81d39bcd90beb4df77630ba2"
1457
  },
1458
  {
1459
  "path": "src/preview.js",
 
1477
  },
1478
  {
1479
  "path": "src/synthetic.js",
1480
+ "bytes": 22043,
1481
+ "sha256": "a0f5a76e4d30aebb785765eaceb72406c0108f903ece0fb1fa3aad07ad58cb38"
1482
  },
1483
  {
1484
  "path": "src/ui.js",
 
1556
  },
1557
  "dataset_content_changed": false,
1558
  "production_changes": false
1559
+ },
1560
+ "progress_recovery": {
1561
+ "updated": "2026-11-02",
1562
+ "snapshot_collected_at": 1793603390.1547627,
1563
+ "natural_generation_completion_label": true,
1564
+ "training_complete": false,
1565
+ "production_changes": false
1566
  }
1567
  }
index.html CHANGED
@@ -16,7 +16,7 @@
16
  <link rel="stylesheet" href="src/styles.css" />
17
  <link rel="stylesheet" href="src/synthetic.css?v=dataset-first-20261102" />
18
  <script src="src/vendor/lucide.min.js" defer></script>
19
- <script type="module" src="src/app.js?v=dataset-first-20261102"></script>
20
  </head>
21
  <body>
22
  <a class="skip-link" href="#app">跳到内容</a>
 
16
  <link rel="stylesheet" href="src/styles.css" />
17
  <link rel="stylesheet" href="src/synthetic.css?v=dataset-first-20261102" />
18
  <script src="src/vendor/lucide.min.js" defer></script>
19
+ <script type="module" src="src/app.js?v=progress-recovery-20261102"></script>
20
  </head>
21
  <body>
22
  <a class="skip-link" href="#app">跳到内容</a>
src/app.js CHANGED
@@ -8,7 +8,7 @@ import {
8
  bindDetail,
9
  } from "./catalog.js";
10
  import { methodsView, somaView, samplesView } from "./reference.js";
11
- import synthetic from "./synthetic.js?v=dataset-first-20261102";
12
 
13
  const app = document.getElementById("app");
14
  let context;
 
8
  bindDetail,
9
  } from "./catalog.js";
10
  import { methodsView, somaView, samplesView } from "./reference.js";
11
+ import synthetic from "./synthetic.js?v=progress-recovery-20261102";
12
 
13
  const app = document.getElementById("app");
14
  let context;
src/page.html CHANGED
@@ -16,7 +16,7 @@
16
  <link rel="stylesheet" href="src/styles.css" />
17
  <link rel="stylesheet" href="src/synthetic.css?v=dataset-first-20261102" />
18
  <script src="src/vendor/lucide.min.js" defer></script>
19
- <script type="module" src="src/app.js?v=dataset-first-20261102"></script>
20
  </head>
21
  <body>
22
  <a class="skip-link" href="#app">跳到内容</a>
 
16
  <link rel="stylesheet" href="src/styles.css" />
17
  <link rel="stylesheet" href="src/synthetic.css?v=dataset-first-20261102" />
18
  <script src="src/vendor/lucide.min.js" defer></script>
19
+ <script type="module" src="src/app.js?v=progress-recovery-20261102"></script>
20
  </head>
21
  <body>
22
  <a class="skip-link" href="#app">跳到内容</a>
src/synthetic.js CHANGED
@@ -76,6 +76,24 @@ function progressView() {
76
  <details class="reference-details"><summary>主机与存储</summary><div id="synth-resources" class="synth-resource"></div><div id="synth-storage" class="synth-facts"></div></details>
77
  ${section("最近归档", '<div id="synth-recent"></div>')}`;
78
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  function updateFreshness(error) {
80
  if (!root) return;
81
  const status = root.querySelector("#synth-status"),
@@ -85,23 +103,9 @@ function updateFreshness(error) {
85
  label.textContent = error ? "状态暂不可用" : "读取快照";
86
  return;
87
  }
88
- const stale = Date.now() / 1000 - snapshot.collected_at > 180;
89
- status.dataset.state =
90
- error || stale
91
- ? "stale"
92
- : snapshot.queue_alive && !snapshot.admission_held
93
- ? "live"
94
- : "stopped";
95
- label.textContent =
96
- (error
97
- ? "连接中断 · "
98
- : stale
99
- ? "更新已过期 · "
100
- : !snapshot.queue_alive
101
- ? "队列已停 · "
102
- : snapshot.admission_held
103
- ? "暂停新增 · "
104
- : "") + clock(snapshot.collected_at);
105
  root.querySelector("#synth-execution").textContent =
106
  "执行 " + snapshot.execution_revision;
107
  }
 
76
  <details class="reference-details"><summary>主机与存储</summary><div id="synth-resources" class="synth-resource"></div><div id="synth-storage" class="synth-facts"></div></details>
77
  ${section("最近归档", '<div id="synth-recent"></div>')}`;
78
  }
79
+ export function progressState(value, error = false, now = Date.now() / 1000) {
80
+ if (!value)
81
+ return { state: "error", prefix: error ? "状态暂不可用" : "读取快照" };
82
+ if (error) return { state: "stale", prefix: "连接中断 · " };
83
+ if (now - value.collected_at > 180)
84
+ return { state: "stale", prefix: "更新已过期 · " };
85
+ const c = value.counts;
86
+ if (
87
+ c.complete === c.total &&
88
+ c.running === 0 &&
89
+ c.ready === 0 &&
90
+ c.failed === 0
91
+ )
92
+ return { state: "complete", prefix: "生成队列结束 · " };
93
+ if (!value.queue_alive) return { state: "stopped", prefix: "队列已停 · " };
94
+ if (value.admission_held) return { state: "stopped", prefix: "暂停新增 · " };
95
+ return { state: "live", prefix: "" };
96
+ }
97
  function updateFreshness(error) {
98
  if (!root) return;
99
  const status = root.querySelector("#synth-status"),
 
103
  label.textContent = error ? "状态暂不可用" : "读取快照";
104
  return;
105
  }
106
+ const display = progressState(snapshot, error);
107
+ status.dataset.state = display.state;
108
+ label.textContent = display.prefix + clock(snapshot.collected_at);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  root.querySelector("#synth-execution").textContent =
110
  "执行 " + snapshot.execution_revision;
111
  }