From 487b2212db811251f334bb1a326cd5607cc05eae Mon Sep 17 00:00:00 2001 From: luciferlive112116 <291889058+luciferlive112116@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:49:41 +0800 Subject: [PATCH 1/5] feat(signals): recognize testdata paths as test evidence Co-authored-by: Cursor --- src/signals/test-evidence.ts | 3 ++- test/unit/test-evidence.test.ts | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/signals/test-evidence.ts b/src/signals/test-evidence.ts index 928dff87a9..e905040240 100644 --- a/src/signals/test-evidence.ts +++ b/src/signals/test-evidence.ts @@ -6,7 +6,8 @@ export function isTestPath(file: string): boolean { /(^|\/)[^/]+_spec\.rb$/i.test(file) || /\.(test|spec)\.(ts|tsx|js|jsx|py|rb|rs)$/i.test(file) || /(^|\/)[^/]+\.(cy|e2e)\.(ts|tsx|js|jsx)$/i.test(file) || - /(^|\/)__snapshots__\//i.test(file) + /(^|\/)__snapshots__\//i.test(file) || + /(^|\/)testdata\//i.test(file) ); } diff --git a/test/unit/test-evidence.test.ts b/test/unit/test-evidence.test.ts index f0997c4b5b..8b85e5fa48 100644 --- a/test/unit/test-evidence.test.ts +++ b/test/unit/test-evidence.test.ts @@ -13,6 +13,8 @@ describe("test evidence helpers", () => { expect(isTestPath("playwright/smoke.spec.ts")).toBe(true); expect(isTestPath("cypress/e2e/checkout.cy.js")).toBe(true); expect(isTestPath("components/__snapshots__/Card.tsx.snap")).toBe(true); + expect(isTestPath("pkg/auth/testdata/golden.json")).toBe(true); + expect(isTestPath("internal/widget/testdata/input.txt")).toBe(true); expect(isTestPath("src/state.snap")).toBe(false); expect(isTestPath("src/widget.rs")).toBe(false); }); @@ -22,6 +24,7 @@ describe("test evidence helpers", () => { expect(isTestPath("src/playwright/client.ts")).toBe(false); expect(isTestPath("src/cypress/client.ts")).toBe(false); expect(isTestPath("src/e2e/client.ts")).toBe(false); + expect(isTestPath("src/testdata/client.ts")).toBe(false); expect(isTestPath("src/integration/auth.test.ts")).toBe(true); expect(isTestPath("src/playwright/client.e2e.ts")).toBe(true); expect(isTestPath("src/cypress/client.cy.ts")).toBe(true); From 238ebb33162e2c9a59da174cfd7bd1ebf66b5759 Mon Sep 17 00:00:00 2001 From: luciferlive112116 <291889058+luciferlive112116@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:54:32 +0800 Subject: [PATCH 2/5] fix(signals): align testdata test with directory-segment matcher Co-authored-by: Cursor --- test/unit/test-evidence.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/test-evidence.test.ts b/test/unit/test-evidence.test.ts index 8b85e5fa48..a8f97bd0c9 100644 --- a/test/unit/test-evidence.test.ts +++ b/test/unit/test-evidence.test.ts @@ -15,6 +15,7 @@ describe("test evidence helpers", () => { expect(isTestPath("components/__snapshots__/Card.tsx.snap")).toBe(true); expect(isTestPath("pkg/auth/testdata/golden.json")).toBe(true); expect(isTestPath("internal/widget/testdata/input.txt")).toBe(true); + expect(isTestPath("src/testdata/client.ts")).toBe(true); expect(isTestPath("src/state.snap")).toBe(false); expect(isTestPath("src/widget.rs")).toBe(false); }); @@ -24,7 +25,6 @@ describe("test evidence helpers", () => { expect(isTestPath("src/playwright/client.ts")).toBe(false); expect(isTestPath("src/cypress/client.ts")).toBe(false); expect(isTestPath("src/e2e/client.ts")).toBe(false); - expect(isTestPath("src/testdata/client.ts")).toBe(false); expect(isTestPath("src/integration/auth.test.ts")).toBe(true); expect(isTestPath("src/playwright/client.e2e.ts")).toBe(true); expect(isTestPath("src/cypress/client.cy.ts")).toBe(true); From 8c420635843b52d877ea0179e90045b5ca0b1772 Mon Sep 17 00:00:00 2001 From: luciferlive112116 <291889058+luciferlive112116@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:59:42 +0800 Subject: [PATCH 3/5] fix(signals): delegate engine isTestFile to shared isTestPath helper Co-authored-by: Cursor --- src/signals/engine.ts | 16 ++++++---------- test/unit/local-branch-file-classifiers.test.ts | 1 + 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/signals/engine.ts b/src/signals/engine.ts index 939f852b3e..c5a0bb4f91 100644 --- a/src/signals/engine.ts +++ b/src/signals/engine.ts @@ -26,7 +26,7 @@ import type { GittensorContributorSnapshot } from "../gittensor/api"; import { nowIso } from "../utils/json"; import { sanitizePublicComment } from "../queue-intelligence"; import { labelMatchesPattern, projectLinkedIssueMultiplierForPlannedSolve, type LinkedIssueMultiplierStatus } from "../scoring/preview"; -import { hasLocalTestEvidence } from "./test-evidence"; +import { hasLocalTestEvidence, isTestPath } from "./test-evidence"; import { isFailingCheckSummary } from "./local-branch"; import { isDuplicateClusterWinnerByClaim } from "./duplicate-winner"; import { PREFLIGHT_LIMITS } from "./preflight-limits"; @@ -4977,8 +4977,10 @@ export function hasClearNoIssueRationale(pr: Pick { it("delegates to test-evidence isTestPath so matchers stay in sync", () => { expect(isTestFile("tests/integration/api.test.ts")).toBe(true); + expect(isTestFile("pkg/auth/testdata/golden.json")).toBe(true); }); }); From 20e3bdf349ba5bc8e1cba11dea33c0490751186b Mon Sep 17 00:00:00 2001 From: luciferlive112116 <291889058+luciferlive112116@users.noreply.github.com> Date: Wed, 1 Jul 2026 19:06:39 +0800 Subject: [PATCH 4/5] fix(signals): scope testdata PR to evidence classification only Co-authored-by: Cursor --- src/signals/engine.ts | 6 ++---- test/unit/test-evidence.test.ts | 2 ++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/signals/engine.ts b/src/signals/engine.ts index c5a0bb4f91..96b02867f5 100644 --- a/src/signals/engine.ts +++ b/src/signals/engine.ts @@ -4977,10 +4977,8 @@ export function hasClearNoIssueRationale(pr: Pick { expect(isTestPath("src/playwright/client.ts")).toBe(false); expect(isTestPath("src/cypress/client.ts")).toBe(false); expect(isTestPath("src/e2e/client.ts")).toBe(false); + expect(isTestPath("src/contestdata/client.ts")).toBe(false); + expect(isTestPath("src/testdatabase/client.ts")).toBe(false); expect(isTestPath("src/integration/auth.test.ts")).toBe(true); expect(isTestPath("src/playwright/client.e2e.ts")).toBe(true); expect(isTestPath("src/cypress/client.cy.ts")).toBe(true); From dfc3e8b6e85ffc8edcfa2ade67315a203d95ab40 Mon Sep 17 00:00:00 2001 From: luciferlive112116 <291889058+luciferlive112116@users.noreply.github.com> Date: Wed, 1 Jul 2026 19:13:36 +0800 Subject: [PATCH 5/5] fix(signals): add testdata matcher to engine isTestFile Co-authored-by: Cursor --- src/signals/engine.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/signals/engine.ts b/src/signals/engine.ts index 96b02867f5..c00358fb5c 100644 --- a/src/signals/engine.ts +++ b/src/signals/engine.ts @@ -26,7 +26,7 @@ import type { GittensorContributorSnapshot } from "../gittensor/api"; import { nowIso } from "../utils/json"; import { sanitizePublicComment } from "../queue-intelligence"; import { labelMatchesPattern, projectLinkedIssueMultiplierForPlannedSolve, type LinkedIssueMultiplierStatus } from "../scoring/preview"; -import { hasLocalTestEvidence, isTestPath } from "./test-evidence"; +import { hasLocalTestEvidence } from "./test-evidence"; import { isFailingCheckSummary } from "./local-branch"; import { isDuplicateClusterWinnerByClaim } from "./duplicate-winner"; import { PREFLIGHT_LIMITS } from "./preflight-limits"; @@ -5469,7 +5469,14 @@ function isCodeFile(file: string): boolean { } function isTestFile(file: string): boolean { - return isTestPath(file); + return ( + /(^|\/)(test|tests|spec|__tests__)\//i.test(file) || + /(^|\/)src\/test\//i.test(file) || + /(^|\/)[^/]+_test\.(go|py|rb)$/i.test(file) || + /(^|\/)[^/]+_spec\.rb$/i.test(file) || + /\.(test|spec)\.(ts|tsx|js|jsx|py|rb|rs)$/i.test(file) || + /(^|\/)testdata\//i.test(file) + ); } function riskRank(risk: CollisionCluster["risk"]): number {