{"record":{"id":"e32c6716bc4091bc","repo":"karatelabs/karate","slug":"parsed-only","errorCode":null,"errorMessage":"parsed only","messagePattern":"parsed only","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"karate-core/src/main/java/io/karatelabs/core/SuiteResult.java","lineNumber":308,"sourceCode":"        // Timing info\n        double elapsedSecs = getDurationMillis() / 1000.0;\n        double threadTimeSecs = getThreadTimeMillis() / 1000.0;\n        double efficiency = threadCount > 0 && elapsedSecs > 0\n                ? threadTimeSecs / (elapsedSecs * threadCount)\n                : 1.0;\n\n        Console.println(String.format(\"elapsed: %6.2fs | threads: %3d | efficiency: %.2f\",\n                elapsedSecs, threadCount, efficiency));\n\n        // Feature stats\n        int featureTotal = getFeatureCount();\n        int featurePassed = getFeaturePassedCount();\n        int featureFailed = getFeatureFailedCount();\n        // a dry run cannot fail (nothing runs) and its skips count as passed — printing \"all passed\" for it\n        // would report a green for a suite that never touched the system under test\n        String featureStatus = featureFailed > 0\n                ? Console.fail(featureFailed + \" failed\")\n                : dryRun ? Console.warn(\"parsed only\") : Console.pass(\"all passed\");\n\n        Console.println(String.format(\"features: %4d | passed: %4d | %s\",\n                featureTotal, featurePassed, featureStatus));\n\n        // Scenario stats\n        int scenarioTotal = getScenarioCount();\n        int scenarioPassed = getScenarioPassedCount();\n        int scenarioFailed = getScenarioFailedCount();\n        int scenarioSkipped = getScenarioSkippedCount();\n        String scenarioStatus = scenarioFailed > 0\n                ? Console.fail(scenarioFailed + \" failed\")\n                : dryRun ? Console.warn(\"DRY RUN — nothing was executed\") : Console.pass(\"all passed\");\n\n        if (scenarioSkipped > 0) {\n            Console.println(String.format(\"scenarios: %3d | passed: %4d | skipped: %4d | %s\",\n                    scenarioTotal, scenarioPassed, scenarioSkipped, scenarioStatus));\n        } else {\n            Console.println(String.format(\"scenarios: %3d | passed: %4d | %s\",","sourceCodeStart":290,"sourceCodeEnd":326,"githubUrl":"https://github.com/karatelabs/karate/blob/a22eb90246d958d15a47bf436693d0121ad2812d/karate-core/src/main/java/io/karatelabs/core/SuiteResult.java#L290-L326","documentation":"This is not an exception — it is the console summary status string SuiteResult.printSummary() emits in place of 'all passed' when the suite was a dry run. Because nothing executes in a dry run, Karate refuses to print a green 'all passed' (which would falsely imply the system under test was exercised) and prints 'parsed only' as a warning-styled status.","triggerScenarios":"Running Karate in dry-run mode (Runner with dryRun=true, or CLI dry-run flag) and reaching the end with zero failed features — printSummary shows features status 'parsed only' and scenarios status 'DRY RUN — nothing was executed'.","commonSituations":"CI jobs accidentally left in dry-run mode showing green-ish output; developers validating that all features parse/tag-filter correctly; someone expecting real execution but a dryRun flag was set in config.","solutions":["If real execution was intended, remove the dryRun option from the Runner/CLI invocation","Treat 'parsed only' as success for a parse/tag validation dry run — it is informational, not an error","Gate CI job success on non-dry-run runs only, or assert the summary explicitly","Check for dryRun=true leaking from shared runner configuration"],"exampleFix":"// before: accidental dry run in CI\nRunner.path(classpath(\"features\")).dryRun(true)\n// after\nRunner.path(classpath(\"features\")).dryRun(false)","handlingStrategy":"validation","validationCode":"// assert the run was real, not a dry run, before marking CI green\nif (result.isDryRun()) throw new IllegalStateException(\"suite ran in dry-run mode; parsed only, nothing executed\");","typeGuard":"function isRealRun(suiteResult){ return suiteResult != null && suiteResult.getScenarioCount() > 0 && !suiteResult.isDryRun(); }","tryCatchPattern":null,"preventionTips":["Keep dryRun flags out of shared runner configuration; pass them explicitly per job","Add a CI assertion that scenario counts are > 0 for gating pipelines","Grep pipeline config for dryRun/dry-run before promoting jobs","Use dry run only as an explicit preflight parse check step"],"tags":["dry-run","console-output","summary"],"backgroundTag":"dry-run-mode","analyzedSha":"a22eb90246d958d15a47bf436693d0121ad2812d","analyzedAt":"2026-09-12T09:01:00.220Z","contentChangedAt":"2026-09-12T09:01:00.220Z","schemaVersion":2},"datasetVersion":"2026-09-19T12:17:13.211Z"}