@stsepelin/checktrail 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/CONTRIBUTING.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +355 -0
  4. package/SECURITY.md +46 -0
  5. package/dist/src/actionlint-evidence.d.ts +2 -0
  6. package/dist/src/actionlint-evidence.js +166 -0
  7. package/dist/src/actionlint-inputs.d.ts +5 -0
  8. package/dist/src/actionlint-inputs.js +123 -0
  9. package/dist/src/actionlint-runner.d.ts +1 -0
  10. package/dist/src/actionlint-runner.js +122 -0
  11. package/dist/src/actionlint.d.ts +19 -0
  12. package/dist/src/actionlint.js +80 -0
  13. package/dist/src/adapters.d.ts +49 -0
  14. package/dist/src/adapters.js +430 -0
  15. package/dist/src/architecture.d.ts +107 -0
  16. package/dist/src/architecture.js +230 -0
  17. package/dist/src/clang-evidence.d.ts +2 -0
  18. package/dist/src/clang-evidence.js +194 -0
  19. package/dist/src/clang-protocol.d.ts +3 -0
  20. package/dist/src/clang-protocol.js +25 -0
  21. package/dist/src/clang-runner.d.ts +1 -0
  22. package/dist/src/clang-runner.js +159 -0
  23. package/dist/src/clang.d.ts +44 -0
  24. package/dist/src/clang.js +197 -0
  25. package/dist/src/cli.d.ts +2 -0
  26. package/dist/src/cli.js +338 -0
  27. package/dist/src/config.d.ts +33 -0
  28. package/dist/src/config.js +140 -0
  29. package/dist/src/contract-schema.d.ts +85 -0
  30. package/dist/src/contract-schema.js +56 -0
  31. package/dist/src/contract-worker.d.ts +1 -0
  32. package/dist/src/contract-worker.js +123 -0
  33. package/dist/src/contracts.d.ts +22 -0
  34. package/dist/src/contracts.js +123 -0
  35. package/dist/src/django-evidence.d.ts +2 -0
  36. package/dist/src/django-evidence.js +100 -0
  37. package/dist/src/django-runner.d.ts +1 -0
  38. package/dist/src/django-runner.js +80 -0
  39. package/dist/src/django.d.ts +9 -0
  40. package/dist/src/django.js +50 -0
  41. package/dist/src/dotnet-compiler.d.ts +1 -0
  42. package/dist/src/dotnet-compiler.js +87 -0
  43. package/dist/src/dotnet-evidence.d.ts +2 -0
  44. package/dist/src/dotnet-evidence.js +127 -0
  45. package/dist/src/dotnet-runner.d.ts +1 -0
  46. package/dist/src/dotnet-runner.js +167 -0
  47. package/dist/src/dotnet.d.ts +65 -0
  48. package/dist/src/dotnet.js +120 -0
  49. package/dist/src/engine.d.ts +19 -0
  50. package/dist/src/engine.js +239 -0
  51. package/dist/src/environment.d.ts +6 -0
  52. package/dist/src/environment.js +36 -0
  53. package/dist/src/eslint-evidence.d.ts +2 -0
  54. package/dist/src/eslint-evidence.js +98 -0
  55. package/dist/src/eslint-runner.d.ts +1 -0
  56. package/dist/src/eslint-runner.js +61 -0
  57. package/dist/src/eslint.d.ts +2 -0
  58. package/dist/src/eslint.js +40 -0
  59. package/dist/src/evidence.d.ts +2 -0
  60. package/dist/src/evidence.js +313 -0
  61. package/dist/src/external-adapter.d.ts +164 -0
  62. package/dist/src/external-adapter.js +265 -0
  63. package/dist/src/external-evidence.d.ts +2 -0
  64. package/dist/src/external-evidence.js +127 -0
  65. package/dist/src/external-runner.d.ts +1 -0
  66. package/dist/src/external-runner.js +122 -0
  67. package/dist/src/fastapi-evidence.d.ts +2 -0
  68. package/dist/src/fastapi-evidence.js +126 -0
  69. package/dist/src/fastapi-runner.d.ts +1 -0
  70. package/dist/src/fastapi-runner.js +84 -0
  71. package/dist/src/fastapi.d.ts +10 -0
  72. package/dist/src/fastapi.js +52 -0
  73. package/dist/src/fetch-pack.d.ts +16 -0
  74. package/dist/src/fetch-pack.js +154 -0
  75. package/dist/src/finding-policy-schema.d.ts +146 -0
  76. package/dist/src/finding-policy-schema.js +70 -0
  77. package/dist/src/finding-policy.d.ts +62 -0
  78. package/dist/src/finding-policy.js +206 -0
  79. package/dist/src/git-selection.d.ts +3 -0
  80. package/dist/src/git-selection.js +229 -0
  81. package/dist/src/go-directives.d.ts +1 -0
  82. package/dist/src/go-directives.js +32 -0
  83. package/dist/src/go-scope.d.ts +11 -0
  84. package/dist/src/go-scope.js +122 -0
  85. package/dist/src/golangci-evidence.d.ts +2 -0
  86. package/dist/src/golangci-evidence.js +92 -0
  87. package/dist/src/golangci-runner.d.ts +1 -0
  88. package/dist/src/golangci-runner.js +124 -0
  89. package/dist/src/golangci.d.ts +2 -0
  90. package/dist/src/golangci.js +35 -0
  91. package/dist/src/guidance.d.ts +98 -0
  92. package/dist/src/guidance.js +247 -0
  93. package/dist/src/index.d.ts +31 -0
  94. package/dist/src/index.js +16 -0
  95. package/dist/src/inventory.d.ts +4 -0
  96. package/dist/src/inventory.js +94 -0
  97. package/dist/src/java-compiler.d.ts +1 -0
  98. package/dist/src/java-compiler.js +110 -0
  99. package/dist/src/java-evidence.d.ts +2 -0
  100. package/dist/src/java-evidence.js +114 -0
  101. package/dist/src/java-runner.d.ts +1 -0
  102. package/dist/src/java-runner.js +79 -0
  103. package/dist/src/java.d.ts +25 -0
  104. package/dist/src/java.js +102 -0
  105. package/dist/src/jest-evidence.d.ts +2 -0
  106. package/dist/src/jest-evidence.js +117 -0
  107. package/dist/src/jest-runner.d.ts +1 -0
  108. package/dist/src/jest-runner.js +46 -0
  109. package/dist/src/jest.d.ts +2 -0
  110. package/dist/src/jest.js +36 -0
  111. package/dist/src/junit.d.ts +18 -0
  112. package/dist/src/junit.js +157 -0
  113. package/dist/src/laravel-evidence.d.ts +2 -0
  114. package/dist/src/laravel-evidence.js +175 -0
  115. package/dist/src/laravel-runner.d.ts +1 -0
  116. package/dist/src/laravel-runner.js +168 -0
  117. package/dist/src/laravel.d.ts +8 -0
  118. package/dist/src/laravel.js +50 -0
  119. package/dist/src/local-tool.d.ts +1 -0
  120. package/dist/src/local-tool.js +19 -0
  121. package/dist/src/mcp.d.ts +14 -0
  122. package/dist/src/mcp.js +362 -0
  123. package/dist/src/mutation.d.ts +118 -0
  124. package/dist/src/mutation.js +370 -0
  125. package/dist/src/mypy-evidence.d.ts +2 -0
  126. package/dist/src/mypy-evidence.js +63 -0
  127. package/dist/src/mypy.d.ts +2 -0
  128. package/dist/src/mypy.js +59 -0
  129. package/dist/src/node-reporter.d.ts +1 -0
  130. package/dist/src/node-reporter.js +28 -0
  131. package/dist/src/nuxt-evidence.d.ts +2 -0
  132. package/dist/src/nuxt-evidence.js +160 -0
  133. package/dist/src/nuxt-protocol.d.ts +52 -0
  134. package/dist/src/nuxt-protocol.js +29 -0
  135. package/dist/src/nuxt-runner.d.ts +1 -0
  136. package/dist/src/nuxt-runner.js +165 -0
  137. package/dist/src/nuxt.d.ts +24 -0
  138. package/dist/src/nuxt.js +105 -0
  139. package/dist/src/output.d.ts +3 -0
  140. package/dist/src/output.js +48 -0
  141. package/dist/src/phpstan-evidence.d.ts +2 -0
  142. package/dist/src/phpstan-evidence.js +81 -0
  143. package/dist/src/phpstan.d.ts +2 -0
  144. package/dist/src/phpstan.js +51 -0
  145. package/dist/src/phpunit-evidence.d.ts +2 -0
  146. package/dist/src/phpunit-evidence.js +53 -0
  147. package/dist/src/phpunit.d.ts +2 -0
  148. package/dist/src/phpunit.js +58 -0
  149. package/dist/src/pint-evidence.d.ts +2 -0
  150. package/dist/src/pint-evidence.js +79 -0
  151. package/dist/src/pint-runner.d.ts +1 -0
  152. package/dist/src/pint-runner.js +53 -0
  153. package/dist/src/pint.d.ts +2 -0
  154. package/dist/src/pint.js +37 -0
  155. package/dist/src/playwright-evidence.d.ts +2 -0
  156. package/dist/src/playwright-evidence.js +127 -0
  157. package/dist/src/playwright-reporter.d.ts +10 -0
  158. package/dist/src/playwright-reporter.js +37 -0
  159. package/dist/src/playwright-runner.d.ts +1 -0
  160. package/dist/src/playwright-runner.js +61 -0
  161. package/dist/src/playwright.d.ts +2 -0
  162. package/dist/src/playwright.js +35 -0
  163. package/dist/src/policy-pack.d.ts +21 -0
  164. package/dist/src/policy-pack.js +41 -0
  165. package/dist/src/pytest-evidence.d.ts +2 -0
  166. package/dist/src/pytest-evidence.js +116 -0
  167. package/dist/src/pytest-runner.d.ts +1 -0
  168. package/dist/src/pytest-runner.js +48 -0
  169. package/dist/src/pytest.d.ts +2 -0
  170. package/dist/src/pytest.js +25 -0
  171. package/dist/src/report-validation.d.ts +129 -0
  172. package/dist/src/report-validation.js +27 -0
  173. package/dist/src/review.d.ts +270 -0
  174. package/dist/src/review.js +349 -0
  175. package/dist/src/ruby.d.ts +2 -0
  176. package/dist/src/ruby.js +25 -0
  177. package/dist/src/ruff-evidence.d.ts +2 -0
  178. package/dist/src/ruff-evidence.js +99 -0
  179. package/dist/src/ruff.d.ts +2 -0
  180. package/dist/src/ruff.js +40 -0
  181. package/dist/src/runner.d.ts +8 -0
  182. package/dist/src/runner.js +117 -0
  183. package/dist/src/runtime-inventory.d.ts +112 -0
  184. package/dist/src/runtime-inventory.js +200 -0
  185. package/dist/src/rust-dep-info.d.ts +1 -0
  186. package/dist/src/rust-dep-info.js +46 -0
  187. package/dist/src/rust-evidence.d.ts +2 -0
  188. package/dist/src/rust-evidence.js +157 -0
  189. package/dist/src/rust-runner.d.ts +1 -0
  190. package/dist/src/rust-runner.js +161 -0
  191. package/dist/src/rust.d.ts +7 -0
  192. package/dist/src/rust.js +39 -0
  193. package/dist/src/sarif.d.ts +86 -0
  194. package/dist/src/sarif.js +113 -0
  195. package/dist/src/schemas.d.ts +393 -0
  196. package/dist/src/schemas.js +222 -0
  197. package/dist/src/staticcheck-evidence.d.ts +2 -0
  198. package/dist/src/staticcheck-evidence.js +75 -0
  199. package/dist/src/swift.d.ts +2 -0
  200. package/dist/src/swift.js +20 -0
  201. package/dist/src/task-store.d.ts +37 -0
  202. package/dist/src/task-store.js +349 -0
  203. package/dist/src/tool-versions.d.ts +3 -0
  204. package/dist/src/tool-versions.js +260 -0
  205. package/dist/src/types.d.ts +157 -0
  206. package/dist/src/types.js +37 -0
  207. package/dist/src/typescript-build-evidence.d.ts +2 -0
  208. package/dist/src/typescript-build-evidence.js +86 -0
  209. package/dist/src/typescript-build-runner.d.ts +1 -0
  210. package/dist/src/typescript-build-runner.js +132 -0
  211. package/dist/src/typescript-build.d.ts +2 -0
  212. package/dist/src/typescript-build.js +41 -0
  213. package/dist/src/typescript.d.ts +2 -0
  214. package/dist/src/typescript.js +54 -0
  215. package/dist/src/validation-task-worker.d.ts +1 -0
  216. package/dist/src/validation-task-worker.js +205 -0
  217. package/dist/src/validation-tasks-protocol.d.ts +69 -0
  218. package/dist/src/validation-tasks-protocol.js +57 -0
  219. package/dist/src/validation-tasks.d.ts +11 -0
  220. package/dist/src/validation-tasks.js +144 -0
  221. package/dist/src/vitest-evidence.d.ts +2 -0
  222. package/dist/src/vitest-evidence.js +112 -0
  223. package/dist/src/vitest-runner.d.ts +1 -0
  224. package/dist/src/vitest-runner.js +48 -0
  225. package/dist/src/vitest.d.ts +2 -0
  226. package/dist/src/vitest.js +36 -0
  227. package/dist/src/vue-router-capture.d.ts +42 -0
  228. package/dist/src/vue-router-capture.js +87 -0
  229. package/dist/src/vue-router-evidence.d.ts +2 -0
  230. package/dist/src/vue-router-evidence.js +126 -0
  231. package/dist/src/vue-router-protocol.d.ts +63 -0
  232. package/dist/src/vue-router-protocol.js +44 -0
  233. package/dist/src/vue-router-runner.d.ts +1 -0
  234. package/dist/src/vue-router-runner.js +88 -0
  235. package/dist/src/vue-router.d.ts +23 -0
  236. package/dist/src/vue-router.js +108 -0
  237. package/dist/src/vue-tsc-runner.d.ts +1 -0
  238. package/dist/src/vue-tsc-runner.js +24 -0
  239. package/dist/src/workspace.d.ts +7 -0
  240. package/dist/src/workspace.js +53 -0
  241. package/docs/ACCEPTANCE.md +56 -0
  242. package/docs/ACTIONLINT.md +112 -0
  243. package/docs/ARCHITECTURE-POLICY.md +82 -0
  244. package/docs/ARCHITECTURE.md +122 -0
  245. package/docs/CLANG.md +113 -0
  246. package/docs/CLIENTS.md +109 -0
  247. package/docs/CONTRACTS.md +73 -0
  248. package/docs/DEPENDENCIES.md +42 -0
  249. package/docs/DJANGO.md +70 -0
  250. package/docs/DOTNET.md +114 -0
  251. package/docs/ENVIRONMENTS.md +52 -0
  252. package/docs/ESLINT.md +68 -0
  253. package/docs/EVALUATION.md +124 -0
  254. package/docs/EXECUTION.md +250 -0
  255. package/docs/EXTERNAL-ADAPTERS.md +170 -0
  256. package/docs/EXTERNAL-EVALUATION.md +155 -0
  257. package/docs/EXTERNAL-RUFF-EVALUATION.md +85 -0
  258. package/docs/FASTAPI.md +73 -0
  259. package/docs/FINDING-POLICY.md +67 -0
  260. package/docs/GO-RACE.md +19 -0
  261. package/docs/GO-SCOPE.md +63 -0
  262. package/docs/GOLANGCI-LINT.md +64 -0
  263. package/docs/GUIDANCE.md +46 -0
  264. package/docs/IMPACT-MEASUREMENT.md +97 -0
  265. package/docs/INSTALLATION.md +102 -0
  266. package/docs/JAVA.md +79 -0
  267. package/docs/JEST.md +36 -0
  268. package/docs/JUNIT.md +31 -0
  269. package/docs/LANGUAGES.md +113 -0
  270. package/docs/LARAVEL.md +111 -0
  271. package/docs/MCP-COMPATIBILITY.md +68 -0
  272. package/docs/MUTATIONS.md +93 -0
  273. package/docs/MYPY.md +37 -0
  274. package/docs/NATIVE-CI.md +96 -0
  275. package/docs/NUXT.md +123 -0
  276. package/docs/PACK-DISTRIBUTION.md +98 -0
  277. package/docs/PERFORMANCE.md +71 -0
  278. package/docs/PEST.md +36 -0
  279. package/docs/PHPSTAN.md +48 -0
  280. package/docs/PHPUNIT.md +32 -0
  281. package/docs/PINT.md +41 -0
  282. package/docs/PLAN.md +265 -0
  283. package/docs/PLAYWRIGHT.md +73 -0
  284. package/docs/POLICY-PACKS.md +106 -0
  285. package/docs/PRIOR-WORKFLOW-EVALUATION.md +116 -0
  286. package/docs/PUBLICATION.md +28 -0
  287. package/docs/PYTEST.md +51 -0
  288. package/docs/RELEASE.md +115 -0
  289. package/docs/RENAMING.md +55 -0
  290. package/docs/REVIEW-EXCHANGE.md +136 -0
  291. package/docs/RUBY.md +50 -0
  292. package/docs/RUFF.md +39 -0
  293. package/docs/RUNTIME-INVENTORY.md +56 -0
  294. package/docs/RUST.md +74 -0
  295. package/docs/SARIF.md +64 -0
  296. package/docs/STATUS.md +530 -0
  297. package/docs/SWIFT.md +48 -0
  298. package/docs/TASK-STORAGE.md +141 -0
  299. package/docs/TOOL-IDENTITY.md +30 -0
  300. package/docs/TYPESCRIPT-BUILD.md +55 -0
  301. package/docs/VALIDATION-TASKS.md +119 -0
  302. package/docs/VITEST.md +36 -0
  303. package/docs/VUE-ROUTER.md +130 -0
  304. package/docs/VUE-TSC.md +26 -0
  305. package/docs/WORKSPACES.md +81 -0
  306. package/docs/licenses/nodable-entities-3.0.0.txt +21 -0
  307. package/docs/measurements/client-claude-before-schema-fix-darwin-arm64-node26.json +60 -0
  308. package/docs/measurements/client-claude-darwin-arm64-node26.json +55 -0
  309. package/docs/measurements/client-codex-darwin-arm64-node26.json +175 -0
  310. package/docs/measurements/evaluation-corpus-repo-verifier.json +332 -0
  311. package/docs/measurements/evaluation-darwin-arm64-node26.json +1236 -0
  312. package/docs/measurements/evaluation-linux-arm64-node22.json +1236 -0
  313. package/docs/measurements/external-eslint-darwin-arm64-node26.json +11866 -0
  314. package/docs/measurements/external-eslint-linux-arm64-node22.json +11866 -0
  315. package/docs/measurements/external-eslint-preservation.json +1527 -0
  316. package/docs/measurements/external-ruff-darwin-arm64-node26.json +1031 -0
  317. package/docs/measurements/external-ruff-linux-arm64-node22.json +1031 -0
  318. package/docs/measurements/hosted-ci-52ba415.json +1005 -0
  319. package/docs/measurements/impact-darwin-arm64-node26.json +6685 -0
  320. package/docs/measurements/impact-linux-arm64-node22.json +6690 -0
  321. package/docs/measurements/performance-darwin-arm64-node26.json +845 -0
  322. package/docs/measurements/performance-linux-arm64-node22.json +845 -0
  323. package/docs/measurements/required-native-profiles.json +500 -0
  324. package/package.json +72 -0
  325. package/packs/actionlint.json +8 -0
  326. package/packs/cpp.json +8 -0
  327. package/packs/dotnet.json +8 -0
  328. package/packs/go.json +7 -0
  329. package/packs/java.json +8 -0
  330. package/packs/javascript-node.json +7 -0
  331. package/packs/nuxt.json +7 -0
  332. package/packs/php-pest.json +7 -0
  333. package/packs/php-phpunit.json +7 -0
  334. package/packs/python-pytest.json +7 -0
  335. package/packs/ruby.json +7 -0
  336. package/packs/rust.json +7 -0
  337. package/packs/swift.json +7 -0
  338. package/packs/vue-router.json +7 -0
  339. package/packs/vue.json +11 -0
  340. package/schemas/actionlint-config.schema.json +19 -0
  341. package/schemas/architecture-policy.schema.json +51 -0
  342. package/schemas/architecture-report.schema.json +123 -0
  343. package/schemas/architecture-summary.schema.json +82 -0
  344. package/schemas/clang-database.schema.json +23 -0
  345. package/schemas/config.schema.json +69 -0
  346. package/schemas/contract-bundle.schema.json +78 -0
  347. package/schemas/contract-report.schema.json +114 -0
  348. package/schemas/contract-summary.schema.json +72 -0
  349. package/schemas/dependency-graph.schema.json +65 -0
  350. package/schemas/django-config.schema.json +16 -0
  351. package/schemas/dotnet-config.schema.json +60 -0
  352. package/schemas/external-manifest.schema.json +97 -0
  353. package/schemas/external-reference.schema.json +10 -0
  354. package/schemas/external-request.schema.json +56 -0
  355. package/schemas/external-result.schema.json +111 -0
  356. package/schemas/fastapi-config.schema.json +27 -0
  357. package/schemas/finding-baseline.schema.json +92 -0
  358. package/schemas/finding-comparison-summary.schema.json +95 -0
  359. package/schemas/finding-comparison.schema.json +121 -0
  360. package/schemas/guidance-context.schema.json +34 -0
  361. package/schemas/guidance-report.schema.json +176 -0
  362. package/schemas/guidance-summary.schema.json +68 -0
  363. package/schemas/java-config.schema.json +24 -0
  364. package/schemas/junit.schema.json +69 -0
  365. package/schemas/laravel-config.schema.json +11 -0
  366. package/schemas/mutation-recipe.schema.json +31 -0
  367. package/schemas/mutation-report.schema.json +238 -0
  368. package/schemas/mutation-summary.schema.json +98 -0
  369. package/schemas/nuxt-config.schema.json +51 -0
  370. package/schemas/plan-summary.schema.json +63 -0
  371. package/schemas/plan.schema.json +244 -0
  372. package/schemas/policy-pack.schema.json +41 -0
  373. package/schemas/report-summary.schema.json +100 -0
  374. package/schemas/report.schema.json +463 -0
  375. package/schemas/review-assessment.schema.json +133 -0
  376. package/schemas/review-context-summary.schema.json +31 -0
  377. package/schemas/review-context.schema.json +254 -0
  378. package/schemas/review-receipt-summary.schema.json +104 -0
  379. package/schemas/review-receipt.schema.json +271 -0
  380. package/schemas/review-selection.schema.json +30 -0
  381. package/schemas/runtime-comparison-summary.schema.json +68 -0
  382. package/schemas/runtime-comparison.schema.json +127 -0
  383. package/schemas/runtime-inventory.schema.json +99 -0
  384. package/schemas/vue-router-config.schema.json +67 -0
  385. package/server.json +47 -0
