每个工具页底部那行「最后核对」到底说明了什么(附站内 376 条的日期分布)

369 条记录停在同一天不是腐烂,是批次。日期能证明什么、不能证明什么,哪些字段坏得快,以及怎么用 30 秒自己复核一次。

发布于 2026-09-18最后更新 2026-09-18中文约 5 分钟数据时效目录方法可信度

全部数字来自 2026-09-18 对 376 条已发布记录的一次统计:日期分布数 `lastVerifiedAt`;「开源 / 有 API」取布尔字段 `openSource`、`hasApi`;「提到免费」= `pricing.detail.zh` 含「免费」或 free;「同一行含金额」= 该串再出现数字;「无数字」= 该串不含 0-9。长度统计按字符数取中位数。复算:`npx tsx` 里 `import { tools } from "@/lib/tools"` 后按上面的字段统计,或跑 `npm run validate:tools` 看时效那行。180 天窗口与 30 天提前预警写在 `src/lib/growth-snapshot.ts`(`catalogFreshness`,窗口默认 180 天、提前 30 天提醒),由 `scripts/validate-tools.ts` 调用——是代码常量,不是口头承诺。模型类数据基准日期:2026-09-15(数据集更新后此日期与正文数字一并复核)

先说结论:那行日期是一句范围声明,不是一句保证

每个工具详情页底部都写着「最后核对 2026-08-29」。它不承诺「核对日之后还这样」, 它承诺的是「这句话是在那天、对着官网和定价页写下的」。这两件事的差别,就是这篇文章的全部内容。

一、站内的日期长什么样

376 条已发布记录的 lastVerifiedAt 只有三个取值:2026-08-29 有 369 条,2026-09-14 有 4 条,2026-09-15 有 3 条。 所以「369 条停在同一天」听起来像整站三年没更新,其实是反过来的:我们做一次全量核对,绝大多数条目就是在那一天写就的; 之后只有零星条目因为改动过内容而单独复核。用 npx tsx 读站内同一个加载器(src/lib/tools,发布口径 376 条)就能数出来。

为什么这个分布重要:判断一个目录站靠不靠谱,不能看「有没有日期」,要看「日期是怎么分布的」。 如果 376 条里有 300 个不同的日期,说明维护是零敲碎打的,坏掉的条目会被新条目掩护; 如果全挤在一天(我们就是这样),说明有一次明确的普查,普查日之后的变化它一概不知道——这句话应该由站点自己说, 而不是等读者发现。

二、日期能证明什么、不能证明什么

能证明:

不能证明:

三、我们自己的报警器长什么样

npm run validate:tools 每次跑都会打一行时效:条数、最早一条、多少天。规则是窗口 180 天、提前 30 天开始点名, 而且故意非阻断——把「太久没核对」做成硬失败,最后一定有人为了跑通构建把阈值改掉,那是自欺。 同一件事现在也被搬进了 GitHub Actions:每周日一条内容巡检流水线跑数据时效、搜索索引漂移与 AdSense 就绪度 (.github/workflows/content-audit.yml),结果写进流水线摘要,红不红都不拦人。

按现在的分布推算,369 条那批会在 2027-02 前后开始被预警。这一句是我们自己给自己下的定时器,写在这里就是为了让它能被指着问。

四、30 秒自查(不需要相信我们)

  1. 看日期,再看差值。你要买的不是「这个工具」,是「这个工具此刻的价格与额度」。核对日距今越久,越要重新看。
  2. 打开厂商的 changelog。没有公开 changelog 的产品,功能承诺的时效性最差——这条比日期本身更能预测「页面会不会写歪」。
  3. 只核你要用的那个字段。要买年约,就核价与退款条款;要用 API,就核 hasApi 与配额; 不关心视频生成就别管那一类。整页核对是幻觉,字段核对才可完成。

五、这套做法管不了什么(诚实边界)

一句话版本

日期告诉你的是范围,不是保证;结构字段能撑很久,价格与额度一天都不一定撑得住。 读任何目录(包括我们)时,先找那行日期,再决定要重新核哪几个字段。

常见问题

为什么不直接做实时价格?
因为「实时」要靠抓取,而抓取会把厂商博客、活动页和第三方测评当事实源,那些内容写的是宣传口径。我们宁愿把「哪天抄的」写清楚,让读者自己判断要不要复核,也不想给一个看起来精确、来源说不清的数字。
为什么不每周把 376 条全部重核一遍?
重核一条要打开官网、定价页、changelog,把原文抄进对应字段,还要保证不改写成厂商口吻——这个动作按人天算。我们的替代方案是把「多久没核」变成可见数据:时效报警器每周在 CI 里跑一次,超窗口的条目被点名,然后按需求量重那几条。
日期这么旧,我还能用这些记录做决定吗?
可以,但把用途降级:用它们做筛选和横向比较(谁有免费档、谁按席位、谁有 API),这部分的坏得慢;别把它们当付款依据。付款前只核两件事——定价页当天的内容,以及退款条款。我们页面上那句「以厂商定价页为准」就是为这个写的。

延伸阅读:这些条目可以直接开通

  • GitHub Copilot$10/月 / $19/用户/月决定前把这条记录底部的日期与厂商定价页对一次。前往官网

What the verification date at the bottom of a tool page actually tells you (with the date spread across all 376 records)

369 records share one date because that was the batch, not because they rotted. What the date proves, what it cannot, which fields decay fastest, and a 30-second self-check.

Published 2026-09-18 · Last updated 2026-09-18 · English reading time about 5 min

