|
|
|
@@ -23,9 +23,9 @@ 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, 1051);
|
|
|
|
|
assert.equal(initial.evidence.length, 1858);
|
|
|
|
|
assert.equal(initial.observations.length, 237);
|
|
|
|
|
assert.equal(initial.companies.length, 1154);
|
|
|
|
|
assert.equal(initial.evidence.length, 3303);
|
|
|
|
|
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");
|
|
|
|
|
assert.deepEqual(readResearchSnapshot(), initial, "reopening does not duplicate records");
|
|
|
|
@@ -64,8 +64,8 @@ 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, 115);
|
|
|
|
|
assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 12);
|
|
|
|
|
assert.equal(snapshot.reviews.filter((r) => r.scope === "companies").length, 198);
|
|
|
|
|
assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 21);
|
|
|
|
|
assert.equal(snapshot.reviews.filter((r) => r.scope === "excluded-candidate").length, 44);
|
|
|
|
|
const review = snapshot.reviews.find((r) => r.id === "R4")!;
|
|
|
|
|
assert.deepEqual(reviewCompanyIds(snapshot, review), ["AI007", "AI013", "AI021", "AI034"]);
|
|
|
|
@@ -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), 1051);
|
|
|
|
|
assert.equal(summary.reduce((n, c) => n + c.self, 0), 43);
|
|
|
|
|
assert.equal(summary.reduce((n, c) => n + c.count, 0), 1154);
|
|
|
|
|
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), 987);
|
|
|
|
|
assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 1075);
|
|
|
|
|
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 === "公司整体"));
|
|
|
|
@@ -99,10 +99,33 @@ test("disclosure counts exclude client income, biographies, targets and duplicat
|
|
|
|
|
assert.ok(arena.metric !== "mrr" && arena.metric !== "arr", "a two-week cumulative figure cannot become MRR or ARR");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("service run rates, legacy freight revenue and paid adoption do not become platform ARR", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const runRate = snapshot.observations.find((o) => o.id === "INDUSTRY11-O-LOCKE-RUNRATE")!;
|
|
|
|
|
assert.equal(runRate.metric, "annualized-revenue");
|
|
|
|
|
assert.equal(runRate.selection, "historical");
|
|
|
|
|
assert.equal(runRate.observedAt, undefined);
|
|
|
|
|
assert.equal(runRate.comparisonGroup, null);
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === "YC33283")?.revenueStatus, "self");
|
|
|
|
|
for (const id of ["TRUEMILE-OLD-REV", "VELTHA-DEMO", "LANTERN-OLD-REV"]) {
|
|
|
|
|
const observation = snapshot.observations.find((o) => o.id === `INDUSTRY11-O-${id}`)!;
|
|
|
|
|
assert.equal(observation.selection, "excluded");
|
|
|
|
|
assert.equal(observation.metric, undefined);
|
|
|
|
|
assert.equal(observation.comparisonGroup, null);
|
|
|
|
|
}
|
|
|
|
|
for (const [id, company] of [["VERDANT-DEPLOY", "YC32189"], ["SUTRIX-PAID", "YC36576"]]) {
|
|
|
|
|
const observation = snapshot.observations.find((o) => o.id === `INDUSTRY11-O-${id}`)!;
|
|
|
|
|
assert.equal(observation.selection, "adoption");
|
|
|
|
|
assert.equal(observation.metric, undefined);
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === company)?.revenueStatus, "unknown");
|
|
|
|
|
}
|
|
|
|
|
assert.ok(platformIncomeSample(snapshot, { windowDays: 90 }).points.every((point) => !point.observation.id.startsWith("INDUSTRY11-")));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
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, 59);
|
|
|
|
|
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "public-artifact").length, 9);
|
|
|
|
|
assert.equal(snapshot.companies.filter((c) => c.technicalReview).length, 138);
|
|
|
|
|
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "public-artifact").length, 23);
|
|
|
|
|
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/);
|
|
|
|
@@ -228,6 +251,10 @@ test("directory coverage reconciles every candidate and keeps profile-only incom
|
|
|
|
|
assert.equal(row.foundedYear, 2026, "original Native discovery remains unchanged");
|
|
|
|
|
assert.equal(company.year, null, "a model launch and YC date cannot settle the older business founding year");
|
|
|
|
|
assert.ok(snapshot.reviews.some((review) => review.id === "NATIVE-R-COHORT" && review.companyIds?.includes(company.id)));
|
|
|
|
|
} else if (company.id === "YC31470") {
|
|
|
|
|
assert.equal(row.foundedYear, 2025, "original Tasklet discovery remains unchanged");
|
|
|
|
|
assert.equal(company.year, null, "a new product cannot establish a new company founding year");
|
|
|
|
|
assert.ok(snapshot.reviews.some((review) => review.id === "ENTERPRISE3-R-TASKLET" && review.companyIds?.includes(company.id)));
|
|
|
|
|
} else {
|
|
|
|
|
assert.equal(company.year, row.foundedYear);
|
|
|
|
|
assert.ok([2025, 2026].includes(company.year!));
|
|
|
|
@@ -379,7 +406,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, 18);
|
|
|
|
|
assert.equal(snapshot.candidateBatches!.flatMap((b) => b.records).filter((r) => r.status === "pending-year").length, 24);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("product pivots and founder histories do not become new company years or current revenue", () => {
|
|
|
|
@@ -416,6 +443,336 @@ test("follow-up evidence can admit an uncertain directory candidate without rewr
|
|
|
|
|
assert.throws(() => validateResearch(snapshot), /directory recheck/);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("AI relevance follow-ups retain unresolved businesses and reuse existing company identities", () => {
|
|
|
|
|
const snapshot = structuredClone(seed) as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-AI-UNCLEAR-1")!;
|
|
|
|
|
assert.equal(batch.complete, false);
|
|
|
|
|
assert.equal(batch.records.length, 24);
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "ai-unclear").slice(0, 24);
|
|
|
|
|
assert.deepEqual(batch.records.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
const linked = batch.records.filter((r) => r.status === "linked");
|
|
|
|
|
assert.equal(linked.length, 17);
|
|
|
|
|
assert.equal(linked.filter((r) => r.companyId!.startsWith("YC")).length, 14);
|
|
|
|
|
for (const [name, id] of [["Bud", "AI070"], ["Prism", "AI030"], ["Parametric", "AI014"]]) {
|
|
|
|
|
assert.equal(linked.find((r) => r.name === name)?.companyId, id);
|
|
|
|
|
}
|
|
|
|
|
assert.equal(snapshot.companies.filter((c) => c.profileOnly || c.directoryOrigin === "yc-2025-2026").length, 928);
|
|
|
|
|
for (const row of linked) {
|
|
|
|
|
const ycId = Number(row.id.replace("YC-AI1-", ""));
|
|
|
|
|
assert.equal(snapshot.directoryRechecks!.find((r) => r.ycId === ycId)?.companyId, row.companyId);
|
|
|
|
|
}
|
|
|
|
|
const pending = batch.records.filter((r) => r.status === "pending-ai");
|
|
|
|
|
assert.equal(pending.length, 7);
|
|
|
|
|
assert.ok(pending.every((r) => !r.companyId && r.evidenceIds!.length && /2025/.test(r.note)));
|
|
|
|
|
assert.match(pending.find((r) => r.name === "Better Auth")!.note, /AI.*模块/);
|
|
|
|
|
validateResearch(snapshot);
|
|
|
|
|
pending[0].companyId = "AI014";
|
|
|
|
|
assert.throws(() => validateResearch(snapshot), /research candidate/);
|
|
|
|
|
delete pending[0].companyId;
|
|
|
|
|
pending[0].evidenceIds = [];
|
|
|
|
|
assert.throws(() => validateResearch(snapshot), /research candidate/);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("historical monthly revenue and customer examples do not enter recurring platform comparisons", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const monthly = snapshot.observations.find((o) => o.id === "UNCLEAR1-O-SCALAR-MONTHLY")!;
|
|
|
|
|
assert.equal(monthly.value, 74000);
|
|
|
|
|
assert.equal(monthly.selection, "historical");
|
|
|
|
|
assert.equal(monthly.metric, undefined, "monthly revenue alone does not establish MRR or ARR");
|
|
|
|
|
assert.equal(monthly.comparisonGroup, null);
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === "YC30514")!.revenueStatus, "self");
|
|
|
|
|
for (const id of ["AMBY-CLIENT", "NIXO-EXAMPLE", "AUTOSTEP-WASTE"]) {
|
|
|
|
|
assert.equal(snapshot.observations.find((o) => o.id === `UNCLEAR1-O-${id}`)!.selection, "excluded");
|
|
|
|
|
}
|
|
|
|
|
assert.ok(!platformIncomeSample(snapshot, { windowDays: null }).points.some((p) => p.observation.id.startsWith("UNCLEAR1-")));
|
|
|
|
|
const cua = snapshot.companies.find((c) => c.id === "YC30420")!;
|
|
|
|
|
assert.equal(cua.cat, "C03");
|
|
|
|
|
assert.equal(cua.revenueStatus, "unknown");
|
|
|
|
|
assert.match(cua.businessModel!, /自备计算机/);
|
|
|
|
|
assert.equal(cua.technicalReview!.level, "public-artifact");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("a second uncertain cohort admits evidenced AI tasks while preserving autonomy and finance gaps", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-AI-UNCLEAR-2")!;
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "ai-unclear").slice(24, 48);
|
|
|
|
|
assert.equal(batch.complete, false);
|
|
|
|
|
assert.deepEqual(batch.records.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "linked").length, 13);
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "pending-ai").length, 11);
|
|
|
|
|
for (const name of ["Albacore Inc.", "Perseus Defense", "Munify", "Ruvo", "DeepGrove"]) {
|
|
|
|
|
const row = batch.records.find((r) => r.name === name)!;
|
|
|
|
|
assert.equal(row.status, "pending-ai");
|
|
|
|
|
assert.equal(row.companyId, undefined, "autonomy, a domain or finance automation alone is insufficient");
|
|
|
|
|
assert.ok(row.evidenceIds!.length);
|
|
|
|
|
}
|
|
|
|
|
const signals = snapshot.companies.find((c) => c.id === "YC30639")!;
|
|
|
|
|
assert.equal(signals.year, 2026, "retain the company year instead of assigning the batch's majority year");
|
|
|
|
|
assert.equal(signals.cat, "C06");
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === "YC30846")!.cat, "C03");
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "YC30821")!.business, /远端推理/);
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === "YC30933")!.technicalReview!.level, "description",
|
|
|
|
|
"vendor clinical agreement is not an independent validation");
|
|
|
|
|
const amounts = snapshot.observations.filter((o) => o.id.startsWith("UNCLEAR2-"));
|
|
|
|
|
assert.equal(amounts.length, 8);
|
|
|
|
|
assert.ok(amounts.every((o) => ["excluded", "adoption"].includes(o.selection) && !o.metric && o.comparisonGroup === null));
|
|
|
|
|
assert.equal(amounts.find((o) => o.id.endsWith("WARDSTONE-GRANT"))!.selection, "excluded");
|
|
|
|
|
assert.equal(amounts.find((o) => o.id.endsWith("SOLVA-OLD-PREMIUM"))!.selection, "excluded");
|
|
|
|
|
assert.ok(batch.records.filter((r) => r.companyId).every((r) => snapshot.companies.find((c) => c.id === r.companyId)!.revenueStatus === "unknown"));
|
|
|
|
|
assert.ok(!platformIncomeSample(snapshot, { windowDays: null }).points.some((p) => p.observation.id.startsWith("UNCLEAR2-")));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("the third uncertain cohort retains shutdowns, unknown scale and mixed data-service economics", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-AI-UNCLEAR-3")!;
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "ai-unclear").slice(48, 72);
|
|
|
|
|
assert.equal(batch.complete, false);
|
|
|
|
|
assert.deepEqual(batch.records.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "linked").length, 12);
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "pending-ai").length, 12);
|
|
|
|
|
for (const name of ["Voltair", "Mirabelle", "ZeroSettle", "Kyten Technologies"]) {
|
|
|
|
|
assert.equal(batch.records.find((r) => r.name === name)!.companyId, undefined);
|
|
|
|
|
}
|
|
|
|
|
const klaus = snapshot.companies.find((c) => c.id === "YC31084")!;
|
|
|
|
|
assert.equal(klaus.revenueStatus, "unknown", "a shutdown must not manufacture a zero revenue report");
|
|
|
|
|
assert.match(klaus.stage, /2026-09-01停服/);
|
|
|
|
|
assert.ok(!snapshot.observations.some((o) => o.company === klaus.id));
|
|
|
|
|
const openspec = snapshot.companies.find((c) => c.id === "YC31116")!;
|
|
|
|
|
assert.equal(openspec.team, null, "missing staff count stays unknown");
|
|
|
|
|
assert.equal(openspec.year, 2025, "a license copyright line alone is not a company founding date");
|
|
|
|
|
assert.equal(openspec.technicalReview!.level, "public-artifact");
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "YC31095")!.businessModel!, /清洁/);
|
|
|
|
|
const figures = snapshot.observations.filter((o) => o.id.startsWith("UNCLEAR3-"));
|
|
|
|
|
assert.equal(figures.length, 8);
|
|
|
|
|
assert.ok(figures.every((o) => ["excluded", "adoption"].includes(o.selection) && !o.metric && o.comparisonGroup === null));
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith("SHORTKIT-OLD-ARR"))!.selection, "excluded");
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith("KALPA-TRAIN-COST"))!.selection, "excluded");
|
|
|
|
|
assert.ok(!platformIncomeSample(snapshot, { windowDays: null }).points.some((p) => p.observation.id.startsWith("UNCLEAR3-")));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("the fourth uncertain cohort distinguishes product pivots, managed labor and pass-through money", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-AI-UNCLEAR-4")!;
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "ai-unclear").slice(72, 96);
|
|
|
|
|
assert.equal(batch.complete, false);
|
|
|
|
|
assert.deepEqual(batch.records.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "linked").length, 13);
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "pending-ai").length, 11);
|
|
|
|
|
assert.equal(batch.records.find((r) => r.name === "Orthogonal")!.companyId, "AI036");
|
|
|
|
|
assert.equal(snapshot.companies.filter((c) => c.url.endsWith("/companies/orthogonal")).length, 1);
|
|
|
|
|
const fern = snapshot.companies.find((c) => c.id === "YC31152")!;
|
|
|
|
|
assert.equal(fern.cat, "C02");
|
|
|
|
|
assert.match(fern.notes, /会议/);
|
|
|
|
|
const mocha = snapshot.companies.find((c) => c.id === "YC31269")!;
|
|
|
|
|
assert.equal(mocha.year, 2026);
|
|
|
|
|
assert.match(mocha.businessModel!, /人工/);
|
|
|
|
|
assert.match(mocha.price, /Platform.*Managed/);
|
|
|
|
|
assert.match(mocha.notes, /Coming soon/);
|
|
|
|
|
const figures = snapshot.observations.filter((o) => o.id.startsWith("UNCLEAR4-"));
|
|
|
|
|
assert.equal(figures.length, 7);
|
|
|
|
|
assert.ok(figures.every((o) => ["excluded", "adoption"].includes(o.selection) && !o.metric && o.comparisonGroup === null));
|
|
|
|
|
for (const suffix of ["LAURENCE-ADSPEND", "EKPA-CONNECTED-ASSETS", "REGBASE-CLIENT-GRANTS", "MOCHA-FUNDING"]) {
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith(suffix))!.selection, "excluded");
|
|
|
|
|
}
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === "YC31199")!.technicalReview!.level, "public-artifact");
|
|
|
|
|
assert.ok(!platformIncomeSample(snapshot, { windowDays: null }).points.some((p) => p.observation.id.startsWith("UNCLEAR4-")));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("the fifth uncertain cohort separates dated ARR, service run rates, bookings and previous ventures", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-AI-UNCLEAR-5")!;
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "ai-unclear").slice(96, 120);
|
|
|
|
|
assert.equal(batch.complete, false);
|
|
|
|
|
assert.deepEqual(batch.records.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "linked").length, 15);
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "pending-ai").length, 9);
|
|
|
|
|
assert.equal(batch.records.find((r) => r.name === "primitive")!.companyId, "AI002");
|
|
|
|
|
assert.equal(batch.records.find((r) => r.name === "Result")!.companyId, "AI001");
|
|
|
|
|
const result = snapshot.companies.find((c) => c.id === "AI001")!;
|
|
|
|
|
assert.equal(result.cat, "C09");
|
|
|
|
|
assert.equal(result.revenueStatus, "unknown");
|
|
|
|
|
assert.match(result.notes, /280万美元ARR属于用户/);
|
|
|
|
|
assert.ok(result.evidenceIds.includes("UNCLEAR5-31438-TERMS"));
|
|
|
|
|
const andco = snapshot.companies.find((c) => c.id === "YC31411")!;
|
|
|
|
|
assert.equal(andco.year, 2026, "a founder's previous venture must not replace the new company's stated year");
|
|
|
|
|
assert.match(andco.notes, /Layup/);
|
|
|
|
|
assert.equal(snapshot.evidence.find((e) => e.id === "UNCLEAR5-31411-LAUNCH6")!.companyId, null);
|
|
|
|
|
const figures = snapshot.observations.filter((o) => o.id.startsWith("UNCLEAR5-"));
|
|
|
|
|
assert.equal(figures.length, 18);
|
|
|
|
|
const dated = figures.find((o) => o.id.endsWith("TRELLIS-ARR-AUG"))!;
|
|
|
|
|
assert.equal(dated.metric, "arr");
|
|
|
|
|
assert.equal(dated.observedAt, "2026-08-24");
|
|
|
|
|
assert.equal(dated.bound, "≥");
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith("INSTA-RUNRATE"))!.metric, "annualized-revenue");
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith("INSTA-LAUNCH-ARR"))!.metric, "arr");
|
|
|
|
|
for (const suffix of ["PARROT-CONTRACT", "KINRO-OLD-CONTRACT", "BENTO-OLD-EMPLOYER", "TRELLIS-OLD-MGMT"]) {
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith(suffix))!.selection, "excluded");
|
|
|
|
|
}
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === "YC31423")!.technicalReview!.level, "description",
|
|
|
|
|
"an internal benchmark subset is not an independent leaderboard result");
|
|
|
|
|
assert.ok(figures.every((o) => o.comparisonGroup === null));
|
|
|
|
|
assert.ok(!platformIncomeSample(snapshot, { windowDays: null }).points.some((p) => p.observation.id.startsWith("UNCLEAR5-")));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("the sixth uncertain cohort preserves namesakes, churn and historical robotics MRR", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-AI-UNCLEAR-6")!;
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "ai-unclear").slice(120, 144);
|
|
|
|
|
assert.equal(batch.complete, false);
|
|
|
|
|
assert.deepEqual(batch.records.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "linked").length, 13);
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "pending-ai").length, 11);
|
|
|
|
|
const hera = snapshot.companies.find((c) => c.id === "YC32123")!;
|
|
|
|
|
const videoHera = snapshot.companies.find((c) => c.id === "AI025")!;
|
|
|
|
|
assert.equal(hera.cat, "C07");
|
|
|
|
|
assert.equal(hera.year, 2026);
|
|
|
|
|
assert.equal(videoHera.cat, "C08");
|
|
|
|
|
assert.equal(videoHera.year, 2025);
|
|
|
|
|
assert.notEqual(hera.url, videoHera.url, "same-name products with different YC pages must not be merged");
|
|
|
|
|
for (const name of ["Aernata", "Maquoketa Research", "Fire Wallet", "Eden Robotics", "Edgerun"]) {
|
|
|
|
|
const row = batch.records.find((r) => r.name === name)!;
|
|
|
|
|
assert.equal(row.status, "pending-ai");
|
|
|
|
|
assert.equal(row.companyId, undefined, "historical AI products, agent features and autonomous hardware need current-core evidence");
|
|
|
|
|
}
|
|
|
|
|
const figures = snapshot.observations.filter((o) => o.id.startsWith("UNCLEAR6-"));
|
|
|
|
|
assert.equal(figures.length, 13);
|
|
|
|
|
const churn = figures.find((o) => o.id.endsWith("ARDENT-CHURN"))!;
|
|
|
|
|
assert.equal(churn.selection, "excluded");
|
|
|
|
|
assert.equal(churn.metric, undefined, "lost ARR is not a positive current ARR observation");
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === "YC31475")!.revenueStatus, "unknown");
|
|
|
|
|
const mrr = figures.find((o) => o.id.endsWith("AVEA-MRR"))!;
|
|
|
|
|
assert.equal(mrr.value, 18000);
|
|
|
|
|
assert.equal(mrr.metric, "mrr");
|
|
|
|
|
assert.equal(mrr.selection, "historical");
|
|
|
|
|
assert.match(mrr.unit, /无币种/);
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "YC31530")!.notes, /Acquired/);
|
|
|
|
|
for (const suffix of ["PLAN0-PROJECTS-YC", "PLAN0-PROJECTS-LAUNCH", "SILMARIL-DAMAGE-YC", "SILMARIL-DAMAGE-CASE1", "SILMARIL-DAMAGE-CASE2", "EXPANSE-WASTE"]) {
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith(suffix))!.selection, "excluded");
|
|
|
|
|
}
|
|
|
|
|
const openwork = snapshot.companies.find((c) => c.id === "YC31505")!;
|
|
|
|
|
assert.equal(openwork.technicalReview!.level, "public-artifact");
|
|
|
|
|
assert.ok(openwork.technicalReview!.evidenceIds.includes("UNCLEAR6-31505-EE-LICENSE"));
|
|
|
|
|
assert.match(openwork.notes, /桌面MIT与ee目录/);
|
|
|
|
|
assert.ok(figures.every((o) => o.comparisonGroup === null));
|
|
|
|
|
assert.ok(!platformIncomeSample(snapshot, { windowDays: null }).points.some((p) => p.observation.id.startsWith("UNCLEAR6-")));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("the seventh uncertain cohort separates hardware sales, prepayments and bounded verification", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-AI-UNCLEAR-7")!;
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "ai-unclear").slice(144, 168);
|
|
|
|
|
assert.equal(batch.complete, false);
|
|
|
|
|
assert.deepEqual(batch.records.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "linked").length, 16);
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "pending-ai").length, 8);
|
|
|
|
|
const robotNori = snapshot.companies.find((c) => c.id === "YC32553")!;
|
|
|
|
|
const healthNori = snapshot.companies.find((c) => c.id === "YC30657")!;
|
|
|
|
|
assert.equal(robotNori.cat, "C10");
|
|
|
|
|
assert.equal(healthNori.cat, "C09");
|
|
|
|
|
assert.notEqual(robotNori.url, healthNori.url, "same-name hardware and health companies retain distinct identities");
|
|
|
|
|
assert.equal(batch.records.find((r) => r.name === "Nori")!.companyId, robotNori.id);
|
|
|
|
|
const figures = snapshot.observations.filter((o) => o.id.startsWith("UNCLEAR7-"));
|
|
|
|
|
assert.equal(figures.length, 18);
|
|
|
|
|
const sales = figures.find((o) => o.id.endsWith("NORI-SALES"))!;
|
|
|
|
|
assert.equal(sales.value, 440000);
|
|
|
|
|
assert.equal(sales.selection, "historical");
|
|
|
|
|
assert.equal(sales.metric, undefined, "hardware sales with unverified preorder/delivery mix must not become ARR");
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "YC32164")!.price!, /额度/);
|
|
|
|
|
for (const suffix of ["GUT-PHARMACY", "MANIFOLD-PICKS", "ATC-CLIENT-FLEET", "OPERON-CLIENT-SAVE", "ANYALPHA-OLD-APPS", "LETTER-DEMO"]) {
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith(suffix))!.selection, "excluded");
|
|
|
|
|
}
|
|
|
|
|
assert.match(figures.find((o) => o.id.endsWith("LETTER-DEMO"))!.scope, /fictional/);
|
|
|
|
|
assert.equal(snapshot.companies.find((c) => c.id === "YC34899")!.cat, "C06");
|
|
|
|
|
const kailash = snapshot.companies.find((c) => c.id === "YC34828")!;
|
|
|
|
|
assert.equal(kailash.cat, "C10");
|
|
|
|
|
assert.equal(kailash.technicalReview!.level, "description", "an open-weights claim without readable weights or a model card is not a reviewed public artifact");
|
|
|
|
|
const graphify = snapshot.companies.find((c) => c.id === "YC32583")!;
|
|
|
|
|
assert.equal(graphify.technicalReview!.level, "public-artifact");
|
|
|
|
|
const proof = snapshot.evidence.find((e) => e.id === "UNCLEAR7-32583-PROOF")!;
|
|
|
|
|
assert.match(proof.summary, /unknown/);
|
|
|
|
|
assert.match(proof.summary, /函数/);
|
|
|
|
|
assert.match(proof.limitation, /整库正确/);
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "YC32518")!.notes, /Build标Coming soon/);
|
|
|
|
|
for (const name of ["Kara", "Molagri", "TareBio", "Atomarine", "Vernius Systems, Inc."]) {
|
|
|
|
|
const row = batch.records.find((r) => r.name === name)!;
|
|
|
|
|
assert.equal(row.status, "pending-ai");
|
|
|
|
|
assert.equal(row.companyId, undefined);
|
|
|
|
|
}
|
|
|
|
|
assert.ok(figures.every((o) => o.comparisonGroup === null));
|
|
|
|
|
assert.ok(!platformIncomeSample(snapshot, { windowDays: null }).points.some((p) => p.observation.id.startsWith("UNCLEAR7-")));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("all original AI-unclear candidates retain a unique follow-up without counting EveryApp twice", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const rows = snapshot.candidateBatches!.filter((b) => b.id.startsWith("YC-AI-UNCLEAR-")).flatMap((b) => b.records);
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "ai-unclear");
|
|
|
|
|
assert.equal(rows.length, 192);
|
|
|
|
|
assert.equal(new Set(rows.map((r) => r.url)).size, 192);
|
|
|
|
|
assert.deepEqual(rows.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
assert.equal(rows.filter((r) => r.status === "linked").length, 110);
|
|
|
|
|
assert.equal(rows.filter((r) => r.status === "pending-ai").length, 82);
|
|
|
|
|
assert.equal(snapshot.directoryRechecks!.filter((r) => r.ycId === 36088).length, 1);
|
|
|
|
|
const everyapp = rows.find((r) => r.name === "EveryApp")!;
|
|
|
|
|
assert.equal(everyapp.companyId, "AI074");
|
|
|
|
|
assert.equal(snapshot.companies.filter((c) => c.id === "AI074").length, 1);
|
|
|
|
|
for (const row of rows.filter((r) => r.status === "pending-ai")) {
|
|
|
|
|
assert.equal(row.companyId, undefined);
|
|
|
|
|
assert.ok(row.evidenceIds!.length > 0, "unresolved AI relevance has explicit evidence and gaps");
|
|
|
|
|
}
|
|
|
|
|
assert.equal(snapshot.coverage!.newProfiles, 928, "later evidence does not rewrite the original discovery accounting");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("the final uncertain cohort separates delivery-start rentals, reservations and upstream costs", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-AI-UNCLEAR-8")!;
|
|
|
|
|
assert.equal(batch.complete, false, "reading the full pool does not resolve all AI, year or financial gaps");
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "linked").length, 11);
|
|
|
|
|
assert.equal(batch.records.filter((r) => r.status === "pending-ai").length, 13);
|
|
|
|
|
const rhem = snapshot.companies.find((c) => c.id === "YC35127")!;
|
|
|
|
|
assert.match(rhem.price!, /确认交付后/);
|
|
|
|
|
assert.match(rhem.price!, /99 USD/);
|
|
|
|
|
assert.equal(rhem.revenueStatus, "unknown");
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "YC37272")!.price!, /预约/);
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "AI074")!.price!, /有效订阅/);
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "YC35396")!.notes, /Coming next/);
|
|
|
|
|
assert.match(snapshot.companies.find((c) => c.id === "YC36774")!.notes, /Early access/);
|
|
|
|
|
const figures = snapshot.observations.filter((o) => o.id.startsWith("UNCLEAR8-"));
|
|
|
|
|
assert.equal(figures.length, 9);
|
|
|
|
|
assert.ok(figures.every((o) => ["excluded", "adoption"].includes(o.selection) && !o.metric && o.comparisonGroup === null));
|
|
|
|
|
for (const suffix of ["OASIVE-OLD-WELLS", "OASIVE-OLD-GOOGLE", "OBSESSION-CALCULATOR", "EVERYAPP-UPSTREAM"]) {
|
|
|
|
|
assert.equal(figures.find((o) => o.id.endsWith(suffix))!.selection, "excluded");
|
|
|
|
|
}
|
|
|
|
|
for (const name of ["Clean", "STASIS", "RATLOG", "Inflection Space Systems", "twentyfour26"]) {
|
|
|
|
|
assert.equal(batch.records.find((r) => r.name === name)!.status, "pending-ai");
|
|
|
|
|
}
|
|
|
|
|
assert.ok(!platformIncomeSample(snapshot, { windowDays: null }).points.some((p) => p.observation.id.startsWith("UNCLEAR8-")));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("founding conflicts preserve old product history without creating new companies or revenue", () => {
|
|
|
|
|
const snapshot = seed as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "YC-DATE-CONFLICT-1")!;
|
|
|
|
|
const original = coverageAudit.records.filter((r) => r.status === "date-conflict");
|
|
|
|
|
assert.equal(batch.complete, false);
|
|
|
|
|
assert.equal(batch.records.length, 6);
|
|
|
|
|
assert.deepEqual(batch.records.map((r) => r.url), original.map((r) => r.source));
|
|
|
|
|
assert.equal(new Set(batch.records.map((r) => r.url)).size, original.length);
|
|
|
|
|
for (const row of batch.records) {
|
|
|
|
|
assert.equal(row.status, "pending-year");
|
|
|
|
|
assert.equal(row.companyId, undefined);
|
|
|
|
|
const evidence = snapshot.evidence.filter((e) => row.evidenceIds!.includes(e.id));
|
|
|
|
|
assert.equal(evidence.length, row.evidenceIds!.length);
|
|
|
|
|
assert.ok(evidence.every((e) => e.companyId === null));
|
|
|
|
|
assert.ok(evidence.some((e) => e.publishedAt?.startsWith("2025-")), "old product launch remains explicit");
|
|
|
|
|
assert.ok(!snapshot.companies.some((c) => c.evidenceIds.some((eid) => row.evidenceIds!.includes(eid))));
|
|
|
|
|
}
|
|
|
|
|
assert.match(batch.records.find((r) => r.name === "Layers")!.note, /未确认当前AI核心/);
|
|
|
|
|
assert.ok(!snapshot.observations.some((o) => o.evidence.startsWith("YEARCONFLICT1-")));
|
|
|
|
|
const excluded = coverageAudit.records.filter((r) => r.status === "year-outside-or-missing");
|
|
|
|
|
assert.equal(excluded.filter((r) => r.foundedYear === null).length, 54);
|
|
|
|
|
assert.equal(excluded.filter((r) => r.foundedYear !== null).length, 214);
|
|
|
|
|
assert.ok(excluded.filter((r) => r.foundedYear !== null).every((r) => ![2025, 2026].includes(r.foundedYear!)));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("Chinese discovery entries preserve unread articles and use separate primary evidence", () => {
|
|
|
|
|
const snapshot = structuredClone(seed) as ResearchSnapshot;
|
|
|
|
|
const batch = snapshot.candidateBatches!.find((b) => b.id === "JQ-2026-targeted-1")!;
|
|
|
|
|