package/docs/JAVA.md ADDED
@@ -0,0 +1,79 @@
1
+ # Java compilation
2
+
3
+ `jvm.javac` compiles all inventoried `.java` files in a Maven/Gradle-discovered
4
+ project as one classpath compilation. It requires a prepared full Temurin JDK
5
+ 25.0.4+7 and an explicit project-root `checktrail.java.json`:
6
+
7
+ ```json
8
+ {
9
+ "schemaVersion": 1,
10
+ "release": 21,
11
+ "warningsAsErrors": true,
12
+ "classPath": []
13
+ }
14
+ ```
15
+
16
+ The supported release range is 8–25. The compiler uses UTF-8, all lint warnings,
17
+ disabled annotation processing and no implicit source compilation. No Maven,
18
+ Gradle, wrapper, dependency resolver or application test is run. Project trust
19
+ is still required. The source and JAR parsers are native tools with the process
20
+ user's privileges; this is not a sandbox.
21
+
22
+ Dependencies are optional explicit `{ "path": "…jar", "sha256": "…" }` entries.
23
+ Paths resolve from the project and must stay inside the operator root without
24
+ symlink traversal. Hashes cover exact file bytes and are verified during planning,
25
+ before compilation and afterwards. Prepared JARs may live in the excluded
26
+ `.checktrail/` directory. They are limited to 128 entries, 32 MiB per JAR and
27
+ 128 MiB total. Duplicate paths, checksum mismatches, manifest `Class-Path`
28
+ attributes and source-bearing JARs cannot produce a pass. Hashes establish byte
29
+ identity, not publisher trust or a complete dependency provenance audit.
30
+
31
+ Compiler options cannot be supplied through this configuration. `CLASSPATH`,
32
+ `JAVA_TOOL_OPTIONS`, `JDK_JAVA_OPTIONS` and `_JAVA_OPTIONS` are protected and
33
+ removed before invoking Java; PATH is fixed during planning. The owned compiler
34
+ helper runs in a fresh temporary directory. Its file manager discards generated
35
+ class bytes with a 32 MiB limit, so it writes no class files into the project.
36
+ Native output is bounded to 1 MiB, diagnostics to 2,000 entries, the JVM heap to
37
+ 256 MiB and the prepared invocation to 100 KiB. Shared engine time and process
38
+ group limits also apply; the heap bound is not a total process-memory bound.
39
+
40
+ ## Evidence and scope
41
+
42
+ Structured diagnostics retain compiler codes, severity, messages and inventoried
43
+ source locations. Native task events must account for each source parsed exactly
44
+ once and every declared top-level type analyzed. Empty files and package metadata
45
+ are valid near misses. Exactly one completed compilation event and no extra
46
+ unparsed compiler output are required. Errors fail the check with incomplete
47
+ findings; malformed or missing evidence cannot pass. Warnings remain visible and
48
+ `warningsAsErrors` selects whether the compiler rejects them.
49
+
50
+ The implementation uses the JDK [JavaCompiler API](https://docs.oracle.com/en/java/javase/25/docs/api/java.compiler/javax/tools/JavaCompiler.html)
51
+ and [completed task events](https://docs.oracle.com/en/java/javase/25/docs/api/jdk.compiler/com/sun/source/util/TaskListener.html).
52
+ The evidence establishes compilation under the declared settings. It does not
53
+ establish that these settings equal a Maven/Gradle build, that omitted generated
54
+ code is current, or that runtime behavior, packaging or tests work.
55
+
56
+ Mixed Kotlin/Scala source, application `.kts` scripts and `module-info.java` are
57
+ unavailable in this profile. Gradle build/settings `.kts` manifests are permitted
58
+ as inert discovery files. JPMS, multi-module compilation, annotation processing,
59
+ generated-source preparation, build plugins, framework semantics and JVM test
60
+ runners remain separate work. Excluded source is not automatically discovered by
61
+ the compiler; projects needing it must prepare an inventoried source or a pinned
62
+ compiled dependency.
63
+
64
+ ## Reproduce native verification
65
+
66
+ ```sh
67
+ npm run build
68
+ docker build --file scripts/java-tools.Dockerfile --tag checktrail-java-test:25.0.4 scripts
69
+ node scripts/verify-java-container.mjs
70
+ ```
71
+
72
+ The helper requires the prepared image, verifies the native compiler, then runs
73
+ synthetic broken/fixed/near-miss cases with the network disabled. It also installs
74
+ a fresh package offline and exercises its library, CLI and MCP against the public
75
+ Java example. The host npm cache must contain the locked production dependencies.
76
+ The Dockerfile pins the multi-platform base image manifests. Local evidence is
77
+ arm64 Linux; the separate hosted amd64 job passed at `52ba415` (see `NATIVE-CI.md`).
78
+ Host macOS without a JDK
79
+ reports the native cases as skipped, not verified.
package/docs/JEST.md ADDED
@@ -0,0 +1,36 @@
1
+ # Jest validation
2
+
3
+ Select `javascript.jest` explicitly in `checktrail.json`. Install Jest in the
4
+ project or an ancestor `node_modules` directory inside the configured root.
5
+ Planning only reads files; operator trust is required before loading Jest or
6
+ project configuration. No package installation is attempted.
7
+
8
+ The adapter uses installed Jest's `runCLI` API with the standard `jest-runner`
9
+ and `jest-circus/runner`. It passes inventoried `.test`/`.spec` JS/TS files and
10
+ JS/TS files under `__tests__` by exact path. Native configuration still controls
11
+ matching and transformation; excluded planned files make the result incomplete.
12
+ Custom runners, multi-project duplicate execution, and other filename conventions
13
+ are outside the verified contract. TypeScript and ESM fixtures require their own
14
+ configured loader/transform support; current native fixtures exercise CommonJS.
15
+
16
+ Execution is serial and non-watching, with CI mode and snapshot updates disabled.
17
+ Collection-only, list-only, changed-only and failed-only execution are disabled.
18
+ Result processors are disabled so evidence comes from the native result, before
19
+ user postprocessing. Coverage configuration remains active. Cache reuse is
20
+ disabled; Jest and trusted project code may still create runtime cache files.
21
+ This is not a sandbox or a guarantee that project code will not modify files.
22
+
23
+ Evidence reconciles each file's assertion counters with aggregate counters and
24
+ the exact planned file set. Interrupted, malformed, duplicate, missing and
25
+ collection-only results cannot pass. Failures and import errors remain failures.
26
+ There must be at least one passing assertion. **Any pending test makes an otherwise
27
+ successful run incomplete**, including an intentional skip: Jest does not
28
+ distinguish skipped assertions from assertions omitted by `.only` in this result.
29
+ A `.only` that omits no assertions is not independently detected. Todo assertions
30
+ are counted as skipped; they do not supply passing evidence.
31
+
32
+ The native integration is verified with Jest 30.5.2. Compatibility with other
33
+ versions requires native fixture runs; package presence alone does not establish
34
+ support. See the official [Jest CLI documentation](https://jestjs.io/docs/cli)
35
+ for collection and execution options and [configuration reference](https://jestjs.io/docs/configuration)
36
+ for runners and transforms.
package/docs/JUNIT.md ADDED
@@ -0,0 +1,31 @@
1
+ # JUnit report import
2
+
3
+ Import an existing report through the public `importJUnit(xml)` library function
4
+ or the CLI:
5
+
6
+ ```sh
7
+ node dist/src/cli.js import-junit --root /path/to/project --input results.xml
8
+ ```
9
+
10
+ The result is versioned JSON with `provenance: "imported-report"`. Its outcome
11
+ describes the supplied report, not the current repository. Importing cannot
12
+ establish source identity, execution time, freshness, scope coverage or whether
13
+ the producer ran at all. Imported evidence does not change a validation result.
14
+ Default CLI output omits case names and file paths; `--detailed` includes them.
15
+ The input path must be relative and remain within the configured root.
16
+
17
+ The supported XML shape is `testsuite` or nested `testsuites`/`testsuite` elements
18
+ with concrete `testcase` entries. Suite test counts are required and aggregate
19
+ failure/error/skip counters are reconciled when present. Counts are derived from
20
+ leaf cases without double-counting parent suites. Duplicate case identities,
21
+ conflicting states, unknown result elements, malformed XML, empty/all-skipped
22
+ reports and inconsistent counters cannot pass. Failure/error entries fail.
23
+
24
+ DOCTYPE/entity declarations are rejected. No external entities or resources are
25
+ loaded. Input is limited to 8 MiB, nesting to 32 suites and cases to 100,000.
26
+ Built-in XML escapes are decoded. Unrecognized dialects such as custom flaky-test
27
+ elements remain incomplete until independently supported and tested.
28
+
29
+ The [PHPUnit adapter](PHPUNIT.md) uses the same parser with additional requirements:
30
+ the report must come from the bounded live process, account for every planned
31
+ file and contain positive native assertion evidence.
@@ -0,0 +1,113 @@
1
+ # Language and ecosystem roadmap
2
+
3
+ Capability levels are discovery, planning, execution, structured evidence,
4
+ semantic rules, and integration validation. None implies the next. This file's
5
+ initial scope column describes the experimental implementation. Node, Python,
6
+ Go, TypeScript, ESLint, Vitest, Jest and vue-tsc execution have been exercised locally. PHP syntax
7
+ has been verified separately in an isolated official Linux container. Tool versions and remaining gaps are tracked in `STATUS.md`.
8
+
9
+ | Family | Project boundaries | Initial scope | Subsequent native integrations | Important constraints |
10
+ | ----------------------------- | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
11
+ | JavaScript / TypeScript | package.json | Discovery; Node/Vitest/Jest/Playwright tests; explicit local tsc/vue-tsc, solution references, ESLint and opt-in Vue Router/Nuxt SSR route contracts | framework scope profiles | ESLint JavaScript is exercised; parser/processor combinations need their own verification; TS tests need a loader/build |
12
+ | Python | pyproject.toml, setup.py, requirements.txt | Discovery; unittest/pytest, Ruff/mypy and opt-in FastAPI/Django route inventories | Pyright | Never import setup.py for discovery; virtual environments, namespace packages and plugins matter |
13
+ | Go | go.mod | Discovery; gofmt, vet, tests, explicit race/Staticcheck/golangci-lint profiles; native scope accounting | broader golangci-lint settings | Module/workspace boundaries, build tags, cgo, platform constraints and test caching |
14
+ | PHP | composer.json | Discovery; syntax, PHPStan, PHPUnit, Pest, Pint and opt-in Laravel assembly capture | Larastan integration, PHP-CS-Fixer | Syntax is not type/test validation; runtime extensions, generated proxies and framework bootstrapping matter |
15
+ | Rust | Cargo.toml | Single-package Cargo check with locked offline dependencies and dep-info scope | cargo fmt, clippy, test | Build scripts and proc macros execute code; feature/target matrix; offline dependencies |
16
+ | Java / Kotlin / Scala | pom.xml, build.gradle, build.gradle.kts | Explicit Java classpath compilation with native parse/analysis evidence; Kotlin/Scala discovery only | Maven/Gradle test, Checkstyle, SpotBugs, detekt | Multi-module builds, wrappers, JVM versions, generated sources and plugins |
17
+ | C# / F# / Visual Basic / .NET | *.csproj, *.fsproj, *.vbproj, *.sln, *.slnx | Explicit C# compilation with native syntax/semantic evidence; F#/VB discovery only | dotnet format, build, test | Restore policy, analyzers, target frameworks, generated code and TRX parsing |
18
+ | Ruby | Gemfile, *.gemspec | MRI syntax checking of Ruby source and DSL manifests | RuboCop, RSpec, Minitest | Bundler versions and runtime config execute code |
19
+ | Swift | Package.swift | Native Swift grammar checking without manifest evaluation | swift build/test, SwiftLint | Manifest evaluation executes code; platform/SDK requirements |
20
+ | C / C++ | CMakeLists.txt, meson.build, compile_commands.json | Prepared Clang front-end checks with native source/header accounting | clang-format, clang-tidy, compiler checks, CTest | Compilation database, toolchain and build configuration are required |
21
+ | Infrastructure | .github/workflows/*.yml or *.yaml, *.tf, Chart.yaml, kustomization.yaml | Static GitHub Actions analysis with explicit local inputs and native per-file evidence | terraform validate, helm lint/template, kubeconform | No workflow execution; remote actions are not downloaded; YAML aliases and merge keys require another profile |
22
+
23
+ Nuxt, Vue Router, FastAPI, Django and Laravel profiles have separately pinned framework compatibility gates
24
+ and capture only their documented native assembly projections; see `FASTAPI.md`,
25
+ `DJANGO.md`, `LARAVEL.md`, `VUE-ROUTER.md` and `NUXT.md`.
26
+
27
+ Pint's macOS hosted check exposed a non-seekable cache-file failure. The adapter
28
+ now uses a fresh regular file with runner-owned cleanup; the corrected macOS
29
+ profile passed at `52ba415`. See `PINT.md` and `NATIVE-CI.md`.
30
+
31
+ ## Adapter contract
32
+
33
+ Every adapter declares stable ID/version, detection markers, capabilities,
34
+ supported OS/tool versions, check IDs, prerequisites, working-directory semantics,
35
+ scope, timeout, whether execution is required, and evidence parser behavior.
36
+ Keep language identity separate from framework packs and individual tool adapters.
37
+
38
+ Every result accounts for failure, missing executable, invalid config, zero tests,
39
+ all-skipped tests, partial output, timeout, cancellation and unexpected format.
40
+ Use native JSON/XML where available. Human-readable output parsing needs pinned
41
+ fixtures and a conservative fallback to inconclusive.
42
+
43
+ Native tools are provided by the consumer's environment. Do not download a tool
44
+ because a manifest mentions it. Use local package binaries and lockfile-compatible
45
+ versions. Do not equate an executable's presence with adapter compatibility.
46
+
47
+ ## External implementations
48
+
49
+ Operator-registered Node, Python, PHP and compiled native bundles share the
50
+ [external adapter protocol](EXTERNAL-ADAPTERS.md). This permits checks written in
51
+ different languages without changing the engine. It does not automatically add
52
+ semantic support for the languages they inspect. Each adapter needs its own native
53
+ regression cases, tool identities, platform profile and license provenance.
54
+
55
+ ## Monorepos and polyglot repositories
56
+
57
+ Discover nested manifests without entering dependency caches or following symlinks.
58
+ Keep relative project roots and assign files to the closest detected project root;
59
+ avoid running a parent check over every child without reporting overlap.
60
+ One directory can carry multiple ecosystems. Language detection must preserve all
61
+ matches rather than selecting whichever marker happened to be visited first.
62
+
63
+ Workspace dependencies are explicit policy inputs; completeness is a maintainer
64
+ assertion, not inferred import analysis. Optional Git selection expands changed
65
+ projects to their transitive consumers and retains whole-project checks. See
66
+ `WORKSPACES.md`. This selection does not itself establish built-package or
67
+ producer/consumer contract validation.
68
+
69
+ ## Promotion requirements
70
+
71
+ An adapter is experimental until it has real toolchain integration tests on its
72
+ advertised platforms, structured evidence tests, broken/fixed/near-miss fixtures,
73
+ scope and exclusion documentation, and a maintainer able to reproduce failures.
74
+ Framework-specific support is promoted separately. Recognition of a manifest
75
+ is always reported as discovery, never as completed validation.
76
+
77
+ The optional [review exchange](REVIEW-EXCHANGE.md) accepts selected inventoried
78
+ UTF-8 source in any language. Its bounds, freshness and quotation checks do not
79
+ add native analysis coverage or promote an ecosystem capability.
80
+
81
+ Optional [task storage](TASK-STORAGE.md) retains projected engine reports from any
82
+ adapter without adding language coverage. Its native storage profile is verified
83
+ on macOS/Node 26.8.1 and Linux/Node 22.23.2; it is not MCP Tasks support.
84
+
85
+ The [durable library worker](VALIDATION-TASKS.md) invokes the same adapter registry.
86
+ Worker-specific lifecycle evidence currently uses native Node fixtures on those
87
+ storage platforms; other adapters retain their existing separately verified profiles.
88
+
89
+ The [external ESLint integration evaluation](EXTERNAL-EVALUATION.md) adds
90
+ independently authored diagnostic cases for three JavaScript rule profiles. Its
91
+ macOS/Linux results do not extend coverage to other parsers, plugins or languages.
92
+
93
+ The [application-client checks](CLIENTS.md) exercise native Node evidence through
94
+ Codex and tool discovery through Claude Code. They do not independently verify
95
+ every adapter through either client.
96
+
97
+ Exported Vue/Nuxt profile schemas use standard JSON Schema patterns for route
98
+ prefixes and probe restrictions. Strict schema compilation and boundary fixtures
99
+ verify those constraints separately from the native framework cases.
100
+
101
+ The [external Ruff diagnostic cohort](EXTERNAL-RUFF-EVALUATION.md) adds native
102
+ macOS/Linux comparisons for the selected Python rule families. Mixed files do not
103
+ provide an independent clean-case denominator; the measurements verify diagnostic
104
+ preservation by the wrapper.
105
+
106
+ Ruby and Swift have dedicated CI definitions that require their named native
107
+ regressions to pass. Their local execution is recorded in `RUBY.md` and `SWIFT.md`;
108
+ both hosted jobs passed at `52ba415` (see `NATIVE-CI.md`). Other optional tests in the general suite can still
109
+ skip, so its aggregate pass count is not evidence for every native profile.
110
+
111
+ The prepared CI language profiles and native container helpers require exact
112
+ regression names through `NATIVE-CI.md`. Their required results are separate from
113
+ the optional skips allowed by a developer's general test suite.
@@ -0,0 +1,111 @@
1
+ # Laravel runtime assembly profile
2
+
3
+ `php.laravel-runtime` captures an explicitly selected Laravel testing assembly.
4
+ A passed capture means its five declared projections were collected successfully.
5
+ Use `compare-runtime` to detect changes against a reviewed inventory; capture alone
6
+ does not decide whether a route, permission, schedule or binding is correct.
7
+
8
+ The native fixture uses Laravel 13.32.0, PHP 8.5.6 and Node 22.23.2 on Linux.
9
+ Other Laravel versions are rejected until their internal API contract is verified.
10
+ The development tool installation is pinned in `scripts/laravel-tools/composer.lock`;
11
+ the distributed package does not include Laravel or install it for consumers.
12
+
13
+ Select the check in `checktrail.json`, and add `checktrail.laravel.json`:
14
+
15
+ ```json
16
+ {
17
+ "schemaVersion": 1,
18
+ "assembly": "catalog-test-application",
19
+ "environment": "testing"
20
+ }
21
+ ```
22
+
23
+ The project needs inventoried `bootstrap/app.php` and a local `vendor/autoload.php`
24
+ within the operator root. Planning validates paths and configuration without
25
+ loading either. Execution uses the normal CLI/MCP operator trust gate.
26
+
27
+ ## Bootstrap and collection
28
+
29
+ The collector loads the application, constructs its HTTP kernel, bootstraps the
30
+ console kernel, initializes Artisan's command inventory, and resolves the
31
+ scheduler. Artisan initialization is necessary for `withSchedule()` callbacks.
32
+ It does not dispatch HTTP requests, run command handlers, invoke event listeners,
33
+ evaluate schedule filters, or execute scheduled jobs. Bootstrap, command and
34
+ controller constructors, service providers and Composer autoload files still run
35
+ project code and can perform their own I/O. This is not a sandbox.
36
+
37
+ The profile fixes `APP_ENV=testing` and `APP_DEBUG=false`, uses a fresh temporary
38
+ directory for Laravel's configuration, route, event, package and service caches,
39
+ and points Laravel's dotenv loader at that empty directory. Existing project
40
+ dotenv files and compiled caches are not consumed by the collector's bootstrap.
41
+ Operator-permitted environment variables still reach project code. Bootstrap that
42
+ has already run, a different application base path, altered cache paths, or a
43
+ non-testing resolved environment produces an error. Temporary cache files are
44
+ removed on normal PHP shutdown; forced process termination can leave temporary
45
+ files for the host's temporary-directory cleanup.
46
+
47
+ | Collection | Recorded projection |
48
+ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
49
+ | Routes | Served domain/method/URI entries, name, handler identity, native expanded and sorted middleware, constraint/default hashes. Includes framework and package routes. |
50
+ | Middleware | HTTP kernel global stack, priority, groups and aliases, preserving stack order. |
51
+ | Listeners | Exact-event and wildcard registrations, callable identity, order and multiplicity. |
52
+ | Schedules | Command/callback identity, cron expression, repeat interval, timezone, environments, user, overlap/server/background/maintenance flags, output settings, callback identities, parameter and attribute hashes. |
53
+ | Bindings | Explicit global factories with shared/scoped flags, aliases, contextual bindings, and currently resolved instance classes or scalar hashes. |
54
+
55
+ Class factories wrapped by Laravel's container retain the actual concrete class
56
+ identity. Generic closures retain relative source location and a hash of their
57
+ source lines. Listener wildcard maps and scoped binding lists use reflection
58
+ against the pinned framework version. Collection failures retain partial evidence
59
+ and make the check incomplete. Empty served routes are incomplete; empty listeners
60
+ or schedules can be legitimate. Collection entries, closure-source reads, output,
61
+ execution time and source freshness are bounded by the collector and shared engine.
62
+
63
+ ## Boundaries
64
+
65
+ This is a CLI testing assembly after eager deferred-provider loading and native
66
+ introspection. It is not an HTTP request, queue worker, Octane or production
67
+ assembly. Constructors resolved during inspection can affect the final container
68
+ inventory. Collect before/after under equivalent runtime and environment settings.
69
+
70
+ The projection does not serialize object state or closure captures, execute
71
+ factories, infer automatic type bindings, or inventory container extenders, tags,
72
+ method bindings and resolution hooks. It does not evaluate authorization, model
73
+ relations, response schemas, job behavior or schedule eligibility. Callable identity
74
+ is not a semantic proof of behavior. Instance state changes and closure-captured
75
+ value changes can therefore leave the projection unchanged. Hashes of scalar
76
+ configuration are not a secrecy guarantee.
77
+
78
+ Laravel can replace a route registration under an existing method/domain/URI key;
79
+ this collector records the final served collection, not discarded declarations.
80
+ It does not classify duplicate listeners as bugs: inventory comparison preserves
81
+ their multiplicity for review. Equivalent route languages and overlapping match
82
+ patterns are not normalized. Custom router, route, event dispatcher, scheduler or
83
+ scheduled-event classes are unsupported. Unsupported registration data or closure
84
+ sources outside the project/local vendor directory also prevent a complete capture.
85
+
86
+ Detailed reports include the `runtime` object and can contain application names,
87
+ paths, schedule commands and callable identities. Summary reports omit it. Save
88
+ the runtime objects to compare with the shared CLI/library/MCP runtime comparator;
89
+ imported comparisons do not independently establish freshness of the current tree.
90
+
91
+ ## Reproduce native evidence
92
+
93
+ Prepare the development-only locked Composer installation in
94
+ `.checktrail/laravel-tools`, build the project, then run
95
+ `node scripts/verify-laravel-container.mjs`. It uses installed Composer/PHP and
96
+ Node images, reports their digests, disables container networking and creates
97
+ synthetic fixture copies inside the container. The helper does not pull images.
98
+ Hosted CI preparation is defined but has not been run remotely.
99
+
100
+ The public fixture is `examples/frameworks/laravel`. Its tests inspect framework
101
+ storage routes as well as application routes, distinguish middleware alias near
102
+ misses, retain wildcard listeners and concrete binding classes, and compare
103
+ changed/fixed listeners, schedules, bindings and route middleware. Separate cases
104
+ exercise stale caches, dotenv exclusion, an actually empty native route collection,
105
+ custom dispatchers and bootstrap errors. Tests assert the relevant failure reason
106
+ or incomplete collection, rather than accepting any nonzero exit.
107
+
108
+ References: [Laravel routing](https://laravel.com/docs/13.x/routing),
109
+ [scheduling](https://laravel.com/docs/13.x/scheduling),
110
+ [container bindings](https://laravel.com/docs/13.x/container). The pinned installed
111
+ framework source and native fixtures determine this adapter's exact compatibility.
@@ -0,0 +1,68 @@
1
+ # MCP compatibility
2
+
3
+ The server runs locally over stdio using the official TypeScript SDK. The tested
4
+ current protocol is `2026-07-28`. Local operation is a deployment choice, not a
5
+ separately named MCP standard. No account, HTTP listener, remote service or LLM
6
+ provider is required.
7
+
8
+ ## Application clients
9
+
10
+ Fresh offline package checks with Claude Code and Codex passed their documented
11
+ legacy negotiation profiles. Claude Code health/tool discovery and Codex direct
12
+ app-server tool calls are different coverage levels; see [CLIENTS.md](CLIENTS.md)
13
+ for versions, the corrected schema warning, reproduction and recorded evidence.
14
+
15
+ ## Execution lifecycle
16
+
17
+ `validation_run` executes asynchronously while its tool call remains pending.
18
+ Other inspection calls remain responsive. A second validation is rejected while
19
+ one is active. Request cancellation terminates the validation process group;
20
+ stdin EOF, SIGINT and SIGTERM close the server connection and cancel active work.
21
+ Mutation experiments share the validation execution slot and cancellation path;
22
+ read-only guidance and planning remain responsive. Mutation results are advisory
23
+ and returned directly, without a retained report ID. Reports from validation are
24
+ kept in memory and disappear on restart. There is no durable job
25
+ handle or restart recovery in the MCP server yet. A separate library-only
26
+ [task store](TASK-STORAGE.md) now provides bounded persistence and process-crash
27
+ recovery. Its [library worker](VALIDATION-TASKS.md) integrates execution and
28
+ parent-disconnect cleanup; MCP protocol integration remains pending.
29
+
30
+ Lifecycle integration tests exercise real child processes. They reproduced
31
+ orphaned workers on EOF and signals before the shutdown handler was added. They
32
+ also reproduced SDK 2.0.0 ignoring numeric request ID `0` when cancelling. The
33
+ application now handles validation cancellation through the public notification
34
+ registration API, using exact request-ID equality and the request's connection
35
+ abort signal. String `"0"` must not cancel numeric `0`.
36
+
37
+ ## Standard Tasks extension: not implemented
38
+
39
+ The current optional Tasks extension is `io.modelcontextprotocol/tasks`. It adds
40
+ negotiated task results, polling, cancellation and durable handles. An asynchronous
41
+ JavaScript function and an in-memory report ID do not implement that extension.
42
+ The server does not advertise Tasks support.
43
+
44
+ SDK 2.0.0 currently blocks modern `tasks/get` and `tasks/cancel` before registered
45
+ extension handlers run. This was reproduced locally; `tasks/update` reaches its
46
+ handler in the same probe. Upstream tracks the method-registry collision in
47
+ [typescript-sdk#2598](https://github.com/modelcontextprotocol/typescript-sdk/issues/2598).
48
+
49
+ Run `npm run probe:mcp-tasks` from the source checkout to repeat the routing probe. Exit `2` means one or
50
+ more handlers were unreachable; exit `0` means routing works. A routing success
51
+ does not establish Tasks conformance. The probe is separate from the ordinary
52
+ check suite because this optional capability is not currently shipped.
53
+
54
+ Before advertising Tasks, implement and verify:
55
+
56
+ 1. Negotiated extension capabilities and ordinary-call fallback for older clients.
57
+ 2. Connect the implemented local worker/store to the MCP execution slot. Native
58
+ persistence, cancellation, parent-disconnect cleanup and reopening are verified
59
+ independently; worker lifecycle and wire behavior must still be tested together.
60
+ 3. Standard task creation, get, update and cancellation wire contracts. Store the
61
+ handle before returning it; retain completed tool errors as completed results.
62
+ 4. Cancellation races, shutdown, reconnect, restart, expiry, missing IDs and
63
+ concurrent requests against a compatible client and SDK.
64
+ 5. Summary/detail projections that preserve the operator's privacy choice for
65
+ both task metadata and retained results.
66
+
67
+ References: [core specification](https://modelcontextprotocol.io/specification/2026-07-28),
68
+ [Tasks specification](https://tasks.extensions.modelcontextprotocol.io/specification/2026-07-28/tasks).
@@ -0,0 +1,93 @@
1
+ # Targeted mutation experiments
2
+
3
+ `mutate`, `runMutations()` and MCP `mutation_experiment` execute an explicitly
4
+ authored replacement recipe in temporary copies. They use the shared validation
5
+ engine, require operator execution trust and return a separate advisory report.
6
+ They never change a validation report's outcome or edit the original source.
7
+ Executed project code retains the user's privileges and can access outside the
8
+ copy: this is not a sandbox. Do not run untrusted code through this feature.
9
+
10
+ ```sh
11
+ node dist/src/cli.js mutate --root examples/mutations --input mutations.json --trust-project --detailed
12
+ ```
13
+
14
+ The public example subtracts instead of adding (caught by its assertion) and
15
+ swaps addition operands (survives its integer test). A survivor is an observation,
16
+ not automatically a missing test or a defect: equivalent mutations can survive.
17
+ The engine does not generate mutations or decide their semantic validity.
18
+
19
+ ## Initial profile
20
+
21
+ `node-flat-tests` accepts one JavaScript project at the root, with only
22
+ `javascript.node-test` selected. The manifest must have no dependencies,
23
+ development dependencies, optional dependencies or peer dependencies. Additional
24
+ checks/projects, environment requirements, Git selection and operator overlays
25
+ are unsupported. Only flat native Node tests are accepted; suites and nested
26
+ tests do not yet have the required identity accounting. Other languages and
27
+ framework runners remain separate work.
28
+
29
+ Recipes use `schemas/mutation-recipe.schema.json`. Each mutation names an
30
+ inventoried `.js`, `.mjs` or `.cjs` source file outside the selected test files,
31
+ one literal `expected` string and different `replacement` text. Exactly one
32
+ occurrence must match, including overlapping occurrences. Targets require valid
33
+ UTF-8. Missing, ambiguous, unchanged and test-file targets are recorded invalid;
34
+ malformed recipes, duplicate IDs and escaping paths are rejected before execution.
35
+ Helpers can indirectly alter test behavior, so recipe review is still necessary.
36
+
37
+ ## Execution and evidence
38
+
39
+ The engine snapshots only its bounded inventory and copies those files. Excluded
40
+ dependencies, symlinks, secrets, caches and generated outputs are not copied.
41
+ The report records original exclusions. File permissions, Git metadata and
42
+ external resources are not reproduced; a copy is not a hermetic build identity.
43
+ No tools or dependencies are installed. Original source is fingerprinted before
44
+ and after the experiment, and a change or unreadable final source prevents
45
+ `complete: true`.
46
+
47
+ A fresh copy must first pass a baseline with non-skipped tests and complete native
48
+ test identities. Every valid mutation receives another fresh copy, so no trial
49
+ inherits files written by an earlier trial. The copied source also receives the
50
+ engine's normal before/after fingerprint check.
51
+
52
+ - `killed`: the same observed test identities complete and native assertion
53
+ failures occur. Node's error cause must identify `AssertionError` with
54
+ `ERR_ASSERTION`; string matching an error message is insufficient.
55
+ - `survived`: the same observed tests pass with the changed source.
56
+ - `inconclusive`: compilation/import/runtime errors, changed test identities,
57
+ partial evidence, skips, timeouts or copied-source changes prevent classification.
58
+ - `invalid`: the requested edit does not satisfy the target contract.
59
+ - `not-run`: baseline failure, cancellation or the total budget prevents execution.
60
+
61
+ Identities include source-relative test file, name, line and column; matching
62
+ counts alone are insufficient. Test assertions that deliberately catch errors
63
+ remain assertions. Malicious or customized test code can forge evidence, as with
64
+ ordinary trusted validation; this is not an attestation mechanism.
65
+
66
+ Reports reconcile every requested mutation. `complete` means all requested trials
67
+ were classified as killed or survived against unchanged original source; it does
68
+ not mean the tests are adequate. CLI exits `0` for a complete experiment, even with
69
+ survivors, and `2` for incomplete/error. There is no implicit mutation-score gate.
70
+ Summary mode omits mutation IDs, file paths, individual runs and logs. Detailed
71
+ mode adds bounded native run IDs, fingerprints, durations and counters without
72
+ raw process output. No model is invoked and no source is uploaded by the engine.
73
+
74
+ ## Bounds and lifecycle
75
+
76
+ Recipes are capped at 128 KiB, eight mutations and 4096 characters per expected
77
+ or replacement string. Existing inventory bounds apply: 20,000 entries, 8 MiB per
78
+ file, 64 MiB total. Copies run sequentially. The default total execution budget
79
+ is 30 seconds, configurable up to 120 seconds; file inspection/copying and cleanup
80
+ are cooperative filesystem operations rather than hard OS deadlines.
81
+
82
+ MCP execution is disabled unless enabled at startup, shares the validation
83
+ execution slot and responds to ordinary request cancellation. Library callers can
84
+ supply an `AbortSignal`. Process groups are terminated by the shared runner.
85
+ Normal completion, failure and cancellation remove copies in `finally`; abrupt
86
+ process or machine termination can leave a private temporary directory. Ordinary
87
+ async calls do not implement durable MCP Tasks.
88
+
89
+ The regression suite exercises the public example, error classifications, invalid
90
+ edits, failing/skipped/nested baselines, changed test identity, source preservation,
91
+ cancellation and cleanup. These synthetic cases are not an independently held-out
92
+ review-quality evaluation. Broader language support, mutation generation, impact
93
+ selection and comparison with the prior review workflow remain pending.
package/docs/MYPY.md ADDED
@@ -0,0 +1,37 @@
1
+ # Mypy validation
2
+
3
+ Select `python.mypy` explicitly. The operator's `python3` must have mypy 2.3.1
4
+ installed. Other versions are unavailable until verified: this adapter uses the
5
+ native options API to detect per-module `ignore_errors`, in addition to the
6
+ documented `mypy.api.run` entry point. Missing tools never trigger installation.
7
+ Planning does not import mypy, plugins or project modules.
8
+
9
+ The check passes all inventoried `.py` and `.pyi` files explicitly, records native
10
+ source resolution, and reconciles the success summary with the complete planned
11
+ file set. Global or effective per-module `ignore_errors` prevents passing. Errors
12
+ fail; incomplete or unfamiliar output cannot pass. Unused inline ignore comments
13
+ are reported, and untyped function bodies are checked. This is not strict mode:
14
+ other rule exclusions and valid inline ignores follow the native configuration.
15
+
16
+ Configuration is selected from project-local `mypy.ini`, `.mypy.ini`,
17
+ `pyproject.toml` or `setup.cfg` in that order; without one the adapter uses an
18
+ empty configuration. Parent/home settings are not loaded implicitly. Workspaces
19
+ requiring external configuration need a future explicit policy option. Paired
20
+ implementation/stub modules, namespace layouts and imported dependency coverage
21
+ need their own integration fixtures; a duplicate-module error is not waived.
22
+
23
+ Incremental reuse, cache writes and stub installation are disabled. Existing
24
+ cache files are preserved. Trusted plugins and explicitly configured report
25
+ generators can still have side effects. This is not a sandbox. Source mutation
26
+ remains subject to the engine's post-run fingerprint check.
27
+
28
+ Native tests passed with mypy 2.3.1 and Python 3.12.13 in a prepared Linux
29
+ container. They exercise valid annotations, incompatible assignments, global and
30
+ module-specific broad suppression, missing imports, unused ignores, configured
31
+ stub installation prevention and cache preservation. The host lacks this mypy
32
+ version, so its native test skips explicitly. The separate
33
+ [Python container checks](PYTEST.md) reproduce these cases with no network and
34
+ read-only synthetic source.
35
+
36
+ See the official [mypy command-line reference](https://mypy.readthedocs.io/en/stable/command_line.html)
37
+ for native checking and installation options.