diff --git a/apps/docs/scripts/auth-cli.ts b/apps/docs/scripts/auth-cli.ts index be45974..ce79240 100644 --- a/apps/docs/scripts/auth-cli.ts +++ b/apps/docs/scripts/auth-cli.ts @@ -182,9 +182,9 @@ async function main() { assert.equal(researchResponse.status, 200, "authenticated research API"); assert.ok(researchResponse.headers.get("cache-control")?.includes("no-store")); const research = await researchResponse.json(); - assert.equal(research.companies.length, 1198); + assert.equal(research.companies.length, 1199); assert.equal(research.categories.length, 11); - assert.equal(research.evidence.length, 4646); + assert.equal(research.evidence.length, 4653); assert.equal(research.observations.length, 453); assert.equal((await request("/api/research/ai-companies", { method: "POST", headers })).status, 405); const researchPage = await request("/docs/other-research/ai-company-research/overview", { headers }); diff --git a/apps/docs/tests/research.test.ts b/apps/docs/tests/research.test.ts index fac49f4..3b12429 100644 --- a/apps/docs/tests/research.test.ts +++ b/apps/docs/tests/research.test.ts @@ -123,8 +123,8 @@ test("research revisions share the authentication database and preserve replay l for (let i = 0; i < 20; i++) consumeCode(config, "invalid"); assert.equal(consumeCode(config, "invalid"), "limited"); const initial = readResearchSnapshot(); - assert.equal(initial.companies.length, 1198); - assert.equal(initial.evidence.length, 4646); + assert.equal(initial.companies.length, 1199); + assert.equal(initial.evidence.length, 4653); assert.equal(initial.observations.length, 453); assert.deepEqual(initial.candidateBatches, seed.candidateBatches, "candidate gaps persist in the same database metadata"); assert.deepEqual(initial.directoryRechecks, seed.directoryRechecks, "follow-up classifications persist without rewriting the discovery audit"); @@ -164,7 +164,7 @@ test("research validation rejects broken evidence and unsafe source links", () = test("reviews link explicit companies without turning global or excluded cases into companies", () => { const snapshot = structuredClone(seed) as ResearchSnapshot; - assert.equal(snapshot.reviews.filter((r) => r.scope === "companies").length, 209); + assert.equal(snapshot.reviews.filter((r) => r.scope === "companies").length, 210); assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 143); assert.equal(snapshot.reviews.filter((r) => r.scope === "excluded-candidate").length, 44); const review = snapshot.reviews.find((r) => r.id === "R4")!; @@ -185,11 +185,11 @@ test("reviews link explicit companies without turning global or excluded cases i test("disclosure counts exclude client income, biographies, targets and duplicate milestones", () => { const snapshot = seed as ResearchSnapshot; const summary = categorySummary(snapshot); - assert.equal(summary.reduce((n, c) => n + c.count, 0), 1198); + assert.equal(summary.reduce((n, c) => n + c.count, 0), 1199); assert.equal(summary.reduce((n, c) => n + c.self, 0), 58); assert.equal(summary.reduce((n, c) => n + c.estimate, 0), 2); assert.equal(summary.reduce((n, c) => n + c.platform, 0), 19); - assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 1119); + assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 1120); assert.equal(snapshot.companies.find((c) => c.name === "Rork")?.revenueStatus, "unknown"); assert.equal(snapshot.companies.find((c) => c.name === "Result")?.revenueStatus, "unknown"); assert.ok(snapshot.observations.filter((o) => o.selection === "signal").every((o) => o.scope === "公司整体")); @@ -224,7 +224,7 @@ test("service run rates, legacy freight revenue and paid adoption do not become test("technical reviews keep accessible materials separate from tested capabilities", () => { const snapshot = structuredClone(seed) as ResearchSnapshot; - assert.equal(snapshot.companies.filter((c) => c.technicalReview).length, 183); + assert.equal(snapshot.companies.filter((c) => c.technicalReview).length, 184); assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "public-artifact").length, 26); assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "independent-test").length, 1); assert.equal(snapshot.companies.find((c) => c.id === "AI051")?.revenueStatus, "unknown"); @@ -512,7 +512,7 @@ test("unreconciled directory financials remain source reviews instead of income assert.ok(review.evidenceIds.includes("PH-TANA-DR")); assert.equal(reviewCompanyIds(snapshot, review).length, 0); assert.ok(!snapshot.observations.some((o) => o.evidence === "PH-TANA-DR")); - assert.equal(snapshot.candidateBatches!.flatMap((b) => b.records).filter((r) => r.status === "pending-year").length, 131); + assert.equal(snapshot.candidateBatches!.flatMap((b) => b.records).filter((r) => r.status === "pending-year").length, 130); }); test("product pivots and founder histories do not become new company years or current revenue", () => { diff --git a/content/research/ai-companies.seed.json b/content/research/ai-companies.seed.json index 7ddc8e3..bdf91e8 100644 --- a/content/research/ai-companies.seed.json +++ b/content/research/ai-companies.seed.json @@ -1,5 +1,5 @@ { - "version": "2026-10-31-sacra-targeted-1", + "version": "2026-10-31-ada-entity-1", "asOf": "2026-10-31", "scope": "全球公开资料研究:保留首批个案,并扩展核查2025—2026八个YC批次候选池;成立年份以官方公司页面字段为依据。", "limitations": [ @@ -37690,6 +37690,51 @@ "SACRA1-GI-CODE" ] } + }, + { + "id": "AI107", + "name": "Ada.im / ChartGen AI", + "url": "https://ada.im/", + "channel": "S04", + "cat": "C05", + "year": 2025, + "team": null, + "location": null, + "business": "以LLM/Agent执行数据清洗、SQL查询、文档及分析报告,提供API/Dify连接。", + "buyer": "业务分析人员、企业团队和个人分析用户", + "delivery": "网页分析应用及API文档;实际质量、企业部署与活跃付费规模未独立验证", + "notes": "Deep Analysis法人2025注册与条款品牌相互对应,按同一公司登记,不将品牌更名拆成两家;业务首次运营/资产沿革仍待核。不合并近名Ada客服公司,示例客户收入和分析结果非本公司收入。", + "cohort": "条款运营者与ACRA同名唯一公司2025-06-04注册;不是仅依据2025产品发布", + "teamBasis": "ACRA董事人数非员工人数,精确现员未知", + "price": "有订阅/日票/积分与免费额度说明,现价入口无公开正文;币种、当前金额及企业合同待核", + "stage": "网页与公开文档可访问,收费规则有说明,未实际使用或独立测效", + "sourceType": "公司条款/文档、ACRA公开注册接口", + "evidenceIds": [ + "PHALL25-ADA-PH", + "PHALL25-ADA-HOME", + "PHALL25-ADA-TERMS", + "ADA1-REGISTRY", + "ADA1-TERMS", + "ADA1-HOME", + "ADA1-DOCS", + "ADA1-BILLING", + "ADA1-API", + "ADA1-PRICE-ACCESS" + ], + "revenueStatus": "unknown", + "businessModel": "数据分析订阅及积分消耗/API;日票、充值、赠送与经常性收入分开", + "entityBasis": "Deep Analysis Pte. Ltd.,ACRA UEN202524428Z;条款同名且列Ada.im/ChartGen,不把注册地址当实际所在地;集团及业务资产沿革待核", + "classificationBasis": "按横向数据分析/报告应用归C05,未证明自研基础模型或独立技术领先", + "technicalReview": { + "level": "description", + "reviewedAt": "2026-10-31", + "summary": "官网及公开API/功能文档支持产品任务描述;未取得可复现实验、公开代码或独立测试,不接受无幻觉保证为实测结论。", + "evidenceIds": [ + "ADA1-HOME", + "ADA1-DOCS", + "ADA1-API" + ] + } } ], "observations": [ @@ -95915,6 +95960,83 @@ "kind": "公开研究目录/公司与投资方原始资料核查", "summary": "复核WixQ2附件相关段落:集团期末ARR和分部收入、Base44计算/推理成本及下半年约60%非GAAP毛利预期;定义纳含Base44的订阅MRR年化。", "limitation": "仅读相关财务/定义段落;集团数字不是Base44独立经营收入,预测不是已实现毛利,不将Sacra估算与管理层预期视独立审计。没有新增或重定旧财务金额/日期。" + }, + { + "id": "ADA1-REGISTRY", + "companyId": "AI107", + "title": "Deep Analysis官方注册记录", + "url": "https://data.gov.sg/api/action/datastore_search?resource_id=d_acbc938ec77af18f94cecc4a7c9ec720&q=202524428Z&limit=5", + "publishedAt": null, + "accessedAt": "2026-10-31", + "kind": "公司原始资料与官方注册补核", + "summary": "ACRA公开接口唯一记录:DEEP ANALYSIS PTE. LTD.,UEN202524428Z,2025-06-04注册,Live Company。", + "limitation": "仅读登记字段;董事3名不是员工,登记地址不等实际办公室,注册日不等产品首发或实际经营起点;数据集按月更新。" + }, + { + "id": "ADA1-TERMS", + "companyId": "AI107", + "title": "Ada与ChartGen同一条款主体", + "url": "https://ada.im/docs/termOfService", + "publishedAt": "2026-01-16", + "accessedAt": "2026-10-31", + "kind": "公司原始资料与官方注册补核", + "summary": "条款列Deep Analysis Pte. Ltd.,并将ChartGen、Ada.im与Deep Analysis列为公司商标;服务为AI数据分析应用。", + "limitation": "名称与官方登记匹配,但条款未印UEN;不合并加拿大Ada客服等近名公司。自动续费条款表述需以实际订单核,商标自述非独立商标查册。" + }, + { + "id": "ADA1-HOME", + "companyId": "AI107", + "title": "Ada当前数据分析产品", + "url": "https://ada.im/", + "publishedAt": null, + "accessedAt": "2026-10-31", + "kind": "公司原始资料与官方注册补核", + "summary": "官网描述LLM/Agent清洗数据、SQL与报告;提供文件上传和多源连接,文档转ChartGen。", + "limitation": "未上传或运行产品;消除幻觉/企业级等宣传不作效果实证,评价人数不作付费规模。" + }, + { + "id": "ADA1-DOCS", + "companyId": "AI107", + "title": "ChartGen同域文档与应用范围", + "url": "https://ada.im/docs", + "publishedAt": null, + "accessedAt": "2026-10-31", + "kind": "公司原始资料与官方注册补核", + "summary": "同域介绍ChartGen的数据与文档报告、词汇表及技能功能,给出业务指标分析示例。", + "limitation": "示例收入增长不是公司实际经营结果;工具名称变化不新增另一家公司,首次业务及资产沿革仍待核。" + }, + { + "id": "ADA1-BILLING", + "companyId": "AI107", + "title": "ChartGen积分与订阅规则", + "url": "https://ada.im/docs/billingFAQ", + "publishedAt": null, + "accessedAt": "2026-10-31", + "kind": "公司原始资料与官方注册补核", + "summary": "计费文档区分日票、月订阅/邀请、补充积分与免费额度,购买积分三个月失效;订阅可取消续费,原价格跳转billing。", + "limitation": "未取得可读完整价格或合同订单;积分/免费试用/邀请奖励不等已付费收入,名义额度和退款约束不推续费或毛利。" + }, + { + "id": "ADA1-API", + "companyId": "AI107", + "title": "ChartGen API与Dify连接说明", + "url": "https://ada.im/docs/api", + "publishedAt": null, + "accessedAt": "2026-10-31", + "kind": "公司原始资料与官方注册补核", + "summary": "文档提供API Key服务及Dify集成,按积分计费、可设每Key月限额。", + "limitation": "只读文档,不生成Key、不执行API或插件;接口说明非独立质量测试,不提升公开代码或独立实测等级。" + }, + { + "id": "ADA1-PRICE-ACCESS", + "companyId": "AI107", + "title": "ChartGen现价入口可读缺项", + "url": "https://chartgen.ai/billing", + "publishedAt": null, + "accessedAt": "2026-10-31", + "kind": "公司原始资料与官方注册补核", + "summary": "从官方计费FAQ打开价格入口,公开响应只有跟踪iframe,无套餐价格正文。", + "limitation": "不以旧目录价格替当前值,不登录或下单;确切币种、价格和付费分母仍缺。" } ], "reviews": [ @@ -104667,6 +104789,26 @@ "SACRA1-GI-CODE" ], "handling": "未运行/独立验证代码或数据/模型商用许可,不将公开产物升级独立测试;商业API合作未证付款,融资和Medal旧数据/用户非本公司ARR。需实际API合同、数据权利和训练/推理/支持成本、注册沿革与当前精确团队,收入未知。" + }, + { + "id": "ADA1-R-ENTITY", + "type": "登记、品牌统一与积分收入边界", + "company": "Ada.im / ChartGen AI", + "companyIds": [ + "AI107" + ], + "scope": "companies", + "summary": "ACRA2025注册与同名运营者条款及两品牌相互支持,将PH待核候选关联同一公司;不重复按产品计数。", + "evidenceIds": [ + "ADA1-REGISTRY", + "ADA1-TERMS", + "ADA1-HOME", + "ADA1-DOCS", + "ADA1-BILLING", + "ADA1-API", + "ADA1-PRICE-ACCESS" + ], + "handling": "注册日不代实际经营起点,品牌/资产历史、条款无UEN仍需后续核。董事非员工、注册地址非办公点;免费/邀请/补充积分和分析示例不作公司ARR,价格/付费用户/成本仍缺。公开文档非公开代码或独立实验,不据无幻觉宣传升级技术等级。" } ], "coverage": { @@ -117059,7 +117201,7 @@ "sourceId": "S04", "url": "https://www.producthunt.com/leaderboard/yearly/2025/all", "accessedAt": "2026-10-31", - "scope": "2025年度All入口首次公开响应19张文字卡片,9项为原38卡外产品;复用已有候选对应并逐项记录新资料。14范围外、4年份待核、1推广,仅图片Framer位置和未取得分页保留缺项,不代表全年或新成立公司全量。", + "scope": "2025年度All入口首次公开响应19张文字卡片,9项为原38卡外产品;复用已有候选对应并逐项记录新资料。当前1关联(Ada/ChartGen经ACRA与条款补核AI107)、14范围外、3年份待核、1推广;仅图片Framer位置和未取得分页保留缺项,不代表全年或新成立公司全量。", "complete": false, "records": [ { @@ -117317,14 +117459,22 @@ "categoryId": "C05", "kind": "product", "profileStatus": "readable", - "status": "pending-year", + "status": "linked", "evidenceIds": [ "PHALL25-PAGE", "PHALL25-ADA-PH", "PHALL25-ADA-HOME", - "PHALL25-ADA-TERMS" + "PHALL25-ADA-TERMS", + "ADA1-REGISTRY", + "ADA1-TERMS", + "ADA1-HOME", + "ADA1-DOCS", + "ADA1-BILLING", + "ADA1-API", + "ADA1-PRICE-ACCESS" ], - "note": "AI数据清洗/SQL/报告,反链条款为ChartGen/Deep Analysis Pte. Ltd.且含Ada商标;主体成立及品牌沿革未核,2025发布不填成立年。订阅/积分/退款与真实收入分开,不合并近名Ada。" + "note": "ACRA唯一同名Deep Analysis Pte. Ltd.于2025-06-04注册,官网条款同运营者并列Ada.im/ChartGen商标,关联AI107同一公司。现价入口无正文、团队/实际地点及付费收入未知;注册与经营起点分开,业务/资产沿革待核,不合并近名Ada。", + "companyId": "AI107" }, { "id": "PHALL25-C18", diff --git a/content/research/ai-companies.sources.json b/content/research/ai-companies.sources.json index 3c11d2b..a5b3d01 100644 --- a/content/research/ai-companies.sources.json +++ b/content/research/ai-companies.sources.json @@ -1,5 +1,5 @@ { - "version": "2026-10-31-sacra-targeted-1", + "version": "2026-10-31-ada-entity-1", "scopeConfirmedAt": "2026-10-30", "acceptance": "以确认的公开来源清单为边界,逐条核对并标明缺项。", "provenance": "S01—S12恢复自已提交用户的《AI公司研究_来源与分类模板》来源清单;S13—S16单列后续已使用的补充证据渠道,不将使用次数当作全量覆盖。", @@ -2810,8 +2810,8 @@ "producthunt.com" ], "initialAccess": "官网可读取", - "boundary": "两年公开响应各19条,共38条。当前5条关联公司、2条范围外对照、26条范围外/既有业务、3条年份待核、2条推广。旧版本、品牌与法律主体分开,Tapflow据2024原版记录排除,Happycapy仍待核;非两年全量。 Pazi补既有业务链后范围外,保留字段冲突;Happycapy iOS销售方与ACRA注册日已核,全球产品/旧业务沿革仍待核。 后续核All独立入口,2025首屏新增19条发现位置(9项原38卡外产品),逐项登记14范围外/4年份待核/1推广;累计57条位置非独立公司。LilysAI/Readray2023沿革、Dreamina集团、Welltory2016、TrueFoundry2021和VidAU2024旧产品分开;Ada/ChartGen、EZsite/EasySite及Duix主体年份留缺。2026 All另读19卡尚待逐项登记,page=2两年均浏览工具不可访问,非证明无末页;原Featured快照不回写,无主公司/收入新增。 后续2026 All19文字卡逐项登记(9项原Featured之外),3关联位置/2既有范围外/7范围外/6年份待核/1推广;Base44和Goldfish复用,StoreClaw官网2026及第三方LLM电商任务新增AI105。四批累计76发现位置非独立公司,原批次保持,无收入观测新增。Fathom/Tencent/Viktor旧业务、Codity2025/2024与创始差异、Spira合同/占位、Acti与Polly主体年份分开。", - "nextCheck": "继续补两年其余分页/日期、仅图片位置及3条年份待核候选;保留Pazi日期冲突与旧业务排除依据,核清其余品牌与主体,避免转移历史业绩。 Happycapy的新加坡销售法人不自动等新创业;继续补网页签约方与集团业务沿革。 优先登记2026 All19文字卡及与Base44等已有公司映射,补2025 All新增Duix/Ada/EZsite主体成立/合同、Story目录缓存至正文/运营链,保留近名域区别。首次All响应非全量分页,其他日期与图片位置继续缺项。 2026 All本首屏逐项已有记录;继续Codity美印登记与旧域/创始沿革,Acti TypeX、Spira、PollyReach正式主体/成立及产品合同版本,StoreClaw实收/续费和推理工具成本;四批有限首屏不替全年、分页及仅图片位置核查。", + "boundary": "已登记2025/2026 Featured及两年All入口各19张文字卡,共76个发现位置,含重复产品/集团旧业务/推广,非76家独立新公司或全年全量。Featured原38卡当前5关联、2范围外对照、26范围外、3年份待核、2推广;2025 All当前1关联(Ada/ChartGen)、14范围外、3年份待核、1推广;2026 All3关联位置、2范围外对照、7范围外、6年份待核、1推广。StoreClaw新增AI105;Ada/ChartGen据条款同名主体与ACRA2025注册新增AI107;Base44/Goldfish等复用公司。旧业务/更名不重置成立,Happycapy销售法人注册不证明全球新创业,Codity年份/创始人差异未消歧。四批原页面发现范围保留;未取得分页和仅图片位置仍缺,未新增收入观测。", + "nextCheck": "继续补两年其余分页/日期及仅图片位置;Fundraisly、Happycapy、MGX/Atoms、Duix、EZsite、Acti TypeX、Spira、Codity、PollyReach的未决主体/年份/旧业务链。保留Pazi、Zeta旧业务与年份冲突证据,不转移历史收入。Ada/ChartGen已核同名公司注册与品牌关联,仍缺业务资产沿革、实际办公/团队、当前价格/币种、付费/续费和推理/报告成本;StoreClaw实收与工具成本待核。有限首屏不替全年全量。", "limitation": "上线时间不等于成立时间", "accessRecheckedAt": "2026-10-30" }, diff --git a/content/research/ai-income-analysis.json b/content/research/ai-income-analysis.json index 2b5a849..4f486ad 100644 --- a/content/research/ai-income-analysis.json +++ b/content/research/ai-income-analysis.json @@ -1,5 +1,5 @@ { - "sourceVersion": "2026-10-31-sacra-targeted-1", + "sourceVersion": "2026-10-31-ada-entity-1", "asOf": "2026-10-31", "metric": "platform-mrr-usd", "sampleUnit": "product-or-business",