{
 "schema": "hub/data-heartbeat/1",
 "generated_at": "2026-10-14T02:30:02+08:00",
 "generated_ts": 1791916202,
 "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": 43,
  "正常": 27,
  "超期": 0,
  "无定时": 16,
  "未知": 0
 },
 "overdue": [],
 "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": "24.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": "24.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": "24.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": "23.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": "23.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": "23.2 天",
   "note": "同上"
  },
  {
   "path": "/mnt/data/www/internal/devices/ledger.json",
   "url": "/internal/devices/ledger.json",
   "generator": "手工（设备台账）",
   "mtime": "2026-09-21 12:26:01",
   "age": "22.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": "22.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": "22.3 天",
   "note": "★「没心跳」"
  },
  {
   "path": "/mnt/data/www/internal/hub/todo.json",
   "url": "/internal/hub/todo.json",
   "generator": "人工登记",
   "mtime": "2026-09-21 20:50:34",
   "age": "22.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": "22.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": "21.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": "21.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": "21.7 天",
   "note": "★「没心跳」：一次性盘点产物"
  },
  {
   "path": "/mnt/data/www/internal/hub/excluded.json",
   "url": "/internal/hub/excluded.json",
   "generator": "手工（同上）",
   "mtime": "2026-09-22 09:00:15",
   "age": "21.7 天",
   "note": "★「没心跳」：同上"
  },
  {
   "path": "/mnt/data/www/internal/distiller/books.json",
   "url": "/internal/distiller/books.json",
   "generator": "手工（蒸馏流水线，按需跑）",
   "mtime": "2026-09-22 12:25:15",
   "age": "21.6 天",
   "note": "★「没心跳」：按需产物"
  }
 ],
 "files": [
  {
   "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": 2131326,
   "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": 2128341,
   "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": 2127986,
   "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": 2051862,
   "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": 2051806,
   "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": 2004713,
   "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": 1951440,
   "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": 1946225,
   "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": 1922452,
   "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": 1921167,
   "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": 1920469,
   "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": 1882965,
   "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": 1882417,
   "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": 1877386,
   "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": 1877386,
   "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": 1865086,
   "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-10-13 03:17:50",
   "mtime_ts": 1791832670,
   "age_seconds": 83531,
   "size": 156658,
   "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-10-13 03:18:06",
   "mtime_ts": 1791832686,
   "age_seconds": 83515,
   "size": 1443207,
   "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-10-13 03:18:06",
   "mtime_ts": 1791832686,
   "age_seconds": 83515,
   "size": 626144,
   "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-10-13 03:18:06",
   "mtime_ts": 1791832686,
   "age_seconds": 83515,
   "size": 115053,
   "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-10-13 03:18:06",
   "mtime_ts": 1791832686,
   "age_seconds": 83515,
   "size": 1534,
   "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-10-13 04:20:09",
   "mtime_ts": 1791836409,
   "age_seconds": 79792,
   "size": 267021,
   "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-10-13 04:20:09",
   "mtime_ts": 1791836409,
   "age_seconds": 79792,
   "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-10-13 04:20:09",
   "mtime_ts": 1791836409,
   "age_seconds": 79792,
   "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-10-13 05:10:06",
   "mtime_ts": 1791839406,
   "age_seconds": 76795,
   "size": 32594,
   "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-10-13 05:20:01",
   "mtime_ts": 1791840001,
   "age_seconds": 76200,
   "size": 3761,
   "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-10-13 05:30:04",
   "mtime_ts": 1791840604,
   "age_seconds": 75597,
   "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-10-13 05:45:02",
   "mtime_ts": 1791841502,
   "age_seconds": 74699,
   "size": 1435,
   "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-10-13 05:50:02",
   "mtime_ts": 1791841802,
   "age_seconds": 74399,
   "size": 22314,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "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-14 02:00:03",
   "mtime_ts": 1791914403,
   "age_seconds": 1798,
   "size": 185859,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "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-14 02:00:03",
   "mtime_ts": 1791914403,
   "age_seconds": 1798,
   "size": 117153,
   "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-10-14 02:00:10",
   "mtime_ts": 1791914410,
   "age_seconds": 1791,
   "size": 50272,
   "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-10-14 02:00:16",
   "mtime_ts": 1791914416,
   "age_seconds": 1785,
   "size": 27090,
   "exists": true,
   "status": "正常",
   "why": ""
  },
  {
   "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-14 02:20:01",
   "mtime_ts": 1791915601,
   "age_seconds": 600,
   "size": 9227,
   "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-10-14 02:25:01",
   "mtime_ts": 1791915901,
   "age_seconds": 300,
   "size": 28764,
   "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-10-14 02:25:01",
   "mtime_ts": 1791915901,
   "age_seconds": 300,
   "size": 63358,
   "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-10-14 02:25:02",
   "mtime_ts": 1791915902,
   "age_seconds": 299,
   "size": 4287,
   "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-10-14 02:25:02",
   "mtime_ts": 1791915902,
   "age_seconds": 299,
   "size": 6107,
   "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-10-14 02:25:03",
   "mtime_ts": 1791915903,
   "age_seconds": 298,
   "size": 118140,
   "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-10-14 02:25:03",
   "mtime_ts": 1791915903,
   "age_seconds": 298,
   "size": 32025,
   "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-10-14 02:25:03",
   "mtime_ts": 1791915903,
   "age_seconds": 298,
   "size": 38510,
   "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-10-14 02:25:20",
   "mtime_ts": 1791915920,
   "age_seconds": 281,
   "size": 39732,
   "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-10-14 02:25:30",
   "mtime_ts": 1791915930,
   "age_seconds": 271,
   "size": 2647,
   "exists": true,
   "status": "正常",
   "why": ""
  }
 ]
}