Every number comes from one pass over the 376 published records on 2026-09-18: the date spread counts `lastVerifiedAt`; open-source and API claims read the boolean fields `openSource` and `hasApi`; 'mentions free' means `pricing.detail.zh` contains 免费 or free; 'also carries an amount' means the same string contains a digit; 'no digit at all' means it contains none of 0-9. Lengths are character counts, median over the whole set. Reproduce it with `npx tsx` by importing `{ tools } from "@/lib/tools"` and counting those fields, or run `npm run validate:tools` for the freshness line. The 180-day window and the 30-day advance warning are code constants in `src/lib/growth-snapshot.ts` (`catalogFreshness`), called from `scripts/validate-tools.ts` — not a promise.

The short version first: the date is a scope statement, not a warranty

Every tool page ends with a line like 'last verified 2026-08-29'. It does not promise that today is the same. It promises that the sentence was written, on that day, against the vendor's own site and pricing page. The gap between those two claims is the whole article.

1. What the dates in our catalog actually look like

The 376 published records only ever use three values for lastVerifiedAt: 369 records on 2026-08-29, four on 2026-09-14, three on 2026-09-15. So the fact that 369 records share one date is not evidence of three years of neglect — the opposite happened. We did one full pass, almost everything was written that day, and since then only a handful of records were re-checked because their content changed. You can count it yourself by loading the same module the site uses (src/lib/tools, published count 376) with npx tsx.

Why the distribution matters. Judging a directory by whether it has dates is useless; judge it by how the dates are spread. 300 different dates means maintenance is incremental, and stale entries hide behind fresh ones. All dates in one day — our case — means there was a census, and everything after census day is unknown to us. That is a sentence the site should say out loud rather than let readers discover.

2. What the date proves, and what it cannot

What it proves:

  • the line was not copied from a slogan. What we store in pricing.detail.zh is the vendor's own wording from that day, for example 'Free / Plus $20/mo / Pro $200/mo'.
  • we wrote it in a falsifiable form: anyone who opens the pricing page the same day can check it, and can call it wrong if it is.

What it cannot prove:

  • that it is still true today. Vendors redesign, raise prices, turn a free tier into a trial; they do not notify directories.
  • that our whole picture of the product is current. The fields that decay fastest are price and free-tier limits; the slowest are structural facts: openSource is true for 37 records and hasApi for 53, and those move a few times a year. Quotas are the other end of the spectrum: 287 records mention 免费 or free, 211 of them also carry an amount in the same line, yet pricing.detail.zh has a median length of 16 characters (longest 96), and 76 of those 287 contain no digit at all. So what follows 'free' is usually a status, not a quota.

3. The alarm we installed for ourselves

npm run validate:tools prints a freshness line every run: how many records, the oldest one, how many days ago. The rule is a 180-day window with a 30-day advance warning, and it is deliberately non-blocking — make 'stale data' a hard build failure and someone eventually raises the threshold to unblock the pipeline, which is self-deception. The same check now also sits in GitHub Actions: a weekly content audit (.github/workflows/content-audit.yml) runs data freshness, search-index drift and AdSense readiness, and writes the result into the run summary.

Extrapolating from the current spread, the 369-record batch starts tripping that alarm around February 2027. We are printing our own timer here precisely so that it can be pointed at.

4. A 30-second self-check (no need to trust us)

  1. Read the date, then the gap. You are not buying 'this tool', you are buying 'this tool at today's price and quota'. The older the check, the more you re-read.
  2. Open the vendor changelog. A product with no public changelog has the least durable feature promises — that predicts whether a directory page drifts better than the date itself.
  3. Verify only the field you are about to rely on. Signing an annual plan means price and refund terms; building on the API means hasApi and quotas. Checking the whole page is an illusion; checking one field is finishable.

5. What this practice cannot do (stated plainly)

  • We keep no historical snapshots. Only 'the value we copied' plus 'the day we copied it', so we cannot prove 'this record has already changed' — we can only mark which day it reflects.
  • We do not run scrapers. Scraping turns vendor blogs and third-party reviews into sources of fact, and those are written to sell. That is why a full pass is manual, and why the dates cluster.
  • The date is not a score. 'A fresh date' does not mean 'a good product'. It answers how new the sentence is, not whether it is correct.

One-sentence summary

A verification date describes the scope of a claim, not its guarantee; structural facts age slowly, prices and quotas may not survive a day. When reading any directory — ours included — find that date first, then decide which fields you still need to re-check.

FAQ

Why not just make the prices live?
Because 'live' means scraping, and scraping turns vendor blogs, campaign pages and third-party reviews into sources of fact — all written to sell. We would rather print the day we copied something and let you decide whether to re-check it than show a number that looks precise but cannot name its source.
Why not re-verify all 376 records every week?
Re-verifying one record means opening the site, the pricing page and the changelog, copying the wording into the right field, and making sure nobody rewrites it into marketing voice — that costs human-days at scale. Our substitute is to make staleness visible: the freshness alarm runs weekly in CI, overdue records get named by slug, and we re-check in the order readers actually need.
The dates are old. Can I still decide on these records?
Yes, but narrow the job. Use the records to filter and compare — who has a free tier, who prices per seat, who exposes an API — those decay slowly. Do not use them as a payment basis. Before paying, check exactly two things: the pricing page as it reads that day, and the refund terms. That is why every page carries the line about deferring to the vendor's pricing page.

Where to go from here

  • GitHub Copilot$10/mo / $19/user/moBefore deciding, put the date at the bottom of this record next to the vendor's pricing page.Open the site