Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3e2183798d |
@@ -2,6 +2,7 @@ name: Verify and deploy Tabularium
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@@ -10,7 +11,6 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
verify-and-deploy:
|
verify-and-deploy:
|
||||||
if: gitea.ref == 'refs/heads/main'
|
|
||||||
runs-on: ces-control
|
runs-on: ces-control
|
||||||
timeout-minutes: 45
|
timeout-minutes: 45
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -98,9 +98,11 @@ AUTH_CONFIG_FILE=/private/tmp/tabularium-auth/config.json AUTH_COOKIE_SECURE=fal
|
|||||||
同一版本内容变化会拒绝导入,避免静默读取旧数据。回退代码时继续读取对应旧版本。
|
同一版本内容变化会拒绝导入,避免静默读取旧数据。回退代码时继续读取对应旧版本。
|
||||||
所有修改都经过工作分支和 PR,部署仍等待人工合并主线。
|
所有修改都经过工作分支和 PR,部署仍等待人工合并主线。
|
||||||
|
|
||||||
首批资料包含 54 家公司、10 类业务、87 条证据记录和 63 条经营观测。
|
首批资料包含 58 家公司、10 类业务、100 条证据记录和 75 条经营观测。
|
||||||
它是定向试样,收入披露不足且统计时点不统一,不代表全部 AI 公司。
|
它是定向试样,收入披露不足且统计时点不统一,不代表全部 AI 公司。
|
||||||
界面将公司自述、第三方估算、融资、客户收入和履历收入分开,未知收入不记为零。
|
界面将公司自述、第三方估算、融资、客户收入和履历收入分开,未知收入不记为零。
|
||||||
|
保留被撤回的声明作为核查记录,并排除收入比较;并购后业务、管理层预测与历史里程碑单列。
|
||||||
|
团队规模下界在列表中显示比较符,商业成熟度展示公开交付证据,不等于技术能力排名。
|
||||||
当前尚不能可靠计算领域 ARR 均值、离散排名或财务造假概率。
|
当前尚不能可靠计算领域 ARR 均值、离散排名或财务造假概率。
|
||||||
|
|
||||||
`pnpm test:research` 在远程 Runner 上验证同库持久化、重复读取、版本导入与回退、
|
`pnpm test:research` 在远程 Runner 上验证同库持久化、重复读取、版本导入与回退、
|
||||||
|
|||||||
@@ -185,10 +185,10 @@ async function main() {
|
|||||||
assert.equal(researchResponse.status, 200, "authenticated research API");
|
assert.equal(researchResponse.status, 200, "authenticated research API");
|
||||||
assert.ok(researchResponse.headers.get("cache-control")?.includes("no-store"));
|
assert.ok(researchResponse.headers.get("cache-control")?.includes("no-store"));
|
||||||
const research = await researchResponse.json();
|
const research = await researchResponse.json();
|
||||||
assert.equal(research.companies.length, 54);
|
assert.equal(research.companies.length, 58);
|
||||||
assert.equal(research.categories.length, 10);
|
assert.equal(research.categories.length, 10);
|
||||||
assert.equal(research.evidence.length, 87);
|
assert.equal(research.evidence.length, 100);
|
||||||
assert.equal(research.observations.length, 63);
|
assert.equal(research.observations.length, 75);
|
||||||
assert.equal((await request("/api/research/ai-companies", { method: "POST", headers })).status, 405);
|
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 });
|
const researchPage = await request("/docs/other-research/ai-company-research/overview", { headers });
|
||||||
assert.equal(researchPage.status, 200);
|
assert.equal(researchPage.status, 200);
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import {
|
|||||||
} from "@/lib/ai-research";
|
} from "@/lib/ai-research";
|
||||||
|
|
||||||
const pageSize = 12;
|
const pageSize = 12;
|
||||||
const revenueLabels = { self: "公司披露,待核口径", estimate: "仅第三方估算", unknown: "本轮未找到收入数字" };
|
const revenueLabels = { self: "公司披露,待核口径", estimate: "仅第三方估算", unknown: "暂无可用收入数字" };
|
||||||
const useLabels: Record<string, string> = {
|
const useLabels: Record<string, string> = {
|
||||||
signal: "公司披露信号", estimate: "第三方估算", historical: "历史里程碑",
|
signal: "公司披露信号", estimate: "第三方估算", historical: "历史里程碑",
|
||||||
"historical-estimate": "历史估算", excluded: "排除收入比较", scale: "团队规模",
|
"historical-estimate": "其他时点估算", excluded: "排除收入比较", scale: "团队规模", adoption: "采用规模",
|
||||||
funding: "融资", crosscheck: "同一里程碑的其他资料",
|
funding: "融资", crosscheck: "同一里程碑的其他资料",
|
||||||
};
|
};
|
||||||
const money = (value: number, unit = "USD") => unit === "USD"
|
const money = (value: number, unit = "USD") => unit === "USD"
|
||||||
@@ -106,14 +106,14 @@ export default function AICompanyResearch() {
|
|||||||
<label className="research-query">搜索公司<input type="search" value={query} placeholder="名称、业务、地区或买家" onChange={(e) => { setQuery(e.target.value); setPage(0); }} /></label>
|
<label className="research-query">搜索公司<input type="search" value={query} placeholder="名称、业务、地区或买家" onChange={(e) => { setQuery(e.target.value); setPage(0); }} /></label>
|
||||||
<label>业务类别<select value={category} onChange={(e) => { setCategory(e.target.value); setPage(0); }}><option value="">全部类别</option>{data.categories.map((c) => <option key={c.id} value={c.id}>{c.name}</option>)}</select></label>
|
<label>业务类别<select value={category} onChange={(e) => { setCategory(e.target.value); setPage(0); }}><option value="">全部类别</option>{data.categories.map((c) => <option key={c.id} value={c.id}>{c.name}</option>)}</select></label>
|
||||||
<label>成立或发布<select value={cohort} onChange={(e) => { setCohort(e.target.value); setPage(0); }}><option value="">全部组别</option><option value="2025">2025 年成立</option><option value="2026">2026 年成立</option><option value="other">公开发布与转型对照</option></select></label>
|
<label>成立或发布<select value={cohort} onChange={(e) => { setCohort(e.target.value); setPage(0); }}><option value="">全部组别</option><option value="2025">2025 年成立</option><option value="2026">2026 年成立</option><option value="other">公开发布与转型对照</option></select></label>
|
||||||
<label>收入资料<select value={income} onChange={(e) => { setIncome(e.target.value); setPage(0); }}><option value="">全部状态</option><option value="self">找到公司披露</option><option value="estimate">仅第三方估算</option><option value="unknown">本轮未找到数字</option></select></label>
|
<label>收入资料<select value={income} onChange={(e) => { setIncome(e.target.value); setPage(0); }}><option value="">全部状态</option><option value="self">找到公司披露</option><option value="estimate">仅第三方估算</option><option value="unknown">暂无可用数字</option></select></label>
|
||||||
</div>
|
</div>
|
||||||
<div className="research-result-count" role="status">{filtered.length} 家匹配公司<button onClick={() => { setCategory(""); setQuery(""); setCohort(""); setIncome(""); setPage(0); }}>清除筛选</button></div>
|
<div className="research-result-count" role="status">{filtered.length} 家匹配公司<button onClick={() => { setCategory(""); setQuery(""); setCohort(""); setIncome(""); setPage(0); }}>清除筛选</button></div>
|
||||||
<div className="research-table-wrap"><table><caption className="sr-only">公司分类与经营资料。选择公司名称查看指标和原始证据。</caption><thead><tr><th>公司 / 地区</th><th>业务与买家</th><th>成立 / 发布组别</th><th>团队规模</th><th>收入资料</th></tr></thead><tbody>
|
<div className="research-table-wrap"><table><caption className="sr-only">公司分类与经营资料。选择公司名称查看指标和原始证据。</caption><thead><tr><th>公司 / 地区</th><th>业务与买家</th><th>成立 / 发布组别</th><th>团队规模</th><th>商业成熟度</th><th>收入资料</th></tr></thead><tbody>
|
||||||
{filtered.slice(page * pageSize, (page + 1) * pageSize).map((c) => <tr key={c.id} data-selected={selected === c.id || undefined}>
|
{filtered.slice(page * pageSize, (page + 1) * pageSize).map((c) => <tr key={c.id} data-selected={selected === c.id || undefined}>
|
||||||
<td><button className="research-company-name" aria-expanded={selected === c.id} aria-controls="research-company-detail" onClick={() => setSelected(c.id)}>{c.name}</button><small>{c.location ?? "地区未注明"}</small></td>
|
<td><button className="research-company-name" aria-expanded={selected === c.id} aria-controls="research-company-detail" onClick={() => setSelected(c.id)}>{c.name}</button><small>{c.location ?? "地区未注明"}</small></td>
|
||||||
<td><span className="research-tag">{categories.get(c.cat)?.name}</span><p>{c.business}</p><small>买家:{c.buyer}</small></td>
|
<td><span className="research-tag">{categories.get(c.cat)?.name}</span><p>{c.business}</p><small>买家:{c.buyer}</small></td>
|
||||||
<td>{c.cohort}</td><td>{c.team ?? "未披露"}{c.team !== null && " 人"}</td><td>{revenueLabels[c.revenueStatus]}</td>
|
<td>{c.cohort}</td><td>{c.team !== null && c.teamBound}{c.team ?? "未披露"}{c.team !== null && " 人"}</td><td>{c.stage}</td><td>{revenueLabels[c.revenueStatus]}</td>
|
||||||
</tr>)}
|
</tr>)}
|
||||||
</tbody></table></div>
|
</tbody></table></div>
|
||||||
{!filtered.length && <p className="research-message">没有匹配公司,请调整筛选条件。</p>}
|
{!filtered.length && <p className="research-message">没有匹配公司,请调整筛选条件。</p>}
|
||||||
@@ -122,11 +122,11 @@ export default function AICompanyResearch() {
|
|||||||
{tab === "revenue" && <>
|
{tab === "revenue" && <>
|
||||||
<p className="research-notice">目前找到 {revenueCompanies} 家公司的收入信号。大多是缺少日历时点的历史里程碑,且 ARR 与年化收入尚未统一。领域均值和离散度暂不计算。</p>
|
<p className="research-notice">目前找到 {revenueCompanies} 家公司的收入信号。大多是缺少日历时点的历史里程碑,且 ARR 与年化收入尚未统一。领域均值和离散度暂不计算。</p>
|
||||||
<div className="research-revenue-chart" aria-label="不同时间的公开收入里程碑,线性长度,非同行排名">{observed.map((o) => <div key={o.id}>
|
<div className="research-revenue-chart" aria-label="不同时间的公开收入里程碑,线性长度,非同行排名">{observed.map((o) => <div key={o.id}>
|
||||||
<div><button onClick={() => setSelected(o.company)}>{o.name}</button><strong>{money(o.value, o.unit)}</strong></div>
|
<div><button onClick={() => setSelected(o.company)}>{o.name}</button><strong>{o.bound !== "=" && o.bound}{money(o.value, o.unit)}</strong></div>
|
||||||
<span className="research-bar" data-estimate={o.selection === "estimate" || undefined} aria-hidden="true"><i style={{width: `${o.value / Math.max(...observed.map((v) => v.value)) * 100}%`}} /></span>
|
<span className="research-bar" data-estimate={o.selection === "estimate" || undefined} aria-hidden="true"><i style={{width: `${o.value / Math.max(...observed.map((v) => v.value)) * 100}%`}} /></span>
|
||||||
<small>{o.kind} · {useLabels[o.selection]} · {o.timing}</small>
|
<small>{o.kind} · {useLabels[o.selection]} · {o.timing}</small>
|
||||||
</div>)}</div>
|
</div>)}</div>
|
||||||
<div className="research-table-wrap"><table><caption>各领域收入可得性;未建立同期、同龄、同口径比较组</caption><thead><tr><th>业务分类</th><th>公司披露数</th><th>仅估算数</th><th>本轮未找到数字</th><th>同期均值 / 离散度</th></tr></thead><tbody>{summaries.map((c) => <tr key={c.id}><td><button onClick={() => chooseCategory(c.id)}>{c.name}</button></td><td>{c.self}</td><td>{c.estimate}</td><td>{c.unknown}</td><td>条件不足</td></tr>)}</tbody></table></div>
|
<div className="research-table-wrap"><table><caption>各领域收入可得性;未建立同期、同龄、同口径比较组</caption><thead><tr><th>业务分类</th><th>公司披露数</th><th>仅估算数</th><th>暂无可用数字</th><th>同期均值 / 离散度</th></tr></thead><tbody>{summaries.map((c) => <tr key={c.id}><td><button onClick={() => chooseCategory(c.id)}>{c.name}</button></td><td>{c.self}</td><td>{c.estimate}</td><td>{c.unknown}</td><td>条件不足</td></tr>)}</tbody></table></div>
|
||||||
<p className="research-muted">离散度用于筛选值得核查的异常,还需排除公司年龄、口径和披露偏差;不能据此认定财务造假。</p>
|
<p className="research-muted">离散度用于筛选值得核查的异常,还需排除公司年龄、口径和披露偏差;不能据此认定财务造假。</p>
|
||||||
</>}
|
</>}
|
||||||
{tab === "sources" && <><p className="research-muted">来源链接保留原始位置。相同 URL 的记录可能属于同一披露,不能按记录数计算独立证据数量。</p><ul className="research-evidence-list">{data.evidence.map((e) => <Evidence key={e.id} item={e} />)}</ul></>}
|
{tab === "sources" && <><p className="research-muted">来源链接保留原始位置。相同 URL 的记录可能属于同一披露,不能按记录数计算独立证据数量。</p><ul className="research-evidence-list">{data.evidence.map((e) => <Evidence key={e.id} item={e} />)}</ul></>}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
export type ResearchCategory = { id: string; name: string; description: string };
|
export type ResearchCategory = { id: string; name: string; description: string };
|
||||||
export type ResearchCompany = {
|
export type ResearchCompany = {
|
||||||
id: string; name: string; url: string; cat: string; year: number | null;
|
id: string; name: string; url: string; cat: string; year: number | null;
|
||||||
team: number | null; location: string | null; business: string; buyer: string;
|
team: number | null; teamBound?: ">" | "≥"; location: string | null; business: string; buyer: string;
|
||||||
delivery: string; notes: string; cohort: string; teamBasis: string | null;
|
delivery: string; notes: string; cohort: string; teamBasis: string | null;
|
||||||
price: string; stage: string; sourceType: string; evidenceIds: string[];
|
price: string; stage: string; sourceType: string; evidenceIds: string[];
|
||||||
revenueStatus: "self" | "estimate" | "unknown";
|
revenueStatus: "self" | "estimate" | "unknown";
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ test("research revisions share the authentication database and preserve replay l
|
|||||||
for (let i = 0; i < 20; i++) consumeCode(config, "invalid");
|
for (let i = 0; i < 20; i++) consumeCode(config, "invalid");
|
||||||
assert.equal(consumeCode(config, "invalid"), "limited");
|
assert.equal(consumeCode(config, "invalid"), "limited");
|
||||||
const initial = readResearchSnapshot();
|
const initial = readResearchSnapshot();
|
||||||
assert.equal(initial.companies.length, 54);
|
assert.equal(initial.companies.length, 58);
|
||||||
assert.equal(initial.evidence.length, 87);
|
assert.equal(initial.evidence.length, 100);
|
||||||
assert.equal(initial.observations.length, 63);
|
assert.equal(initial.observations.length, 75);
|
||||||
assert.deepEqual(readResearchSnapshot(), initial, "reopening does not duplicate records");
|
assert.deepEqual(readResearchSnapshot(), initial, "reopening does not duplicate records");
|
||||||
const db = openSiteDatabase();
|
const db = openSiteDatabase();
|
||||||
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all() as { name: string }[];
|
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all() as { name: string }[];
|
||||||
@@ -60,11 +60,28 @@ test("research validation rejects broken evidence and unsafe source links", () =
|
|||||||
test("disclosure counts exclude client income, biographies, targets and duplicate milestones", () => {
|
test("disclosure counts exclude client income, biographies, targets and duplicate milestones", () => {
|
||||||
const snapshot = seed as ResearchSnapshot;
|
const snapshot = seed as ResearchSnapshot;
|
||||||
const summary = categorySummary(snapshot);
|
const summary = categorySummary(snapshot);
|
||||||
assert.equal(summary.reduce((n, c) => n + c.count, 0), 54);
|
assert.equal(summary.reduce((n, c) => n + c.count, 0), 58);
|
||||||
assert.equal(summary.reduce((n, c) => n + c.self, 0), 5);
|
assert.equal(summary.reduce((n, c) => n + c.self, 0), 8);
|
||||||
assert.equal(summary.reduce((n, c) => n + c.estimate, 0), 1);
|
assert.equal(summary.reduce((n, c) => n + c.estimate, 0), 1);
|
||||||
assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 48);
|
assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 49);
|
||||||
assert.equal(snapshot.companies.find((c) => c.name === "Rork")?.revenueStatus, "unknown");
|
assert.equal(snapshot.companies.find((c) => c.name === "Rork")?.revenueStatus, "unknown");
|
||||||
assert.equal(snapshot.companies.find((c) => c.name === "Result")?.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 === "公司整体"));
|
assert.ok(snapshot.observations.filter((o) => o.selection === "signal").every((o) => o.scope === "公司整体"));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Retractions and forecasts must stay visible for review without becoming revenue signals.
|
||||||
|
test("retracted ARR and projected margins remain excluded", () => {
|
||||||
|
const snapshot = seed as ResearchSnapshot;
|
||||||
|
const cluely = snapshot.companies.find((c) => c.name === "Cluely")!;
|
||||||
|
assert.equal(cluely.revenueStatus, "unknown");
|
||||||
|
assert.ok(snapshot.reviews.some((r) => r.company === "Cluely" && r.evidenceIds.includes("E100")));
|
||||||
|
const retracted = snapshot.observations.filter((o) => o.company === cluely.id);
|
||||||
|
assert.ok(retracted.length > 0);
|
||||||
|
assert.ok(retracted.every((o) => o.selection === "excluded"));
|
||||||
|
const forecast = snapshot.observations.find((o) => o.kind === "非GAAP毛利率预期")!;
|
||||||
|
assert.equal(forecast.selection, "excluded");
|
||||||
|
const peec = snapshot.companies.find((c) => c.name === "Peec AI")!;
|
||||||
|
assert.equal(peec.teamBound, ">");
|
||||||
|
assert.equal(snapshot.observations.filter((o) => o.company === peec.id && o.selection === "signal").length, 1);
|
||||||
|
assert.ok(snapshot.observations.some((o) => o.company === peec.id && o.selection === "historical-estimate"));
|
||||||
|
});
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"version": "2026-10-30-pilot-2",
|
"version": "2026-10-30-pilot-3",
|
||||||
"asOf": "2026-10-30",
|
"asOf": "2026-10-30",
|
||||||
"scope": "全球公开资料定向试样,2025—2026年成立公司为主,公开发布与转型对照单列。",
|
"scope": "全球公开资料定向试样,2025—2026年成立公司为主,公开发布与转型对照单列。",
|
||||||
"limitations": [
|
"limitations": [
|
||||||
"非随机样本,YC和英文资料偏多;不代表全球全量公司。",
|
"非随机样本,YC和英文资料偏多;不代表全球全量公司。",
|
||||||
"没有统一时点、同龄且同口径的ARR可比组;不计算领域收入排名或造假概率。",
|
"没有统一时点、同龄且同口径的ARR可比组;不计算领域收入排名或造假概率。",
|
||||||
"公司介绍和技术指标大多为自述,尚未独立测试;未披露不代表零收入。"
|
"公司介绍和技术指标大多为自述,尚未独立测试;未披露不代表零收入。",
|
||||||
|
"新增并购业务、收入声明撤回与第三方后续估算案例;仍未建立同日、同龄、同口径的领域ARR比较组。"
|
||||||
],
|
],
|
||||||
"categories": [
|
"categories": [
|
||||||
{
|
{
|
||||||
@@ -1373,6 +1374,105 @@
|
|||||||
"E054"
|
"E054"
|
||||||
],
|
],
|
||||||
"revenueStatus": "unknown"
|
"revenueStatus": "unknown"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "AI055",
|
||||||
|
"name": "Peec AI",
|
||||||
|
"url": "https://peec.ai",
|
||||||
|
"cat": "C06",
|
||||||
|
"year": 2025,
|
||||||
|
"team": 70,
|
||||||
|
"location": "德国柏林 / 美国纽约",
|
||||||
|
"business": "追踪品牌在AI搜索答案中的可见度、引用与竞争表现",
|
||||||
|
"buyer": "品牌营销团队与代理机构",
|
||||||
|
"delivery": "公司披露客户采用及ARR;未独立测试优化效果",
|
||||||
|
"notes": "2025年1月成立、2月产品上线;团队2024年已在Antler相识。",
|
||||||
|
"cohort": "2025年成立",
|
||||||
|
"teamBasis": "2026-05-28公司披露超过70名员工;70为下界,非10月人数",
|
||||||
|
"price": "本轮未核验当前套餐",
|
||||||
|
"stage": "有公司披露的商业使用",
|
||||||
|
"sourceType": "公司公告;第三方估算单列",
|
||||||
|
"evidenceIds": [
|
||||||
|
"E088",
|
||||||
|
"E089",
|
||||||
|
"E090"
|
||||||
|
],
|
||||||
|
"revenueStatus": "self",
|
||||||
|
"teamBound": ">"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "AI056",
|
||||||
|
"name": "Base44",
|
||||||
|
"url": "https://base44.com",
|
||||||
|
"cat": "C04",
|
||||||
|
"year": 2025,
|
||||||
|
"team": null,
|
||||||
|
"location": "以色列",
|
||||||
|
"business": "用自然语言生成应用,并提供数据库、认证与托管",
|
||||||
|
"buyer": "创业者、小企业与内部工具团队",
|
||||||
|
"delivery": "上市公司披露经营增长;技术质量尚未独立测试",
|
||||||
|
"notes": "2025年成立,同年6月被Wix收购;收购后收入与独立初创组分开。",
|
||||||
|
"cohort": "2025年成立",
|
||||||
|
"teamBasis": null,
|
||||||
|
"price": "免费层+含消息/集成积分的分档订阅;价格见2026-07说明",
|
||||||
|
"stage": "已收购,商业运营",
|
||||||
|
"sourceType": "收购方管理层披露;媒体转述创始人声明",
|
||||||
|
"evidenceIds": [
|
||||||
|
"E091",
|
||||||
|
"E092",
|
||||||
|
"E093",
|
||||||
|
"E094",
|
||||||
|
"E095",
|
||||||
|
"E096"
|
||||||
|
],
|
||||||
|
"revenueStatus": "self",
|
||||||
|
"pricingEvidence": "E096"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "AI057",
|
||||||
|
"name": "Alia",
|
||||||
|
"url": "https://usealia.com",
|
||||||
|
"cat": "C05",
|
||||||
|
"year": 2025,
|
||||||
|
"team": 6,
|
||||||
|
"location": "美国旧金山",
|
||||||
|
"business": "连接团队与工具上下文,识别阻碍并协调工作",
|
||||||
|
"buyer": "企业团队负责人",
|
||||||
|
"delivery": "投资机构资料称已有客户和live ARR,未独立确认留存",
|
||||||
|
"notes": "投资机构页面的客户订单量属于客户业务,不计作Alia收入。",
|
||||||
|
"cohort": "2025年成立",
|
||||||
|
"teamBasis": "speedrun页面6 Employees;日历截至日未注明,2026-10-30访问",
|
||||||
|
"price": "本轮未核验定价",
|
||||||
|
"stage": "投资机构披露有付费使用,待核验",
|
||||||
|
"sourceType": "a16z speedrun公司资料",
|
||||||
|
"evidenceIds": [
|
||||||
|
"E097"
|
||||||
|
],
|
||||||
|
"revenueStatus": "self"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "AI058",
|
||||||
|
"name": "Cluely",
|
||||||
|
"url": "https://cluely.com",
|
||||||
|
"cat": "C05",
|
||||||
|
"year": 2025,
|
||||||
|
"team": null,
|
||||||
|
"location": "美国纽约",
|
||||||
|
"business": "实时会议问答与会议记录助手",
|
||||||
|
"buyer": "个人及企业会议用户",
|
||||||
|
"delivery": "公开公司资料可确认产品方向;未独立测试",
|
||||||
|
"notes": "原ARR声明失效,当前可用ARR未知。",
|
||||||
|
"cohort": "2025年成立",
|
||||||
|
"teamBasis": null,
|
||||||
|
"price": "本轮未核验定价",
|
||||||
|
"stage": "公开商用产品,收入声明需纠错",
|
||||||
|
"sourceType": "公司资料与媒体记录",
|
||||||
|
"evidenceIds": [
|
||||||
|
"E098",
|
||||||
|
"E099",
|
||||||
|
"E100"
|
||||||
|
],
|
||||||
|
"revenueStatus": "unknown"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"observations": [
|
"observations": [
|
||||||
@@ -2320,6 +2420,186 @@
|
|||||||
"reason": "融资不是收入",
|
"reason": "融资不是收入",
|
||||||
"bound": "=",
|
"bound": "=",
|
||||||
"comparisonGroup": null
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O064",
|
||||||
|
"company": "AI055",
|
||||||
|
"name": "Peec AI",
|
||||||
|
"kind": "ARR",
|
||||||
|
"value": 4000000,
|
||||||
|
"unit": "USD",
|
||||||
|
"timing": "2025-11-18公告时点",
|
||||||
|
"evidence": "E088",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "historical",
|
||||||
|
"reason": "较早披露,保留历史;超过值不当作精确值",
|
||||||
|
"bound": ">",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O065",
|
||||||
|
"company": "AI055",
|
||||||
|
"name": "Peec AI",
|
||||||
|
"kind": "ARR",
|
||||||
|
"value": 10000000,
|
||||||
|
"unit": "USD",
|
||||||
|
"timing": "2026-05-28公告时点",
|
||||||
|
"evidence": "E089",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "signal",
|
||||||
|
"reason": "本轮最近可直接读取的公司披露;非当前10月值",
|
||||||
|
"bound": ">",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O066",
|
||||||
|
"company": "AI055",
|
||||||
|
"name": "Peec AI",
|
||||||
|
"kind": "ARR估算",
|
||||||
|
"value": 15000000,
|
||||||
|
"unit": "USD",
|
||||||
|
"timing": "2026-08;第三方估计",
|
||||||
|
"evidence": "E090",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "historical-estimate",
|
||||||
|
"reason": "后续估算单列,不覆盖公司披露",
|
||||||
|
"bound": "=",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O067",
|
||||||
|
"company": "AI055",
|
||||||
|
"name": "Peec AI",
|
||||||
|
"kind": "员工人数",
|
||||||
|
"value": 70,
|
||||||
|
"unit": "人",
|
||||||
|
"timing": "2026-05-28公司公告",
|
||||||
|
"evidence": "E089",
|
||||||
|
"scope": "公司团队",
|
||||||
|
"selection": "scale",
|
||||||
|
"reason": "人数下界;员工与YC Team Size口径不同",
|
||||||
|
"bound": ">",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O068",
|
||||||
|
"company": "AI055",
|
||||||
|
"name": "Peec AI",
|
||||||
|
"kind": "客户数量",
|
||||||
|
"value": 2500,
|
||||||
|
"unit": "家",
|
||||||
|
"timing": "2026-05-28公司公告",
|
||||||
|
"evidence": "E089",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "adoption",
|
||||||
|
"reason": "未声明全部为付费客户,不能直接用作ARPU分母",
|
||||||
|
"bound": ">",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O069",
|
||||||
|
"company": "AI056",
|
||||||
|
"name": "Base44",
|
||||||
|
"kind": "ARR",
|
||||||
|
"value": 100000000,
|
||||||
|
"unit": "USD",
|
||||||
|
"timing": "2026-03-04公告称近期达到",
|
||||||
|
"evidence": "E092",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "historical",
|
||||||
|
"reason": "非2025年末指标;保留历史",
|
||||||
|
"bound": "=",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O070",
|
||||||
|
"company": "AI056",
|
||||||
|
"name": "Base44",
|
||||||
|
"kind": "ARR",
|
||||||
|
"value": 150000000,
|
||||||
|
"unit": "USD",
|
||||||
|
"timing": "2026-05;5月13日公告",
|
||||||
|
"evidence": "E093",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "historical",
|
||||||
|
"reason": "近似值;后有新披露",
|
||||||
|
"bound": "≈",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O071",
|
||||||
|
"company": "AI056",
|
||||||
|
"name": "Base44",
|
||||||
|
"kind": "ARR",
|
||||||
|
"value": 200000000,
|
||||||
|
"unit": "USD",
|
||||||
|
"timing": "2026-08-20创始人声明报道",
|
||||||
|
"evidence": "E095",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "signal",
|
||||||
|
"reason": "媒体转述,未审计;已收购业务单列",
|
||||||
|
"bound": ">",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O072",
|
||||||
|
"company": "AI056",
|
||||||
|
"name": "Base44",
|
||||||
|
"kind": "非GAAP毛利率预期",
|
||||||
|
"value": 60,
|
||||||
|
"unit": "百分比",
|
||||||
|
"timing": "2026-08-04对2026下半年预测",
|
||||||
|
"evidence": "E094",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "excluded",
|
||||||
|
"reason": "预测,不是已实现利润,也不是ARR",
|
||||||
|
"bound": "≈",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O073",
|
||||||
|
"company": "AI057",
|
||||||
|
"name": "Alia",
|
||||||
|
"kind": "live ARR",
|
||||||
|
"value": 115000,
|
||||||
|
"unit": "USD",
|
||||||
|
"timing": "上线三个月;日历截止日未注明,2026-10-30访问",
|
||||||
|
"evidence": "E097",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "signal",
|
||||||
|
"reason": "投资机构资料,含义及经常性待确认",
|
||||||
|
"bound": "=",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O074",
|
||||||
|
"company": "AI057",
|
||||||
|
"name": "Alia",
|
||||||
|
"kind": "员工人数",
|
||||||
|
"value": 6,
|
||||||
|
"unit": "人",
|
||||||
|
"timing": "2026-10-30访问;业务截至日未注明",
|
||||||
|
"evidence": "E097",
|
||||||
|
"scope": "公司团队",
|
||||||
|
"selection": "scale",
|
||||||
|
"reason": "公司在投资机构名录的信息,非独立审计",
|
||||||
|
"bound": "=",
|
||||||
|
"comparisonGroup": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "O075",
|
||||||
|
"company": "AI058",
|
||||||
|
"name": "Cluely",
|
||||||
|
"kind": "已撤回的ARR声明",
|
||||||
|
"value": 7000000,
|
||||||
|
"unit": "USD",
|
||||||
|
"timing": "2025-07-03报道;2026-03-05更正",
|
||||||
|
"evidence": "E099",
|
||||||
|
"scope": "公司整体",
|
||||||
|
"selection": "excluded",
|
||||||
|
"reason": "声明失效,见E100;不能进入均值或图中有效收入信号",
|
||||||
|
"bound": "≈",
|
||||||
|
"comparisonGroup": null
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"evidence": [
|
"evidence": [
|
||||||
@@ -3279,6 +3559,149 @@
|
|||||||
"kind": "公司官方定价或说明",
|
"kind": "公司官方定价或说明",
|
||||||
"summary": "当前公司介绍强调平台收费,无单独AI点数加价;模型调用使用用户已有订阅。",
|
"summary": "当前公司介绍强调平台收费,无单独AI点数加价;模型调用使用用户已有订阅。",
|
||||||
"limitation": "访问快照2026-10-30;不据标价推算收入或毛利"
|
"limitation": "访问快照2026-10-30;不据标价推算收入或毛利"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E088",
|
||||||
|
"companyId": "AI055",
|
||||||
|
"title": "Peec AI 2025年A轮公告",
|
||||||
|
"url": "https://peec.ai/blog/we-raised-21m-series-a-to-help-brands-win-in-ai-search",
|
||||||
|
"publishedAt": "2025-11-18",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "公司公告",
|
||||||
|
"summary": "公司称2025年2月上线,11月ARR超过400万美元;团队在Antler 2024冬季批次相识。",
|
||||||
|
"limitation": "成立时间与加速器批次不同;ARR未审计。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E089",
|
||||||
|
"companyId": "AI055",
|
||||||
|
"title": "Peec AI 2026年5月经营公告",
|
||||||
|
"url": "https://www.globenewswire.com/news-release/2026/05/28/3303009/0/en/peec-ai-hits-10m-arr-16-months-after-launch-as-brands-race-to-optimize-for-ai-search.html",
|
||||||
|
"publishedAt": "2026-05-28",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "公司新闻稿",
|
||||||
|
"summary": "公司披露ARR超过1000万美元、客户超过2500家、员工超过70人,称2025年1月成立。",
|
||||||
|
"limitation": "GlobeNewswire为发布渠道,内容由公司提供,并非独立查账;客户不默认等于付费订阅数。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E090",
|
||||||
|
"companyId": "AI055",
|
||||||
|
"title": "Sacra对Peec的估算",
|
||||||
|
"url": "https://sacra.com/c/peec/",
|
||||||
|
"publishedAt": null,
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "第三方估算",
|
||||||
|
"summary": "Sacra估计2026年8月ARR为1500万美元。",
|
||||||
|
"limitation": "与公司5月披露的1000万美元时点不同;不能将估算覆盖或验证公司公告。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E091",
|
||||||
|
"companyId": "AI056",
|
||||||
|
"title": "Wix收购Base44公告",
|
||||||
|
"url": "https://www.wix.com/press-room/home/post/wix-further-expands-into-vibe-coding-with-acquisition-of-base44-a-hyper-growth-startup-that-simplif",
|
||||||
|
"publishedAt": "2025-06-18",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "收购方公告",
|
||||||
|
"summary": "Base44提供自然语言应用构建及后端、认证与部署;Wix宣布收购后保持独立产品经营。",
|
||||||
|
"limitation": "已收购业务与独立创业公司分组评估;收购价不是收入。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E092",
|
||||||
|
"companyId": "AI056",
|
||||||
|
"title": "Wix 2025全年业绩公告",
|
||||||
|
"url": "https://www.wix.com/press-room/home/post/wix-reports-fourth-quarter-and-full-year-2025-results",
|
||||||
|
"publishedAt": "2026-03-04",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "上市公司管理层披露",
|
||||||
|
"summary": "Wix称Base44近期ARR达到1亿美元,成立约一年。",
|
||||||
|
"limitation": "2025年业绩公告中的近期指标发生在2026年,不能当成2025年末ARR;该运营指标不等于单独审计收入。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E093",
|
||||||
|
"companyId": "AI056",
|
||||||
|
"title": "Wix 2026一季度业绩公告",
|
||||||
|
"url": "https://www.globenewswire.com/news-release/2026/05/13/3293644/0/en/Wix-Reports-First-Quarter-2026-Results.html",
|
||||||
|
"publishedAt": "2026-05-13",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "上市公司管理层披露",
|
||||||
|
"summary": "Wix称Base44在2026年5月ARR约1.5亿美元。",
|
||||||
|
"limitation": "发布日期在一季度之后,5月指标不是3月末值;ARR不等于季度确认收入。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E094",
|
||||||
|
"companyId": "AI056",
|
||||||
|
"title": "Wix 2026二季度业绩 SEC附件",
|
||||||
|
"url": "https://www.sec.gov/Archives/edgar/data/1576789/000162828026052108/secondquarter2026results.htm",
|
||||||
|
"publishedAt": "2026-08-04",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "监管披露中的管理层陈述",
|
||||||
|
"summary": "管理层称Base44年初非GAAP毛利率接近零,预计2026下半年约60%,并将推理和计算列为主要成本驱动。",
|
||||||
|
"limitation": "60%为前瞻预期,非已经实现的GAAP利润率;SEC公开不意味着监管机构验证每项运营指标。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E095",
|
||||||
|
"companyId": "AI056",
|
||||||
|
"title": "CTech报道Base44创始人收入声明",
|
||||||
|
"url": "https://www.calcalistech.com/ctechnews/article/syw900pvdzg",
|
||||||
|
"publishedAt": "2026-08-20",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "媒体转述公司声明",
|
||||||
|
"summary": "CTech转述创始人宣布Base44 ARR超过2亿美元。",
|
||||||
|
"limitation": "创始人社交声明的媒体转述,未独立核验底账;本轮未直接读取原帖。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E096",
|
||||||
|
"companyId": "AI056",
|
||||||
|
"title": "Base44收费说明",
|
||||||
|
"url": "https://base44.com/guides/how-much-does-base44-cost",
|
||||||
|
"publishedAt": "2026-07-26",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "公司收费说明",
|
||||||
|
"summary": "免费层和分档订阅并存,按月或按年付费,套餐包含消息及集成积分额度。",
|
||||||
|
"limitation": "价格是2026年7月页面口径;读取到索引正文,直接打开失败,不能视作10月实时价格。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E097",
|
||||||
|
"companyId": "AI057",
|
||||||
|
"title": "a16z speedrun Alia公司资料",
|
||||||
|
"url": "https://speedrun.a16z.com/companies/alia",
|
||||||
|
"publishedAt": null,
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "投资机构公司资料",
|
||||||
|
"summary": "2025年成立,6名员工;资料称三个月达到11.5万美元live ARR,产品协调跨工具与团队工作。",
|
||||||
|
"limitation": "投资机构与公司有利益关系;三个月是相对时间,没有明确日历截止日;非独立审计。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E098",
|
||||||
|
"companyId": "AI058",
|
||||||
|
"title": "Cluely公司LinkedIn资料",
|
||||||
|
"url": "https://www.linkedin.com/company/cluely",
|
||||||
|
"publishedAt": null,
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "公司资料",
|
||||||
|
"summary": "公司资料标注2025年成立、纽约总部,提供实时会议问答与会议笔记。",
|
||||||
|
"limitation": "关联员工数、招聘平台人数与正式员工并非同一口径,本轮不填单一团队人数。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E099",
|
||||||
|
"companyId": "AI058",
|
||||||
|
"title": "Cluely原ARR声明报道",
|
||||||
|
"url": "https://techcrunch.com/2025/07/03/cluelys-arr-doubled-in-a-week-to-7m-founder-roy-lee-says-but-rivals-are-coming/",
|
||||||
|
"publishedAt": "2025-07-03",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "媒体记录公司声明",
|
||||||
|
"summary": "创始人当时声称ARR约700万美元。",
|
||||||
|
"limitation": "该数字已撤回,排除比较。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "E100",
|
||||||
|
"companyId": "AI058",
|
||||||
|
"title": "Cluely ARR声明更正报道",
|
||||||
|
"url": "https://techcrunch.com/2026/03/05/cluely-ceo-roy-lee-admits-to-publicly-lying-about-revenue-numbers-last-year/",
|
||||||
|
"publishedAt": "2026-03-05",
|
||||||
|
"accessedAt": "2026-10-30",
|
||||||
|
"kind": "媒体纠错",
|
||||||
|
"summary": "报道创始人承认并撤回此前ARR声明。",
|
||||||
|
"limitation": "原始社交帖访问403;本轮依据媒体纠错,不作法律定性。"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"reviews": [
|
"reviews": [
|
||||||
@@ -3403,6 +3826,43 @@
|
|||||||
"E130"
|
"E130"
|
||||||
],
|
],
|
||||||
"handling": "采用当前定价条款,不将容量订阅误记为逐事件收费"
|
"handling": "采用当前定价条款,不将容量订阅误记为逐事件收费"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R12",
|
||||||
|
"type": "声明撤回",
|
||||||
|
"company": "Cluely",
|
||||||
|
"summary": "收入声明已有明确更正记录。",
|
||||||
|
"evidenceIds": [
|
||||||
|
"E099",
|
||||||
|
"E100"
|
||||||
|
],
|
||||||
|
"handling": "原值仅保留追溯,排除收入比较;当前收入未知,不据此推断其他公司。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R13",
|
||||||
|
"type": "并购与时间口径",
|
||||||
|
"company": "Base44",
|
||||||
|
"summary": "2025业绩公告含2026近期ARR;公司2025年已被收购。",
|
||||||
|
"evidenceIds": [
|
||||||
|
"E091",
|
||||||
|
"E092",
|
||||||
|
"E093",
|
||||||
|
"E094",
|
||||||
|
"E095"
|
||||||
|
],
|
||||||
|
"handling": "各里程碑按实际披露时间记录;收购后业务与独立初创分开。60%毛利率为预期,不当作实现值。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R14",
|
||||||
|
"type": "披露与估算时点不同",
|
||||||
|
"company": "Peec AI",
|
||||||
|
"summary": "公司5月披露与第三方8月估算并存;2024加速器经历不等于2024公司成立。",
|
||||||
|
"evidenceIds": [
|
||||||
|
"E088",
|
||||||
|
"E089",
|
||||||
|
"E090"
|
||||||
|
],
|
||||||
|
"handling": "公司值和第三方估算分别保留;未用不同日期计算行业增长或把所有客户当付费客户。"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user