@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.
- package/CONTRIBUTING.md +42 -0
- package/LICENSE +21 -0
- package/README.md +355 -0
- package/SECURITY.md +46 -0
- package/dist/src/actionlint-evidence.d.ts +2 -0
- package/dist/src/actionlint-evidence.js +166 -0
- package/dist/src/actionlint-inputs.d.ts +5 -0
- package/dist/src/actionlint-inputs.js +123 -0
- package/dist/src/actionlint-runner.d.ts +1 -0
- package/dist/src/actionlint-runner.js +122 -0
- package/dist/src/actionlint.d.ts +19 -0
- package/dist/src/actionlint.js +80 -0
- package/dist/src/adapters.d.ts +49 -0
- package/dist/src/adapters.js +430 -0
- package/dist/src/architecture.d.ts +107 -0
- package/dist/src/architecture.js +230 -0
- package/dist/src/clang-evidence.d.ts +2 -0
- package/dist/src/clang-evidence.js +194 -0
- package/dist/src/clang-protocol.d.ts +3 -0
- package/dist/src/clang-protocol.js +25 -0
- package/dist/src/clang-runner.d.ts +1 -0
- package/dist/src/clang-runner.js +159 -0
- package/dist/src/clang.d.ts +44 -0
- package/dist/src/clang.js +197 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +338 -0
- package/dist/src/config.d.ts +33 -0
- package/dist/src/config.js +140 -0
- package/dist/src/contract-schema.d.ts +85 -0
- package/dist/src/contract-schema.js +56 -0
- package/dist/src/contract-worker.d.ts +1 -0
- package/dist/src/contract-worker.js +123 -0
- package/dist/src/contracts.d.ts +22 -0
- package/dist/src/contracts.js +123 -0
- package/dist/src/django-evidence.d.ts +2 -0
- package/dist/src/django-evidence.js +100 -0
- package/dist/src/django-runner.d.ts +1 -0
- package/dist/src/django-runner.js +80 -0
- package/dist/src/django.d.ts +9 -0
- package/dist/src/django.js +50 -0
- package/dist/src/dotnet-compiler.d.ts +1 -0
- package/dist/src/dotnet-compiler.js +87 -0
- package/dist/src/dotnet-evidence.d.ts +2 -0
- package/dist/src/dotnet-evidence.js +127 -0
- package/dist/src/dotnet-runner.d.ts +1 -0
- package/dist/src/dotnet-runner.js +167 -0
- package/dist/src/dotnet.d.ts +65 -0
- package/dist/src/dotnet.js +120 -0
- package/dist/src/engine.d.ts +19 -0
- package/dist/src/engine.js +239 -0
- package/dist/src/environment.d.ts +6 -0
- package/dist/src/environment.js +36 -0
- package/dist/src/eslint-evidence.d.ts +2 -0
- package/dist/src/eslint-evidence.js +98 -0
- package/dist/src/eslint-runner.d.ts +1 -0
- package/dist/src/eslint-runner.js +61 -0
- package/dist/src/eslint.d.ts +2 -0
- package/dist/src/eslint.js +40 -0
- package/dist/src/evidence.d.ts +2 -0
- package/dist/src/evidence.js +313 -0
- package/dist/src/external-adapter.d.ts +164 -0
- package/dist/src/external-adapter.js +265 -0
- package/dist/src/external-evidence.d.ts +2 -0
- package/dist/src/external-evidence.js +127 -0
- package/dist/src/external-runner.d.ts +1 -0
- package/dist/src/external-runner.js +122 -0
- package/dist/src/fastapi-evidence.d.ts +2 -0
- package/dist/src/fastapi-evidence.js +126 -0
- package/dist/src/fastapi-runner.d.ts +1 -0
- package/dist/src/fastapi-runner.js +84 -0
- package/dist/src/fastapi.d.ts +10 -0
- package/dist/src/fastapi.js +52 -0
- package/dist/src/fetch-pack.d.ts +16 -0
- package/dist/src/fetch-pack.js +154 -0
- package/dist/src/finding-policy-schema.d.ts +146 -0
- package/dist/src/finding-policy-schema.js +70 -0
- package/dist/src/finding-policy.d.ts +62 -0
- package/dist/src/finding-policy.js +206 -0
- package/dist/src/git-selection.d.ts +3 -0
- package/dist/src/git-selection.js +229 -0
- package/dist/src/go-directives.d.ts +1 -0
- package/dist/src/go-directives.js +32 -0
- package/dist/src/go-scope.d.ts +11 -0
- package/dist/src/go-scope.js +122 -0
- package/dist/src/golangci-evidence.d.ts +2 -0
- package/dist/src/golangci-evidence.js +92 -0
- package/dist/src/golangci-runner.d.ts +1 -0
- package/dist/src/golangci-runner.js +124 -0
- package/dist/src/golangci.d.ts +2 -0
- package/dist/src/golangci.js +35 -0
- package/dist/src/guidance.d.ts +98 -0
- package/dist/src/guidance.js +247 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/index.js +16 -0
- package/dist/src/inventory.d.ts +4 -0
- package/dist/src/inventory.js +94 -0
- package/dist/src/java-compiler.d.ts +1 -0
- package/dist/src/java-compiler.js +110 -0
- package/dist/src/java-evidence.d.ts +2 -0
- package/dist/src/java-evidence.js +114 -0
- package/dist/src/java-runner.d.ts +1 -0
- package/dist/src/java-runner.js +79 -0
- package/dist/src/java.d.ts +25 -0
- package/dist/src/java.js +102 -0
- package/dist/src/jest-evidence.d.ts +2 -0
- package/dist/src/jest-evidence.js +117 -0
- package/dist/src/jest-runner.d.ts +1 -0
- package/dist/src/jest-runner.js +46 -0
- package/dist/src/jest.d.ts +2 -0
- package/dist/src/jest.js +36 -0
- package/dist/src/junit.d.ts +18 -0
- package/dist/src/junit.js +157 -0
- package/dist/src/laravel-evidence.d.ts +2 -0
- package/dist/src/laravel-evidence.js +175 -0
- package/dist/src/laravel-runner.d.ts +1 -0
- package/dist/src/laravel-runner.js +168 -0
- package/dist/src/laravel.d.ts +8 -0
- package/dist/src/laravel.js +50 -0
- package/dist/src/local-tool.d.ts +1 -0
- package/dist/src/local-tool.js +19 -0
- package/dist/src/mcp.d.ts +14 -0
- package/dist/src/mcp.js +362 -0
- package/dist/src/mutation.d.ts +118 -0
- package/dist/src/mutation.js +370 -0
- package/dist/src/mypy-evidence.d.ts +2 -0
- package/dist/src/mypy-evidence.js +63 -0
- package/dist/src/mypy.d.ts +2 -0
- package/dist/src/mypy.js +59 -0
- package/dist/src/node-reporter.d.ts +1 -0
- package/dist/src/node-reporter.js +28 -0
- package/dist/src/nuxt-evidence.d.ts +2 -0
- package/dist/src/nuxt-evidence.js +160 -0
- package/dist/src/nuxt-protocol.d.ts +52 -0
- package/dist/src/nuxt-protocol.js +29 -0
- package/dist/src/nuxt-runner.d.ts +1 -0
- package/dist/src/nuxt-runner.js +165 -0
- package/dist/src/nuxt.d.ts +24 -0
- package/dist/src/nuxt.js +105 -0
- package/dist/src/output.d.ts +3 -0
- package/dist/src/output.js +48 -0
- package/dist/src/phpstan-evidence.d.ts +2 -0
- package/dist/src/phpstan-evidence.js +81 -0
- package/dist/src/phpstan.d.ts +2 -0
- package/dist/src/phpstan.js +51 -0
- package/dist/src/phpunit-evidence.d.ts +2 -0
- package/dist/src/phpunit-evidence.js +53 -0
- package/dist/src/phpunit.d.ts +2 -0
- package/dist/src/phpunit.js +58 -0
- package/dist/src/pint-evidence.d.ts +2 -0
- package/dist/src/pint-evidence.js +79 -0
- package/dist/src/pint-runner.d.ts +1 -0
- package/dist/src/pint-runner.js +53 -0
- package/dist/src/pint.d.ts +2 -0
- package/dist/src/pint.js +37 -0
- package/dist/src/playwright-evidence.d.ts +2 -0
- package/dist/src/playwright-evidence.js +127 -0
- package/dist/src/playwright-reporter.d.ts +10 -0
- package/dist/src/playwright-reporter.js +37 -0
- package/dist/src/playwright-runner.d.ts +1 -0
- package/dist/src/playwright-runner.js +61 -0
- package/dist/src/playwright.d.ts +2 -0
- package/dist/src/playwright.js +35 -0
- package/dist/src/policy-pack.d.ts +21 -0
- package/dist/src/policy-pack.js +41 -0
- package/dist/src/pytest-evidence.d.ts +2 -0
- package/dist/src/pytest-evidence.js +116 -0
- package/dist/src/pytest-runner.d.ts +1 -0
- package/dist/src/pytest-runner.js +48 -0
- package/dist/src/pytest.d.ts +2 -0
- package/dist/src/pytest.js +25 -0
- package/dist/src/report-validation.d.ts +129 -0
- package/dist/src/report-validation.js +27 -0
- package/dist/src/review.d.ts +270 -0
- package/dist/src/review.js +349 -0
- package/dist/src/ruby.d.ts +2 -0
- package/dist/src/ruby.js +25 -0
- package/dist/src/ruff-evidence.d.ts +2 -0
- package/dist/src/ruff-evidence.js +99 -0
- package/dist/src/ruff.d.ts +2 -0
- package/dist/src/ruff.js +40 -0
- package/dist/src/runner.d.ts +8 -0
- package/dist/src/runner.js +117 -0
- package/dist/src/runtime-inventory.d.ts +112 -0
- package/dist/src/runtime-inventory.js +200 -0
- package/dist/src/rust-dep-info.d.ts +1 -0
- package/dist/src/rust-dep-info.js +46 -0
- package/dist/src/rust-evidence.d.ts +2 -0
- package/dist/src/rust-evidence.js +157 -0
- package/dist/src/rust-runner.d.ts +1 -0
- package/dist/src/rust-runner.js +161 -0
- package/dist/src/rust.d.ts +7 -0
- package/dist/src/rust.js +39 -0
- package/dist/src/sarif.d.ts +86 -0
- package/dist/src/sarif.js +113 -0
- package/dist/src/schemas.d.ts +393 -0
- package/dist/src/schemas.js +222 -0
- package/dist/src/staticcheck-evidence.d.ts +2 -0
- package/dist/src/staticcheck-evidence.js +75 -0
- package/dist/src/swift.d.ts +2 -0
- package/dist/src/swift.js +20 -0
- package/dist/src/task-store.d.ts +37 -0
- package/dist/src/task-store.js +349 -0
- package/dist/src/tool-versions.d.ts +3 -0
- package/dist/src/tool-versions.js +260 -0
- package/dist/src/types.d.ts +157 -0
- package/dist/src/types.js +37 -0
- package/dist/src/typescript-build-evidence.d.ts +2 -0
- package/dist/src/typescript-build-evidence.js +86 -0
- package/dist/src/typescript-build-runner.d.ts +1 -0
- package/dist/src/typescript-build-runner.js +132 -0
- package/dist/src/typescript-build.d.ts +2 -0
- package/dist/src/typescript-build.js +41 -0
- package/dist/src/typescript.d.ts +2 -0
- package/dist/src/typescript.js +54 -0
- package/dist/src/validation-task-worker.d.ts +1 -0
- package/dist/src/validation-task-worker.js +205 -0
- package/dist/src/validation-tasks-protocol.d.ts +69 -0
- package/dist/src/validation-tasks-protocol.js +57 -0
- package/dist/src/validation-tasks.d.ts +11 -0
- package/dist/src/validation-tasks.js +144 -0
- package/dist/src/vitest-evidence.d.ts +2 -0
- package/dist/src/vitest-evidence.js +112 -0
- package/dist/src/vitest-runner.d.ts +1 -0
- package/dist/src/vitest-runner.js +48 -0
- package/dist/src/vitest.d.ts +2 -0
- package/dist/src/vitest.js +36 -0
- package/dist/src/vue-router-capture.d.ts +42 -0
- package/dist/src/vue-router-capture.js +87 -0
- package/dist/src/vue-router-evidence.d.ts +2 -0
- package/dist/src/vue-router-evidence.js +126 -0
- package/dist/src/vue-router-protocol.d.ts +63 -0
- package/dist/src/vue-router-protocol.js +44 -0
- package/dist/src/vue-router-runner.d.ts +1 -0
- package/dist/src/vue-router-runner.js +88 -0
- package/dist/src/vue-router.d.ts +23 -0
- package/dist/src/vue-router.js +108 -0
- package/dist/src/vue-tsc-runner.d.ts +1 -0
- package/dist/src/vue-tsc-runner.js +24 -0
- package/dist/src/workspace.d.ts +7 -0
- package/dist/src/workspace.js +53 -0
- package/docs/ACCEPTANCE.md +56 -0
- package/docs/ACTIONLINT.md +112 -0
- package/docs/ARCHITECTURE-POLICY.md +82 -0
- package/docs/ARCHITECTURE.md +122 -0
- package/docs/CLANG.md +113 -0
- package/docs/CLIENTS.md +109 -0
- package/docs/CONTRACTS.md +73 -0
- package/docs/DEPENDENCIES.md +42 -0
- package/docs/DJANGO.md +70 -0
- package/docs/DOTNET.md +114 -0
- package/docs/ENVIRONMENTS.md +52 -0
- package/docs/ESLINT.md +68 -0
- package/docs/EVALUATION.md +124 -0
- package/docs/EXECUTION.md +250 -0
- package/docs/EXTERNAL-ADAPTERS.md +170 -0
- package/docs/EXTERNAL-EVALUATION.md +155 -0
- package/docs/EXTERNAL-RUFF-EVALUATION.md +85 -0
- package/docs/FASTAPI.md +73 -0
- package/docs/FINDING-POLICY.md +67 -0
- package/docs/GO-RACE.md +19 -0
- package/docs/GO-SCOPE.md +63 -0
- package/docs/GOLANGCI-LINT.md +64 -0
- package/docs/GUIDANCE.md +46 -0
- package/docs/IMPACT-MEASUREMENT.md +97 -0
- package/docs/INSTALLATION.md +102 -0
- package/docs/JAVA.md +79 -0
- package/docs/JEST.md +36 -0
- package/docs/JUNIT.md +31 -0
- package/docs/LANGUAGES.md +113 -0
- package/docs/LARAVEL.md +111 -0
- package/docs/MCP-COMPATIBILITY.md +68 -0
- package/docs/MUTATIONS.md +93 -0
- package/docs/MYPY.md +37 -0
- package/docs/NATIVE-CI.md +96 -0
- package/docs/NUXT.md +123 -0
- package/docs/PACK-DISTRIBUTION.md +98 -0
- package/docs/PERFORMANCE.md +71 -0
- package/docs/PEST.md +36 -0
- package/docs/PHPSTAN.md +48 -0
- package/docs/PHPUNIT.md +32 -0
- package/docs/PINT.md +41 -0
- package/docs/PLAN.md +265 -0
- package/docs/PLAYWRIGHT.md +73 -0
- package/docs/POLICY-PACKS.md +106 -0
- package/docs/PRIOR-WORKFLOW-EVALUATION.md +116 -0
- package/docs/PUBLICATION.md +28 -0
- package/docs/PYTEST.md +51 -0
- package/docs/RELEASE.md +115 -0
- package/docs/RENAMING.md +55 -0
- package/docs/REVIEW-EXCHANGE.md +136 -0
- package/docs/RUBY.md +50 -0
- package/docs/RUFF.md +39 -0
- package/docs/RUNTIME-INVENTORY.md +56 -0
- package/docs/RUST.md +74 -0
- package/docs/SARIF.md +64 -0
- package/docs/STATUS.md +530 -0
- package/docs/SWIFT.md +48 -0
- package/docs/TASK-STORAGE.md +141 -0
- package/docs/TOOL-IDENTITY.md +30 -0
- package/docs/TYPESCRIPT-BUILD.md +55 -0
- package/docs/VALIDATION-TASKS.md +119 -0
- package/docs/VITEST.md +36 -0
- package/docs/VUE-ROUTER.md +130 -0
- package/docs/VUE-TSC.md +26 -0
- package/docs/WORKSPACES.md +81 -0
- package/docs/licenses/nodable-entities-3.0.0.txt +21 -0
- package/docs/measurements/client-claude-before-schema-fix-darwin-arm64-node26.json +60 -0
- package/docs/measurements/client-claude-darwin-arm64-node26.json +55 -0
- package/docs/measurements/client-codex-darwin-arm64-node26.json +175 -0
- package/docs/measurements/evaluation-corpus-repo-verifier.json +332 -0
- package/docs/measurements/evaluation-darwin-arm64-node26.json +1236 -0
- package/docs/measurements/evaluation-linux-arm64-node22.json +1236 -0
- package/docs/measurements/external-eslint-darwin-arm64-node26.json +11866 -0
- package/docs/measurements/external-eslint-linux-arm64-node22.json +11866 -0
- package/docs/measurements/external-eslint-preservation.json +1527 -0
- package/docs/measurements/external-ruff-darwin-arm64-node26.json +1031 -0
- package/docs/measurements/external-ruff-linux-arm64-node22.json +1031 -0
- package/docs/measurements/hosted-ci-52ba415.json +1005 -0
- package/docs/measurements/impact-darwin-arm64-node26.json +6685 -0
- package/docs/measurements/impact-linux-arm64-node22.json +6690 -0
- package/docs/measurements/performance-darwin-arm64-node26.json +845 -0
- package/docs/measurements/performance-linux-arm64-node22.json +845 -0
- package/docs/measurements/required-native-profiles.json +500 -0
- package/package.json +72 -0
- package/packs/actionlint.json +8 -0
- package/packs/cpp.json +8 -0
- package/packs/dotnet.json +8 -0
- package/packs/go.json +7 -0
- package/packs/java.json +8 -0
- package/packs/javascript-node.json +7 -0
- package/packs/nuxt.json +7 -0
- package/packs/php-pest.json +7 -0
- package/packs/php-phpunit.json +7 -0
- package/packs/python-pytest.json +7 -0
- package/packs/ruby.json +7 -0
- package/packs/rust.json +7 -0
- package/packs/swift.json +7 -0
- package/packs/vue-router.json +7 -0
- package/packs/vue.json +11 -0
- package/schemas/actionlint-config.schema.json +19 -0
- package/schemas/architecture-policy.schema.json +51 -0
- package/schemas/architecture-report.schema.json +123 -0
- package/schemas/architecture-summary.schema.json +82 -0
- package/schemas/clang-database.schema.json +23 -0
- package/schemas/config.schema.json +69 -0
- package/schemas/contract-bundle.schema.json +78 -0
- package/schemas/contract-report.schema.json +114 -0
- package/schemas/contract-summary.schema.json +72 -0
- package/schemas/dependency-graph.schema.json +65 -0
- package/schemas/django-config.schema.json +16 -0
- package/schemas/dotnet-config.schema.json +60 -0
- package/schemas/external-manifest.schema.json +97 -0
- package/schemas/external-reference.schema.json +10 -0
- package/schemas/external-request.schema.json +56 -0
- package/schemas/external-result.schema.json +111 -0
- package/schemas/fastapi-config.schema.json +27 -0
- package/schemas/finding-baseline.schema.json +92 -0
- package/schemas/finding-comparison-summary.schema.json +95 -0
- package/schemas/finding-comparison.schema.json +121 -0
- package/schemas/guidance-context.schema.json +34 -0
- package/schemas/guidance-report.schema.json +176 -0
- package/schemas/guidance-summary.schema.json +68 -0
- package/schemas/java-config.schema.json +24 -0
- package/schemas/junit.schema.json +69 -0
- package/schemas/laravel-config.schema.json +11 -0
- package/schemas/mutation-recipe.schema.json +31 -0
- package/schemas/mutation-report.schema.json +238 -0
- package/schemas/mutation-summary.schema.json +98 -0
- package/schemas/nuxt-config.schema.json +51 -0
- package/schemas/plan-summary.schema.json +63 -0
- package/schemas/plan.schema.json +244 -0
- package/schemas/policy-pack.schema.json +41 -0
- package/schemas/report-summary.schema.json +100 -0
- package/schemas/report.schema.json +463 -0
- package/schemas/review-assessment.schema.json +133 -0
- package/schemas/review-context-summary.schema.json +31 -0
- package/schemas/review-context.schema.json +254 -0
- package/schemas/review-receipt-summary.schema.json +104 -0
- package/schemas/review-receipt.schema.json +271 -0
- package/schemas/review-selection.schema.json +30 -0
- package/schemas/runtime-comparison-summary.schema.json +68 -0
- package/schemas/runtime-comparison.schema.json +127 -0
- package/schemas/runtime-inventory.schema.json +99 -0
- package/schemas/vue-router-config.schema.json +67 -0
- 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.
|
package/docs/LARAVEL.md
ADDED
|
@@ -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.
|