Classify Thrive services rollup and exclude Brila existing operator
This commit is contained in:
@@ -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 });
|
||||
|
||||
@@ -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", () => {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
Reference in New Issue
Block a user