@stsepelin/checktrail 0.1.0-alpha.3 → 0.1.0-alpha.5

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 (49) hide show
  1. package/README.md +13 -7
  2. package/dist/src/adapters.js +5 -1
  3. package/dist/src/architecture.d.ts +1 -1
  4. package/dist/src/contract-schema.d.ts +1 -1
  5. package/dist/src/contracts.d.ts +1 -1
  6. package/dist/src/evidence.js +3 -1
  7. package/dist/src/finding-policy-schema.d.ts +1 -1
  8. package/dist/src/go-build.d.ts +27 -0
  9. package/dist/src/go-build.js +113 -0
  10. package/dist/src/go-scope-policy.d.ts +11 -0
  11. package/dist/src/go-scope-policy.js +50 -0
  12. package/dist/src/go-scope.d.ts +1 -1
  13. package/dist/src/go-scope.js +42 -5
  14. package/dist/src/golangci-runner.js +5 -2
  15. package/dist/src/golangci.js +1 -0
  16. package/dist/src/output.js +8 -0
  17. package/dist/src/report-validation.d.ts +11 -0
  18. package/dist/src/runtime-inventory.d.ts +2 -2
  19. package/dist/src/schemas.d.ts +28 -0
  20. package/dist/src/schemas.js +22 -2
  21. package/dist/src/types.d.ts +7 -1
  22. package/dist/src/types.js +1 -1
  23. package/docs/ACCEPTANCE.md +11 -8
  24. package/docs/CLIENTS.md +6 -4
  25. package/docs/EXECUTION.md +7 -0
  26. package/docs/GO-BUILD.md +106 -0
  27. package/docs/GO-RACE.md +6 -2
  28. package/docs/GO-SCOPE.md +79 -5
  29. package/docs/GOLANGCI-LINT.md +5 -2
  30. package/docs/INSTALLATION.md +5 -4
  31. package/docs/LANGUAGES.md +11 -2
  32. package/docs/MCP-COMPATIBILITY.md +6 -0
  33. package/docs/ONBOARDING.md +3 -2
  34. package/docs/PUBLIC-ADOPTION.md +9 -5
  35. package/docs/RELEASE.md +107 -40
  36. package/docs/SETUP-SCOPES.md +107 -0
  37. package/docs/STATUS.md +48 -20
  38. package/docs/TYPESCRIPT.md +2 -2
  39. package/docs/measurements/go-scope-policy-replay.json +91 -0
  40. package/docs/measurements/release-alpha3.json +362 -0
  41. package/docs/measurements/release-alpha4.json +421 -0
  42. package/package.json +1 -1
  43. package/schemas/go-build-policy.schema.json +72 -0
  44. package/schemas/go-scope-policy.schema.json +31 -0
  45. package/schemas/plan-summary.schema.json +11 -1
  46. package/schemas/plan.schema.json +51 -0
  47. package/schemas/report-summary.schema.json +10 -0
  48. package/schemas/report.schema.json +51 -0
  49. package/server.json +2 -2
@@ -1,3 +1,7 @@
1
+ import { goBuildSelectionSchema } from "./go-build.js";
2
+ export { goBuildPolicySchema } from "./go-build.js";
3
+ import { goScopePolicySchema } from "./go-scope-policy.js";
4
+ export { goScopePolicySchema } from "./go-scope-policy.js";
1
5
  import { externalIdentitySchema } from "./external-adapter.js";
2
6
  export { externalManifestSchema, externalReferenceSchema, externalRequestSchema, externalResultSchema, } from "./external-adapter.js";
3
7
  export { actionlintConfigSchema } from "./actionlint.js";
