{
 "schema": "hub/data-heartbeat/1",
 "generated_at": "2026-11-07T02:30:02+08:00",
 "generated_ts": 1793989802,
 "collector": "/opt/internal_board/check_data_heartbeat.py · crontab */30",
 "page": "/internal/hub/",
 "rules": {
  "5min": "超过 30 分钟没动 = 超期",
  "10min": "超过 60 分钟没动 = 超期",
  "30min": "超过 3 小时没动 = 超期",
  "daily": "超过 36 小时没动 = 超期",
  "manual": "没有定时任务 —— 记龄期但不报警（这批就是「没心跳」的名单）"
 },
 "summary": {
  "total": 49,
  "正常": 24,
  "超期": 9,
  "无定时": 16,
  "未知": 0
 },
 "overdue": [
  {
   "path": "/root/chains/A.json",
   "url": "",
   "mtime": "2026-10-16 18:08:53",
   "age": "21.3 天",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/B.json",
   "url": "",
   "mtime": "2026-10-16 18:08:53",
   "age": "21.3 天",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/C.json",
   "url": "",
   "mtime": "2026-10-16 18:08:53",
   "age": "21.3 天",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/D.json",
   "url": "",
   "mtime": "2026-10-16 18:08:53",
   "age": "21.3 天",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/E.json",
   "url": "",
   "mtime": "2026-10-16 18:08:53",
   "age": "21.3 天",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/F.json",
   "url": "",
   "mtime": "2026-10-16 18:08:53",
   "age": "21.3 天",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/mnt/data/www/internal/hub/learn.json",
   "url": "/internal/hub/learn.json",
   "mtime": "2026-10-27 18:00:38",
   "age": "10.4 天",
   "why": "应有周期 30min，宽限 3.0 小时，实际 10.4 天 没动"
  },
  {
   "path": "/mnt/data/www/learn/daily/data.json",
   "url": "/learn/daily/data.json",
   "mtime": "2026-10-27 18:00:38",
   "age": "10.4 天",
   "why": "应有周期 30min，宽限 3.0 小时，实际 10.4 天 没动"
  },
  {
   "path": "/mnt/data/www/workflow-map/learn_stats.json",
   "url": "/workflow-map/learn_stats.json",
   "mtime": "2026-10-27 18:20:09",
   "age": "10.3 天",
   "why": "应有周期 10min，宽限 1.0 小时，实际 10.3 天 没动"
  }
 ],
 "no_schedule": [
  {
   "path": "/mnt/data/www/internal/data/parts.json",
   "url": "/internal/data/parts.json",
   "generator": "手工（collect_parts.py 只读它）",
   "mtime": "2026-09-19 10:27:56",
   "age": "48.7 天",
   "note": "部件定义表，改一次用很久 —— 属于「没心跳」，要不要接定时看主人"
  },
  {
   "path": "/mnt/data/www/internal/catalog/algo_entries.json",
   "url": "/internal/catalog/algo_entries.json",
   "generator": "手工（2026-09-19）",
   "mtime": "2026-09-19 11:17:40",
   "age": "48.6 天",
   "note": "★「没心跳」"
  },
  {
   "path": "/mnt/data/www/internal/skilltools/tools.json",
   "url": "/internal/skilltools/tools.json",
   "generator": "手工（2026-09-19）",
   "mtime": "2026-09-19 11:23:35",
   "age": "48.6 天",
   "note": "★「没心跳」"
  },
  {
   "path": "/mnt/data/www/internal/data/progress_human.json",
   "url": "/internal/data/progress_human.json",
   "generator": "人工登记",
   "mtime": "2026-09-20 08:32:19",
   "age": "47.7 天",
   "note": "四栏进度的人工层，故意不自动生成"
  },
  {
   "path": "/mnt/data/www/internal/data/workbench.json",
   "url": "/internal/data/workbench.json",
   "generator": "/opt/internal_workbench/server.py（在跑服务）",
   "mtime": "2026-09-20 08:33:15",
   "age": "47.7 天",
   "note": "台面数据由常驻服务写，没有独立定时"
  },
  {
   "path": "/mnt/data/www/internal/data/workstatus.json",
   "url": "/internal/data/workstatus.json",
   "generator": "/opt/internal_workbench/server.py（在跑服务）",
   "mtime": "2026-09-20 21:38:08",
   "age": "47.2 天",
   "note": "同上"
  },
  {
   "path": "/mnt/data/www/internal/devices/ledger.json",
   "url": "/internal/devices/ledger.json",
   "generator": "手工（设备台账）",
   "mtime": "2026-09-21 12:26:01",
   "age": "46.6 天",
   "note": "★「没心跳」：187 台设备，人工维护"
  },
  {
   "path": "/mnt/data/www/internal/personas/personas.json",
   "url": "/internal/personas/personas.json",
   "generator": "手工（2026-09-21 分身出口）",
   "mtime": "2026-09-21 13:52:56",
   "age": "46.5 天",
   "note": "★「没心跳」"
  },
  {
   "path": "/mnt/data/www/internal/hit/hits.json",
   "url": "/internal/hit/hits.json",
   "generator": "手工（2026-09-21 撞算法）",
   "mtime": "2026-09-21 20:29:10",
   "age": "46.3 天",
   "note": "★「没心跳」"
  },
  {
   "path": "/mnt/data/www/internal/hub/todo.json",
   "url": "/internal/hub/todo.json",
   "generator": "人工登记",
   "mtime": "2026-09-21 20:50:34",
   "age": "46.2 天",
   "note": "待办，人工维护；hub.json 会读它"
  },
  {
   "path": "/mnt/data/www/internal/hub/verify_links.json",
   "url": "/internal/hub/verify_links.json",
   "generator": "手工（2026-09-21 链接核验）",
   "mtime": "2026-09-21 21:02:12",
   "age": "46.2 天",
   "note": "★「没心跳」：一次性核验产物"
  },
  {
   "path": "/mnt/data/www/internal/trinity/trinity.json",
   "url": "/internal/trinity/trinity.json",
   "generator": "手工（sync_hub.py 只读）",
   "mtime": "2026-09-22 07:27:16",
   "age": "45.8 天",
   "note": "★「没心跳」：算法三态台账"
  },
  {
   "path": "/mnt/data/www/internal/hit/calls.jsonl",
   "url": "/internal/hit/calls.jsonl",
   "generator": "服务实时追加（appender）",
   "mtime": "2026-09-22 07:36:24",
   "age": "45.8 天",
   "note": "追加型日志，没有定时也不该有"
  },
  {
   "path": "/mnt/data/www/internal/hub/coverage.json",
   "url": "/internal/hub/coverage.json",
   "generator": "手工（2026-09-22 一次性的覆盖盘点）",
   "mtime": "2026-09-22 09:00:15",
   "age": "45.7 天",
   "note": "★「没心跳」：一次性盘点产物"
  },
  {
   "path": "/mnt/data/www/internal/hub/excluded.json",
   "url": "/internal/hub/excluded.json",
   "generator": "手工（同上）",
   "mtime": "2026-09-22 09:00:15",
   "age": "45.7 天",
   "note": "★「没心跳」：同上"
  },
  {
   "path": "/mnt/data/www/internal/distiller/books.json",
   "url": "/internal/distiller/books.json",
   "generator": "手工（蒸馏流水线，按需跑）",
   "mtime": "2026-09-22 12:25:15",
   "age": "45.6 天",
   "note": "★「没心跳」：按需产物"
  }
 ],
 "files": [
  {
   "path": "/root/chains/A.json",
   "url": "",
   "used_by": [
    "https://infogap.store/chains/（SG 上 6 页）"
   ],
   "generator": "/root/chains_lib.py + /root/gen_chain_pages.py",
   "cron": "10 4 * * *",
   "period": "daily",
   "note": "★链库 A（国别×行业×机会）；04:10 补抓→合并(hits+1/新词)→重生成 6 页→scp SG 部署",
   "grace_seconds": 129600,
   "mtime": "2026-10-16 18:08:53",
   "mtime_ts": 1792145333,
   "age_seconds": 1844468,
   "size": 4600,
   "exists": true,
   "status": "超期",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/B.json",
   "url": "",
   "used_by": [
    "https://infogap.store/chains/（SG 上 6 页）"
   ],
   "generator": "/root/chains_lib.py + /root/gen_chain_pages.py",
   "cron": "10 4 * * *",
   "period": "daily",
   "note": "★链库 B（行业该不该做）；04:10 补抓→合并(hits+1/新词)→重生成 6 页→scp SG 部署",
   "grace_seconds": 129600,
   "mtime": "2026-10-16 18:08:53",
   "mtime_ts": 1792145333,
   "age_seconds": 1844468,
   "size": 3559,
   "exists": true,
   "status": "超期",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/C.json",
   "url": "",
   "used_by": [
    "https://infogap.store/chains/（SG 上 6 页）"
   ],
   "generator": "/root/chains_lib.py + /root/gen_chain_pages.py",
   "cron": "10 4 * * *",
   "period": "daily",
   "note": "★链库 C（需求真假）；04:10 补抓→合并(hits+1/新词)→重生成 6 页→scp SG 部署",
   "grace_seconds": 129600,
   "mtime": "2026-10-16 18:08:53",
   "mtime_ts": 1792145333,
   "age_seconds": 1844468,
   "size": 3912,
   "exists": true,
   "status": "超期",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/D.json",
   "url": "",
   "used_by": [
    "https://infogap.store/chains/（SG 上 6 页）"
   ],
   "generator": "/root/chains_lib.py + /root/gen_chain_pages.py",
   "cron": "10 4 * * *",
   "period": "daily",
   "note": "★链库 D（城市×行业）；04:10 补抓→合并(hits+1/新词)→重生成 6 页→scp SG 部署",
   "grace_seconds": 129600,
   "mtime": "2026-10-16 18:08:53",
   "mtime_ts": 1792145333,
   "age_seconds": 1844468,
   "size": 4276,
   "exists": true,
   "status": "超期",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/E.json",
   "url": "",
   "used_by": [
    "https://infogap.store/chains/（SG 上 6 页）"
   ],
   "generator": "/root/chains_lib.py + /root/gen_chain_pages.py",
   "cron": "10 4 * * *",
   "period": "daily",
   "note": "★链库 E（货源/供应链）；04:10 补抓→合并(hits+1/新词)→重生成 6 页→scp SG 部署",
   "grace_seconds": 129600,
   "mtime": "2026-10-16 18:08:53",
   "mtime_ts": 1792145333,
   "age_seconds": 1844468,
   "size": 3303,
   "exists": true,
   "status": "超期",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/root/chains/F.json",
   "url": "",
   "used_by": [
    "https://infogap.store/chains/（SG 上 6 页）"
   ],
   "generator": "/root/chains_lib.py + /root/gen_chain_pages.py",
   "cron": "10 4 * * *",
   "period": "daily",
   "note": "★链库 F（工具/平台）；04:10 补抓→合并(hits+1/新词)→重生成 6 页→scp SG 部署",
   "grace_seconds": 129600,
   "mtime": "2026-10-16 18:08:53",
   "mtime_ts": 1792145333,
   "age_seconds": 1844468,
   "size": 4496,
   "exists": true,
   "status": "超期",
   "why": "应有周期 daily，宽限 1.5 天，实际 21.3 天 没动"
  },
  {
   "path": "/mnt/data/www/internal/hub/learn.json",
   "url": "/internal/hub/learn.json",
   "used_by": [
    "/internal/hub/",
    "/learn/daily/"
   ],
   "generator": "/opt/internal_board/sync_learn.py",
   "cron": "*/30 * * * *",
   "period": "30min",
   "note": "学习工口径",
   "grace_seconds": 10800,
   "mtime": "2026-10-27 18:00:38",
   "mtime_ts": 1793095238,
   "age_seconds": 894564,
   "size": 173612,
   "exists": true,
   "status": "超期",
   "why": "应有周期 30min，宽限 3.0 小时，实际 10.4 天 没动"
  },
  {
   "path": "/mnt/data/www/learn/daily/data.json",
   "url": "/learn/daily/data.json",
   "used_by": [
    "/learn/daily/"
   ],
   "generator": "/opt/internal_board/sync_learn.py",
   "cron": "*/30 * * * *",
   "period": "30min",
   "note": "学习日报数据",
   "grace_seconds": 10800,
   "mtime": "2026-10-27 18:00:38",
   "mtime_ts": 1793095238,
   "age_seconds": 894563,
   "size": 109734,
   "exists": true,
   "status": "超期",
   "why": "应有周期 30min，宽限 3.0 小时，实际 10.4 天 没动"
  },
  {
   "path": "/mnt/data/www/workflow-map/learn_stats.json",
   "url": "/workflow-map/learn_stats.json",
   "used_by": [
    "/workflow-map/live.html",
    "/internal/hub/"
   ],
   "generator": "/opt/gen_learn_stats.py",
   "cron": "*/10 * * * *",
   "period": "10min",
   "note": "各工学习产出计数",
   "grace_seconds": 3600,
   "mtime": "2026-10-27 18:20:09",
   "mtime_ts": 1793096409,
   "age_seconds": 893392,
   "size": 9173,
   "exists": true,
   "status": "超期",
   "why": "应有周期 10min，宽限 1.0 小时，实际 10.3 天 没动"
  },
  {
   "path": "/mnt/data/www/internal/data/parts.json",
   "url": "/internal/data/parts.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "手工（collect_parts.py 只读它）",
   "cron": null,
   "period": "manual",
   "note": "部件定义表，改一次用很久 —— 属于「没心跳」，要不要接定时看主人",
   "grace_seconds": null,
   "mtime": "2026-09-19 10:27:56",
   "mtime_ts": 1789784876,
   "age_seconds": 4204926,
   "size": 4071,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/catalog/algo_entries.json",
   "url": "/internal/catalog/algo_entries.json",
   "used_by": [
    "/internal/catalog/"
   ],
   "generator": "手工（2026-09-19）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」",
   "grace_seconds": null,
   "mtime": "2026-09-19 11:17:40",
   "mtime_ts": 1789787860,
   "age_seconds": 4201941,
   "size": 7368,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/skilltools/tools.json",
   "url": "/internal/skilltools/tools.json",
   "used_by": [
    "/internal/skilltools/"
   ],
   "generator": "手工（2026-09-19）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」",
   "grace_seconds": null,
   "mtime": "2026-09-19 11:23:35",
   "mtime_ts": 1789788215,
   "age_seconds": 4201586,
   "size": 14112,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/data/progress_human.json",
   "url": "/internal/data/progress_human.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "人工登记",
   "cron": null,
   "period": "manual",
   "note": "四栏进度的人工层，故意不自动生成",
   "grace_seconds": null,
   "mtime": "2026-09-20 08:32:19",
   "mtime_ts": 1789864339,
   "age_seconds": 4125463,
   "size": 18665,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/data/workbench.json",
   "url": "/internal/data/workbench.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "/opt/internal_workbench/server.py（在跑服务）",
   "cron": null,
   "period": "manual",
   "note": "台面数据由常驻服务写，没有独立定时",
   "grace_seconds": null,
   "mtime": "2026-09-20 08:33:15",
   "mtime_ts": 1789864395,
   "age_seconds": 4125406,
   "size": 32652,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/data/workstatus.json",
   "url": "/internal/data/workstatus.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "/opt/internal_workbench/server.py（在跑服务）",
   "cron": null,
   "period": "manual",
   "note": "同上",
   "grace_seconds": null,
   "mtime": "2026-09-20 21:38:08",
   "mtime_ts": 1789911488,
   "age_seconds": 4078313,
   "size": 2395,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/devices/ledger.json",
   "url": "/internal/devices/ledger.json",
   "used_by": [
    "/internal/devices/",
    "/internal/hub/"
   ],
   "generator": "手工（设备台账）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」：187 台设备，人工维护",
   "grace_seconds": null,
   "mtime": "2026-09-21 12:26:01",
   "mtime_ts": 1789964761,
   "age_seconds": 4025040,
   "size": 340882,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/personas/personas.json",
   "url": "/internal/personas/personas.json",
   "used_by": [
    "/internal/personas/",
    "/internal/hub/"
   ],
   "generator": "手工（2026-09-21 分身出口）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」",
   "grace_seconds": null,
   "mtime": "2026-09-21 13:52:56",
   "mtime_ts": 1789969976,
   "age_seconds": 4019826,
   "size": 26663,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/hit/hits.json",
   "url": "/internal/hit/hits.json",
   "used_by": [
    "/internal/hit/",
    "/internal/hub/"
   ],
   "generator": "手工（2026-09-21 撞算法）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」",
   "grace_seconds": null,
   "mtime": "2026-09-21 20:29:10",
   "mtime_ts": 1789993750,
   "age_seconds": 3996052,
   "size": 95743,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/hub/todo.json",
   "url": "/internal/hub/todo.json",
   "used_by": [
    "/internal/hub/"
   ],
   "generator": "人工登记",
   "cron": null,
   "period": "manual",
   "note": "待办，人工维护；hub.json 会读它",
   "grace_seconds": null,
   "mtime": "2026-09-21 20:50:34",
   "mtime_ts": 1789995034,
   "age_seconds": 3994767,
   "size": 3295,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/hub/verify_links.json",
   "url": "/internal/hub/verify_links.json",
   "used_by": [
    "/internal/hub/"
   ],
   "generator": "手工（2026-09-21 链接核验）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」：一次性核验产物",
   "grace_seconds": null,
   "mtime": "2026-09-21 21:02:12",
   "mtime_ts": 1789995732,
   "age_seconds": 3994069,
   "size": 3089,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/trinity/trinity.json",
   "url": "/internal/trinity/trinity.json",
   "used_by": [
    "/internal/hub/"
   ],
   "generator": "手工（sync_hub.py 只读）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」：算法三态台账",
   "grace_seconds": null,
   "mtime": "2026-09-22 07:27:16",
   "mtime_ts": 1790033236,
   "age_seconds": 3956565,
   "size": 88127,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/hit/calls.jsonl",
   "url": "/internal/hit/calls.jsonl",
   "used_by": [
    "/internal/hit/",
    "/internal/hub/"
   ],
   "generator": "服务实时追加（appender）",
   "cron": null,
   "period": "manual",
   "note": "追加型日志，没有定时也不该有",
   "grace_seconds": null,
   "mtime": "2026-09-22 07:36:24",
   "mtime_ts": 1790033784,
   "age_seconds": 3956017,
   "size": 17672,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/hub/coverage.json",
   "url": "/internal/hub/coverage.json",
   "used_by": [
    "/internal/hub/"
   ],
   "generator": "手工（2026-09-22 一次性的覆盖盘点）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」：一次性盘点产物",
   "grace_seconds": null,
   "mtime": "2026-09-22 09:00:15",
   "mtime_ts": 1790038815,
   "age_seconds": 3950986,
   "size": 310728,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/hub/excluded.json",
   "url": "/internal/hub/excluded.json",
   "used_by": [
    "/internal/hub/"
   ],
   "generator": "手工（同上）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」：同上",
   "grace_seconds": null,
   "mtime": "2026-09-22 09:00:15",
   "mtime_ts": 1790038815,
   "age_seconds": 3950986,
   "size": 174629,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/distiller/books.json",
   "url": "/internal/distiller/books.json",
   "used_by": [
    "/internal/distiller/",
    "/internal/hub/"
   ],
   "generator": "手工（蒸馏流水线，按需跑）",
   "cron": null,
   "period": "manual",
   "note": "★「没心跳」：按需产物",
   "grace_seconds": null,
   "mtime": "2026-09-22 12:25:15",
   "mtime_ts": 1790051115,
   "age_seconds": 3938686,
   "size": 11215,
   "exists": true,
   "status": "无定时",
   "why": "没有对应定时任务（手工维护）—— 龄期只在表里，不报警"
  },
  {
   "path": "/mnt/data/www/internal/catalog/dl_manifest.json",
   "url": "/internal/catalog/dl_manifest.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "/opt/internal_board/collect_catalog.py",
   "cron": "15 3 * * *",
   "period": "daily",
   "note": "下载包清单",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 03:34:01",
   "mtime_ts": 1793907241,
   "age_seconds": 82560,
   "size": 156717,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/catalog/pages.json",
   "url": "/internal/catalog/pages.json",
   "used_by": [
    "/internal/catalog/",
    "/internal/"
   ],
   "generator": "/opt/internal_board/collect_catalog.py",
   "cron": "15 3 * * *",
   "period": "daily",
   "note": "页面清册",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 03:37:10",
   "mtime_ts": 1793907430,
   "age_seconds": 82372,
   "size": 2706673,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/catalog/algos.json",
   "url": "/internal/catalog/algos.json",
   "used_by": [
    "/internal/catalog/",
    "/internal/",
    "/internal/lifechain/"
   ],
   "generator": "/opt/internal_board/collect_catalog.py",
   "cron": "15 3 * * *",
   "period": "daily",
   "note": "算法清册",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 03:37:10",
   "mtime_ts": 1793907430,
   "age_seconds": 82372,
   "size": 740927,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/catalog/data.json",
   "url": "/internal/catalog/data.json",
   "used_by": [
    "/internal/catalog/"
   ],
   "generator": "/opt/internal_board/collect_catalog.py",
   "cron": "15 3 * * *",
   "period": "daily",
   "note": "数据清册",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 03:37:10",
   "mtime_ts": 1793907430,
   "age_seconds": 82372,
   "size": 115057,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/catalog/summary.json",
   "url": "/internal/catalog/summary.json",
   "used_by": [
    "/internal/catalog/",
    "/internal/"
   ],
   "generator": "/opt/internal_board/collect_catalog.py",
   "cron": "15 3 * * *",
   "period": "daily",
   "note": "清册汇总",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 03:37:10",
   "mtime_ts": 1793907430,
   "age_seconds": 82372,
   "size": 1537,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/geo/geo_coverage.json",
   "url": "/internal/geo/geo_coverage.json",
   "used_by": [
    "/internal/geo/",
    "/internal/hub/"
   ],
   "generator": "/opt/internal_board/gen_geo_coverage.py",
   "cron": "20 4 * * *",
   "period": "daily",
   "note": "GEO 覆盖盘点（2026-09-22 由手工接回定时；traffic/gaps 两段是搬运的人工结论）",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 04:20:19",
   "mtime_ts": 1793910019,
   "age_seconds": 79782,
   "size": 266854,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/geo/matrix_city_industry.csv",
   "url": "/internal/geo/matrix_city_industry.csv",
   "used_by": [
    "/internal/geo/"
   ],
   "generator": "/opt/internal_board/gen_geo_coverage.py",
   "cron": "20 4 * * *",
   "period": "daily",
   "note": "城市×行业矩阵，随盘点一起重写",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 04:20:19",
   "mtime_ts": 1793910019,
   "age_seconds": 79782,
   "size": 60131,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/geo/gap_top50.csv",
   "url": "/internal/geo/gap_top50.csv",
   "used_by": [
    "/internal/geo/"
   ],
   "generator": "/opt/internal_board/gen_geo_coverage.py",
   "cron": "20 4 * * *",
   "period": "daily",
   "note": "缺口 top50，随盘点一起重写（内容是搬运的）",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 04:20:19",
   "mtime_ts": 1793910019,
   "age_seconds": 79782,
   "size": 2641,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/lifechain/data.json",
   "url": "/internal/lifechain/data.json",
   "used_by": [
    "/internal/lifechain/"
   ],
   "generator": "/opt/lifechain_view/gen_lifechain.py",
   "cron": "10 5 * * *",
   "period": "daily",
   "note": "已接定时 05:10（灵犀 2026-09-23）；工作室侧生命链台账，下游 build_zone.py 05:20 读它",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 05:11:37",
   "mtime_ts": 1793913097,
   "age_seconds": 76705,
   "size": 37678,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/life-chain/data.js",
   "url": "/life-chain/data.js",
   "used_by": [
    "/life-chain/"
   ],
   "generator": "/root/viz-lifechain-bak/build_zone.py",
   "cron": "20 5 * * *",
   "period": "daily",
   "note": "已接定时 05:20（灵犀 2026-09-23）；生命链可视化专区，超 36h 报警",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 05:20:13",
   "mtime_ts": 1793913613,
   "age_seconds": 76188,
   "size": 3785,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/studio/data.json",
   "url": "/internal/studio/data.json",
   "used_by": [
    "/internal/studio/"
   ],
   "generator": "/opt/internal_board/collect_studio.py",
   "cron": "30 5 * * *",
   "period": "daily",
   "note": "已接定时 05:30（灵犀 2026-09-23）；工作室台面数据",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 05:30:39",
   "mtime_ts": 1793914239,
   "age_seconds": 75563,
   "size": 22555,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/algo/_viz/industry-model.json",
   "url": "/algo/_viz/industry-model.json",
   "used_by": [
    "/algo/_viz/"
   ],
   "generator": "/root/viz-lifechain-bak/gen_model.py",
   "cron": "40 5 * * *",
   "period": "daily",
   "note": "已接定时 05:40（灵犀 2026-09-23）；★行业曲线模型，超 36h 报警",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 05:45:18",
   "mtime_ts": 1793915118,
   "age_seconds": 74683,
   "size": 1734,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/algo/_viz/viz-data.js",
   "url": "/algo/_viz/viz-data.js",
   "used_by": [
    "/algo/*.html（17 页引用）",
    "/algo/"
   ],
   "generator": "/root/viz-lifechain-bak/gen_viz.py",
   "cron": "50 5 * * *",
   "period": "daily",
   "note": "已接定时 05:50（灵犀 2026-09-23）；/algo/*.html 19 页图表数据，超 36h 报警",
   "grace_seconds": 129600,
   "mtime": "2026-11-06 05:50:29",
   "mtime_ts": 1793915429,
   "age_seconds": 74373,
   "size": 22314,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/sites_daily.json",
   "url": "/internal/data/sites_daily.json",
   "used_by": [
    "/internal/",
    "/internal/hub/"
   ],
   "generator": "/opt/internal_board/collect_sites_daily.py",
   "cron": "*/30 * * * *",
   "period": "30min",
   "note": "按天访问汇总（只增不减）",
   "grace_seconds": 10800,
   "mtime": "2026-11-07 02:00:09",
   "mtime_ts": 1793988009,
   "age_seconds": 1793,
   "size": 82479,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/hub/hub.json",
   "url": "/internal/hub/hub.json",
   "used_by": [
    "/internal/hub/"
   ],
   "generator": "/opt/internal_board/sync_hub.py",
   "cron": "*/30 * * * *",
   "period": "30min",
   "note": "总盘本体",
   "grace_seconds": 10800,
   "mtime": "2026-11-07 02:00:17",
   "mtime_ts": 1793988017,
   "age_seconds": 1785,
   "size": 27195,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/progress.json",
   "url": "/internal/data/progress.json",
   "used_by": [
    "/internal/",
    "/internal/hub/"
   ],
   "generator": "/opt/internal_board/gen_progress.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "四栏进度（人工层 progress_human.json + 机器采合并）",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:01",
   "mtime_ts": 1793989501,
   "age_seconds": 300,
   "size": 31035,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/line.json",
   "url": "/internal/data/line.json",
   "used_by": [
    "/internal/",
    "/internal/lifechain/"
   ],
   "generator": "/opt/internal_board/collect_line.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "studio 生产线",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:01",
   "mtime_ts": 1793989501,
   "age_seconds": 300,
   "size": 59840,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/live.json",
   "url": "/internal/data/live.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "/opt/internal_board/collect_line.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "在跑进程快照",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:02",
   "mtime_ts": 1793989502,
   "age_seconds": 300,
   "size": 4243,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/workflow-map/wf_progress.json",
   "url": "/workflow-map/wf_progress.json",
   "used_by": [
    "/workflow-map/live.html",
    "/internal/"
   ],
   "generator": "/opt/workflow_map/gen_progress.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "工作流活地图",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:02",
   "mtime_ts": 1793989502,
   "age_seconds": 300,
   "size": 5921,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/ledger.json",
   "url": "/internal/data/ledger.json",
   "used_by": [
    "/internal/",
    "/internal/hub/",
    "/research/ads-scout-20260921.html"
   ],
   "generator": "/opt/internal_board/collect_ledger.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "工作流台账：在跑/已删",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:03",
   "mtime_ts": 1793989503,
   "age_seconds": 298,
   "size": 122896,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/ledger_state.json",
   "url": "/internal/data/ledger_state.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "/opt/internal_board/collect_ledger.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "台账状态机",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:03",
   "mtime_ts": 1793989503,
   "age_seconds": 298,
   "size": 29603,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/ledger_seen.json",
   "url": "/internal/data/ledger_seen.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "/opt/internal_board/collect_ledger.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "台账去重表",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:03",
   "mtime_ts": 1793989503,
   "age_seconds": 298,
   "size": 40532,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/sites.json",
   "url": "/internal/data/sites.json",
   "used_by": [
    "/internal/"
   ],
   "generator": "/opt/internal_board/collect_sites.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "CN+SG 站点探活",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:17",
   "mtime_ts": 1793989517,
   "age_seconds": 285,
   "size": 39959,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "path": "/mnt/data/www/internal/data/parts_status.json",
   "url": "/internal/data/parts_status.json",
   "used_by": [
    "/internal/",
    "/internal/lifechain/"
   ],
   "generator": "/opt/internal_board/collect_parts.py",
   "cron": "*/5 * * * *",
   "period": "5min",
   "note": "部件状态（上游是手工 parts.json）",
   "grace_seconds": 1800,
   "mtime": "2026-11-07 02:25:41",
   "mtime_ts": 1793989541,
   "age_seconds": 260,
   "size": 2643,
   "exists": true,
   "status": "正常",
   "why": ""
  }
 ]
}