diff --git a/CHANGELOG.md b/CHANGELOG.md index 90bc20a..1afbf78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes are documented here. This project follows Semantic Versionin ### Fixed +- Tightened Python test-runner exit-code 5 handling. Pytest and the stdlib `unittest` CLI use code 5 for no-test outcomes, but repository-local modules can also terminate runner imports with code 5 before trustworthy lifecycle observation. ProofDiff now accepts exit 5 as non-failing only when high-confidence exact zero-test observer data corroborates it: directly for targeted pytest, or through the paired targeted observer for opaque pytest/unittest commands. Uncorroborated exit-5 failures remain verification failures. - Preserved LCOV `SF:` source paths exactly instead of applying JavaScript-style whitespace trimming. Leading or trailing spaces and Unicode whitespace are valid path characters, so silently erasing them could alias artifact coverage for one path onto a different changed repository file and overstate changed-line evidence. - Restricted recognized Node/Jest/Vitest package-script trimming to ASCII spaces and tabs. JavaScript `String.trim()` also removes non-ASCII whitespace such as NBSP, which shells do not treat as ordinary script separators; leading or trailing Unicode whitespace can therefore no longer be erased into a different executable command and accidentally qualify for exact targeted evidence. - Stopped `.pyi` stub files with test-like names from inventing executable pytest or `unittest` checks. Stubs remain available to static Python analysis and relationship discovery, but framework discovery now requires an executable `.py` test file; this prevents `--run-checks` from launching a Python test runner merely because a repository contains test-shaped type stubs. diff --git a/dist/evidence.d.ts.map b/dist/evidence.d.ts.map index 06765ba..0bcfe31 100644 --- a/dist/evidence.d.ts.map +++ b/dist/evidence.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,WAAW,EAAE,WAAW,EAAgB,cAAc,EAAiD,MAAM,YAAY,CAAC;AAClJ,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAqMlD,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,aAAa,GAAE,MAAM,EAAO,GAAG,cAAc,CAkEzI"} \ No newline at end of file +{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,WAAW,EAAE,WAAW,EAAgB,cAAc,EAAiD,MAAM,YAAY,CAAC;AAClJ,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAqNlD,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,aAAa,GAAE,MAAM,EAAO,GAAG,cAAc,CAkEzI"} \ No newline at end of file diff --git a/dist/evidence.js b/dist/evidence.js index b00beb9..0b4b46b 100644 --- a/dist/evidence.js +++ b/dist/evidence.js @@ -10,8 +10,25 @@ function checkApplies(check, file, relatedTests) { return file.language === "python"; return true; } -function isRecognizedNoTestsExit(check) { - return check.status === "failed" && check.exitCode === 5 && (check.targetRunner === "pytest" || check.targetRunner === "unittest"); +function hasExactZeroTestObservations(check) { + const observations = check.targetObservations ?? []; + return observations.length > 0 + && observations.every((observation) => observation.outcome === "zero-tests" + && check.targetQualifications?.some((qualification) => qualification.confidence === "high" + && qualification.path === observation.path + && qualification.runnerPath === observation.runnerPath) === true); +} +function isRecognizedNoTestsExit(check, checks) { + if (check.status !== "failed" || check.exitCode !== 5 || (check.targetRunner !== "pytest" && check.targetRunner !== "unittest")) + return false; + if (check.targetQualifications !== undefined) { + return check.targetRunner === "pytest" && hasExactZeroTestObservations(check); + } + const targeted = checks.find((candidate) => candidate.id === `${check.id}:targeted`); + if (targeted === undefined || !hasExactZeroTestObservations(targeted)) + return false; + return targeted.status === "passed" + || (targeted.status === "failed" && targeted.exitCode === 5 && targeted.targetRunner === "pytest"); } function verificationFor(file, relatedTests, checks, declaredTests) { const evidence = []; @@ -28,17 +45,17 @@ function verificationFor(file, relatedTests, checks, declaredTests) { const hasUnavailableRelatedTarget = (check) => check.targetObservations?.some((observation) => relatedTests.includes(observation.path) && observation.outcome === "not-observed" && qualificationForObservation(check, observation)?.confidence === "high") === true; const localizedTargetedProcessFailures = applicable.filter((check) => check.targetQualifications !== undefined && check.status === "failed" - && !isRecognizedNoTestsExit(check) + && !isRecognizedNoTestsExit(check, applicable) && hasExactTargetFailure(check) && !hasUnavailableRelatedTarget(check)); const unlocalizedTargetedFailures = applicable.filter((check) => check.targetQualifications !== undefined && check.status === "failed" - && !isRecognizedNoTestsExit(check) + && !isRecognizedNoTestsExit(check, applicable) && (!hasExactTargetFailure(check) || hasUnavailableRelatedTarget(check))); const opaqueFailures = applicable.filter((check) => check.targetQualifications === undefined && ["failed", "error", "timed-out"].includes(check.status) && !(check.kind === "test" && check.targetRunner !== undefined && localizedTargetedProcessFailures.some((targeted) => targeted.id === `${check.id}:targeted`)) - && !isRecognizedNoTestsExit(check)); + && !isRecognizedNoTestsExit(check, applicable)); const operationalFailures = applicable.filter((check) => check.targetQualifications !== undefined && ["error", "timed-out"].includes(check.status)); const passing = applicable.filter((check) => check.status === "passed" && check.targetQualifications === undefined); const testExecutions = exactObservations diff --git a/dist/evidence.js.map b/dist/evidence.js.map index 6fe73dd..27fe02d 100644 --- a/dist/evidence.js.map +++ b/dist/evidence.js.map @@ -1 +1 @@ -{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/explanation.d.ts.map b/dist/explanation.d.ts.map index 3231dbd..4a5d02b 100644 --- a/dist/explanation.d.ts.map +++ b/dist/explanation.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"explanation.d.ts","sourceRoot":"","sources":["../src/explanation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAsB,cAAc,EAAE,MAAM,YAAY,CAAC;AAiBpG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAyLrG"} \ No newline at end of file +{"version":3,"file":"explanation.d.ts","sourceRoot":"","sources":["../src/explanation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAsB,cAAc,EAAE,MAAM,YAAY,CAAC;AAiCpG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAyLrG"} \ No newline at end of file diff --git a/dist/explanation.js b/dist/explanation.js index 2613fc4..80ecbeb 100644 --- a/dist/explanation.js +++ b/dist/explanation.js @@ -7,8 +7,25 @@ function checkApplies(check, item) { return item.file.language === "python"; return true; } -function recognizedNoTestsExit(check) { - return check.status === "failed" && check.exitCode === 5 && (check.targetRunner === "pytest" || check.targetRunner === "unittest"); +function hasExactZeroTestObservations(check) { + const observations = check.targetObservations ?? []; + return observations.length > 0 + && observations.every((observation) => observation.outcome === "zero-tests" + && check.targetQualifications?.some((qualification) => qualification.confidence === "high" + && qualification.path === observation.path + && qualification.runnerPath === observation.runnerPath) === true); +} +function recognizedNoTestsExit(check, checks) { + if (check.status !== "failed" || check.exitCode !== 5 || (check.targetRunner !== "pytest" && check.targetRunner !== "unittest")) + return false; + if (check.targetQualifications !== undefined) { + return check.targetRunner === "pytest" && hasExactZeroTestObservations(check); + } + const targeted = checks.find((candidate) => candidate.id === `${check.id}:targeted`); + if (targeted === undefined || !hasExactZeroTestObservations(targeted)) + return false; + return targeted.status === "passed" + || (targeted.status === "failed" && targeted.exitCode === 5 && targeted.targetRunner === "pytest"); } function action(kind, detail, requiresRepositoryCodeExecution = false) { return { kind, detail, requiresRepositoryCodeExecution }; @@ -30,7 +47,7 @@ export function explainEvidenceBoundary(item, checks) { const skippedObservation = exactObservations.find(({ observation }) => observation.outcome === "skipped"); const unlocalizedTargetFailure = applicable.some((check) => check.targetQualifications !== undefined && check.status === "failed" - && !recognizedNoTestsExit(check) + && !recognizedNoTestsExit(check, applicable) && (check.targetObservations?.some((observation) => observation.outcome === "failed" && qualificationForObservation(check, observation)?.confidence === "high") !== true || check.targetObservations?.some((observation) => item.relatedTests.includes(observation.path) && observation.outcome === "not-observed" && qualificationForObservation(check, observation)?.confidence === "high") === true)); const passingOpaqueCheck = applicable.some((check) => check.status === "passed" && check.targetQualifications === undefined); diff --git a/dist/explanation.js.map b/dist/explanation.js.map index cc8bf0d..8f303fc 100644 --- a/dist/explanation.js.map +++ b/dist/explanation.js.map @@ -1 +1 @@ -{"version":3,"file":"explanation.js","sourceRoot":"","sources":["../src/explanation.ts"],"names":[],"mappings":"AAEA,SAAS,YAAY,CAAC,KAAkB,EAAE,IAAoB;IAC5D,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACrG,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,YAAY,CAAC;IAClH,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAkB;IAC/C,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC;AACrI,CAAC;AAED,SAAS,MAAM,CAAC,IAAgC,EAAE,MAAc,EAAE,+BAA+B,GAAG,KAAK;IACvG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAoB,EAAE,MAAqB;IACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACrK,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACjK,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC;SAChF,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACrE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,2BAA2B,GAAG,CAAC,KAAkB,EAAE,WAAmE,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,IAAI,aAAa,CAAC,UAAU,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC;IACrR,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,2BAA2B,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,CAAC;IAClJ,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;IACxG,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC;IACnH,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;IAC1G,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAC1G,MAAM,wBAAwB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,KAAK,SAAS;WAC/F,KAAK,CAAC,MAAM,KAAK,QAAQ;WACzB,CAAC,qBAAqB,CAAC,KAAK,CAAC;WAC7B,CACD,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,QAAQ,IAAI,2BAA2B,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,KAAK,IAAI;eACjK,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,KAAK,cAAc,IAAI,2BAA2B,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,KAAK,IAAI,CAC9N,CAAC,CAAC;IACL,MAAM,kBAAkB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC;IAC7H,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS;WACxD,IAAI,CAAC,IAAI,CAAC,MAAM;WAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;IACxE,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAE/I,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;QAC1C,IAAI,wBAAwB,EAAE,CAAC;YAC7B,OAAO;gBACL,iBAAiB,EAAE,sBAAsB;gBACzC,KAAK,EAAE,qBAAqB;gBAC5B,MAAM,EAAE,sBAAsB;gBAC9B,MAAM,EAAE,4KAA4K;gBACpL,mBAAmB,EAAE,IAAI;gBACzB,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,sGAAsG,CAAC;aAC9I,CAAC;QACJ,CAAC;QACD,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO;gBACL,iBAAiB,EAAE,sBAAsB;gBACzC,KAAK,EAAE,qBAAqB;gBAC5B,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,iFAAiF;gBACzF,mBAAmB,EAAE,KAAK;gBAC1B,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,kFAAkF,CAAC;aAC1H,CAAC;QACJ,CAAC;QACD,OAAO;YACL,iBAAiB,EAAE,sBAAsB;YACzC,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,yHAAyH;YACjI,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,oGAAoG,CAAC;SAC5I,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,iBAAiB,EAAE,0BAA0B;YAC7C,KAAK,EAAE,wBAAwB;YAC/B,MAAM,EAAE,mCAAmC;YAC3C,MAAM,EAAE,uJAAuJ;YAC/J,mBAAmB,EAAE,IAAI;YACzB,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,IAAI,sBAAsB,EAAE,CAAC;QAC3B,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB;YAChG,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EAAE,uBAAuB;YAC/B,MAAM,EAAE,0JAA0J;YAClK,mBAAmB,EAAE,IAAI;YACzB,UAAU,EAAE,MAAM,CAAC,kBAAkB,EAAE,wHAAwH,CAAC;SACjK,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB;YAChG,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,2GAA2G;YACnH,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,MAAM,CAAC,0BAA0B,EAAE,8FAA8F,CAAC;SAC/I,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB;YAChG,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,uGAAuG;YAC/G,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,MAAM,CAAC,0BAA0B,EAAE,iGAAiG,CAAC;SAClJ,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO;YACL,iBAAiB,EAAE,sBAAsB;YACzC,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EAAE,uBAAuB;YAC/B,MAAM,EAAE,+IAA+I;YACvJ,mBAAmB,EAAE,IAAI;YACzB,UAAU,EAAE,MAAM,CAAC,4BAA4B,EAAE,kPAAkP,CAAC;SACrS,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,iBAAiB,EAAE,sBAAsB;YACzC,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,kBAAkB;gBACxB,CAAC,CAAC,8GAA8G;gBAChH,CAAC,CAAC,4EAA4E;YAChF,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,MAAM,CAAC,4BAA4B,EAAE,oSAAoS,CAAC;SACvV,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,iBAAiB,EAAE,sBAAsB;YACzC,KAAK,EAAE,sBAAsB;YAC7B,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAoB;YAC1E,MAAM,EAAE,kBAAkB;gBACxB,CAAC,CAAC,iJAAiJ;gBACnJ,CAAC,CAAC,6IAA6I;YACjJ,mBAAmB,EAAE,IAAI;YACzB,UAAU,EAAE,MAAM,CAAC,sBAAsB,EAAE,qNAAqN,CAAC;SAClQ,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;QACrG,OAAO;YACL,iBAAiB,EAAE,qBAAqB;YACxC,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,iHAAiH;YACzH,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,MAAM,CAChB,mBAAmB,EACnB,gLAAgL,EAChL,IAAI,CACL;SACF,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1F,OAAO;YACL,iBAAiB,EAAE,sBAAsB;YACzC,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,oBAAoB;YAC5B,MAAM,EAAE,uGAAuG;YAC/G,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,MAAM,CAAC,0BAA0B,EAAE,mGAAmG,CAAC;SACpJ,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,iBAAiB,EAAE,qBAAqB;YACxC,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,qBAAqB;YAC7B,MAAM,EAAE,8FAA8F;YACtG,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,MAAM,CAAC,qBAAqB,EAAE,2GAA2G,CAAC;SACvJ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,iBAAiB,EAAE,sBAAsB;QACzC,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,uBAAuB;QAC/B,MAAM,EAAE,iJAAiJ;QACzJ,mBAAmB,EAAE,IAAI;QACzB,UAAU,EAAE,MAAM,CAAC,kBAAkB,EAAE,yFAAyF,CAAC;KAClI,CAAC;AACJ,CAAC"} \ No newline at end of file +{"version":3,"file":"explanation.js","sourceRoot":"","sources":["../src/explanation.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/evidence.ts b/src/evidence.ts index 1a341d3..6ac166f 100644 --- a/src/evidence.ts +++ b/src/evidence.ts @@ -11,8 +11,24 @@ function checkApplies(check: CheckResult, file: ChangedFile, relatedTests: strin return true; } -function isRecognizedNoTestsExit(check: CheckResult): boolean { - return check.status === "failed" && check.exitCode === 5 && (check.targetRunner === "pytest" || check.targetRunner === "unittest"); +function hasExactZeroTestObservations(check: CheckResult): boolean { + const observations = check.targetObservations ?? []; + return observations.length > 0 + && observations.every((observation) => observation.outcome === "zero-tests" + && check.targetQualifications?.some((qualification) => qualification.confidence === "high" + && qualification.path === observation.path + && qualification.runnerPath === observation.runnerPath) === true); +} + +function isRecognizedNoTestsExit(check: CheckResult, checks: CheckResult[]): boolean { + if (check.status !== "failed" || check.exitCode !== 5 || (check.targetRunner !== "pytest" && check.targetRunner !== "unittest")) return false; + if (check.targetQualifications !== undefined) { + return check.targetRunner === "pytest" && hasExactZeroTestObservations(check); + } + const targeted = checks.find((candidate) => candidate.id === `${check.id}:targeted`); + if (targeted === undefined || !hasExactZeroTestObservations(targeted)) return false; + return targeted.status === "passed" + || (targeted.status === "failed" && targeted.exitCode === 5 && targeted.targetRunner === "pytest"); } function verificationFor(file: ChangedFile, relatedTests: string[], checks: CheckResult[], declaredTests: string[]): { status: VerificationStatus; evidence: EvidenceItem[]; executedTests: string[]; testExecutions: FileAssessment["testExecutions"] } { @@ -30,17 +46,17 @@ function verificationFor(file: ChangedFile, relatedTests: string[], checks: Chec const hasUnavailableRelatedTarget = (check: CheckResult): boolean => check.targetObservations?.some((observation) => relatedTests.includes(observation.path) && observation.outcome === "not-observed" && qualificationForObservation(check, observation)?.confidence === "high") === true; const localizedTargetedProcessFailures = applicable.filter((check) => check.targetQualifications !== undefined && check.status === "failed" - && !isRecognizedNoTestsExit(check) + && !isRecognizedNoTestsExit(check, applicable) && hasExactTargetFailure(check) && !hasUnavailableRelatedTarget(check)); const unlocalizedTargetedFailures = applicable.filter((check) => check.targetQualifications !== undefined && check.status === "failed" - && !isRecognizedNoTestsExit(check) + && !isRecognizedNoTestsExit(check, applicable) && (!hasExactTargetFailure(check) || hasUnavailableRelatedTarget(check))); const opaqueFailures = applicable.filter((check) => check.targetQualifications === undefined && ["failed", "error", "timed-out"].includes(check.status) && !(check.kind === "test" && check.targetRunner !== undefined && localizedTargetedProcessFailures.some((targeted) => targeted.id === `${check.id}:targeted`)) - && !isRecognizedNoTestsExit(check)); + && !isRecognizedNoTestsExit(check, applicable)); const operationalFailures = applicable.filter((check) => check.targetQualifications !== undefined && ["error", "timed-out"].includes(check.status)); const passing = applicable.filter((check) => check.status === "passed" && check.targetQualifications === undefined); const testExecutions: FileAssessment["testExecutions"] = exactObservations diff --git a/src/explanation.ts b/src/explanation.ts index 6470695..74291e3 100644 --- a/src/explanation.ts +++ b/src/explanation.ts @@ -7,8 +7,24 @@ function checkApplies(check: CheckResult, item: FileAssessment): boolean { return true; } -function recognizedNoTestsExit(check: CheckResult): boolean { - return check.status === "failed" && check.exitCode === 5 && (check.targetRunner === "pytest" || check.targetRunner === "unittest"); +function hasExactZeroTestObservations(check: CheckResult): boolean { + const observations = check.targetObservations ?? []; + return observations.length > 0 + && observations.every((observation) => observation.outcome === "zero-tests" + && check.targetQualifications?.some((qualification) => qualification.confidence === "high" + && qualification.path === observation.path + && qualification.runnerPath === observation.runnerPath) === true); +} + +function recognizedNoTestsExit(check: CheckResult, checks: CheckResult[]): boolean { + if (check.status !== "failed" || check.exitCode !== 5 || (check.targetRunner !== "pytest" && check.targetRunner !== "unittest")) return false; + if (check.targetQualifications !== undefined) { + return check.targetRunner === "pytest" && hasExactZeroTestObservations(check); + } + const targeted = checks.find((candidate) => candidate.id === `${check.id}:targeted`); + if (targeted === undefined || !hasExactZeroTestObservations(targeted)) return false; + return targeted.status === "passed" + || (targeted.status === "failed" && targeted.exitCode === 5 && targeted.targetRunner === "pytest"); } function action(kind: EvidenceNextAction["kind"], detail: string, requiresRepositoryCodeExecution = false): EvidenceNextAction { @@ -32,7 +48,7 @@ export function explainEvidenceBoundary(item: FileAssessment, checks: CheckResul const skippedObservation = exactObservations.find(({ observation }) => observation.outcome === "skipped"); const unlocalizedTargetFailure = applicable.some((check) => check.targetQualifications !== undefined && check.status === "failed" - && !recognizedNoTestsExit(check) + && !recognizedNoTestsExit(check, applicable) && ( check.targetObservations?.some((observation) => observation.outcome === "failed" && qualificationForObservation(check, observation)?.confidence === "high") !== true || check.targetObservations?.some((observation) => item.relatedTests.includes(observation.path) && observation.outcome === "not-observed" && qualificationForObservation(check, observation)?.confidence === "high") === true diff --git a/tests/analyze.test.ts b/tests/analyze.test.ts index fe7a497..f74efa9 100644 --- a/tests/analyze.test.ts +++ b/tests/analyze.test.ts @@ -327,6 +327,41 @@ test("pytest exit 5 remains a non-failing no-collection outcome", async (context assert.ok(!report.assessments[0]?.evidence.some((item) => item.kind === "failing-check")); }); +test("pytest exit 5 without lifecycle observations remains a verification failure", async (context) => { + const root = await initializeRepository({ + "pyproject.toml": "[tool.pytest]\n", + "pytest.py": "raise SystemExit(5)\n", + "value.py": "def value():\n return 1\n", + "tests/test_value.py": "from value import value\ndef test_value():\n assert value() == 2\n", + }); + context.after(() => rm(root, { recursive: true, force: true })); + await writeFiles(root, { "value.py": "def value():\n return 2\n" }); + const report = await analyzeRepository({ repo: root, runChecks: true, timeoutMs: 20_000 }); + const pytestChecks = report.checks.filter((check) => check.targetRunner === "pytest" && check.exitCode === 5); + assert.ok(pytestChecks.length >= 1); + assert.ok(pytestChecks.some((check) => check.targetQualifications !== undefined && check.targetObservations?.[0]?.outcome === "not-observed")); + assert.equal(report.assessments[0]?.status, "verification-failed"); + assert.ok(report.assessments[0]?.evidence.some((item) => item.kind === "failing-check")); + assert.equal(report.assessments[0]?.evidenceBoundary?.reason, "failure-unattributed"); +}); + +test("unittest exit 5 requires corroborating zero-test observations instead of being blindly suppressed", async (context) => { + const root = await initializeRepository({ + "unittest.py": "raise SystemExit(5)\n", + "value.py": "def value():\n return 1\n", + "tests/test_value.py": "import unittest\nfrom value import value\nclass ValueTest(unittest.TestCase):\n def test_value(self):\n self.assertEqual(value(), 2)\n", + }); + context.after(() => rm(root, { recursive: true, force: true })); + await writeFiles(root, { "value.py": "def value():\n return 2\n" }); + const report = await analyzeRepository({ repo: root, runChecks: true, timeoutMs: 20_000 }); + const unittestChecks = report.checks.filter((check) => check.targetRunner === "unittest" && check.exitCode === 5); + assert.ok(unittestChecks.length >= 1); + assert.ok(unittestChecks.every((check) => check.status === "failed")); + assert.equal(report.assessments[0]?.status, "verification-failed"); + assert.ok(report.assessments[0]?.evidence.some((item) => item.kind === "failing-check")); + assert.equal(report.assessments[0]?.evidenceBoundary?.reason, "failure-unattributed"); +}); + test("a unittest loader failure without an attributable test failure fails closed", async (context) => { const root = await initializeRepository({ "value.py": "def value():\n return 1\n",