Merge pull request '补核 SR007 三十六项候选及三十家公司,分类收入并增加两项商业模式初评' (#43) from codex/ai-research-sr007-followup into main
Verify and deploy Tabularium / verify-and-deploy (push) Successful in 7m58s
Verify and deploy Tabularium / verify-and-deploy (push) Successful in 7m58s
Reviewed-on: #43
This commit was merged in pull request #43.
This commit is contained in:
@@ -182,10 +182,10 @@ 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, 1202);
|
||||
assert.equal(research.companies.length, 1232);
|
||||
assert.equal(research.categories.length, 11);
|
||||
assert.equal(research.evidence.length, 4689);
|
||||
assert.equal(research.observations.length, 453);
|
||||
assert.equal(research.evidence.length, 4797);
|
||||
assert.equal(research.observations.length, 475);
|
||||
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 });
|
||||
assert.equal(researchPage.status, 200);
|
||||
|
||||
@@ -123,11 +123,11 @@ 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, 1202);
|
||||
assert.equal(initial.evidence.length, 4689);
|
||||
assert.equal(initial.observations.length, 453);
|
||||
assert.equal(initial.companies.length, 1232);
|
||||
assert.equal(initial.evidence.length, 4797);
|
||||
assert.equal(initial.observations.length, 475);
|
||||
const businessReviews = initial.reviews.filter((review) => review.type === businessModelReviewType);
|
||||
assert.equal(businessReviews.length, 4);
|
||||
assert.equal(businessReviews.length, 6);
|
||||
assert.deepEqual(businessReviews, seed.reviews.filter((review) => review.type === businessModelReviewType)
|
||||
.sort((a, b) => a.id.localeCompare(b.id)),
|
||||
"business model assessments and company/evidence links persist in the shared database");
|
||||
@@ -169,9 +169,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, 219);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "companies").length, 234);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 145);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "excluded-candidate").length, 47);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "excluded-candidate").length, 53);
|
||||
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")!), []);
|
||||
@@ -190,11 +190,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), 1202);
|
||||
assert.equal(summary.reduce((n, c) => n + c.self, 0), 58);
|
||||
assert.equal(summary.reduce((n, c) => n + c.count, 0), 1232);
|
||||
assert.equal(summary.reduce((n, c) => n + c.self, 0), 62);
|
||||
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), 1123);
|
||||
assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 1149);
|
||||
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 === "公司整体"));
|
||||
@@ -229,8 +229,8 @@ 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, 187);
|
||||
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "public-artifact").length, 26);
|
||||
assert.equal(snapshot.companies.filter((c) => c.technicalReview).length, 217);
|
||||
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "public-artifact").length, 28);
|
||||
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "independent-test").length, 1);
|
||||
assert.equal(snapshot.companies.find((c) => c.id === "AI051")?.revenueStatus, "unknown");
|
||||
assert.match(snapshot.companies.find((c) => c.id === "AI051")!.technicalReview!.testScope!, /Sep 2026/);
|
||||
@@ -502,6 +502,71 @@ test("the public SR007 roster preserves unique entries and Alven's older operato
|
||||
assert.ok(alven.evidenceIds?.includes("SR007R-ALVEN-REG"));
|
||||
assert.ok(!snapshot.observations.some((item) => item.evidence.startsWith("SR007R-")),
|
||||
"roster claims, deployment plans and per-unit prices are not new financial observations");
|
||||
const coherence = batch.records.find((row) => row.name === "Coherence Health")!;
|
||||
assert.equal(coherence.status, "pending-ai", "a new coaching business still needs current AI delivery evidence");
|
||||
assert.equal(coherence.companyId, undefined);
|
||||
const followup = snapshot.observations.filter((item) => item.id.startsWith("SR007F2-"));
|
||||
assert.equal(followup.length, 4);
|
||||
assert.ok(followup.every((item) => ["excluded", "adoption"].includes(item.selection) && !item.metric && !item.observedAt));
|
||||
assert.ok(!arrDisclosures(snapshot).some(({ observation }) => observation.id.startsWith("SR007F2-")),
|
||||
"contracted ARR and pipeline are not live ARR disclosures");
|
||||
const thirdFollowup = snapshot.observations.filter((item) => item.id.startsWith("SR007F3-"));
|
||||
assert.equal(thirdFollowup.length, 6);
|
||||
assert.equal(thirdFollowup.filter((item) => item.selection === "excluded").length, 3);
|
||||
assert.equal(thirdFollowup.filter((item) => item.selection === "adoption").length, 3);
|
||||
assert.ok(thirdFollowup.every((item) => !item.metric && !item.observedAt));
|
||||
assert.ok(!arrDisclosures(snapshot).some(({ observation }) => observation.id.startsWith("SR007F3-")),
|
||||
"projected ARR, connected customer assets and prospective contracts are not realized ARR");
|
||||
assert.equal(snapshot.companies.find((item) => item.id === "AI121")!.cat, "C02",
|
||||
"training data and environments are infrastructure rather than demonstrated foundation models");
|
||||
const embrasure = snapshot.companies.find((item) => item.id === "AI122")!;
|
||||
assert.equal(embrasure.technicalReview!.level, "public-artifact");
|
||||
assert.ok(embrasure.technicalReview!.evidenceIds.includes("SR007F3-EMBRASURE-FLOW"),
|
||||
"the public connector supports artifact availability, not independently reproduced warehouse performance");
|
||||
for (const name of ["KIRA", "Leonidas", "Mecone", "PhotonSpear"]) {
|
||||
const candidate = batch.records.find((row) => row.name === name)!;
|
||||
assert.equal(candidate.status, "pending-ai",
|
||||
"serving AI customers or using software controls is not evidence of an AI business");
|
||||
assert.equal(candidate.companyId, undefined);
|
||||
}
|
||||
const maestroClaims = arrDisclosures(snapshot).filter(({ company }) => company.id === "AI130");
|
||||
assert.equal(maestroClaims.length, 2, "keep the two original ARR milestones in the evidence ledger");
|
||||
assert.ok(maestroClaims.every(({ observation }) => observation.selection === "historical" &&
|
||||
arrFieldGaps(observation, snapshot.asOf).includes("date") &&
|
||||
arrFieldGaps(observation, snapshot.asOf).includes("currency")));
|
||||
const cumulative = snapshot.observations.find((item) => item.id === "SR007F4-O-MAESTRO-CUMULATIVE")!;
|
||||
assert.equal(cumulative.selection, "historical");
|
||||
assert.equal(cumulative.metric, undefined, "nine-month cumulative revenue cannot become ARR");
|
||||
const contracted = snapshot.observations.find((item) => item.id === "SR007F4-O-HOID-CONTRACT")!;
|
||||
assert.equal(contracted.selection, "excluded");
|
||||
assert.equal(contracted.metric, undefined, "contracted run rate is not realized ARR");
|
||||
const openwhispr = snapshot.companies.find((item) => item.id === "AI135")!;
|
||||
assert.equal(openwhispr.technicalReview!.level, "public-artifact");
|
||||
assert.ok(openwhispr.technicalReview!.evidenceIds.includes("SR007F5-OPENWHISPR-REPO"));
|
||||
const voiceArr = arrDisclosures(snapshot).find(({ company }) => company.id === openwhispr.id)!.observation;
|
||||
assert.equal(voiceArr.value, 120000);
|
||||
assert.equal(voiceArr.bound, "≥");
|
||||
assert.ok(arrFieldGaps(voiceArr, snapshot.asOf).includes("date"));
|
||||
assert.ok(arrFieldGaps(voiceArr, snapshot.asOf).includes("currency"),
|
||||
"current plan prices cannot supply the currency of an undated investor ARR claim");
|
||||
const voiceUsers = snapshot.observations.find((item) => item.id === "SR007F5-O-OPENWHISPR-DAU")!;
|
||||
assert.equal(voiceUsers.selection, "adoption", "daily active users are not paying subscribers");
|
||||
assert.equal(voiceUsers.metric, undefined);
|
||||
const salesLive = snapshot.observations.find((item) => item.id === "SR007F6-O-OTHELLO-LIVE")!;
|
||||
assert.equal(salesLive.metric, "arr");
|
||||
assert.equal(salesLive.value, 600000, "live ARR must not include contracted ARR or pipeline");
|
||||
for (const suffix of ["CONTRACT", "PIPELINE"]) {
|
||||
const prospective = snapshot.observations.find((item) => item.id === `SR007F6-O-OTHELLO-${suffix}`)!;
|
||||
assert.equal(prospective.selection, "excluded");
|
||||
assert.equal(prospective.metric, undefined);
|
||||
}
|
||||
const professionalService = snapshot.observations.find((item) => item.id === "SR007F6-O-PARCA-RUNRATE")!;
|
||||
assert.equal(professionalService.metric, "annualized-revenue");
|
||||
assert.equal(professionalService.selection, "historical");
|
||||
assert.ok(!arrDisclosures(snapshot).some(({ observation }) => observation.id === professionalService.id),
|
||||
"annualized professional-service revenue is not recurring subscription ARR");
|
||||
assert.equal(snapshot.companies.find((item) => item.id === "AI137")!.technicalReview!.level, "description",
|
||||
"a preliminary external ranking with unresolved methodology is not complete independent verification");
|
||||
});
|
||||
|
||||
test("annual launch archives exclude older companies only with evidence and reuse existing records", () => {
|
||||
@@ -531,7 +596,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, 189);
|
||||
assert.equal(snapshot.candidateBatches!.flatMap((b) => b.records).filter((r) => r.status === "pending-year").length, 153);
|
||||
});
|
||||
|
||||
test("product pivots and founder histories do not become new company years or current revenue", () => {
|
||||
|
||||
+3394
-148
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "2026-11-01-sr007-public-roster-1",
|
||||
"version": "2026-11-01-sr007-followup-6",
|
||||
"scopeConfirmedAt": "2026-10-30",
|
||||
"acceptance": "以确认的公开来源清单为边界,逐条核对并标明缺项。",
|
||||
"provenance": "S01—S12恢复自已提交用户的《AI公司研究_来源与分类模板》来源清单;S13—S16单列后续已使用的补充证据渠道,不将使用次数当作全量覆盖。",
|
||||
@@ -3040,8 +3040,8 @@
|
||||
"speedrun.a16z.com"
|
||||
],
|
||||
"initialAccess": "见具体证据访问记录",
|
||||
"boundary": "原有投资方公司定向个案和2025/2026补查保留。2026-11-01普通公开HTML内嵌载荷明确默认SR007的79条,逐一登记20关联(17复用、3新增)/59主体年份待核;75普通UUID链接与79载荷分列。此前文本仅外壳不等无名单,本次不执行站点脚本或读取私有接口。SR005/SR006公开参数仍返回默认SR007,其他批次/两年目录未穷尽。投资方和公司宣传收入非独立验证,Bounty部署/承诺及Alven当前部署金额不作已实现ARR。",
|
||||
"nextCheck": "先补SR007剩余59条独立档案、官网及成立/主体与AI主营;同时建立其他批次的公开边界,不能按请求参数认读取成功。Alven的ROOMSS2024/品牌2025与海外主体沿革、各公司币种/日历财务日/实际合同和人工、设备、模型成本待核;原Nexor/Hotbox/OneGC/Omi/DRS/Cedar/Loops缺项继续保留。",
|
||||
"boundary": "原有定向个案保留。2026-11-01匿名普通HTML默认SR007名单79条,75个普通UUID链接;逐一登记50关联(17复用、33本系列新增)、23成立/主体待核、6AI主营待核。本系列补读40个独立档案及可读官网/条款,剩余目录位置未当独立档案已读。未执行站点脚本或读取私有接口;SR005/SR006参数仍返回SR007,不认其他批次或两年全量覆盖。Bric/Coherence/KIRA/Leonidas/Mecone/PhotonSpear当前AI主营未明,Alven有2024主体与2025品牌冲突。签约/管线/预计ARR、客户资产、旧事业、候补与演示不当实收;Maestro九个月累计收入与Afore的两个ARR里程碑分列,后者缺币种/日历日及净经常性定义。软件、人工/专家、云资源、评测、硬件/旅行交易及保险安排按当前交付分开,技术制品与独立验证分开;具体限制链接公司、证据和核查记录。 OpenWhispr新增有缺项ARR标签与日活采用,本地/BYOK/自营云分开,旧Hedra/StockX/金融产品业绩及客户运费不迁新公司。 Othello live/cARR/管线、Parca服务年化、Phyvant客户财务及Orbits当前免费与旧雇主业绩分别保留;Oruk外部英语初步榜单不能外推整体效果。",
|
||||
"nextCheck": "先补SR007剩余23条独立档案及Bric/Coherence/KIRA/Leonidas/Mecone/PhotonSpear的AI主营,另核Alven主体/品牌沿革。继续建立其他批次公开边界,不能按请求参数认读取成功。已关联公司仍须补独立登记、币种/财务日、签约履约/实付、经常性净费及取消退款;实施/人工、数据许可、评测、云/模型资源、设备、保险佣金/保费与旅行采购及会员费需拆。Hoid性能/合同、Kairo工程师服务、Keythorn牌照/风险角色、Maestro2025推荐语/主体起点及两种收入口径为当前重点;其他个案缺项见关联核查,不因本次可读认已验证。 Mirai业务订单与模型依赖、Motherboard现场人力/装机、Munari评分/专家成本、Nimble客户审批/付费、OpenWhispr免费与云净费/隐私配置和独立主体继续核。 Oruk精确模型/方法与语音用量成本,Othello主体/品牌起点及live合同净额,Parca专业审核净费/资质,Orbits免费承诺/未来定价及Phyvant实施/异常人工与合同继续缺。",
|
||||
"limitation": "来源可读不等于声明已独立验证。",
|
||||
"rosterAudit": {
|
||||
"url": "https://speedrun.a16z.com/companies",
|
||||
@@ -3078,11 +3078,13 @@
|
||||
"role": "supplement",
|
||||
"status": "targeted",
|
||||
"hosts": [
|
||||
"getlatka.com"
|
||||
"getlatka.com",
|
||||
"intros.afore.vc",
|
||||
"benchmarks.speko.ai"
|
||||
],
|
||||
"initialAccess": "见具体证据访问记录",
|
||||
"boundary": "未归入上述来源的公开材料按原始证据链接逐条保留;不视为新增已批准的完整候选池。 本轮读取GetLatka单页历史年收入估算,方法底表未取得,不视为新增完整候选池。 另定向读GuideAI估算页,明确EST且团队身份与当前原始线索未对齐,本批不采财务观测;非全库。",
|
||||
"nextCheck": "逐项核来源归属、可靠性及可读正文,不能将搜索摘要当全文。",
|
||||
"boundary": "未归入上述来源的公开材料按原始证据链接逐条保留;不视为新增已批准的完整候选池。 本轮读取GetLatka单页历史年收入估算,方法底表未取得,不视为新增完整候选池。 另定向读GuideAI估算页,明确EST且团队身份与当前原始线索未对齐,本批不采财务观测;非全库。 定向读取Afore公开Maestro公司页(同名创始人及官网反链),记录ARR原始标签但无日历截至日/币种或净费定义;未将其Showcase全名单视为已批准候选池。 定向读取Speko英语情绪初步榜单,仅核Oruk公开结果,方法/独立性/版本待核,非扩展整个候选池。",
|
||||
"nextCheck": "逐项核来源归属、可靠性及可读正文,不能将搜索摘要当全文。 Maestro投资方ARR与累计收入、净会员费/旅行总额及顾问成本需对齐;不请求介绍。",
|
||||
"limitation": "来源可读不等于声明已独立验证。"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"sourceVersion": "2026-11-01-sr007-public-roster-1",
|
||||
"sourceVersion": "2026-11-01-sr007-followup-6",
|
||||
"asOf": "2026-11-01",
|
||||
"metric": "platform-mrr-usd",
|
||||
"sampleUnit": "product-or-business",
|
||||
|
||||
Reference in New Issue
Block a user