research: verify ARR currency and current contract models

This commit is contained in:
2026-10-31 21:23:02 +08:00
parent 4330817138
commit 5b86f08959
5 changed files with 157 additions and 26 deletions
+5 -2
View File
@@ -50,6 +50,9 @@ test("ARR ledger preserves historical estimates without promoting targets, run r
assert.ok(!ids.has(id), `${id}: excluded or ambiguous records cannot enter the ARR ledger`);
assert.equal(rows.find((row) => row.observation.id === "O066")?.observation.selection, "historical-estimate");
assert.equal(rows.find((row) => row.observation.id === "O046")?.observation.unit, "原文$,币种待核");
for (const id of ["O045", "O047"])
assert.equal(rows.find((row) => row.observation.id === id)?.observation.unit, "原文$,币种待核",
"current subscription prices cannot establish the currency of a historical ARR claim");
const category = snapshot.companies.find((company) => company.id === "AI055")!.cat;
const filtered = arrDisclosures(snapshot, { category, foundedYear: 2025 });
assert.ok(filtered.length > 0);
@@ -75,7 +78,7 @@ test("research revisions share the authentication database and preserve replay l
assert.equal(consumeCode(config, "invalid"), "limited");
const initial = readResearchSnapshot();
assert.equal(initial.companies.length, 1188);
assert.equal(initial.evidence.length, 4372);
assert.equal(initial.evidence.length, 4380);
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");
@@ -116,7 +119,7 @@ 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, 198);
assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 103);
assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 105);
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"]);