Classify Thrive services rollup and exclude Brila existing operator

This commit is contained in:
2026-10-30 18:12:52 +08:00
parent e65d90c78b
commit f156406265
5 changed files with 136 additions and 29 deletions
+2 -2
View File
@@ -181,9 +181,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, 1022);
assert.equal(research.companies.length, 1023);
assert.equal(research.categories.length, 11);
assert.equal(research.evidence.length, 1248);
assert.equal(research.evidence.length, 1251);
assert.equal(research.observations.length, 189);
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 });
+8 -8
View File
@@ -23,8 +23,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, 1022);
assert.equal(initial.evidence.length, 1248);
assert.equal(initial.companies.length, 1023);
assert.equal(initial.evidence.length, 1251);
assert.equal(initial.observations.length, 189);
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");
@@ -64,9 +64,9 @@ 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, 58);
assert.equal(snapshot.reviews.filter((r) => r.scope === "companies").length, 59);
assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 8);
assert.equal(snapshot.reviews.filter((r) => r.scope === "excluded-candidate").length, 27);
assert.equal(snapshot.reviews.filter((r) => r.scope === "excluded-candidate").length, 28);
const review = snapshot.reviews.find((r) => r.id === "R4")!;
assert.deepEqual(reviewCompanyIds(snapshot, review), ["AI007", "AI013", "AI021", "AI034"]);
assert.deepEqual(reviewCompanyIds(snapshot, snapshot.reviews.find((r) => r.id === "CN-R-PSI")!), []);
@@ -85,11 +85,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), 1022);
assert.equal(summary.reduce((n, c) => n + c.count, 0), 1023);
assert.equal(summary.reduce((n, c) => n + c.self, 0), 26);
assert.equal(summary.reduce((n, c) => n + c.estimate, 0), 1);
assert.equal(summary.reduce((n, c) => n + c.platform, 0), 16);
assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 979);
assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 980);
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 === "公司整体"));
@@ -97,7 +97,7 @@ test("disclosure counts exclude client income, biographies, targets and duplicat
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, 15);
assert.equal(snapshot.companies.filter((c) => c.technicalReview).length, 16);
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "public-artifact").length, 6);
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "independent-test").length, 1);
assert.equal(snapshot.companies.find((c) => c.id === "AI051")?.revenueStatus, "unknown");
@@ -307,7 +307,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, 7);
assert.equal(snapshot.candidateBatches!.flatMap((b) => b.records).filter((r) => r.status === "pending-year").length, 5);
});
test("product pivots and founder histories do not become new company years or current revenue", () => {
+120 -13
View File
@@ -1,5 +1,5 @@
{
"version": "2026-10-30-utopai-1",
"version": "2026-10-30-thrive-brila-1",
"asOf": "2026-10-30",
"scope": "全球公开资料研究:保留首批个案,并扩展核查2025—2026八个YC批次候选池;成立年份以官方公司页面字段为依据。",
"limitations": [
@@ -28910,6 +28910,45 @@
"GOLD-PRIVACY"
]
}
},
{
"id": "AI079",
"name": "Thrive Holdings",
"url": "https://www.thriveholdings.com/",
"cat": "C07",
"year": 2025,
"team": null,
"location": "美国纽约;集团官网标注New York City",
"business": "收购并长期运营会计和IT等成熟服务企业,将AI和技术团队嵌入其交付流程。",
"buyer": "被持有企业的会计、IT等服务客户;集团直接软件合同与实际付费结构待核",
"delivery": "已公开描述会计与IT服务平台及合作关系;没有本轮独立交付、成本节约或技术性能测试。",
"notes": "成立2025据公司公开主页,与2025-04-29官方发布公告关联;精确注册日及法律主体链待核。收购/并表带来的规模不等有机AI收入或ARR。ADT交易预计2027年一季度交割,当前不记完成,不合并目标公司历史收入。",
"cohort": "2025年成立(公司公开主页自述);注册日期未独立核验",
"teamBasis": "主页11—50范围、关联档案数与集团所持企业员工口径不同,完整团队保留未知",
"price": "集团没有本轮可核统一软件订阅价;会计、IT项目/托管服务等按子公司合同核实",
"stage": "公开运营会计与IT服务控股平台;按集团/子公司、收购/有机边界另核财务",
"sourceType": "TechCrunch发现;官方业务、发布公告、公司主页和交易/合作当事方材料补证",
"evidenceIds": [
"TC-THRIVE",
"TH-ABOUT",
"TH-OPENAI",
"TH-ADT",
"TH-LAUNCH",
"TH-PROFILE"
],
"revenueStatus": "unknown",
"businessModel": "永久资本控股平台收购服务企业,以行业人员加AI改造交付;集团及软件/服务收入拆分待核",
"entityBasis": "thriveholdings.com与公司公开主页、合作方和ADT交易公告相互关联;不与同名乌干达公关企业、其他Thrive Holdings LLC或Thrive Capital历史混合。",
"classificationBasis": "按会计和IT专业服务的运营改造归C07;控股/收购是商业模式,不能当纯软件平台并入同一ARR比较组。",
"technicalReview": {
"level": "description",
"reviewedAt": "2026-10-30",
"summary": "官方材料说明将AI模型与行业人员、流程结合;本轮未测试模型或财务改善,合作关系不替代能力验证。",
"evidenceIds": [
"TH-ABOUT",
"TH-OPENAI"
]
}
}
],
"observations": [
@@ -45049,7 +45088,7 @@
},
{
"id": "TC-THRIVE",
"companyId": null,
"companyId": "AI079",
"title": "Thrive Holdings报道发现条目",
"url": "https://techcrunch.com/2026/10/29/openai-backed-thrive-holdings-acquires-adt/",
"publishedAt": "2026-10-29",
@@ -45115,18 +45154,18 @@
},
{
"id": "TH-ABOUT",
"companyId": null,
"companyId": "AI079",
"title": "Thrive Holdings官方业务说明",
"url": "https://www.thriveholdings.com/about",
"publishedAt": null,
"accessedAt": "2026-10-30",
"kind": "公司官方材料",
"summary": "公司称收购成熟企业,将行业人员经验与技术和运营结合,目前涉及会计与IT服务。",
"limitation": "控股平台、收购组合与原有企业的经营收入须区分;本次未取得明确成立年份或并表收入凭证。"
"limitation": "控股平台、收购组合与原有企业经营收入须区分;年份另据公司主页补证,本次未取得并表收入或注册凭证。"
},
{
"id": "TH-OPENAI",
"companyId": null,
"companyId": "AI079",
"title": "Thrive Holdings合作方2025年公告",
"url": "https://openai.com/index/thrive-holdings/",
"publishedAt": "2025-12-01",
@@ -45137,7 +45176,7 @@
},
{
"id": "TH-ADT",
"companyId": null,
"companyId": "AI079",
"title": "ADT拟收购交易的原始公告",
"url": "https://investor.adt.com/News--Events/news/news-details/2026/ADT-to-be-Acquired-by-Thrive-Holdings-in-15-3-Billion-Transaction/default.aspx",
"publishedAt": "2026-10-29",
@@ -45181,7 +45220,7 @@
},
{
"id": "TH-LAUNCH",
"companyId": null,
"companyId": "AI079",
"title": "Thrive Holdings官方2025年发布公告",
"url": "https://www.thriveholdings.com/thrive-holdings-launch",
"publishedAt": "2025-04-29",
@@ -45706,6 +45745,39 @@
"kind": "公司公开主页自述",
"summary": "公开主页链接fundraisly.com,称属于Accumulator,结合投资者匹配、引荐路径与外联服务。页面没有成立年份字段。",
"limitation": "业务与关联集团关系不能替代Accumulator Fundraising LLC的注册年份;页面2—10人数范围及关联档案数不当精确团队人数,团队筹资和客户融资不当收入。"
},
{
"id": "TH-PROFILE",
"companyId": "AI079",
"title": "Thrive Holdings公司公开主页年份",
"url": "https://www.linkedin.com/company/thrive-holdings",
"publishedAt": null,
"accessedAt": "2026-10-30",
"kind": "公司公开主页自述",
"summary": "页面列Founded 2025,链接thriveholdings.com,描述收购并运营会计与IT服务企业。",
"limitation": "非独立注册核验;11—50范围、关联档案数不等集团员工数。所持企业原有收入与收购规模不能当有机AI增长或软件ARR。"
},
{
"id": "BRILA-ENTITY-HISTORY",
"companyId": null,
"title": "Generated Photos早期政策的同一运营主体",
"url": "https://intercom.help/generated-photos/en/articles/7241273-generated-photos-privacy-policy",
"publishedAt": "2024-02-14",
"accessedAt": "2026-10-30",
"kind": "公司官方历史政策",
"summary": "页面日期2024-02-14,列Generated Media, Inc.及Delaware注册号7627361,与Brila官方政策同名同号。",
"limitation": "早期材料可证明该运营主体并非2025—2026新公司;政策日期和其中2020生效日都不当精确注册年。旧产品收入、人数和品牌历史不直接转作Brila收入。"
},
{
"id": "BRILA-ENTITY-TERMS",
"companyId": null,
"title": "Generated Photos早期服务条款",
"url": "https://intercom.help/generated-photos/en/articles/7872726-generated-photos-terms-and-conditions",
"publishedAt": "2023-10-16",
"accessedAt": "2026-10-30",
"kind": "公司官方历史条款",
"summary": "官方条款页面日期2023-10-16,服务合同方列Generated Media, Inc.,业务为生成图像许可。",
"limitation": "单看同名条款不唯一识别主体,需与注册号7627361的隐私政策及Brila政策合看;不能把图像许可收入当新建站产品ARR。"
}
],
"reviews": [
@@ -47040,6 +47112,37 @@
],
"handling": "按既有业务排除;保留中文报道未读全文的访问缺项。品牌、模型、制作平台与区域业务不重复计数,估值、片单及排名不导入收入观测。",
"scope": "excluded-candidate"
},
{
"id": "TH-R-CONSOLIDATION",
"type": "控股平台成立与并表收入边界",
"company": "Thrive Holdings",
"companyIds": [
"AI079"
],
"summary": "2025自述成立年与官方发布材料关联,纳入专业服务改造模式;没有可核同口径集团ARR。",
"evidenceIds": [
"TH-PROFILE",
"TH-LAUNCH",
"TH-ABOUT",
"TH-ADT"
],
"handling": "精确注册、完整团队、付费合同及并表拆分留缺;收购资金、集团持有公司数、目标公司历史收入、预期交易交割不转为当前有机AI收入或软件ARR。",
"scope": "companies"
},
{
"id": "BRILA-R-OLD-ENTITY",
"type": "旧运营主体的新产品边界",
"company": "Brila(既有主体产品候选)",
"summary": "Brila与Generated Photos官方政策列同一Generated Media, Inc.注册号7627361,早期材料先于2025。",
"evidenceIds": [
"PH-BRILA-ENTITY",
"PH-BRILA-TERMS",
"BRILA-ENTITY-HISTORY",
"BRILA-ENTITY-TERMS"
],
"handling": "归范围外既有主体;保留精确注册日未知,不因产品发布新增公司,不将图像业务收入或团队规模转作Brila建站业务。",
"scope": "excluded-candidate"
}
],
"coverage": {
@@ -47101,11 +47204,13 @@
"categoryId": "C04",
"kind": "product",
"profileStatus": "readable",
"status": "pending-year",
"note": "官网及条款列Generated Media, Inc.运营;注册号不代表日期,母公司成立年待核。网站生成与托管订阅为产品业务,不因2026发布新增独立公司。",
"status": "outside-cohort",
"note": "官方运营者Generated Media, Inc.注册号7627361与Generated Photos的2024政策一致,且有2023旧业务条款;作为既有主体产品排除。政策日期不作精确注册年,旧图像业务业绩不转移给Brila。",
"evidenceIds": [
"PH-BRILA-ENTITY",
"PH-BRILA-TERMS"
"PH-BRILA-TERMS",
"BRILA-ENTITY-HISTORY",
"BRILA-ENTITY-TERMS"
]
},
{
@@ -47768,15 +47873,17 @@
"categoryId": "C07",
"kind": "company",
"profileStatus": "readable",
"status": "pending-year",
"status": "linked",
"evidenceIds": [
"TC-THRIVE",
"TH-ABOUT",
"TH-OPENAI",
"TH-ADT",
"TH-LAUNCH"
"TH-LAUNCH",
"TH-PROFILE"
],
"note": "官方2025-04-29公告证明平台公开发布,不能单独填精确成立年,继续待核。按专业服务收购运营初分C07,控股模式单列;ADT预计2027一季度交割,不记已完成,不将目标历史收入当有机AI收入。"
"note": "公司公开主页Founded 2025,结合官方发布及业务关联纳入AI079。按专业服务控股改造模式单列;收购/并表不等有机AI ARR,ADT拟收购尚未交割,精确注册与收入留缺。",
"companyId": "AI079"
}
]
}
+5 -5
View File
@@ -1,5 +1,5 @@
{
"version": "2026-10-30-17",
"version": "2026-10-30-18",
"scopeConfirmedAt": "2026-10-30",
"acceptance": "以确认的公开来源清单为边界,逐条核对并标明缺项。",
"provenance": "S01—S12恢复自已提交用户的《AI公司研究_来源与分类模板》来源清单;S13—S16单列后续已使用的补充证据渠道,不将使用次数当作全量覆盖。",
@@ -28,8 +28,8 @@
"techcrunch.com"
],
"initialAccess": "AI栏目可读取",
"boundary": "栏目首页选择的3条公司线索已追溯原始资料:Wabi据公开名录2025年份关联公司;DreamHQ与Thrive Holdings成立年待核,后者2025发布公告另存。不是首页全部条目或两年档案;公开分类接口与RSS普通HTTP请求返回403。",
"nextCheck": "补可公开取得的2025、2026档案及剩余分页;核DreamHQ、Thrive Holdings成立依据及Wabi精确注册、团队和付费口径。",
"boundary": "栏目首页选择的3条公司线索已追溯原始资料:Wabi据公开名录2025年份、Thrive Holdings据公司主页2025自述关联公司,DreamHQ成立年仍待核。Thrive控股改造与收购/有机收入边界单列;非首页全部条目或两年档案,公开分类接口与RSS普通HTTP请求返回403。",
"nextCheck": "补可公开取得的2025、2026档案及剩余分页;核DreamHQ成立依据与Wabi、Thrive Holdings精确注册、团队及收入边界。",
"limitation": "需追溯原始披露,部分文章受访问限制",
"accessRecheckedAt": "2026-10-30"
},
@@ -60,8 +60,8 @@
"producthunt.com"
],
"initialAccess": "官网可读取",
"boundary": "两年公开响应各19条,共38条。当前5条关联公司、2条范围外对照、24条范围外/既有业务、5条年份待核、2条推广。旧版本、品牌与法律主体分开,Tapflow据2024原版记录排除,Happycapy仍待核;非两年全量。",
"nextCheck": "继续补两年其余分页/日期、仅图片位置及5条年份待核候选;保留Pazi日期冲突,核清品牌与主体,避免转移历史业绩。",
"boundary": "两年公开响应各19条,共38条。当前5条关联公司、2条范围外对照、25条范围外/既有业务、4条年份待核、2条推广。旧版本、品牌与法律主体分开,Tapflow据2024原版记录排除,Happycapy仍待核;非两年全量。",
"nextCheck": "继续补两年其余分页/日期、仅图片位置及4条年份待核候选;保留Pazi日期冲突,核清品牌与主体,避免转移历史业绩。",
"limitation": "上线时间不等于成立时间",
"accessRecheckedAt": "2026-10-30"
},
+1 -1
View File
@@ -1,5 +1,5 @@
{
"sourceVersion": "2026-10-30-utopai-1",
"sourceVersion": "2026-10-30-thrive-brila-1",
"asOf": "2026-10-30",
"metric": "platform-mrr-usd",
"sampleUnit": "product-or-business",