{
 "schema": "hub/1",
 "generated_at": "2026-10-14 02:30:02",
 "generated_ts": 1791916202,
 "collector": "/opt/internal_board/sync_hub.py · crontab */30",
 "site": "https://shengminglian.com.cn",
 "page": "/internal/hub/",
 "summary": {
  "doing": 10,
  "delivered": 3,
  "waiting": 1,
  "stopped": 0,
  "missing": 0,
  "total": 14
 },
 "projects": [
  {
   "id": "studio",
   "name": "工作室台面",
   "status": "在做",
   "status_basis": "studio/data.json queue[].status 计数：在做2/排队7/等你定4/已停1",
   "metrics": [
    {
     "k": "排序队列",
     "v": "14",
     "src": "studio/data.json queue[]"
    },
    {
     "k": "在做",
     "v": "2",
     "src": "studio/data.json queue[].status=='在做'"
    },
    {
     "k": "等你定",
     "v": "4",
     "src": "studio/data.json queue[].status=='等你定'"
    },
    {
     "k": "需求收件箱",
     "v": "8",
     "src": "studio/data.json requirements[]"
    },
    {
     "k": "已停",
     "v": "1",
     "src": "studio/data.json queue[].status=='已停'"
    }
   ],
   "last_update": "2026-10-13 05:30:02",
   "last_update_src": "studio/data.json generated_at（文件 mtime 2026-10-13 05:30:04）",
   "entry": "/internal/studio/",
   "entry_label": "工作室台面",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "第1位「工厂设备台账 v1（每台算法=一台设备）」— 我在干 · 你不用动",
   "next": "按队列往下推第 1 位：工厂设备台账 v1（每台算法=一台设备）",
   "data_ok": true
  },
  {
   "id": "devices",
   "name": "工厂设备台账",
   "status": "在做",
   "status_basis": "devices/ledger.json totals.by_action.待修=8 · unreadable=20",
   "metrics": [
    {
     "k": "设备总数",
     "v": "187",
     "src": "devices/ledger.json totals.devices"
    },
    {
     "k": "服务/算法/页面",
     "v": "57/53/77",
     "src": "devices/ledger.json totals.by_kind"
    },
    {
     "k": "活/死/未知",
     "v": "176/8/3",
     "src": "devices/ledger.json totals.by_alive"
    },
    {
     "k": "价值未知",
     "v": "136",
     "src": "devices/ledger.json totals.by_value.未知"
    },
    {
     "k": "读不到的项",
     "v": "20",
     "src": "devices/ledger.json unreadable[] 条数"
    }
   ],
   "last_update": "2026-09-21 12:45 +0800",
   "last_update_src": "devices/ledger.json generated_at（文件 mtime 2026-09-21 12:26:01）",
   "entry": "/internal/devices/",
   "entry_label": "设备台账",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "20 项读不到（unreadable）· 待修 8 台",
   "next": "把 20 项读不到的设备补上（能力/契约/价值），否则组合木算不出",
   "data_ok": true
  },
  {
   "id": "lifechain",
   "name": "生命链台账",
   "status": "在做",
   "status_basis": "lifechain/data.json grand_total.no_curve=15（缺数据源的小链）",
   "metrics": [
    {
     "k": "小链",
     "v": "30",
     "src": "lifechain/data.json grand_total.items"
    },
    {
     "k": "升/降/平",
     "v": "3/8/4",
     "src": "lifechain/data.json grand_total.up/down/flat"
    },
    {
     "k": "缺曲线",
     "v": "15",
     "src": "lifechain/data.json grand_total.no_curve"
    },
    {
     "k": "有实测曲线",
     "v": "3",
     "src": "lifechain/data.json grand_total.observed"
    },
    {
     "k": "国内/国外",
     "v": "20/13",
     "src": "lifechain/data.json chains.国内/国外 条数"
    }
   ],
   "last_update": "2026-10-13 05:10:01",
   "last_update_src": "lifechain/data.json generated_at（文件 mtime 2026-10-13 05:10:06）",
   "entry": "/internal/lifechain/",
   "entry_label": "生命链",
   "entry_status": 200,
   "entry2": "/life-chain/",
   "entry2_label": "生命链可视化专区",
   "entry2_status": 200,
   "who_waits": "15 条小链没有数据源 —— 亮着，不替它编数",
   "next": "生命链 v2：把海外那条被扫描器污染的口径洗净后重出台账",
   "data_ok": true
  },
  {
   "id": "geo",
   "name": "GEO 覆盖",
   "status": "在做",
   "status_basis": "geo/geo_coverage.json matrix.cells_filled=0 / cells_total=28800",
   "metrics": [
    {
     "k": "城市页",
     "v": "384",
     "src": "geo_coverage.json axis_counts.cities_with_page"
    },
    {
     "k": "行业页",
     "v": "75",
     "src": "geo_coverage.json axis_counts.industries_with_page"
    },
    {
     "k": "交叉页 填/总",
     "v": "0/28800",
     "src": "geo_coverage.json matrix.cells_filled/cells_total"
    },
    {
     "k": "缺口 Top50",
     "v": "50",
     "src": "geo_coverage.json gaps.top50 条数"
    },
    {
     "k": "非自身 GEO 访问",
     "v": "225",
     "src": "geo_coverage.json traffic.cn.geo_pages_total_non_self"
    }
   ],
   "last_update": "2026-10-13T04:20:09+08:00",
   "last_update_src": "geo/geo_coverage.json generated_at（文件 mtime 2026-10-13 04:20:09）",
   "entry": "/internal/geo/",
   "entry_label": "GEO 覆盖",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "缺口 Top50 已排好，等人决定先填哪一格",
   "next": "从 gaps.top50 第 1 格（北京×KTV）开始补交叉页",
   "data_ok": true
  },
  {
   "id": "personas",
   "name": "分身 · 出口",
   "status": "在做",
   "status_basis": "personas/personas.json not_done[] 还有 8 条没做",
   "metrics": [
    {
     "k": "分身",
     "v": "7",
     "src": "personas/personas.json personas[] 条数"
    },
    {
     "k": "资产找到/总数",
     "v": "5/7",
     "src": "personas/personas.json personas[].status=='found'"
    },
    {
     "k": "钩子",
     "v": "7",
     "src": "personas/personas.json hooks[] 条数"
    },
    {
     "k": "没做的",
     "v": "8",
     "src": "personas/personas.json not_done[] 条数"
    }
   ],
   "last_update": "2026-09-21 13:5x +0800（第 3 版：并入主人 13:26 权威口径「三台引擎」）",
   "last_update_src": "personas/personas.json generated_at（文件 mtime 2026-09-21 13:52:56）",
   "entry": "/internal/personas/",
   "entry_label": "分身 · 出口",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "原始口播逐字 txt（133 份）不在本机 —— 在扣子云盘",
   "next": "未对外发布任何内容（不发文、不发帖、不注册账号、不发消息）",
   "data_ok": true
  },
  {
   "id": "hit",
   "name": "撞算法与入口",
   "status": "在做",
   "status_basis": "hit/hits.json algorithms_broken=2 · gray_list=4",
   "metrics": [
    {
     "k": "撞中的组合",
     "v": "28",
     "src": "hit/hits.json hits[] 条数"
    },
    {
     "k": "可用算法",
     "v": "51/53",
     "src": "hit/hits.json algorithms_usable / algorithms_registered"
    },
    {
     "k": "坏的算法",
     "v": "2",
     "src": "hit/hits.json algorithms_broken[] 条数"
    },
    {
     "k": "埋点调用",
     "v": "75",
     "src": "hit/calls.jsonl 非空行数（实测）"
    },
    {
     "k": "灰名单/废名单",
     "v": "4/4",
     "src": "hit/hits.json gray_list[] / waste_list[] 条数"
    }
   ],
   "last_update": "2026-09-21T21:00:00+08:00",
   "last_update_src": "hit/hits.json generated_at（文件 mtime 2026-09-21 20:29:10）",
   "entry": "/internal/hit/",
   "entry_label": "算法撞需求",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "4 个灰名单算法等人拍板留不留",
   "next": "灰名单 4 个 + 中价值 6 个，等人拍板留哪一批",
   "data_ok": true
  },
  {
   "id": "algo",
   "name": "算法说明书页",
   "status": "已交付",
   "status_basis": "algo/*.html 共 19 页 + sitemap /algo/ 命中 20",
   "metrics": [
    {
     "k": "说明书页",
     "v": "19",
     "src": "ls /mnt/data/www/algo/*.html（排除 index.html）"
    },
    {
     "k": "sitemap 总条数",
     "v": "502",
     "src": "sitemap.xml <loc> 计数"
    },
    {
     "k": "sitemap 里 algo",
     "v": "20",
     "src": "sitemap.xml 含 /algo/ 的行数"
    },
    {
     "k": "页目录",
     "v": "business-seven-layers, curve-generation, decay, demand-verify, five-dim-gold, four-dim-landing",
     "src": "algo/*.html 文件名"
    }
   ],
   "last_update": "2026-10-08 20:33:25",
   "last_update_src": "algo/*.html 最新 mtime",
   "entry": "/algo/",
   "entry_label": "算法说明书",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "已上线，等搜索收录",
   "next": "等 AI 爬虫抓到这几页（GEO 那条链）",
   "data_ok": true
  },
  {
   "id": "trinity",
   "name": "算法三态台账",
   "status": "已交付",
   "status_basis": "trinity.json rows=76（注册表32 × 调度器53 − 共有9）· 实测 可调用51/坏2/未测23",
   "metrics": [
    {
     "k": "算法总数（去重）",
     "v": "76",
     "src": "trinity.json summary.union_total（32+53-9）"
    },
    {
     "k": "两边都有",
     "v": "9",
     "src": "trinity.json summary.both（注册表∩调度器）"
    },
    {
     "k": "只在注册表",
     "v": "23",
     "src": "trinity.json summary.registry_only"
    },
    {
     "k": "只在调度器",
     "v": "44",
     "src": "trinity.json summary.scheduler_only"
    },
    {
     "k": "实测 可调用/坏/未测",
     "v": "51/2/23",
     "src": "trinity.json summary.measured"
    },
    {
     "k": "价值 有/未知/无/缺",
     "v": "0/51/2/23",
     "src": "trinity.json summary.value"
    },
    {
     "k": "建议 上线/降级/待修/静默",
     "v": "4/53/2/17",
     "src": "trinity.json summary.advice"
    },
    {
     "k": "goals 口径",
     "v": "实测 11 条（文档写 12）",
     "src": "trinity.json goals_correction"
    }
   ],
   "last_update": "2026-09-22 07:27:15",
   "last_update_src": "trinity.json generated_at（文件 mtime 2026-09-22 07:27:16）",
   "entry": "/internal/trinity/",
   "entry_label": "算法三态台账",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "三张差异表逐条可追：只在注册表 23 / 只在调度器 44 / 两边都对上 9",
   "next": "坏掉的 2 个待修；只在注册表的 23 个疑似漏测（接入口在的按降级）",
   "data_ok": true
  },
  {
   "id": "sites",
   "name": "站点监控 CN/SG",
   "status": "在做",
   "status_basis": "sites_daily.json today_snapshot.cn.probe_ok=True · sg.probe_ok=True",
   "metrics": [
    {
     "k": "CN 页面 通/总",
     "v": "8/8",
     "src": "sites_daily.json today_snapshot.cn.pages_ok/pages_total"
    },
    {
     "k": "SG 服务 跑/总",
     "v": "8/18",
     "src": "sites_daily.json today_snapshot.sg.svc_running/svc_total"
    },
    {
     "k": "CN 磁盘用了",
     "v": "57%",
     "src": "sites_daily.json today_snapshot.cn.disk_pct"
    },
    {
     "k": "SG 磁盘用了",
     "v": "53%",
     "src": "sites_daily.json today_snapshot.sg.disk_pct"
    },
    {
     "k": "按天留存 CN/SG",
     "v": "32/33 天",
     "src": "sites_daily.json sites.cn.days / sites.sg.days 天数"
    }
   ],
   "last_update": "2026-10-14T02:00:01",
   "last_update_src": "sites_daily.json generated_at（文件 mtime 2026-10-14 02:00:10）",
   "entry": "/monitor/",
   "entry_label": "站点监控",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "两站都在自动采（每 30 分钟一轮）",
   "next": "按天数据只增不减，等 74 条坏链修完",
   "data_ok": true
  },
  {
   "id": "books",
   "name": "小屋书架",
   "status": "已交付",
   "status_basis": "SG books.json：2 本里 2 本 status=full",
   "metrics": [
    {
     "k": "书架",
     "v": "2 本",
     "src": "SG /var/www/infogap/room/qianchen-gghpv2/data/books.json books[] 条数"
    },
    {
     "k": "总页数",
     "v": "738",
     "src": "SG books.json books[].pageCount 求和"
    },
    {
     "k": "全集本数",
     "v": "2",
     "src": "SG books.json books[].status=='full'"
    },
    {
     "k": "书名",
     "v": "高中数学基础知识手册 · 高中物理基础知识手册",
     "src": "SG books.json books[].title"
    }
   ],
   "last_update": "2026-09-21 10:15:37",
   "last_update_src": "SG books.json 文件 mtime 2026-09-21 10:15:37（该文件没有内部时间戳字段）",
   "entry": "https://infogap.store/qianchenxiaowu/",
   "entry_label": "小屋书架（海外站）",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "小屋是私人的，入口本身有口令门",
   "next": "等「拍题 + 自动错题本」那两件（要先有视觉模型）",
   "data_ok": true
  },
  {
   "id": "learn",
   "name": "学习工",
   "status": "在做",
   "status_basis": "learn_stats.json 最近一条产出时间 2026-10-13 19:37:34（48 小时内 = 在做）；hub/learn.json summary（漫游型 95 个 / 项目型 16 个；漫游型在长 2 停滞 2 睡 91；项目型在长 6 停滞 3 睡 7；近24h漫游新增 48 条 · 项目新产出 770 个）",
   "metrics": [
    {
     "k": "工种",
     "v": "84",
     "src": "workflow-map/learn_stats.json 条目数"
    },
    {
     "k": "累计产出",
     "v": "1604",
     "src": "learn_stats.json 各条目 count 求和"
    },
    {
     "k": "分组",
     "v": "12",
     "src": "learn_stats.json *.group 去重"
    },
    {
     "k": "最近产出",
     "v": "创作者经济工 · 2026-10-13 19:37:34",
     "src": "learn_stats.json 最大 last 的条目"
    },
    {
     "k": "漫游型",
     "v": "95 个（在长 2）",
     "src": "hub/learn.json summary.families.漫游型"
    },
    {
     "k": "项目型",
     "v": "16 个（在长 6）",
     "src": "hub/learn.json summary.families.项目型（/opt/devbot/projects）"
    },
    {
     "k": "项目型近24h产出",
     "v": "770 个文件",
     "src": "learned//reports/ 里近 24h 新文件数（sync_learn.py 实测）"
    },
    {
     "k": "在长",
     "v": "2 个",
     "src": "hub/learn.json summary.growing（漫游型）"
    },
    {
     "k": "停滞",
     "v": "2 个",
     "src": "hub/learn.json summary.stalled"
    },
    {
     "k": "睡",
     "v": "91 个",
     "src": "hub/learn.json summary.sleeping"
    },
    {
     "k": "近24h新增",
     "v": "48 条",
     "src": "各工 notes.md 段落日期实测（sync_learn.py）"
    },
    {
     "k": "学习工",
     "v": "95 个（有笔记 42）",
     "src": "hub/learn.json summary（含没 notes 的）"
    }
   ],
   "last_update": "2026-10-14 02:30:02",
   "last_update_src": "workflow-map/learn_stats.json 文件 mtime 2026-10-14 02:30:02",
   "entry": "/workflow-map/live.html",
   "entry_label": "学习工 · 工作流",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "最近在长的 3 个工：创作者经济工（气候科学）；数学老师（指数与对数）；成本哨兵（✅ 成本哨兵流水线完成 (只报不改)）",
   "next": "看 /learn/daily/（人话日报，带原文出处）；睡着的多是源已学完，要救哪个工得单独派活",
   "data_ok": true,
   "learn_daily": "/learn/daily/",
   "learn_json": "/mnt/data/www/internal/hub/learn.json"
  },
  {
   "id": "tasks",
   "name": "定时任务",
   "status": "在做",
   "status_basis": "ledger.json summary.trouble=2 · alive=118（每 5 分钟采）",
   "metrics": [
    {
     "k": "crontab 行数",
     "v": "73",
     "src": "crontab -l（本机 root）非注释行数"
    },
    {
     "k": "台账任务 活/总",
     "v": "118/174",
     "src": "data/ledger.json summary.alive/total"
    },
    {
     "k": "cron/svc/manual",
     "v": "66/67/14",
     "src": "data/ledger.json summary.cron/svc/manual"
    },
    {
     "k": "Gateway 定时任务",
     "v": "0",
     "src": "openclaw cron list --json（本机 Gateway jobs[]）"
    },
    {
     "k": "最近一次触发",
     "v": "2026-10-14 02:25",
     "src": "data/ledger.json items[].last 最大值；syslog CRON 行兜底"
    }
   ],
   "last_update": "2026-10-14 02:25:03",
   "last_update_src": "data/ledger.json generated_at（每 5 分钟自采）",
   "entry": "/internal/data/ledger.json",
   "entry_label": "工作流台账（原件）",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "台账里 56 条没在干活（停用 13 / 已被删 41）",
   "next": "本盘自己也挂进 crontab（每 30 分钟同步一次）",
   "data_ok": true
  },
  {
   "id": "todo",
   "name": "安全与待办",
   "status": "等你定",
   "status_basis": "hub/todo.json items[].status 计数：等你定 6 · 待办 1",
   "metrics": [
    {
     "k": "等你定",
     "v": "6",
     "src": "hub/todo.json items[].status=='等你定'"
    },
    {
     "k": "待办",
     "v": "1",
     "src": "hub/todo.json items[].status=='待办'"
    },
    {
     "k": "安全类",
     "v": "2",
     "src": "hub/todo.json items[].kind=='安全'"
    },
    {
     "k": "登记总数",
     "v": "7",
     "src": "hub/todo.json items[] 条数"
    }
   ],
   "last_update": "2026-09-21 21:00:00",
   "last_update_src": "hub/todo.json updated 字段",
   "entry": "/internal/hub/#todo",
   "entry_label": "本页 · 待办栏",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "最长挂着的一条：智谱 API 密钥作废重生成",
   "next": "等主人逐条拍到「拍板」列",
   "data_ok": true
  },
  {
   "id": "heartbeat",
   "name": "数据心跳",
   "status": "在做",
   "status_basis": "hub/heartbeat.json summary：正常 27 / 超期 0 / 无定时 16 / 未知 0（共 43 个被页面读的数据文件）",
   "metrics": [
    {
     "k": "正常",
     "v": "27",
     "src": "hub/heartbeat.json summary.正常"
    },
    {
     "k": "超期",
     "v": "0",
     "src": "hub/heartbeat.json summary.超期"
    },
    {
     "k": "无定时",
     "v": "16",
     "src": "hub/heartbeat.json summary.无定时（手工维护，没进 cron）"
    },
    {
     "k": "未知",
     "v": "0",
     "src": "hub/heartbeat.json summary.未知"
    },
    {
     "k": "在巡",
     "v": "43",
     "src": "hub/heartbeat.json files[] 条数"
    },
    {
     "k": "规则",
     "v": "5min>30min · 10min>60min · 30min>3h · daily>36h",
     "src": "check_data_heartbeat.py rules"
    }
   ],
   "last_update": "2026-10-14T02:30:02+08:00",
   "last_update_src": "hub/heartbeat.json generated_at（每 30 分钟巡检）",
   "entry": "/internal/hub/heartbeat.json",
   "entry_label": "心跳清单（机读）",
   "entry_status": 200,
   "entry2": null,
   "entry2_label": "",
   "entry2_status": null,
   "who_waits": "超期的：没有超期的｜没定时的头几个：/internal/data/parts.json；/internal/catalog/algo_entries.json；/internal/skilltools/tools.json",
   "next": "超期就从 heartbeat.json overdue[] 点进对应文件/生成器；没定时的 16 个要接定时说一声",
   "data_ok": true
  }
 ],
 "missing": [
  {
   "project": "GEO 覆盖",
   "field": "交叉页实测可访问数",
   "why": "matrix.cells_filled=0，没有交叉页可探；当前只有两条独立轴（25 城市页 + 75 行业页），不拿 75 个行业页充交叉页数"
  },
  {
   "project": "定时任务",
   "field": "本地 Windows Gateway 的定时任务",
   "why": "本盘采集器跑在服务器（CN）上，server 侧 Gateway openclaw cron 实测 0 条；这台 Windows 上的 Gateway 有任务，但服务器→Windows 没有自动通道——要接得新增一条本地推送任务，超出本次授权（已记进 todo.json）"
  },
  {
   "project": "小屋书架",
   "field": "阅读量 / 阅读进度 / 下载数",
   "why": "SG room.json 与 books.json 里没有统计字段（实测两文件全部 key 里无计数），小屋侧只有书目与页数"
  }
 ],
 "sources": [
  {
   "project": "工作室台面",
   "file": "/mnt/data/www/internal/studio/data.json",
   "ok": true,
   "mtime": "2026-10-13 05:30:04",
   "err": ""
  },
  {
   "project": "设备台账",
   "file": "/mnt/data/www/internal/devices/ledger.json",
   "ok": true,
   "mtime": "2026-09-21 12:26:01",
   "err": ""
  },
  {
   "project": "生命链",
   "file": "/mnt/data/www/internal/lifechain/data.json",
   "ok": true,
   "mtime": "2026-10-13 05:10:06",
   "err": ""
  },
  {
   "project": "GEO 覆盖",
   "file": "/mnt/data/www/internal/geo/geo_coverage.json",
   "ok": true,
   "mtime": "2026-10-13 04:20:09",
   "err": ""
  },
  {
   "project": "分身",
   "file": "/mnt/data/www/internal/personas/personas.json",
   "ok": true,
   "mtime": "2026-09-21 13:52:56",
   "err": ""
  },
  {
   "project": "撞算法与入口",
   "file": "/mnt/data/www/internal/hit/hits.json",
   "ok": true,
   "mtime": "2026-09-21 20:29:10",
   "err": ""
  },
  {
   "project": "站点监控",
   "file": "/mnt/data/www/internal/data/sites_daily.json",
   "ok": true,
   "mtime": "2026-10-14 02:00:10",
   "err": ""
  },
  {
   "project": "定时任务",
   "file": "/mnt/data/www/internal/data/ledger.json",
   "ok": true,
   "mtime": "2026-10-14 02:25:03",
   "err": ""
  },
  {
   "project": "学习工",
   "file": "/mnt/data/www/workflow-map/learn_stats.json",
   "ok": true,
   "mtime": "2026-10-14 02:30:02",
   "err": ""
  },
  {
   "project": "小屋书架",
   "file": "SG:/var/www/infogap/room/qianchen-gghpv2/data/books.json",
   "ok": true,
   "mtime": "2026-09-21 10:15:37",
   "err": ""
  },
  {
   "project": "安全与待办",
   "file": "/mnt/data/www/internal/hub/todo.json",
   "ok": true,
   "mtime": "2026-09-21 20:50:34",
   "err": ""
  },
  {
   "project": "算法三态台账",
   "file": "/mnt/data/www/internal/trinity/trinity.json",
   "ok": true,
   "mtime": "2026-09-22 07:27:16",
   "err": ""
  },
  {
   "project": "撞算法与入口",
   "file": "/mnt/data/www/internal/hit/calls.jsonl",
   "ok": true,
   "mtime": "2026-09-22 07:36:24",
   "err": ""
  },
  {
   "project": "算法说明书页",
   "file": "/mnt/data/www/algo/*.html",
   "ok": true,
   "mtime": "2026-10-02 16:15:53",
   "err": ""
  },
  {
   "project": "算法说明书页",
   "file": "/mnt/data/www/sitemap.xml",
   "ok": true,
   "mtime": "2026-10-13 05:32:19",
   "err": ""
  },
  {
   "project": "定时任务",
   "file": "crontab -l（本机 root）· 126 行（含注释 53）",
   "ok": true,
   "mtime": null,
   "err": ""
  },
  {
   "project": "定时任务",
   "file": "openclaw cron list --json（本机 Gateway）",
   "ok": true,
   "mtime": null,
   "err": ""
  },
  {
   "project": "定时任务",
   "file": "/var/log/syslog（CRON 行）",
   "ok": true,
   "mtime": null,
   "err": ""
  },
  {
   "project": "学习工",
   "file": "/mnt/data/www/internal/hub/learn.json",
   "ok": true,
   "mtime": "2026-10-14 02:30:03",
   "err": ""
  },
  {
   "project": "数据心跳",
   "file": "/mnt/data/www/internal/hub/heartbeat.json",
   "ok": true,
   "mtime": "2026-10-14 02:30:02",
   "err": ""
  }
 ],
 "todo": {
  "_note": "总盘待办登记。这里的事没有可自动采集的数据源（要么等主人拍板，要么还没开工）——所以显式登记，让总盘不假装它们不存在。sync_hub.py 只读这个文件，不写。",
  "schema": "hub-todo/1",
  "updated": "2026-09-21 21:00:00",
  "source": "/mnt/data/www/internal/hub/todo.json（人工登记 · 2026-09-21 本次建立）",
  "how_to_close": "改 status：等你定 → 已定 / 已做 / 已退。改完下轮（≤30 分钟）总盘上就变。",
  "items": [
   {
    "id": "zhipu-key",
    "kind": "安全",
    "status": "等你定",
    "title": "智谱 API 密钥作废重生成",
    "detail": "这个 key 已经泄漏过（曾出现在公网可达的地方）。作废 + 重生成要去智谱后台点，只有主人能做。",
    "note": "等你操作 · 不动别的服务的配置，换 key 时要同步改用到它的服务",
    "owner": "主人"
   },
   {
    "id": "school-probe",
    "kind": "安全",
    "status": "等你定",
    "title": "学校电脑探头未上线",
    "detail": "学校那台电脑还没接入台账。一条 install.ps1 命令就能上线。",
    "note": "要主人点头，且要在那台机器上执行",
    "owner": "主人"
   },
   {
    "id": "dispatcher-logwrite",
    "kind": "改动留退",
    "status": "等你定",
    "title": "调度器的「写日志」改动：留还是退",
    "detail": "algorithm_dispatcher 加了埋点写日志（撞算法埋点 calls.jsonl 就是它写的）。原始文件已备份。",
    "note": "留 = 埋点继续有数；退 = 回到原样、埋点断流",
    "owner": "主人"
   },
   {
    "id": "three-state-ledger",
    "kind": "待开工",
    "status": "等你定",
    "title": "三态活台账（32 注册表 × 53 可调用 × 实测）是否现在做",
    "detail": "三样东西口径不同：调度器注册表 32 个、实际可调用 53 个、实测活着的又是另一个数。要不要现在合成同一本台账。",
    "note": "设备台账 ledger.json 里的「算法（8983 调度器 · 53 个）」就是这条的前置",
    "owner": "主人"
   },
   {
    "id": "trend-pricing",
    "kind": "商业",
    "status": "等你定",
    "title": "趋势评估仪价格表（9.9 / 99 / 999 / 4999）",
    "detail": "四档价格拟定好了，接入口卡在价格表没定。定了才能接上。",
    "note": "工作室台面队列第 3 位在等这个（等主人定价格表）",
    "owner": "主人"
   },
   {
    "id": "kidsbook-copyright",
    "kind": "合规",
    "status": "等你定",
    "title": "小儿书版权口径（公版 / 原创形象 / 只做工具）",
    "detail": "三条路选一条：只用公版素材、还是自己画原创形象、还是只做工具不碰内容。定了产线才能动。",
    "note": "工作室台面队列第 4 位在等这个（等主人定版权口径）",
    "owner": "主人"
   },
   {
    "id": "keep-midvalue-algos",
    "kind": "算法取舍",
    "status": "待办",
    "title": "中价值 6 个算法留下一批 · 灰名单 4 个",
    "detail": "撞算法结果里灰名单 4 个（留不留没定）；中价值的 6 个要不要留下一批。",
    "note": "依据在 /mnt/data/www/internal/hit/hits.json（gray_list / waste_list / first_batch）",
    "owner": "灵犀 · 等主人一句话"
   }
  ]
 },
 "todo_error": null,
 "cron": {
  "lines_total": 126,
  "lines_active": 73,
  "lines_comment": 53,
  "source": "crontab -l（本机 root，实测）"
 },
 "gateway": {
  "host": "本机（CN 123.249.92.159）openclaw.service",
  "jobs": [],
  "ok": true,
  "source": "openclaw cron list --json（本机 Gateway，实测）"
 },
 "screenshots": {}
}