美国亚马逊运动服饰榜单追踪 Amazon US Best Sellers · Top 100

系统健康 所有自动化都在正常运行

下面是每个自动化任务「上次成功完成」是多久以前,以及它本该多久跑一次。启动过但崩溃了不算完成——那种情况下该跑的步骤被跳过了,等于没干活。这一栏是为了让你不用靠翻日志去猜「是系统停了还是我没干活」。

任务期望周期上次成功状态
● 3 小时自主循环每 3 小时5 分钟前正常
● 每日榜单采集每天 07:1010.6 小时前正常
● 多平台趋势采集每天全量 + 每 3 小时快信号2.3 小时前34 个平台有数据
● 主动改进记录持续5.0 小时前有近期记录

改进待办 0 / 13 项超期

这是系统手上排着的活:每项本该多久跑一次、上次跑是什么时候。干活监督(每分钟检查一次的那个任务)每小时会挑到期的全部跑掉;如果发现过去 2 小时什么产出都没有,它会不等间隔、直接开工——这就是「一发现没干活就继续改进」的落点。需要判断力或改代码的活(新功能、新分析)脚本不硬做,它会标成「待 AI 处理」写进下面的日志等我做。监督器上次运行:0.3 小时前。

任务频率上次跑状态为什么要有这项
全站死链审计每 4 小时3.8 小时前正常目录扩量会不断引入只有列表信息的 ASIN,站内链接可能变成死胡同
完整性抽检每 3 小时2.8 小时前正常比对缓存文件与数据库快照是否一致,抓解析与落库的偏差
款式词典回归每 2 小时1.8 小时前正常正则漏了 waisted 的 ed 就让 7 个中腰款消失、建议开发自家已有的款;词典错了不报错只给错结论
多平台趋势全量采集每 6 小时5.2 小时前正常全部 35 个源跑一遍约 10 分钟,按 6 小时一次控制抓取量
品牌名录补采每 4 小时3.3 小时前正常榜单里出现的品牌要补上体量、店铺等信息,供品牌排行与情报使用
快信号采集(工厂+社媒)每小时47 分钟前正常工厂批发与社媒搜索是最早的信号,且最便宜,值得每小时刷
分析冒烟测试每 2 小时1.3 小时前正常分析都是页面实时算的、没测试,坏了只有用户点开才知道
数据质量门禁每 2 小时1.3 小时前正常七项断言:新鲜度/类目全/价格合理/名次唯一/关联完整/标题非空/趋势源覆盖
阈值自我改进每 6 小时3.8 小时前正常只调阈值不改代码:记录旧值、原因、取值范围,每天最多动一步
新品榜刷新每 6 小时3.8 小时前正常16 个类目的新品榜,新品开发板块的核心数据源
品牌目录扩量每小时5 分钟前正常榜单每类目只 100 名,只看榜单会严重低估品牌体量
补采商品详情每小时5 分钟前正常榜单只给列表字段,价格历史/尺码/评论要单独抓;按预算小步跑
品牌情报留痕每小时5 分钟前正常离线计算,不打网络;给 /intel 积累每日基线用于画趋势

开发日志

每个月、每天、每个小时我干了什么。所有条目都写在这里,包括没干活的小时。

今天我记录的
46
定时任务另有 6 条(分开计)
今天活跃小时
13/24
其余小时无任何工作记录
本月我记录的
76
本月共 801 条(含自动)
本月有记录的天
4
31 天中的 4 天
这个日志怎么读 「我(AI)」是我实际做的工作;「定时任务」是服务器按计划自动跑的采集和自我改进, 两者分开计。用自动任务的产出冒充我干的活,这个日志就没有检验价值了。 没干活的小时显示「无记录」,不会用任何方式填空。过去 14 天有 14 天我没有任何记录:10-22、10-23、10-24、10-25、10-26、10-27、10-28、10-29、10-30、10-31、11-01、11-02、11-03、11-04 每条尽量给「依据」——你可以照着依据自己去核对,而不是只信我的描述。

2026 年 10 月 ← 上月 下月 →

格子里的数字是当天「我」记录的条数;定时任务的条数不计入颜色,只在悬停提示里显示。 点任意一天看那天的逐小时明细。

一二三四五六日
1234
567891011
12131415164617418
191020162122232425
262728293031

2026-10-16 逐小时明细(52 条)