@@ -124,6 +128,8 @@ export const reportSchema = z.strictObject({
124
128
  adapter: z.string(),
125
129
  project: z.string(),
126
130
  scope: strings,
131
+ goScope: goScopePolicySchema.optional(),
132
+ goBuild: goBuildSelectionSchema.optional(),
127
133
  status,
128
134
  reason: z.string(),
129
135
  processes: z.array(processResult),
@@ -161,7 +167,13 @@ export const reportSchema = z.strictObject({
161
167
  export const reportSummarySchema = z.strictObject({
162
168
  ...reportMetadata,
163
169
  selection: selectionSummary.optional(),
164
- checks: z.array(z.strictObject({ id: z.string(), status, tests: tests.optional() })),
170
+ checks: z.array(z.strictObject({
171
+ id: z.string(),
172
+ status,
173
+ tests: tests.optional(),
174
+ goExcludedFileCount: count.optional(),
175
+ goBuildTagCount: count.optional(),
176
+ })),
165
177
  });
166
178
  export const planSchema = z.strictObject({
167
179
  ...metadata,
@@ -182,6 +194,8 @@ export const planSchema = z.strictObject({
182
194
  adapter: z.string(),
183
195
  project: z.string(),
184
196
  scope: strings,
197
+ goScope: goScopePolicySchema.optional(),
198
+ goBuild: goBuildSelectionSchema.optional(),
185
199
  kind,
186
200
  parser: z.enum(PARSERS),
187
201
  commands: z.array(command),
@@ -197,7 +211,13 @@ export const planSummarySchema = z.strictObject({
197
211
  projectCount: count,
198
212
  adapters: strings,
199
213
  excludedCount: count,
200
- checks: z.array(z.strictObject({ id: z.string(), kind, ready: z.boolean() })),
214
+ checks: z.array(z.strictObject({
215
+ id: z.string(),
216
+ kind,
217
+ ready: z.boolean(),
218
+ goExcludedFileCount: count.optional(),
219
+ goBuildTagCount: count.optional(),
220
+ })),
201
221
  });
202
222
  export const junitImportSchema = z.strictObject({
203
223
  ...metadata,
@@ -1,6 +1,8 @@
1
+ import type { GoBuildSelection } from "./go-build.js";
2
+ import type { GoScopePolicy } from "./go-scope-policy.js";
1
3
  import type { ExternalIdentity } from "./external-adapter.js";
2
4
  import type { RuntimeInventory } from "./runtime-inventory.js";
3
- export declare const VERSION = "0.1.0-alpha.3";
5
+ export declare const VERSION = "0.1.0-alpha.5";
4
6
  export declare const PARSERS: readonly ["vue-router-json", "nuxt-json", "exit", "empty", "node-events", "unittest", "go-scope-test", "go-scope-analysis", "golangci-json", "staticcheck-json", "go-json", "typescript-build-json", "tsc-files", "eslint-json", "vitest-json", "playwright-json", "jest-json", "pytest-json", "fastapi-json", "django-json", "laravel-json", "rust-json", "clang-json", "java-json", "dotnet-json", "actionlint-json", "external-json", "ruby-syntax", "silent-syntax", "ruff-json", "mypy-json", "phpstan-json", "phpunit-junit", "pint-json"];
5
7
  export type Status = "passed" | "failed" | "unavailable" | "skipped" | "error" | "inconclusive";
6
8
  export type Outcome = "passed" | "failed" | "incomplete";
@@ -44,6 +46,8 @@ export interface ToolEvidence {
44
46
  path?: string;
45
47
  }
46
48
  export interface Check {
49
+ goScope?: GoScopePolicy;
50
+ goBuild?: GoBuildSelection;
47
51
  external?: ExternalIdentity;
48
52
  id: string;
49
53
  adapter: string;
@@ -115,6 +119,8 @@ export interface Finding {
115
119
  line?: number;
116
120
  }
117
121
  export interface CheckResult {
122
+ goScope?: GoScopePolicy;
123
+ goBuild?: GoBuildSelection;
118
124
  external?: ExternalIdentity & {
119
125
  tools?: {
120
126
  name: string;
package/dist/src/types.js CHANGED
@@ -1,4 +1,4 @@
1
- export const VERSION = "0.1.0-alpha.3";
1
+ export const VERSION = "0.1.0-alpha.5";
2
2
  export const PARSERS = [
3
3
  "vue-router-json",
4
4
  "nuxt-json",
@@ -7,7 +7,7 @@ separate states. Follow the linked evidence for tested versions and limits.
7
7
 
8
8
  | Milestone | Implemented scope and evidence | Open acceptance work |
9
9
  | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
10
- | M0: public contracts | Original public fixtures, MIT license, security/contribution guidance, schemas, explicit package allowlist, dependency notices and CI definitions. `STATUS.md`, `SECURITY.md`, `RELEASE.md`. | Public source, npm alpha.2 and its MCP Registry entry are published. Hosted CI passed at `4ce8398`; fresh registry installation was verified. |
10
+ | M0: public contracts | Original public fixtures, MIT license, security/contribution guidance, schemas, explicit package allowlist, dependency notices and CI definitions. `STATUS.md`, `SECURITY.md`, `RELEASE.md`. | Public source, npm alpha.4 and its MCP Registry entry are published. Hosted CI passed at `ebe7f5c`; fresh registry installation was verified. |
11
11
  | M1: executable foundation | Shared CLI/library/MCP engine, bounded inventory/runner, startup trust, native Node/Python/Go/PHP profiles, protocol and lifecycle regressions. `ARCHITECTURE.md`, `STATUS.md`, `MCP-COMPATIBILITY.md`. Fresh installed application-client profiles now have evidence in `CLIENTS.md`. | Application-client coverage beyond the named profiles. PHP remains unavailable when the consumer has no prepared runtime. |
12
12
  | M2: practical language validation | Explicit JS/TS, Python, Go and PHP native tool profiles, structured diagnostics/test evidence, versions, environments, workspace selection, scope accounting, SARIF/JUnit and finding ratchets. `LANGUAGES.md`, adapter documents, `WORKSPACES.md`, `FINDING-POLICY.md`, `NATIVE-CI.md`. | Hosted toolchain profiles passed at `52ba415`. Wider tool versions/framework configurations must be promoted separately; detection is not execution support. |
13
13
  | M3: framework/contracts | Native Laravel, Vue Router/Nuxt, Django/FastAPI assembly projections; imported runtime comparison, explicit architecture boundaries, producer/consumer schemas and a built package consumer. `RUNTIME-INVENTORY.md`, framework documents, `CONTRACTS.md`, `ARCHITECTURE-POLICY.md`, `examples/package-contract/README.md`. | Broader native semantics/import collection and live service integration are not implemented. Synthetic evidence does not establish equivalent results in a private application; private integration feedback must remain private. |
@@ -19,9 +19,11 @@ separate states. Follow the linked evidence for tested versions and limits.
19
19
  [Public adoption measurements](PUBLIC-ADOPTION.md) now cover five pinned
20
20
  JavaScript, TypeScript, Python, Go and PHP libraries. They expose an older
21
21
  TypeScript compiler-option incompatibility and workflow/documentation/platform
22
- coverage friction. An [unreleased compiler fix](TYPESCRIPT.md) now passes the
23
- known TypeScript 4.9.5 case; workflow/documentation and platform coverage remain
24
- follow-up work. The observations do not establish full upstream CI coverage or
22
+ coverage friction. The [alpha.3 compiler fix](TYPESCRIPT.md) now passes the
23
+ known TypeScript 4.9.5 case. [Setup guidance](SETUP-SCOPES.md) distinguishes
24
+ workflow/documentation coverage; the alpha.4 [Go scope policy](GO-SCOPE.md)
25
+ accounts for explicitly acknowledged native exclusions. Unreleased [per-check build-tag profiles](GO-BUILD.md)
26
+ add explicit tag selection; broader target coverage remains follow-up work. The observations do not establish full upstream CI coverage or
25
27
  general review effectiveness.
26
28
 
27
29
  1. Extend independently authored evaluation cohorts to additional implemented
@@ -51,10 +53,11 @@ run. The local worker/store are available independently; standard Tasks must sta
51
53
  unadvertised until routing and the integrated wire/lifecycle suite pass. See
52
54
  `MCP-COMPATIBILITY.md` for the reproduction and upstream issue.
53
55
 
54
- The public repository, npm preview `0.1.0-alpha.2` and its MCP Registry entry are
55
- published. The [hosted run at 4ce8398](https://github.com/stsepelin/checktrail/actions/runs/35590670960)
56
- passed all jobs, and fresh public installation was verified. Alpha.2 adds
57
- [setup commands](ONBOARDING.md). The [GitHub prerelease](https://github.com/stsepelin/checktrail/releases/tag/v0.1.0-alpha.2)
56
+ The public repository, npm preview `0.1.0-alpha.4` and its MCP Registry entry are
57
+ published. The [hosted run at ebe7f5c](https://github.com/stsepelin/checktrail/actions/runs/35603451711)
58
+ passed all jobs, and fresh public installation was verified. Alpha.4 adds
59
+ [explicit Go exclusions](GO-SCOPE.md) alongside [legacy compiler compatibility](TYPESCRIPT.md)
60
+ and the [setup commands](ONBOARDING.md). The [GitHub prerelease](https://github.com/stsepelin/checktrail/releases/tag/v0.1.0-alpha.4)
58
61
  is also published with the verified tarball and checksum. npm tag cleanup remains
59
62
  unresolved. The repository's explicit-action requirements still apply.
60
63
  `RELEASE.md` defines the concrete
package/docs/CLIENTS.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Application client compatibility
2
2
 
3
- The recorded snapshots below predate the Checktrail rename and retain their
4
- original package identities. A release candidate needs its own client checks;
5
- see [RENAMING.md](RENAMING.md).
3
+ The [alpha.4 release record](measurements/release-alpha4.json) repeats the named
4
+ profiles below against the exact published artifact. The original standalone
5
+ snapshots predate the Checktrail rename and retain their original identities.
6
+ A future release needs its own checks; see [RENAMING.md](RENAMING.md).
6
7
 
7
8
  The local package was installed offline into a fresh temporary consumer and tested
8
9
  with Claude Code 2.1.263 and Codex CLI 0.154.0 on macOS arm64, Node 26.8.1. These
@@ -106,4 +107,5 @@ The runtime digest identifies the installed `dist/src` tree independently.
106
107
 
107
108
  These local checks satisfy only the named client profiles. Claude Desktop,
108
109
  Cursor, VS Code integrations, other client versions and target operating systems
109
- remain unverified. No public package installation or hosted CI run is implied.
110
+ remain unverified. These original snapshots do not establish public installation or hosted CI;
111
+ alpha.4 publication and hosted evidence are recorded separately in [RELEASE.md](RELEASE.md).
package/docs/EXECUTION.md CHANGED
@@ -21,6 +21,13 @@ an unavailable runtime or external service does not count as verification.
21
21
 
22
22
  ## M2
23
23
 
24
+ - Alpha.5 candidate, unpublished: named per-check Go build-tag profiles with independent
25
+ exclusions, matching listing/execution settings, unchanged formatting scope,
26
+ strict missing/ambiguous assignment handling and summary privacy. Native
27
+ Go/Staticcheck/golangci-lint cases and CLI/library/MCP replay cover the selected
28
+ configuration; repeated-check and cross-target matrices remain pending.
29
+ See `GO-BUILD.md` and `examples/go-build`.
30
+
24
31
  - Implemented: explicit local TypeScript and ESLint adapters with file accounting.
25
32
  - Implemented: TypeScript project-reference solution validation using fresh
26
33
  in-memory declarations, source accounting and normalized compiler diagnostics.
@@ -0,0 +1,106 @@
1
+ # Go build-tag profiles (alpha.5 candidate)
2
+
3
+ The source checkout supports named build-tag profiles in module-local
4
+ `checktrail.go-build.json`. Published alpha.4 does not support this file. It
5
+ selects additional Go build constraints for each check and keeps that check's
6
+ exclusions explicit. It does not introduce cross-compilation or a target matrix.
7
+
8
+ ## Configure
9
+
10
+ Continue selecting checks in `checktrail.json`. A build profile does not enable
11
+ checks: `go.test-race`, Staticcheck and golangci-lint still need explicit selection.
12
+ Use the [runnable synthetic example](../examples/go-build/checktrail.go-build.json)
13
+ with [its check selection](../examples/go-build/checktrail.json), or configure:
14
+
15
+ ```json
16
+ {
17
+ "schemaVersion": 1,
18
+ "profiles": [
19
+ {
20
+ "name": "integration",
21
+ "tags": ["integration"],
22
+ "checks": ["go.vet", "go.test"],
23
+ "excludedFiles": []
24
+ }
25
+ ]
26
+ }
27
+ ```
28
+
29
+ Every selected native Go check must be assigned exactly one profile. Missing
30
+ assignments are unavailable; they never silently fall back to an untagged run.
31
+ Profile names and check assignments must be unique. A profile may share its tags
32
+ and exclusions across several checks; other profiles can use different settings.
33
+ Unselected checks are not executed, even if a profile names them. Each check runs
34
+ once. Repeating one check across several profiles is not implemented.
35
+
36
+ Tags are an array of distinct ASCII identifiers matching
37
+ `[A-Za-z_][A-Za-z0-9_]*`, each at most 64 characters, with at most 32 tags.
38
+ An empty array adds no tags. Profile names start with an ASCII letter and allow
39
+ letters, digits, underscores and hyphens, up to 64 characters. Up to five profiles
40
+ can assign the five supported native checks. Unknown fields, malformed JSON,
41
+ nonregular policy files and invalid exclusions make native checks unavailable.
42
+
43
+ Each profile has its own `excludedFiles`, using the exact paths and nonblank
44
+ reasons described in [Go scope](GO-SCOPE.md). Excluded files must still be
45
+ inventoried and confirmed by native `IgnoredGoFiles`. An active or stale exclusion
46
+ cannot pass. Listing a source file as excluded never suppresses an actual finding.
47
+ Do not combine this file with `checktrail.go-scope.json`; their overlapping policy
48
+ is rejected. To migrate, move exclusions into each applicable profile and remove
49
+ the old scope policy after reviewing the complete configuration.
50
+
51
+ ## Execution and evidence
52
+
53
+ Go listing, vet, tests and Staticcheck receive identical `-tags` settings within
54
+ each check. Race tests also keep `-race` in listing and execution. Golangci-lint
55
+ receives the profile tags in its generated configuration; its project's own
56
+ `run.build-tags` remains unsupported to avoid a second source of settings.
57
+ Existing protected Go settings, version checks and tool requirements still apply.
58
+
59
+ Formatting checks the full inventory once and ignores build profiles. Native
60
+ checks retain their whole inventory and reconcile selected and excluded files
61
+ separately. Tests still need a passing test in each package; test counts and
62
+ failures come from native events. A passing ordinary test does not cover a file
63
+ selected only by the race profile. An exclusion's reason is an operator statement,
64
+ not independent evidence that another check ran or covered it.
65
+
66
+ Detailed plans/reports add `goBuild` with the profile name and tags alongside
67
+ `goScope` with that profile's exclusions. Summary plans/reports expose only
68
+ `goBuildTagCount` and `goExcludedFileCount`; names, tags and reasons remain private
69
+ unless detailed output is enabled. Counts describe declarations, not proof of
70
+ execution. Older strict report-schema consumers must update before accepting the
71
+ new optional fields. The [policy schema](../schemas/go-build-policy.schema.json)
72
+ defines the data shape; planning also checks duplicate assignments and inventoried
73
+ file membership.
74
+
75
+ Planning reads data only. Execution still requires CLI/library/operator startup
76
+ trust. Policy files cannot set environment values or arbitrary command arguments.
77
+ Tags do not set `GOOS`, `GOARCH`, the compiler version or enable race instrumentation;
78
+ only the selected race check adds instrumentation. No unselected tag combinations
79
+ or other operating systems are claimed as validated.
80
+
81
+ ## Reproduce
82
+
83
+ From a built source checkout with Go and a supported race toolchain prepared:
84
+
85
+ ```sh
86
+ node dist/src/cli.js plan --root examples/go-build --detailed
87
+ node dist/src/cli.js run --root examples/go-build --trust-project --detailed --timeout-ms 120000
88
+ node --test dist/test/go-build.test.js
89
+ node scripts/verify-required-native-tests.mjs go
90
+ ```
91
+
92
+ The example's ordinary profile selects the integration test and acknowledges the
93
+ race-only test. The instrumented profile selects both. This demonstrates source
94
+ selection; the arithmetic example does not itself demonstrate race detection.
95
+ The separate [race regression](GO-RACE.md) exercises an actual data race.
96
+
97
+ The native regression suite exercises tagged compiler errors and assertions,
98
+ valid near misses, undeclared omissions, stale exclusions, missing assignments,
99
+ independent ordinary/race settings, analyzer diagnostics, nonexecuting planning,
100
+ summary privacy and CLI/MCP agreement. Standard schema checks cover the exported
101
+ policy and report shapes. Prepared CI requires these named cases to run; unavailable
102
+ native tools cannot satisfy the required profile.
103
+
104
+ References: [Go build constraints](https://pkg.go.dev/cmd/go#hdr-Build_constraints),
105
+ [Staticcheck CLI](https://staticcheck.dev/docs/running-staticcheck/cli/),
106
+ [golangci-lint configuration](https://golangci-lint.run/docs/configuration/file/).
package/docs/GO-RACE.md CHANGED
@@ -10,8 +10,12 @@ cost and requires the operator to select this check.
10
10
  The native fixture runs two workers repeatedly updating one shared counter. The
11
11
  unprotected version must fail with an actual `DATA RACE` diagnostic; atomic
12
12
  updates must pass and yield the exact combined count. A passing run cannot
13
- establish freedom from races on paths it did not execute. Native package/file evidence now makes excluded source and untested packages
14
- incomplete; see [Go scope](GO-SCOPE.md). A build/OS matrix is not implemented.
13
+ establish freedom from races on paths it did not execute. Native package/file evidence makes undeclared excluded source and untested packages
14
+ incomplete; see [Go scope](GO-SCOPE.md) for the explicit exclusion policy available since alpha.4.
15
+ Alpha.4 also passes `-race` to package listing so it uses the same build
16
+ constraints as the tests. The unpublished alpha.5 source candidate adds
17
+ [per-check build-tag profiles](GO-BUILD.md), allowing race and ordinary tests to
18
+ use different tags and exclusions. A build/OS matrix is not implemented.
15
19
 
16
20
  A supported Go race platform and C compiler are required. Compilation and runtime
17
21
  errors are retained in detailed output; no compiler, library or toolchain is
package/docs/GO-SCOPE.md CHANGED
@@ -1,15 +1,16 @@
1
1
  # Go scope and Staticcheck
2
2
 
3
- `go.vet`, `go.test`, `go.test-race` and `go.staticcheck` first run native
4
- `go list -json ./...`. A passing result requires the union of native Go, cgo and
5
- internal/external test source files to exactly match the inventoried Go files.
3
+ `go.vet`, `go.test`, `go.test-race`, `go.staticcheck` and `go.golangci-lint` first run
4
+ native `go list -json ./...`. The race profile includes `-race` in both listing and
5
+ test execution, so their build constraints agree. By default, a passing result
6
+ requires the union of native Go, cgo and internal/external test source files to
7
+ exactly match the inventoried Go files.
6
8
  Malformed package output, missing packages, duplicate/unexpected files and load
7
9
  errors prevent completeness. Real diagnostic/test failures retain their failure
8
10
  status even when scope is incomplete.
9
11
 
10
12
  Files excluded by build tags, OS/architecture suffixes or Go directory conventions
11
- remain unverified. The current policy has no build-matrix or per-file exception
12
- contract, so such projects are conservatively incomplete. This includes intentional
13
+ remain unverified. Without an explicit scope policy, such projects are conservatively incomplete. This includes intentional
13
14
  `testdata` Go files if they are inventoried but not compiled. Do not treat that as
14
15
  a source defect or remove valid platform-specific code to obtain a passing run.
15
16
 
@@ -26,6 +27,79 @@ programs. Cross-module workspace builds need a separate explicit profile. Native
26
27
  compiler/analyzer caches may be used; test result caching remains disabled.
27
28
  Dependencies and toolchains must be prepared separately.
28
29
 
30
+ ## Explicit exclusions (alpha.4 and later)
31
+
32
+ Alpha.4 adds `checktrail.go-scope.json` at each Go module root. Earlier releases
33
+ do not support this policy. Opt in only after reviewing
34
+ which files the intended native run leaves unverified:
35
+
36
+ ```json
37
+ {
38
+ "schemaVersion": 1,
39
+ "excludedFiles": [
40
+ {
41
+ "path": "platform_windows.go",
42
+ "reason": "Windows implementation; validated separately on its target"
43
+ }
44
+ ]
45
+ }
46
+ ```
47
+
48
+ Paths are exact, case-sensitive, module-relative inventoried `.go` files. Globs,
49
+ parent traversal, absolute paths, duplicate entries, blank reasons, unknown fields,
50
+ missing files and symlink/directory policy files are rejected. An empty list keeps
51
+ strict coverage. Planning only reads this file; native commands still require
52
+ operator trust. A reason records the operator's statement, not proof of another run.
53
+ The schema is [go-scope-policy.schema.json](../schemas/go-scope-policy.schema.json).
54
+
55
+ For each selected native check, every declared file must appear in Go's
56
+ `IgnoredGoFiles`, and every other inventoried Go file must appear exactly once in
57
+ its selected source lists. An exemption becomes stale if its file disappears or
58
+ becomes selected. New omissions, duplicate/contradictory native entries, malformed
59
+ or interrupted output remain incomplete. A whole package excluded from `./...`,
60
+ `testdata`, dot/underscore files and arbitrary unlisted files cannot be excused by
61
+ this policy unless native package evidence accounts for them as ignored Go files.
62
+
63
+ The same policy applies to vet, tests, race tests, Staticcheck and golangci-lint.
64
+ A file ignored by ordinary tests may be selected under `-race`; one shared
65
+ exemption then cannot pass both profiles. Do not exempt active code to suppress a
66
+ diagnostic. Real diagnostics/test failures still fail. Every tested package still
67
+ needs a passing test; exempted source supplies no test evidence. Formatting ignores
68
+ the scope policy and checks every inventoried Go file.
69
+
70
+ Detailed plans and reports retain the declarations as `goScope`; the original
71
+ `scope` remains the complete inventory. A passing native check covers that scope
72
+ minus its reconciled exemptions. Summary plans and reports expose
73
+ `goExcludedFileCount` without paths or reasons. This is the number declared, even
74
+ on an incomplete or unexecuted plan; it does not independently establish that the
75
+ exemptions reconciled. Other-platform and excluded build-tag behavior is unverified.
76
+
77
+ This policy does not introduce build-tag flags, cross-compilation, cross-target
78
+ test execution or a build matrix. Use separately prepared native target runs for
79
+ coverage outside the selected profile. Existing protected Go settings stay intact.
80
+
81
+ The source checkout separately adds [per-check build-tag profiles](GO-BUILD.md).
82
+ They use their own per-profile exclusions and cannot coexist with this module-wide
83
+ policy. That capability is in the unpublished alpha.5 candidate; alpha.4 retains the behavior above.
84
+
85
+ ## Known-case replay
86
+
87
+ The [pinned public UUID replay](measurements/go-scope-policy-replay.json) uses the
88
+ same upstream revision as the alpha.2 adoption exercise, with an unreleased packed
89
+ CLI/library/MCP. Default scope remains inconclusive for vet/tests. Explicitly
90
+ acknowledging `node_js.go` makes those selected native checks pass while retaining
91
+ the skipped test and the existing formatting failure. An injected failing test
92
+ still fails through all three surfaces. The JavaScript-target file is unverified;
93
+ this is a known-case regression replay, not independent effectiveness evidence.
94
+ The upstream tracked files and original policy were preserved; temporary scope
95
+ policy and failing control were removed. The record identifies the tested tarball
96
+ and runtime source hashes; adding this record changes later package bytes.
97
+
98
+ The exact alpha.4 release candidate repeated this replay before publication; see
99
+ the [release record](measurements/release-alpha4.json). Its synthetic upgrade test
100
+ also confirms that rolling back to alpha.3 preserves the policy file but restores
101
+ strict scope accounting: a project relying on exclusions becomes incomplete.
102
+
29
103
  ## Staticcheck
30
104
 
31
105
  Select `go.staticcheck` explicitly. It requires the installed `staticcheck`
@@ -14,8 +14,8 @@ linters:
14
14
  enable: [govet, staticcheck, unused]
15
15
  ```
16
16
 
17
- Other linters, nonempty custom settings, formatters and Go build-version/tag
18
- profiles are incomplete until separately verified. This is deliberately a
17
+ Other linters, nonempty custom settings, formatters and Go version/tag overrides
18
+ in `.golangci.*` are incomplete until separately verified. This is deliberately a
19
19
  constrained profile, not support for every golangci-lint configuration. YAML
20
20
  duplicates, unsupported tags and excessive aliases are rejected. Planning only
21
21
  discovers the local config and source; parsing/native execution occurs with trust.
@@ -27,6 +27,9 @@ read-only module resolution, absolute JSON locations and no extra output files.
27
27
  Output and native analyzer cache use a fresh temporary directory, removed after
28
28
  normal completion. Existing project config and output paths are not rewritten.
29
29
  Native Go source accounting follows [the shared contract](GO-SCOPE.md).
30
+ The alpha.5 source candidate adds [Checktrail build-tag profiles](GO-BUILD.md).
31
+ Those tags are passed to both package listing and the generated native config;
32
+ `.golangci.*` still cannot supply a separate `run.build-tags` setting.
30
33
 
31
34
  Native `nolint` and Staticcheck ignore directives are currently unsupported and
32
35
  make the check incomplete. The wrapper scans Go comment boundaries, including
@@ -1,10 +1,11 @@
1
1
  # Install the preview
2
2
 
3
- The published preview is `0.1.0-alpha.2` on
3
+ The published preview is `0.1.0-alpha.4` on
4
4
  [npm](https://www.npmjs.com/package/@stsepelin/checktrail).
5
- Use the exact version below. `next` points to alpha.2; `latest` still points to
5
+ Use the exact version below. `next` points to alpha.4; `latest` still points to
6
6
  alpha.1 because npm rejected its removal. Neither tag implies a stable release.
7
- Alpha.2 includes [project setup and diagnosis](ONBOARDING.md).
7
+ Alpha.4 includes [project setup and diagnosis](ONBOARDING.md), the
8
+ [TypeScript compatibility fix](TYPESCRIPT.md), and explicit [Go scope exclusions](GO-SCOPE.md).
8
9
 
9
10
  Use Node.js 22 or newer on macOS or Linux. Windows execution is not supported.
10
11
  Install each project's compilers, linters and test runners separately; Checktrail
@@ -18,7 +19,7 @@ Skills install separately from the engine and MCP configuration.
18
19
  Install the exact version once:
19
20
 
20
21
  ```sh
21
- npm install --global --ignore-scripts @stsepelin/checktrail@0.1.0-alpha.2
22
+ npm install --global --ignore-scripts @stsepelin/checktrail@0.1.0-alpha.4
22
23
  checktrail --version
23
24
  ```
24
25
 
package/docs/LANGUAGES.md CHANGED
@@ -118,10 +118,19 @@ the optional skips allowed by a developer's general test suite.
118
118
 
119
119
  [Public adoption measurements](PUBLIC-ADOPTION.md) record alpha.2 on pinned
120
120
  JavaScript, TypeScript, Python, Go and PHP libraries. TypeScript 4.9.5 rejects
121
- the adapter's `--noCheck` option; this older version is not verified support.
121
+ alpha.2's `--noCheck` option; that published artifact does not support this profile.
122
122
  Go platform exclusions remain inconclusive even when native tests exit zero.
123
123
 
124
- The unreleased [TypeScript compatibility fix](TYPESCRIPT.md) exercises plain
124
+ The alpha.3 [TypeScript compatibility fix](TYPESCRIPT.md) exercises plain
125
125
  TypeScript 4.9.5 and 6.0.3 using native capability-aware arguments. Published
126
126
  alpha.2 retains the recorded older-compiler limitation; Vue and solution-build
127
127
  profiles retain their separately verified versions.
128
+
129
+ Alpha.4 adds a [Go scope policy](GO-SCOPE.md) for exact,
130
+ native-confirmed ignored files. It retains unverified exclusions in reports and
131
+ does not claim a build matrix or add custom build-tag execution. Published alpha.3
132
+ keeps the original strict exclusion behavior.
133
+
134
+ The alpha.5 source candidate adds [Go build-tag profiles](GO-BUILD.md) for
135
+ per-check tags and exclusions across vet, tests, race tests, Staticcheck and
136
+ golangci-lint. This is one configuration per selected check, not a target matrix.
@@ -46,6 +46,12 @@ extension handlers run. This was reproduced locally; `tasks/update` reaches its
46
46
  handler in the same probe. Upstream tracks the method-registry collision in
47
47
  [typescript-sdk#2598](https://github.com/modelcontextprotocol/typescript-sdk/issues/2598).
48
48
 
49
+ Rechecked on 2026-09-21: npm's latest server/client SDK versions are still 2.0.0,
50
+ the local probe still returns `-32601` for get/cancel and reaches update, and the
51
+ [proposed upstream fix](https://github.com/modelcontextprotocol/typescript-sdk/pull/2599)
52
+ remains open. The package retains its pinned SDK; no transport interception or
53
+ protocol workaround is introduced.
54
+
49
55
  Run `npm run probe:mcp-tasks` from the source checkout to repeat the routing probe. Exit `2` means one or
50
56
  more handlers were unreachable; exit `0` means routing works. A routing success
51
57
  does not establish Tasks conformance. The probe is separate from the ordinary
@@ -1,12 +1,13 @@
1
1
  # Project setup
2
2
 
3
- These commands are available in `0.1.0-alpha.2`. Follow the
3
+ These commands are available since `0.1.0-alpha.2`. Follow the
4
4
  [installation guide](INSTALLATION.md), with Node.js 22+ on macOS/Linux.
5
5
 
6
6
  [Public adoption observations](PUBLIC-ADOPTION.md) show setup on real libraries,
7
7
  including nested documentation projects, workflow prerequisites and older compiler
8
8
  limitations. A narrowed policy can pass its selected checks while leaving other
9
- repository checks unverified.
9
+ repository checks unverified. The [setup scope walkthrough](SETUP-SCOPES.md)
10
+ shows how to inspect those boundaries and interpret an intentionally narrowed policy.
10
11
 
11
12
  ## Preview and create a policy
12
13
 
@@ -55,13 +55,17 @@ operations were checked against the project tree.
55
55
  These are recorded adoption gaps, not fixes applied to the immutable alpha.2
56
56
  package. No new engine version is published by this exercise.
57
57
 
58
- ## Unreleased follow-up
58
+ ## Release follow-ups
59
59
 
60
- The [compiler compatibility fix](TYPESCRIPT.md) now passes a known-case mitt replay
61
- with TypeScript 4.9.5 through a locally packed CLI, library and MCP. The observations
60
+ The [compiler compatibility fix](TYPESCRIPT.md) is published in alpha.3. Its exact
61
+ release artifact passes the known-case mitt replay with TypeScript 4.9.5 through
62
+ the CLI, library and MCP; see [release verification](RELEASE.md). The observations
62
63
  above still describe published alpha.2; they are not replaced by the fixed source
63
- checkout's results. Workflow/documentation setup and Go platform coverage remain
64
- separate work.
64
+ checkout's results. The [setup scope guide](SETUP-SCOPES.md) explains omitted workflows and documentation.
65
+ Alpha.4 publishes the [Go scope policy](GO-SCOPE.md) for exact native-confirmed
66
+ exclusions. Its [release record](measurements/release-alpha4.json) repeats the known
67
+ UUID case with the exact artifact later published; the excluded JavaScript target stays unverified.
68
+ A target matrix remains separate work.
65
69
 
66
70
  ## Reproduce
67
71