补充 AI 公司收入证据及声明纠错案例
Verify and deploy Tabularium / verify-and-deploy (pull_request) Successful in 13m33s
Verify and deploy Tabularium / verify-and-deploy (pull_request) Successful in 13m33s
This commit is contained in:
@@ -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");
|
||||
assert.equal(consumeCode(config, "invalid"), "limited");
|
||||
const initial = readResearchSnapshot();
|
||||
assert.equal(initial.companies.length, 54);
|
||||
assert.equal(initial.evidence.length, 87);
|
||||
assert.equal(initial.observations.length, 63);
|
||||
assert.equal(initial.companies.length, 58);
|
||||
assert.equal(initial.evidence.length, 100);
|
||||
assert.equal(initial.observations.length, 75);
|
||||
assert.deepEqual(readResearchSnapshot(), initial, "reopening does not duplicate records");
|
||||
const db = openSiteDatabase();
|
||||
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", () => {
|
||||
const snapshot = seed as ResearchSnapshot;
|
||||
const summary = categorySummary(snapshot);
|
||||
assert.equal(summary.reduce((n, c) => n + c.count, 0), 54);
|
||||
assert.equal(summary.reduce((n, c) => n + c.self, 0), 5);
|
||||
assert.equal(summary.reduce((n, c) => n + c.count, 0), 58);
|
||||
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.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 === "Result")?.revenueStatus, "unknown");
|
||||
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"));
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user