24 小时全列出来。空行就是那一个小时我没干活。

时间谁做了什么依据
00:00— 无记录
01:00— 无记录
02:00— 无记录
03:00— 无记录
04:00— 无记录
05:00— 无记录
06:00— 无记录
07:00— 无记录
08:54我(AI)修问题 修正榜单列表页解析与自检脚本
采集链路的基础修整:listing.js 与 qa.py。
依据:tracker/listing.js、tracker/qa.py 文件时间戳
09:05我(AI)修问题 修采集流水线与价格补采脚本
pipeline.py 与 repair_prices.py。
依据:tracker/pipeline.py、bin/repair_prices.py
09: 我(AI)数据采集 打通 CSV 导入与本地服务脚本
import_csv.py、serve.sh、install_web.sh:把采集结果导入库并起站。
依据:bin/import_csv.py 等三个文件
10:27我(AI)运维 加访问自检与站点口令保护脚本
check_access.sh、set_web_auth.sh。
依据:bin/check_access.sh、bin/set_web_auth.sh
11:16我(AI)新功能 新增分析注册表
把分析做成可注册、可激活的清单,而不是写死一堆函数。
依据:improvement_log 11:16:21「新增分析注册表」
11: 定时任务自检验证 数据健康度审计通过 + 详情层缺口盘点
自动流程跑的审计:763 个商品待补详情、生成次日预测、清理过期缓存。
依据:improvement_log 11:21 多条(auto)
11: 我(AI)新功能 新增每日自我改进循环 bin/self_improve.py
审计/自修复/激活分析/给昨日预测打分/生成明日预测。
依据:bin/self_improve.py 时间戳 11:24
11: 我(AI)新功能 新增 12 个分析 + 修正预测条件与集中度口径
同一批还修了「品牌攻防改为比排名质量」、标记疑似变体合并的评论跳变。
依据:improvement_log 11:25:28 共 7 条
12:04定时任务自检验证 快照完整性抽检发现不一致(自动流程)
integrity 抽检先报不一致、再报通过,触发了我后面的排查。
依据:improvement_log 12:04-12:05(auto)
12: 我(AI)修问题 修复「维表污染快照事实」这个严重问题
维表字段混进快照事实层,会污染所有基于快照的结论。同批修了「品牌被解析成评分」。
依据:improvement_log 12:06:46 共 7 条
12: 我(AI)新功能 新增品类深潜(/categories + 单元类目页)
16 个类目逐个看内部结构,10→12 个维度。同时修了顶栏变高导致的吸顶错位。
依据:improvement_log 12:26:08 / 12:27:32
12: 我(AI)修问题 修正价格-名次相关系数方向写反(影响判断)
系数符号反了会把「越贵名次越好」读成相反结论。同批去掉模板里的无条件断言。
依据:improvement_log 12:28:51
12: 我(AI)新功能 新增品牌排行 /brands 与品牌深潜 /brand/<名称>
含品牌采集器 collect_brand.py(榜单 + 旗舰店两条渠道),并修了三处计数/口径错误。
依据:improvement_log 12:50:34 共 6 条
13:39我(AI)新功能 新增 brand_digest 留痕表与 intel CLI
品牌情报的「每天变化」需要历史留痕,做成独立表和命令行入口。
依据:tracker/store.py 13:39、tracker/cli.py 13:40
13: 我(AI)运维 把情报留痕接入每日流程与 3 小时循环
run_daily.sh 采集后立刻刷新;loop_improve.py 每 3 小时兜底。
依据:bin/loop_improve.py 13:42、bin/run_daily.sh 13:48
13: 我(AI)自检验证 修补 UI 自检的对比度盲区
原脚本每个选择器只取第一个元素,表格里的涨跌配色从没被检查过;改为遍历全部元素后,检查数 235→325。
依据:bin/check_ui.js 13:44;巡检输出「325 处检查」
13: 我(AI)新功能 写建议引擎 brand_ideas.py(新款建议 + 行动清单)
每条建议强制带「触发数字 / 前提 / 失效条件」,拒绝模板话。
依据:tracker/brand_ideas.py 13:46
13: 我(AI)新功能 完成品牌情报 8 维度与 /intel 页面
当日变化、新款信号、价格活动、竞争对抗、薄弱环节、新款建议、行动清单、历史留痕。
依据:/intel 返回 200,8 块 0 失败
13: 我(AI)修问题 修正竞争对抗模块的位次口径表述
子代理写的「两边口径一致」是错的:拿全站中位和类目内中位直接比。改为同时给出两个口径并说明不可相减。
依据:tracker/brand_rivals.py 13:50
13: 我(AI)修问题 修正留痕价格口径 + 行动建议门槛口径(两个真 bug)
价格曾从维表取(当日 $28 记成 $32);建议的门槛曾一律用主战场类目,把跑步类目商品算成 49%(真实 20%)。
依据:tracker/brand_score.py、tracker/web.py 13:51;留痕已覆盖重写
13: 我(AI)修问题 澄清并守卫品牌来源口径(slug 推断值)
原说明让人以为机制上不会有推断品牌;加 inferred_brand_rows() 守卫,出现 slug 推断位次时在页面显式披露。
依据:注入 1 行 slug 实测守卫报出 1 个 ASIN / 7 个位次
14:04我(AI)新功能 新增开放工作日志(你正在看的这个板块)
月历热力图 + 逐小时时间轴。actor 区分「我」和「定时任务」,没干活的小时如实显示空白,不用自动产出冒充我的工作。
依据:/log 返回 200;work_log 表
14: 我(AI)新功能 新增开放工作日志表与 CLI依据:python3 -m tracker.cli log --show 可看到本条
14: 我(AI)修问题 修 bug:--dry-run 空跑把品牌锁进 6 小时冷却
排查「CRZ YOGA 全商品采集」进度时发现:collect_brand.py 第 284 行无条件写 last_discover,导致 12:39 那次 --dry-run 预演(一个商品都没抓)把 CRZ YOGA 锁进 BRAND_REVISIT=6 小时冷却。已改为 dry-run 完全不写状态。
依据:修复后跑 dry-run,状态文件前后逐字节一致;日志 line 9 可见 [dry-run] 标记
14: 我(AI)分析研究 核查关注品牌采集覆盖(发现旗舰店渠道是主要缺口)
16 个重点品牌的榜单位次全部覆盖、商品详情 100% 有;但旗舰店渠道只成功 2 个品牌(G Gradual 43 个、Hanes 12 个),而 find_store_url 其实能为全部 16 个品牌定位到旗舰店地址——卡在路径级限流(503/429),不是代码问题。
依据:覆盖率表:合计 373 位次/157 商品/详情 100%/可定位旗舰店 16 个品牌
14: 我(AI)修问题 改名为「开发日志」并修正日历格对比度
按你的更正把板块从「开放日志」改名为「开发日志」(导航、页面标题、CLI、首页卡片共 12 处)。同时修掉巡检报出的真问题:日历最深一档用白字配 #3d84e0 只有 3.77:1,lvl3/lvl4 的副文字更是 3.96/2.60;改为整格统一深色字、色阶最深到 #4a90e2(5.03:1)。
依据:巡检 360 处检查全过最低 4.78;/log 标题实测为「开发日志」
14: 我(AI)修问题 修 bug:旗舰店失败后品牌被锁 6 小时(应 45 分钟)
store_skip_until 是 45 分钟,而品牌 last_discover 冷却 BRAND_REVISIT 是 6 小时。旗舰店被限流时照常推进 6 小时,会出现「店 45 分钟后就能开、品牌却要等 6 小时才再轮到」的空转。已把两个时钟对齐:旗舰店没拿到时把 last_discover 回拨,使品牌在旗舰店冷却结束时即可再入选。
依据:修复后日志输出「品牌冷却缩短到 45 分钟后再试」;库内两个剩余时间 45 vs 43 分钟
14: 我(AI)运维 挂后台任务等旗舰店冷却结束自动重试 CRZ YOGA
旗舰店连续 429 触发 45 分钟长退避。已挂 bin/wait_store.py:等到冷却结束再试,最多 8 轮,失败按脚本自带退避再等,不并发、不绕过限流。
依据:logs/crz_store_wait.log;进程 PID 53926
14: 我(AI)自检验证 确认开发日志已落库持久化
work_log 表建在 data/tracker.sqlite,含 log_date/ts 两个索引,条目不随进程重启丢失;页面每次访问直接读库,不缓存。
依据:PRAGMA 查到 idx_worklog_date / idx_worklog_ts;当前 23 条
14: 我(AI)调研学习 排查品牌全量商品采集:确认搜索端点全死、旗舰店是唯一路径
为把 CRZ YOGA 从 18 个商品扩到全量,系统测了 6 条枚举路径:桌面搜索 / 搜索+类目 / 品牌筛选 rh=p_4 / 移动搜索 gp/aw / field-keywords 全部 503,唯一的 200 是反爬验证页。结论:只有品牌旗舰店可枚举。同时发现详情页 carousel 只有 69% 是本品(16 个里 5 个是 BMJL/PINSPARK/THE GYM PEOPLE 等竞品),所以不能拿 carousel 当品牌商品来源,否则会把竞品写进自家目录。
依据:bin/probe_endpoints.js 输出 6 条路径状态;carousel 精度 11/16=69%
14: 我(AI)新功能 重写旗舰店爬虫:遍历店内全部子页 + 拦截 XHR
旧版只打开旗舰店首页滚动一次,这是「一个品牌只能拿几十个商品」的直接原因——品牌店商品分散在多个 pageId(导航分类 tab / Shop all),只爬首页等于只看了目录第一页。新版 tracker/brand_store_full.js:拦截 XHR 找服务端商品 JSON、抽取店内所有 /stores/page/<id> 链接逐个访问、每页内部滚动展开,仍不绕过限流。
依据:tracker/brand_store_full.js;已接入 collect_brand.crawl_store
14: 我(AI)新功能 新增品牌目录扩量器 bin/expand_catalog.py(图遍历 + byline 核对)
榜单每类目只 100 名,所以只看榜单严重低估品牌体量。新脚本从已知商品出发,沿商品页关联模块(carousel id_list)逐层向外走,每个候选都抓页面读 byline 核对归属,对得上才登记。实测首批 10 个候选 10/10 命中;竞品 EZRUN / THE GYM PEOPLE / BMJL 等被正确挡掉。候选与结论写进 catalog_expand 表,可断点续跑、不重复请求。
依据:bin/expand_catalog.py;CRZ YOGA 榜单 20 个 → 已登记 36 个;判定 hit18/miss2
14: 我(AI)修问题 修缺口:图遍历新发现的商品拿不到详情数据
collect_brand.known_asins 只从 snapshots(Top-100 榜单)取 ASIN,所以旗舰店/图遍历发现的商品会被登记进目录,却永远不会进入详情采集队列——等于编了目录没编内容。已拆成 list_asins(只看榜单)与 known_asins(合并 brand_discovery),日志也改成分别报两个数。
依据:修后 CRZ YOGA 榜单 20 个 / 已知 32 个;G Gradual 榜单 22 / 已知 60
14: 我(AI)新功能 把目录扩量接进 3 小时自主循环 + 情报页加目录覆盖卡
扩量进 loop_improve(每轮最多 2 个重点品牌、每品牌 60 个预算),让目录在无人干预下持续变大;/intel 新增「商品目录覆盖」卡,把榜单内/已登记/已有详情/待补详情/已核对候选五个数直接摆出来,进度可核对。
依据:/intel 覆盖卡实测:榜单20 已登记36 有详情18 待补18 已核对20
15:17我(AI)新功能 新增「新品开发」板块:多平台信号 → 具体该开发什么款式
用户要求新板块,推荐 CRZ YOGA 该开发的款式,款式数据自己去网上找。先实测 20 个平台源,确认哪些真的拿得到(搜索端点 /s?k= 恒定 503 已确认;Pinterest Trends、TikTok Creative Center、AliExpress、Gymshark、Vuori、Beyond Yoga、Alo、Shein、Bing Shopping 可用;lululemon/Reddit/Etsy/Google Trends 被拦)。建 tracker/style_lexicon.py(6 维度 60+ 款式属性词表)、tracker/sources.js(多平台采集)、bin/collect_trends.py(入库)、tracker/new_styles.py(缺口分析 + 开发建议)、/newstyles 页面。
依据:/newstyles 200 25137B;新品榜 799 商品/16 类目;竞品当季新款 262 条/4 个品牌
15: 我(AI)修问题 发现并规避一个会导致重复开版的坑:标题变体灌水
同一个商品在 products(详情采集)和 snapshots(榜单采集)各存一份标题,榜单那份常带「| 营销后缀」,变体商品还附 28"/30"/32"。不归一化的话,自家分母从 19 被灌到 32,「普及率」被系统性低估,会把其实已经有的款式判成缺口,直接导致重复开版。已加标题归一化(切掉 | 后缀、去长度数字、去标点小写)。修后如实发现:CRZ YOGA 其实有一款 Softretch 宽腿裤,相关建议已改成「补功能」而非「从零开版」。
依据:归一化前 32 条 → 归一化后 19 条;宽腿 1 款、喇叭 0 款
15: 我(AI)新功能 新品榜采集打通(16 类目 799 个新品),并把趋势数据接进每日/3小时自动化
亚马逊 /gp/new-releases/fashion/<node>/ 实测返回 200(与 /s?k= 不同路径),每类目 50 个「新上架且卖得动」的商品,带真实名次/价格/评论数,是判断什么款式正在起量最硬的证据。已接 run_daily.sh(每日)与 loop_improve.py(3 小时,只跑竞品官网那部分)。趋势变化检测已就位:两个时点后会开始输出「正在变多的款式」,用来领先市场而不是追已经做出来的结果。
依据:new_releases 表 799 行/16 类目;trend_signals 6 个源;run_daily.sh 已加 trends 步骤
15: 定时任务数据采集 3 小时自主循环完成
品牌补采 60 个 + 品牌深潜 2 个品牌/40 个详情 + 完整性抽检 + 自我改进 + 情报留痕
依据:data/state/loop.json 心跳;logs/cron/loop.log
16:00我(AI)新功能 把趋势数据源从 10 个扩到 30 个:实测 66 个平台后只接可用的
用户要求数据源要非常广。写了 bin/probe_broad.js 真浏览器实测 66 个平台,只有 35 个拿得到(lululemon 的 HTTP2 握手直接断连、Reddit/Etsy/ASOS/H&M/Zara/Uniqlo/Macy/eBay/Adidas 是 403、Google Trends 429、Under Armour 418)。可用源覆盖 5 类:工厂批发 3 个(Made-in-China/FashionGo/AliExpress)、社媒搜索 4 个(Pinterest Trends/TikTok Creative/YouTube/小红书)、竞品官网 14 家(Gymshark/Vuori/Beyond Yoga/Alo/Athleta/Sweaty Betty/Outdoor Voices/Girlfriend Collective/Tala/Halara/Skims/Varley/Nike/Puma)、零售 6 个(Bing Shopping/Shein/Temu/Walmart/Target/Old Navy)、时尚媒体 7 个(Who What Wear/Vogue/Harper Bazaar/Refinery29/PopSugar/WWD/Highsnobiety)。全部接进 tracker/sources.js,并支持分组:3 小时循环只跑快信号组(工厂+社媒),每日跑全量。
依据:bin/probe_broad.js 实测 66 源→35 可用;traffic_signals 30 个源有数据、247+ 条记录
16: 我(AI)修问题 给重 JS 零售站加通用 XHR 商品名拦截(不写站点选择器)
Temu/Walmart/Target/Shein 的商品全在前端异步加载,滚动到底 DOM 里也没有:Walmart 只有 11 个 alt、Target 的 __NEXT_DATA__ 里全是类目不是商品,通用 DOM 抽取抽到 0 条。改为监听网络响应、从 JSON 响应体里捞「像服装商品名的字符串」。第一版关键词太松(top 命中了 CSS 的 top:0),抓回 57 条全是 JS/CSS 垃圾;加结构过滤(代码里必有 { } ( ) ; = : 等符号)+ 日志词黑名单后,离线验证:垃圾挡 4/5、真商品名收 5/5。修后 Shein 18、Target 20、Old Navy 24、Walmart 10 条,这些源从「采到页面但零数据」变成可用。
依据:bin/probe 对比:修前 walmart 0 条 → 修后 10 条;_filtertest 离线验证结果
16: 我(AI)修问题 缺口分析改用「跨源交叉验证数」,并修了排序把自家强项排在最前的错误
有了 30 个源之后,sources 字段从「竞品里有几个品牌提到」改成「多少个独立平台提到」——这是广域采样真正的价值:单平台词频可能只是它的选品偏好,多平台同时出现才是市场信号。同时发现排序错误:原来按来源数排序,导致「紧身裤」「高腰」这些最普及、也恰恰是 CRZ YOGA 已经做透的品类排在最前面,把真空白挤下去。改成按缺口强度排序、来源数只作次级排序;并加了单源噪音过滤(只被一个平台提到的属性不进缺口表)。
依据:/newstyles 缺口前 5:有口袋 0.307、轻薄透气 0.247、加绒 0.220、束脚裤 0.201、高腰 0.177
17:36我(AI)修问题 修新品开发板块参考款图「点进去没有这个商品」
用户报的 bug。原因:图链到了本站 /product/<ASIN>,但新品榜的 ASIN 只存在于 new_releases 表,没进 products/snapshots(那两张表只收做过详情采集的商品),所以点进去一律显示「没有这个商品」。改为图直接指向 https://www.amazon.com/dp/<ASIN> 并加 target=_blank,新标签页打开亚马逊原商品页;只有本地确实有详情的商品才额外给「本站数据」小链接(本地有历史价格与名次曲线,亚马逊页面上看不到)。真浏览器实测:点击后标签数 1→2,新标签 URL 为 amazon.com/dp/...,标题为真实商品名 COPYLEAF Flared Leggings。
依据:bin/_clicktest 输出:target=_blank、点击后标签数 1→2、新标签标题为真实商品名;189 个图链全部带 target
17: 我(AI)修问题 根治同类死链:/product/ 对「只有列表信息」的商品不再撞墙,并加全站死链审计
参考款图只是症状,同类链接在品牌情报、品牌报告等多处都有,而目录扩量后库里出现大量只有列表信息的 ASIN(CRZ YOGA 18→300+,外加新品榜 799 个),逐个审计调用点不现实,所以直接改 view_product:没有详情时改为显示「我们知道的一切」(标题/品牌/类目/名次/价格/评分/数据日期)+ 数据来源 + 亚马逊原页链接,并明确写出「还没有做过详情采集」——用户必须能分清「商品不存在」和「我们还没采它」,这两件事含义完全不同。同时新增 bin/check_links.py 全站死链审计,爬 14 个页面共 364 个内部链接,现在 0 死链。
依据:bin/check_links.py:364 个内部链接、0 死链;/product/B0HDZG9WTG 现在显示类目/名次/价格/评分 + 亚马逊链接
17: 我(AI)修问题 记录两个被「静默吞掉」的错误(比报错更危险)
1) fallback 里查 new_releases 时多写了 brand 列(该表没有这一列),SQL 直接报错,却被外层 except sqlite3.Error 吞掉,导致 fallback 静默失效、页面仍旧显示「没有这个商品」——修完第一次验证才发现。2) 新写的死链审计第一版用纯文本匹配「没有这个商品」,结果把 /newstyles 自己说明文案里的这几个字报成死链(误报)。两处都已修正:列名改正;审计改为只匹配页面级标记 <h1>没有这个商品。
依据:/product/B0HDZG9WTG 修前 h1=没有这个商品、修后正常;check_links 修前误报 /newstyles、修后 0 问题
18:00— 无记录
19:59定时任务修问题 ⚠ 自主循环已 4.5 小时没有运行
看门狗巡检发现自主循环异常。这类问题不会让页面报错、也不会产生任何日志条目,只能靠主动巡检发现,否则表现就是「开发日志长时间空白」。
依据:last_run=2026-10-16T15:30:57;循环每 3 小时一次,超过 4.5 小时说明调度或环境坏了。本轮失败步骤:无记录
20:02我(AI)修问题 事故:自主循环静默崩溃 2 小时 20 分钟,是用户发现的、不是系统报的
用户看开发日志问「你已经很长时间没有干活了」。查证属实:18:00 那轮 3 小时循环跑到 `node tracker/sources.js` 时抛 FileNotFoundError——cron 的 PATH 是 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,而 node 装在 /home/ubuntu/.local/node/bin。run() 只捕了 TimeoutExpired、没捕 OSError,异常直接冒到顶层把整轮弄死,后面 5 个步骤(趋势入库/死链审计/情报留痕/记账/心跳)全部跳过;又因为崩在记账之前,开发日志里一条记录都没有。这比崩溃本身更严重:系统对自己的失败保持沉默,只能靠人翻日志发现。
依据:logs/cron/loop.log 里 18:25:36 的完整堆栈 FileNotFoundError: node;data/state/loop.json 完成时间仍停在 15:30;开发日志 17:36→19:56 空白
20: 我(AI)修问题 修循环静默崩溃四处:失败可见 / 异常兜底 / PATH 自举 / 崩溃留痕
按重要性排序:1) 失败必须可见——每个步骤失败都登记,循环结束写进开发日志(有失败就记「N 个步骤失败」并列出是哪几步);2) run() 捕获 OSError,缺可执行文件只算「这一步失败」,不再弄死整轮;3) PATH 自举——脚本自己找 node(含 nvm 路径),不依赖 cron/systemd/手工的 PATH,已在模拟 cron 环境下验证通过;4) 顶层兜底——连 main 都崩了也写一条「循环崩溃」进开发日志。另外心跳增加 started_at 与 finished:只看「上次完成时间」分不清「没跑」和「跑一半崩了」,这两种情况含义完全不同。
依据:模拟 cron PATH 下 ensure_tool_paths() 找到 /home/ubuntu/.local/node/bin 且 node --version 正常;重跑循环日志首行显示「PATH 自举」
20: 我(AI)新功能 看门狗加「循环是否停摆」巡检 + 开发日志页加系统健康卡
看门狗原来只检查「今天的每日快照有没有生成」,完全不看循环心跳,所以对这次崩溃毫无反应。现在同时查循环:超过 4 小时没完成、或「开始了但没标记完成」(跑一半崩了)、或有失败步骤,都会报警并写进开发日志,三种情况分开表述。另外在开发日志页顶部加了「系统健康」卡,直接列出每项自动化的期望周期、上次成功时间与状态,超期标红——用户不该靠翻日志去猜「是系统停了还是我没干活」。
依据:/log 顶部现在显示「■ 3 小时自主循环 | 每 3 小时 | 4.5 小时前 | 超过 4 小时没完成」;watchdog 已写入「⚠ 自主循环已 4.5 小时没有运行」
20: 定时任务数据采集 3 小时自主循环完成
品牌补采 60 个 + 品牌深潜 2 个品牌/40 个详情 + 完整性抽检 + 自我改进 + 情报留痕 + 多平台采集 + 死链审计
依据:data/state/loop.json 心跳;logs/cron/loop.log
20: 我(AI)新功能 给 63 条开发建议加优先级分层,并把「验证强度」与「市场拥挤度」拆开
原来 63 条建议按证据强度平铺,看完不知道先做哪条——全都重要等于全都不重要。第一版分层阈值(6/4/2)是拍脑袋定的,结果 P0 一条都没有:因为广度只看「新增属性」,而它天然是小众词,实测分布只有 2/3/4。按真实分布重定为 4/3/2。更关键的是把两个不同的问题拆开了:广度=改动被多少平台验证(可信度),体量=市场已有多少同类(拥挤度)。「广度4+体量6」与「广度4+体量151」含义完全相反——前者多平台在讲、市场还没起来(早期机会),后者所有人都已进场(红海)。混在一起排会把两者当成同一件事。现在标成 P0优先/P1本季/P2计划,并单列「早期机会/正在起量/已进红海」。
依据:/newstyles:32 条可执行建议 → P0 1 条、P1 10 条、P2 21 条;时机分布 早期机会3/正在起量18/已进红海11;P0 恰好是「翻折腰头喇叭裤」,与外部研究「翻折腰头取代高腰」吻合
20: 我(AI)修问题 循环崩溃修复已验证:完整跑完一整轮,node 步骤恢复正常
在模拟 cron 的 PATH 下重跑自主循环,从 19:59:50 跑到 20:26:42 完整结束,心跳 failures=[]、ok=true、finished=true。关键验证点:sources.js 这个之前崩掉的步骤在 20:24:01 正常执行,多平台趋势源从 30 个涨到 34 个平台。死链审计同步接入循环,本轮检查 369 个内部链接、0 死链。
依据:data/state/loop.json: last_run=2026-10-16T20:26:42, failures=[], ok=true;logs/cron/loop.log 完整 12 个步骤无异常
21:26定时任务数据采集 3 小时自主循环完成
品牌补采 60 个 + 品牌深潜 2 个品牌/40 个详情 + 完整性抽检 + 自我改进 + 情报留痕 + 多平台采集 + 死链审计
依据:data/state/loop.json 心跳;logs/cron/loop.log
22:00— 无记录
23:00— 无记录