@research-engineering/agentic-proofkit 0.1.157 → 0.1.159

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 CHANGED
@@ -25,10 +25,16 @@ admission, and rollout approval belong in consuming repositories.
25
25
  Run before proposing a non-trivial change:
26
26
 
27
27
  ```bash
28
+ npm ci --ignore-scripts
29
+ npx playwright install chromium firefox webkit
28
30
  npm run check
29
31
  git diff --check
30
32
  ```
31
33
 
34
+ The browser engine installation is a one-time prerequisite for the pinned
35
+ rendered-runtime gate. CI installs the same engines with their Linux system
36
+ dependencies before running that gate.
37
+
32
38
  If your local project uses Bun, `bun run check` is acceptable as a convenience
33
39
  runner only when it invokes the same scripts and leaves `npm run check`
34
40
  equivalent. Release and package-authority proof remains npm-owned.
package/README.md CHANGED
@@ -154,7 +154,7 @@ agentic-proofkit repo-profile-admission --help
154
154
 
155
155
  Command-specific help is derived from the private command descriptor table and
156
156
  does not read stdin. The full machine-readable command inventory remains
157
- `proofkit/cli-contract.v1.json`; the human route map is
157
+ `proofkit/cli-contract.v2.json`; the human route map is
158
158
  `docs/proofkit-contract-map.md`.
159
159
 
160
160
  | Repository state | Minimal first route | Stop condition |
@@ -165,6 +165,16 @@ does not read stdin. The full machine-readable command inventory remains
165
165
  | Current code must be audited before it becomes a contract | `capability-map-admission` with `trustMode: "audit_from_code"` | Stop at owner questions and candidate-only records |
166
166
  | Legacy repository has local proof infrastructure | `migration-parity-admission`, then `migration-plan` | Stop before deleting local proof owners without parity evidence |
167
167
  | A change set needs bounded checks | `changed-path-set`, optional `impact`, then `selective-gate-plan` and `selective-gate-evidence` | Stop on unknown scope, missing routes, or stale receipts |
168
+ | An agent needs only one specification subtree | `requirement-context-compose --repo-root . --input context-catalog.json`, then `requirement-context-slice` | Stop before treating a bounded slice as complete repository truth |
169
+ | A human needs semantic navigation, comparison, or traceability | `requirement-browser-server --view workspace --serve` over an admitted workspace input | Browser output, annotations, diff, and graph remain derived and non-authoritative |
170
+
171
+ JSON commands default to readable output. Agents can request the same JSON
172
+ value with lower transport overhead by placing the process option before the
173
+ command:
174
+
175
+ ```bash
176
+ agentic-proofkit --json-layout compact requirement-context-slice --input slice-input.json
177
+ ```
168
178
 
169
179
  Use `secret-scan` only when the caller provides an explicit file inventory with
170
180
  content. It is a dedicated secret-like text detector for admitted inventory
@@ -9,7 +9,7 @@ Owner: `proofkit`.
9
9
  This map helps consuming repositories choose the smallest Proofkit CLI command
10
10
  or JSON contract without loading the full README or source tree. It is not an
11
11
  exhaustive schema reference. The canonical command inventory is
12
- `proofkit/cli-contract.v1.json`.
12
+ `proofkit/cli-contract.v2.json`.
13
13
 
14
14
  Formal rule:
15
15
 
@@ -47,7 +47,7 @@ owner boundaries. It is not a second command-family inventory.
47
47
  | Receipts and producers | `proof-receipt-admission`, `receipt-producer-admission`, `receipt-currentness-scope`, `receipt-trust-class`, `producer-policy-self-proof` | receipt sets, producer policy, scope/currentness facts, trust classes | receipt shape, producer/receipt compatibility, self-proof diagnostics | producer authentication, freshness policy, CI trust roots | receipt/provenance report |
48
48
  | Release and deployment | `release-authority`, `external-consumer`, `registry-consumer-proof-input-compose`, `registry-consumer`, `deployment-evidence-admission`, `completion-criteria`, `branch-authority`, `readiness-closeout` | package facts, tarball/registry facts, explicit primitive registry/install/smoke facts, deployment evidence, criteria, branch facts | artifact/channel boundary checks, registry-consumer input composition, release diagnostics, falsifiable criteria shape | package publication, registry fetch, package-manager execution, deployment, rollback, approval | composed input, release/deployment/readiness report |
49
49
  | Supply-chain and quality | `self-check`, release workflow, `npm run release:sbom`, `npm run self:coverage`, `npm run go:actionlint`, `npm run go:bench` | release artifacts, source workflows, specs, bindings, witness plans, explicit benchmark invocation | deterministic self-check report shape, SBOM candidate evidence, coverage metrics, workflow lint routing, benchmark entrypoints | public-source provenance, vulnerability triage, license approval, CI run admission, release approval | self-check report, SBOM, metrics report, CI signal, or benchmark output |
50
- | Repository structure | `repo-profile-admission`, `workspace-manifest-facts`, `workspace-registry`, `workspace-changed-package-plan`, `workspace-shard-partition`, `typescript-public-api-surfaces`, `text-policy`, `secret-scan`, `package-runtime-dependency-admission` | explicit repo/profile facts, caller-owned manifest records, caller-owned roots, caller-owned text file inventories, optional `environmentClassPolicies` tuples | structural admission, manifest-to-workspace fact projection, workspace graph projections, TypeScript package public API checks, text policy admission, explicit-inventory secret-like text detection, shard plans | repository freshness, git/file discovery, command policy, package manager truth, provider secret scanning | structural, fact, policy, or planning report |
50
+ | Repository structure | `repo-profile-admission`, `workspace-manifest-facts`, `workspace-registry`, `workspace-changed-package-plan`, `workspace-shard-partition`, `typescript-public-api-surfaces`, `text-policy`, `secret-scan`, `package-runtime-dependency-admission` | explicit repo/profile facts, caller-owned manifest records, caller-owned roots, caller-owned text file inventories, explicit TypeScript package-manifest and per-condition source paths, optional `environmentClassPolicies` tuples | structural admission, manifest-to-workspace fact projection, workspace graph projections, bounded TypeScript package public API checks over referenced files, text policy admission, explicit-inventory secret-like text detection, shard plans | repository freshness, git/file discovery, compiler output provenance, command policy, package manager truth, provider secret scanning | structural, fact, policy, or planning report |
51
51
  | Custom and generated artifacts | `custom-rule-boundary`, `document-lifecycle-boundary`, `rendered-artifact-freshness`, `conformance-profile`, `json-report-cli-adapter-source`, `witness-plan`, `witness-scheduler-plan` | custom rule metadata, document lifecycle records, artifact digests, profile manifests, command metadata, adapter language | boundary checks, generated-view freshness shape, deterministic adapter source generation, scheduler metadata checks | rule execution, document meaning, cache contents, CI scheduling, committed generated-source freshness | boundary report, generated source artifact, or scheduler report |
52
52
  | CLI metadata | `help` | optional command name or help flag | built-in command catalog and help text routing | command selection, semantic proof, freshness, merge policy | text help only |
53
53
 
@@ -92,7 +92,7 @@ returns deterministic JSON from explicit caller-owned facts; the envelope is an
92
92
  opt-in derived projection over the same report. This map explains the route
93
93
  families without becoming an execution, freshness, or merge decision.
94
94
  The exact route input vocabulary is machine-readable in
95
- `proofkit/cli-contract.v1.json` under `agent-route.inputContract`; the Go
95
+ `proofkit/cli-contract.v2.json` under `agent-route.inputContract`; the Go
96
96
  admission implementation and shipped CLI contract are parity-tested.
97
97
 
98
98
  Formal rule:
@@ -107,6 +107,10 @@ goal plus caller-owned state
107
107
 
108
108
  Decision tree:
109
109
 
110
+ Semantic context routes are `requirement-context-compose`,
111
+ `requirement-context-slice`, `requirement-semantic-diff`, and
112
+ `requirement-traceability-graph`.
113
+
110
114
  | State or goal | Next Proofkit route | Stop or escalation condition |
111
115
  |---|---|---|
112
116
  | The agent does not know where to start. | `init` or `init --preset fresh|code-baseline|code-audit|legacy|change-set` | Treat output as dry-run route guidance only. Stop before scanning, writing files, or making requirements authoritative. |
@@ -116,14 +120,15 @@ Decision tree:
116
120
  | Temporary external design, implementation-plan, PR, code, or test observations may contain durable requirements. | `requirement-authoring-plan` | Treat output as candidate-only; stop before writing `requirements.v1.json`, retaining temporary documents, or claiming requirement meaning. |
117
121
  | Requirement records exist. | `requirement-source-admission`; use `requirement-source-transition` for lifecycle changes. | Escalate when blocking requirements lack proof routes or lifecycle replacement ids are incomplete. |
118
122
  | Humans or agents need meta/module/submodule navigation. | `requirement-spec-tree`, then `requirement-spec-tree-view` or `requirement-browser-server --view spec-tree` from the same caller-owned tree input. | Stop before inferring hierarchy from paths. The consumer owns source hierarchy; CLI/browser outputs remain presentation only and are not committed by default. |
123
+ | An agent needs a bounded semantic subset instead of whole specification files. | `requirement-context-compose --repo-root <caller-selected-root>` over an explicit catalog, then `requirement-context-slice` over the materialized snapshot. | The snapshot and slice are content-bound derived projections. Stop before inferring hierarchy, scanning ambient paths, treating omissions as absence, or promoting the slice to requirement, proof, freshness, or merge authority. |
119
124
  | Overview prose may contain durable claims. | `spec-overview-claims` | Escalate when normative claims are not tied to `REQ-*` records. |
120
125
  | Requirements have no verified proof route. | `requirement-bindings`, `witness-plan` from either an explicit `witness_command_catalog` or a complete `binding_witness_plan_input`, `proof-slice`, or `requirement-proof-resolver` | Stop before claiming proof adequacy; native witness semantics stay with the consumer. A binding-derived witness plan still needs caller-owned vocabulary and conservative command policy. |
121
126
  | Tests or proof evidence need inventory. | `test-evidence-inventory`; use `--projection discovery-draft` only for explicit discovered-test facts, then `requirement-coverage-input-compose` when an aggregate `coverage_compose_input` exists, then `requirement-coverage-view` when a `coverage_view_input` exists | Compose only from explicit caller-owned facts. Discovery drafts are candidate-only and cannot close coverage. Use `failureClassifications[]`, `warningClassifications[]`, and `agentActionPlan[]` for machine routing. Escalate when tests are route-only, weak-oracle, unbound, or outside the caller-owned coverage universe. |
122
127
  | A change set is known. | `changed-path-set`, optionally `requirement-impact-input-compose`, `impact`, then `selective-gate-plan --agent-envelope` | Raw `knownChangedPaths` in `agent-route` are diagnostic only. Materialize a caller-owned `changed_path_set`, compose a caller-owned `impact_input` before `impact`, and compose a caller-owned `selective_gate_plan_input` before `selective-gate-plan`. Use `scanObligation` to name whether a `text-policy`, `secret-scan`, or caller-owned external scanner is required. Fail closed on unknown scope, dynamic edges, missing owner routes, unbound proof-like paths, or full-gate escalation. |
123
128
  | Caller-owned file contents need secret-like text detection. | `secret-scan` | Provide explicit sorted file inventory with content. Stop before claiming repository-wide discovery, credential validity, provider ingestion, merge readiness, or replacement of GitHub secret scanning. |
124
- | Does a TypeScript package public API match a caller-owned manifest? | `agent-route` with `goal: "verify_typescript_public_api"` and explicit `typescript_public_api_manifest` plus `typescript_public_api_repo_root`, then `typescript-public-api-surfaces --repo-root <caller-selected-root>` | This is an explicit filesystem scanner. Stop before guessing `repo-root`, claiming checkout freshness, package-manager truth, or merge readiness. |
129
+ | Does a TypeScript package public API match a caller-owned manifest? | `agent-route` with `goal: "verify_typescript_public_api"` and explicit `typescript_public_api_manifest` plus `typescript_public_api_repo_root`, then `typescript-public-api-surfaces --repo-root <caller-selected-root>` | The manifest must name each referenced `package.json`, sorted-unique export conditions, and a non-JSX `.ts`, `.mts`, or `.cts` `sourcePath` whose canonical target has the same admitted extension class. The bounded scanner accepts only the fail-closed export grammar in `proofkit/cli-contract.v2.json`; it does not parse unrestricted TypeScript or TSX, infer conventional layouts, or prove compiler output provenance, checkout freshness, package-manager truth, or merge readiness. |
125
130
  | Receipts are available for planned checks. | `selective-gate-evidence --agent-envelope`; then materialize a caller-owned `obligation_decision_input` from the evidence output plus command routes, currentness, and trust facts; then run `selective-gate-obligation-decision-input`; then materialize the resulting `obligation_decision` input and run `obligation-decision --agent-envelope` | Escalate on missing, stale, invalid, untrusted, blocked, unavailable, or unknown-scope evidence. |
126
- | Human inspection is needed. | `requirement-source-view`, `requirement-proof-view`, `requirement-coverage-view`, `requirement-spec-tree-view`, or `requirement-browser-server` | `agent-route` emits browser commands as plan-only by default. Use `browserMode: "serve_local_view"` for `--serve` and `openBrowser: true` for `--open`. Rendered HTML and Markdown are presentation only unless the consumer admits a tracked artifact freshness gate. |
131
+ | Human inspection, semantic comparison, or traceability navigation is needed. | `requirement-source-view`, `requirement-proof-view`, `requirement-coverage-view`, `requirement-spec-tree-view`, `requirement-semantic-diff`, `requirement-traceability-graph`, or `requirement-browser-server` | Semantic diff compares admitted owner fields rather than lines. Traceability keeps specification, proof, code, and native execution evidence planes separate. Browser and rendered outputs remain presentation only unless the consumer admits a tracked artifact freshness gate. |
127
132
  | Temporary external document lifecycle facts, generated views, or rendered views need authority classification. | `document-lifecycle-boundary` | Treat lifecycle records as caller-owned metadata. Temporary design docs and implementation plans are not retained repository authority unless rewritten into deterministic specs, proof bindings, tests, package-public docs, or backlog rows. |
128
133
  | A JavaScript/TypeScript consumer needs less wrapper code. | `json-report-cli-adapter-source --language typescript --format json` | Generated adapter source is caller-owned after materialization. The consumer still owns package pin, binary path, repo paths, local policy, and freshness proof. It is a CLI runner adapter, not a separate SDK authority. |
129
134
  | A Python consumer needs Proofkit from Python tooling. | Install the Python package when available and invoke the same CLI/JSON contract. | The Python package is a runner wrapper over the Go CLI, not a Python SDK or alternate schema owner. |
@@ -133,7 +138,7 @@ Decision tree:
133
138
 
134
139
  ## Routing Rules
135
140
 
136
- 1. Start from `proofkit/cli-contract.v1.json` when a machine needs the exact
141
+ 1. Start from `proofkit/cli-contract.v2.json` when a machine needs the exact
137
142
  command, flags, input mode, output mode, scope class, or `agent-route` input
138
143
  contract.
139
144
  2. Start from this map when a human or agent only needs the correct command
@@ -13,22 +13,27 @@ denial, and package artifact behavior only.
13
13
  - `REQ-PROOFKIT-PACKAGE-002`: the CLI builds deterministic reports, plans,
14
14
  generated source artifacts, and policy-admission results from explicit
15
15
  caller-owned JSON, declared no-input command parameters, or declared explicit
16
- scanner scope classes without executing native witnesses, scanning implicit
17
- repository state, deciding proof freshness, or accepting broad caller-supplied
18
- phrase suppressors that can hide readiness overclaims.
16
+ scanner scope classes. Explicit scanners consume only caller-named bounded
17
+ canonical files under documented fail-closed grammars rather than guessing
18
+ layouts or silently accepting unsupported syntax; no command executes native
19
+ witnesses, scans implicit repository state, decides proof freshness, or accepts
20
+ broad caller-supplied phrase suppressors that can hide readiness overclaims.
19
21
  - `REQ-PROOFKIT-PACKAGE-003`: the root package remains installable and
20
22
  executable by an outside consumer on the current native platform without
21
23
  claiming registry publication.
22
24
  - `REQ-PROOFKIT-PACKAGE-004`: CI package-gate receipts used as merge evidence
23
25
  are admitted through a declared producer policy and proof-receipt shape
24
26
  validator instead of current-build output alone.
25
- - `REQ-PROOFKIT-PACKAGE-005`: the Go source, static analysis, package gate,
26
- and vulnerability gates remain the native merge-critical quality floor for
27
- the current Proofkit source tree.
27
+ - `REQ-PROOFKIT-PACKAGE-005`: tracked source hygiene covers each admitted text
28
+ language in staged blobs and the current worktree; Go formatting, static
29
+ analysis, test, package, and vulnerability gates remain the native
30
+ merge-critical quality floor and explicitly provision every runtime required
31
+ by a merge-critical oracle.
28
32
  - `REQ-PROOFKIT-PACKAGE-006`: Python/uv distribution is a platform wheel
29
33
  wrapper over the same Go CLI, with wheel-safe package metadata, wheel tags,
30
- embedded binary identity, local install smoke proof, and explicit non-claims
31
- until PyPI publication.
34
+ embedded binary identity, local install smoke proof, POSIX exec
35
+ process-identity and signal preservation, and explicit non-claims until PyPI
36
+ publication.
32
37
  - `REQ-PROOFKIT-PACKAGE-007`: package-public Markdown records release-channel
33
38
  state only and must not embed exact per-version provider facts that are owned
34
39
  by immutable registry, release, and manifest artifacts.
@@ -35,7 +35,7 @@
35
35
  {
36
36
  "requirementId": "REQ-PROOFKIT-PACKAGE-002",
37
37
  "ownerId": "proofkit.package-boundary",
38
- "invariant": "The CLI builds deterministic reports, plans, generated source artifacts, and policy-admission results from explicit caller-owned JSON, declared no-input command parameters, or declared explicit scanner scope classes without executing native witnesses, scanning implicit repository state, deciding proof freshness, or accepting broad caller-supplied phrase suppressors that can hide readiness overclaims.",
38
+ "invariant": "The CLI builds deterministic reports, plans, generated source artifacts, and policy-admission results from explicit caller-owned JSON, declared no-input command parameters, or declared explicit scanner scope classes; explicit scanners consume only caller-named bounded canonical files under documented fail-closed grammars rather than guessing layouts or silently accepting unsupported syntax, and no command executes native witnesses, scans implicit repository state, decides proof freshness, or accepts broad caller-supplied phrase suppressors that can hide readiness overclaims.",
39
39
  "claimLevel": "blocking",
40
40
  "riskClass": "high",
41
41
  "proofBindingRefs": [
@@ -116,7 +116,7 @@
116
116
  {
117
117
  "requirementId": "REQ-PROOFKIT-PACKAGE-005",
118
118
  "ownerId": "proofkit.package-boundary",
119
- "invariant": "The Go source, formatting, static analysis, vet, test, package artifact, and vulnerability gates remain the native merge-critical quality floor for the current Proofkit source tree.",
119
+ "invariant": "Tracked source hygiene covers every admitted project text language in both staged blobs and the current worktree, while Go formatting, static analysis, vet, test, package artifact, and vulnerability gates remain the native merge-critical quality floor and explicitly provision every runtime required by a merge-critical oracle.",
120
120
  "claimLevel": "blocking",
121
121
  "riskClass": "high",
122
122
  "proofBindingRefs": [
@@ -143,7 +143,7 @@
143
143
  {
144
144
  "requirementId": "REQ-PROOFKIT-PACKAGE-006",
145
145
  "ownerId": "proofkit.package-boundary",
146
- "invariant": "Python/uv distribution is a platform wheel wrapper over the same Go CLI, with wheel-safe package metadata, wheel tags, embedded binary identity, local install smoke proof, and explicit non-claims until PyPI publication.",
146
+ "invariant": "Python/uv distribution is a platform wheel wrapper over the same Go CLI, with wheel-safe package metadata, wheel tags, embedded binary identity, local install smoke proof, POSIX exec process-identity and signal preservation, and explicit non-claims until PyPI publication.",
147
147
  "claimLevel": "blocking",
148
148
  "riskClass": "medium",
149
149
  "proofBindingRefs": [
@@ -25,16 +25,18 @@ execution receipts, and merge policy.
25
25
  - `REQ-PROOFKIT-SPEC-003`: witness planning accepts caller-owned structured
26
26
  command metadata, scheduler constraints, environment classes, and
27
27
  binding-derived command projections only through admitted witness vocabulary
28
- and conservative safe argv policy, without executing commands or selecting
29
- repository policy.
28
+ and conservative safe argv policy. Self-hosting bindings and witness plans
29
+ preserve command ids, argv, and environment classes without executing
30
+ commands or selecting repository policy.
30
31
  - `REQ-PROOFKIT-SPEC-004`: selective planning and selective evidence reports
31
- keep changed-path facts, planned commands, receipts, evidence class,
32
- producer-admission state, and obligation candidates explicit, keep merge
33
- approval consumer-owned, and fail closed for unknown or unmatched proof
34
- inputs.
32
+ keep canonical changed-path facts, resolvable agent references, planned
33
+ commands, receipts, evidence class, producer-admission state, and obligation
34
+ candidates explicit, keep merge approval consumer-owned, and fail closed for
35
+ unknown or unmatched proof inputs.
35
36
  - `REQ-PROOFKIT-SPEC-005`: rendered proof views and agent envelopes remain
36
- bounded, derived presentations over structured source and never become
37
- canonical proof or requirement authority.
37
+ bounded, reference-closed derived presentations over structured source,
38
+ count each semantic omission once, and never become canonical proof or
39
+ requirement authority.
38
40
  - `REQ-PROOFKIT-SPEC-006`: test evidence inventory, explicit test-discovery
39
41
  draft projections, proof-binding-derived inventory projections, normalized
40
42
  inventory projections, coverage-view input composition, and requirement
@@ -95,6 +97,21 @@ execution receipts, and merge policy.
95
97
  runtime navigation projection, and adds opt-in family help while preserving
96
98
  existing help invocation forms, process channels, no-input behavior, and leaf
97
99
  dispatch; descriptor and help truth remains owned by `REQ-PROOFKIT-QUALITY-004`.
100
+ - `REQ-PROOFKIT-SPEC-019`: explicit catalogs compose content-bound semantic
101
+ context snapshots through existing source, tree, proof, and coverage owners
102
+ without ambient repository discovery.
103
+ - `REQ-PROOFKIT-SPEC-020`: bounded context queries select parent-before-child,
104
+ role-aware, reference-closed semantic subsets by stable identity and report
105
+ each active bound without treating bounded absence as source absence.
106
+ - `REQ-PROOFKIT-SPEC-021`: the loopback workspace progressively presents
107
+ immutable context, semantic diff, traceability trust states, authority
108
+ boundaries, and non-claims, then emits a bounded source-bound question packet
109
+ only after explicit user submission.
110
+ - `REQ-PROOFKIT-SPEC-022`: semantic diff compares admitted requirement fields
111
+ by owner-declared scalar, set, and map semantics rather than textual order.
112
+ - `REQ-PROOFKIT-SPEC-023`: traceability graphs preserve specification, proof,
113
+ code traceability, and native execution as distinct evidence planes and
114
+ accept code topology only as explicit caller-owned input.
98
115
 
99
116
  ## Non-Claims
100
117
 
@@ -62,7 +62,7 @@
62
62
  {
63
63
  "requirementId": "REQ-PROOFKIT-SPEC-003",
64
64
  "ownerId": "proofkit.spec-proof-core",
65
- "invariant": "Witness planning accepts caller-owned structured command metadata, scheduler constraints, environment classes, and binding-derived command projections only through admitted witness vocabulary and conservative safe argv policy, without executing commands or selecting repository policy.",
65
+ "invariant": "Witness planning accepts caller-owned structured command metadata, scheduler constraints, environment classes, and binding-derived command projections only through admitted witness vocabulary and conservative safe argv policy; self-hosting requirement bindings and witness plans preserve the same command ids, argv, and environment classes without executing commands or selecting repository policy.",
66
66
  "claimLevel": "blocking",
67
67
  "riskClass": "high",
68
68
  "proofBindingRefs": [
@@ -89,7 +89,7 @@
89
89
  {
90
90
  "requirementId": "REQ-PROOFKIT-SPEC-004",
91
91
  "ownerId": "proofkit.spec-proof-core",
92
- "invariant": "Selective planning and selective evidence reports keep changed-path facts, planned commands, receipts, evidence class, producer-admission state, and obligation candidates explicit, keep merge approval consumer-owned, and fail closed for unknown or unmatched proof inputs.",
92
+ "invariant": "Selective planning and selective evidence reports keep canonical changed-path facts, resolvable agent references, planned commands, receipts, evidence class, producer-admission state, and obligation candidates explicit, keep merge approval consumer-owned, and fail closed for unknown or unmatched proof inputs.",
93
93
  "claimLevel": "blocking",
94
94
  "riskClass": "high",
95
95
  "proofBindingRefs": [
@@ -116,7 +116,7 @@
116
116
  {
117
117
  "requirementId": "REQ-PROOFKIT-SPEC-005",
118
118
  "ownerId": "proofkit.spec-proof-core",
119
- "invariant": "Rendered proof views and agent envelopes remain bounded, derived presentations over structured source and never become canonical proof or requirement authority.",
119
+ "invariant": "Rendered proof views and agent envelopes remain bounded, reference-closed derived presentations over structured source, count each semantic omission once, and never become canonical proof or requirement authority.",
120
120
  "claimLevel": "blocking",
121
121
  "riskClass": "medium",
122
122
  "proofBindingRefs": [
@@ -490,6 +490,71 @@
490
490
  "requiresImpactDeclaration": true,
491
491
  "requiresProofBindingReview": true
492
492
  }
493
+ },
494
+ {
495
+ "requirementId": "REQ-PROOFKIT-SPEC-019",
496
+ "ownerId": "proofkit.spec-proof-core",
497
+ "invariant": "Requirement context composition reads only caller-selected repository-relative catalog paths through a confined filesystem root, admits each source through its semantic owner, records current and optional expected digests, and emits one bounded content-bound derived snapshot without ambient scanning or new requirement, proof, coverage, freshness, or merge authority.",
498
+ "claimLevel": "blocking",
499
+ "riskClass": "high",
500
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
501
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-019"],
502
+ "nonClaims": ["This requirement does not claim ambient repository discovery, later-checkout freshness, requirement meaning, proof adequacy, native witness execution, merge approval, release approval, rollout approval, or production readiness."],
503
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
504
+ "deferral": null,
505
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
506
+ },
507
+ {
508
+ "requirementId": "REQ-PROOFKIT-SPEC-020",
509
+ "ownerId": "proofkit.spec-proof-core",
510
+ "invariant": "Requirement context slicing strictly re-admits snapshot identity, applies closed profiles and intersecting stable-id selectors under deterministic bounds, rejects unknown explicit targets, retains selected ancestors before descendants, preserves source-role and lifecycle reference closure, and distinctly reports depth, node-count, and requirement-count omissions without treating bounded absence as source absence.",
511
+ "claimLevel": "blocking",
512
+ "riskClass": "high",
513
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
514
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-020"],
515
+ "nonClaims": ["This requirement does not claim source completeness outside the admitted snapshot, product meaning, proof freshness, native execution, merge approval, release approval, rollout approval, or production readiness."],
516
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
517
+ "deferral": null,
518
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
519
+ },
520
+ {
521
+ "requirementId": "REQ-PROOFKIT-SPEC-021",
522
+ "ownerId": "proofkit.spec-proof-core",
523
+ "invariant": "The loopback requirement workspace visibly preserves presentation-only authority boundaries, non-claims, snapshot and baseline identity, and trust-significant graph states while rendering immutable admitted context, optional semantic diff, and optional traceability graph through exact allowlisted routes, a per-process capability, same-origin handoff admission, source-digest and JSON-pointer anchors, Unicode code-point quote coordinates, bounded browser-session question packets after explicit UI submission across the admitted tree domain subject to explicit packet byte bounds, and terminal one-shot concurrent session semantics without persistence, command execution, provider access, or authority promotion.",
524
+ "claimLevel": "blocking",
525
+ "riskClass": "critical",
526
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
527
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-021"],
528
+ "nonClaims": ["This requirement does not authenticate the surrounding browser profile or operating-system user and does not claim remote access, annotation persistence, agent execution, provider delivery, proof freshness, merge approval, release approval, rollout approval, branded Safari behavior, or production readiness."],
529
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
530
+ "deferral": null,
531
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
532
+ },
533
+ {
534
+ "requirementId": "REQ-PROOFKIT-SPEC-022",
535
+ "ownerId": "proofkit.spec-proof-core",
536
+ "invariant": "Requirement semantic diff compares two admitted context snapshots by stable requirement identity and owner-declared scalar, set, and map field classes, producing deterministic added, removed, and modified facts without textual diff, inferred move semantics, or authority over requirement meaning.",
537
+ "claimLevel": "blocking",
538
+ "riskClass": "medium",
539
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
540
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-022"],
541
+ "nonClaims": ["This requirement does not claim textual equivalence, inferred moves, product meaning, proof freshness, merge approval, release approval, rollout approval, or production readiness."],
542
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
543
+ "deferral": null,
544
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
545
+ },
546
+ {
547
+ "requirementId": "REQ-PROOFKIT-SPEC-023",
548
+ "ownerId": "proofkit.spec-proof-core",
549
+ "invariant": "Requirement traceability graph deterministically projects admitted specification and proof topology plus explicit caller-owned code topology while preserving specification, proof, code traceability, and native execution as distinct evidence planes and rejecting dangling topology references.",
550
+ "claimLevel": "blocking",
551
+ "riskClass": "high",
552
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
553
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-023"],
554
+ "nonClaims": ["This requirement does not infer code topology, line or branch coverage, native execution, proof freshness, merge approval, release approval, rollout approval, or production readiness."],
555
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
556
+ "deferral": null,
557
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
493
558
  }
494
559
  ],
495
560
  "nonClaims": [
@@ -22,7 +22,8 @@ vulnerability absence, or consumer rollout safety by itself.
22
22
  fuzzing side-effecting CLI or filesystem flows.
23
23
  - `REQ-PROOFKIT-QUALITY-004`: public CLI ABI has a small golden corpus and
24
24
  canonical ABI hash covering command topology, exit code, stdout/stderr
25
- channel discipline, JSON parseability, stable public diagnostics, and
25
+ channel discipline, JSON parseability, stable public diagnostics, explicit
26
+ output schema evolution for breaking JSON field changes, and
26
27
  descriptor/contract/help parity without making private descriptors public API.
27
28
  - `REQ-PROOFKIT-QUALITY-005`: CodeQL workflow source is admitted as an
28
29
  independent semantic security analysis signal for Go source without replacing
@@ -45,9 +46,10 @@ vulnerability absence, or consumer rollout safety by itself.
45
46
  unknown command refs, contract-only commands, or route-only commands. Static
46
47
  route metadata and source syntax never become semantic falsifier evidence.
47
48
  - `REQ-PROOFKIT-QUALITY-011`: CI separates the OS-independent full
48
- source/package gate from macOS platform smoke, uses explicit hosted runner
49
- labels instead of floating latest labels, and exposes one fail-closed
50
- aggregate gate that requires every required leaf check to finish with success.
49
+ source/package gate from macOS platform smoke, executes the complete Go
50
+ package set through its owner command, uses explicit hosted runner labels
51
+ instead of floating latest labels, and exposes one fail-closed aggregate gate
52
+ that requires every required leaf check to finish with success.
51
53
  - `REQ-PROOFKIT-QUALITY-012`: release and adoption channel identifiers use one
52
54
  canonical authority vocabulary that separates durable authority channels from
53
55
  display labels, publisher environments, statuses, and candidate evidence.
@@ -65,8 +67,9 @@ vulnerability absence, or consumer rollout safety by itself.
65
67
  release closeout.
66
68
  - `REQ-PROOFKIT-QUALITY-016`: release platform targets use one private owner
67
69
  that projects platform suffixes, Go build targets, npm OS/CPU metadata,
68
- package tar entries, Python wheel tags, PyPI candidate completeness, and
69
- SBOM binary subjects without becoming public API.
70
+ package tar entries, Python wheel tags, PyPI candidate completeness,
71
+ self-hosting native binary selection, and SBOM binary subjects without
72
+ becoming public API.
70
73
  - `REQ-PROOFKIT-QUALITY-017`: report-visible secret-shaped JSON traversal
71
74
  uses one private kernel owner for deterministic paths and finding kinds while
72
75
  command packages only map findings to their local report policy.
@@ -86,6 +89,15 @@ vulnerability absence, or consumer rollout safety by itself.
86
89
  state before mutation, stays confined to the repository across symlinks,
87
90
  binds non-empty generated content to stable source and execution-context
88
91
  snapshots, and emits a schema-versioned execution record.
92
+ - `REQ-PROOFKIT-QUALITY-021`: CLI contract v2 owns one leading pretty or
93
+ compact JSON layout option through a descriptor-aware token-role
94
+ preclassification at process output boundaries while canonical identity
95
+ serialization remains unchanged.
96
+ - `REQ-PROOFKIT-QUALITY-022`: the requirement workspace uses an explicit
97
+ embedded asset set, strict authored-JavaScript type checking, exact secured
98
+ routes, bounded server cleanup, repository-confined non-symlink proof
99
+ artifacts, and machine-admitted per-project rendered engine evidence without
100
+ runtime dependencies or a production bundler.
89
101
 
90
102
  ## Non-Claims
91
103
 
@@ -51,7 +51,7 @@
51
51
  {
52
52
  "requirementId": "REQ-PROOFKIT-QUALITY-004",
53
53
  "ownerId": "proofkit.supply-chain-quality",
54
- "invariant": "Public CLI ABI has a small golden corpus and canonical ABI hash covering command topology, exit code, stdout and stderr channel discipline, JSON parseability, stable public diagnostics, and descriptor/contract/help parity without making private descriptors a public API.",
54
+ "invariant": "Public CLI ABI has a small golden corpus and canonical ABI hash covering command topology, exit code, stdout and stderr channel discipline, JSON parseability, stable public diagnostics, explicit output schema evolution for breaking JSON field changes, and descriptor/contract/help parity without making private descriptors a public API.",
55
55
  "claimLevel": "blocking",
56
56
  "riskClass": "high",
57
57
  "proofBindingRefs": ["proofkit/requirement-bindings.json"],
@@ -142,7 +142,7 @@
142
142
  {
143
143
  "requirementId": "REQ-PROOFKIT-QUALITY-011",
144
144
  "ownerId": "proofkit.supply-chain-quality",
145
- "invariant": "CI separates the OS-independent full source/package gate from the platform-specific macOS execution smoke, uses explicit hosted runner labels instead of floating latest labels, and exposes one fail-closed aggregate quality gate that requires every required leaf check to finish with success so skipped, failed, or cancelled leaf jobs cannot satisfy branch-protection evidence.",
145
+ "invariant": "CI separates the OS-independent full source/package gate from the platform-specific macOS execution smoke, executes the complete Go package set through the owner command rather than a partial package list, uses explicit hosted runner labels instead of floating latest labels, and exposes one fail-closed aggregate quality gate that requires every required leaf check to finish with success so skipped, failed, or cancelled leaf jobs cannot satisfy branch-protection evidence.",
146
146
  "claimLevel": "blocking",
147
147
  "riskClass": "medium",
148
148
  "proofBindingRefs": ["proofkit/requirement-bindings.json"],
@@ -207,7 +207,7 @@
207
207
  {
208
208
  "requirementId": "REQ-PROOFKIT-QUALITY-016",
209
209
  "ownerId": "proofkit.supply-chain-quality",
210
- "invariant": "Release platform targets have one private owner that projects exact platform suffixes, Go build targets, npm OS/CPU metadata, package tar binary entries, Python wheel tags, PyPI candidate completeness, and SBOM binary subjects without turning the platform matrix into public API.",
210
+ "invariant": "Release platform targets have one private owner that projects exact platform suffixes, Go build targets, npm OS/CPU metadata, package tar binary entries, Python wheel tags, PyPI candidate completeness, self-hosting native binary selection, and SBOM binary subjects without turning the platform matrix into public API.",
211
211
  "claimLevel": "blocking",
212
212
  "riskClass": "high",
213
213
  "proofBindingRefs": ["proofkit/requirement-bindings.json"],
@@ -268,6 +268,32 @@
268
268
  "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
269
269
  "deferral": null,
270
270
  "updatePolicy": {"reviewOwnerId": "proofkit.supply-chain-quality", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
271
+ },
272
+ {
273
+ "requirementId": "REQ-PROOFKIT-QUALITY-021",
274
+ "ownerId": "proofkit.supply-chain-quality",
275
+ "invariant": "The public CLI v2 process contract admits one leading pretty or compact JSON layout option, preserves pretty as the default, classifies descriptor-admitted flag and value token roles before output policy so option-shaped values cannot alter output classification, emits sorted valid JSON with one trailing LF in both layouts, applies the selected layout only at JSON stdout or admitted JSON file sinks, and leaves canonical digest and identity serialization unchanged.",
276
+ "claimLevel": "blocking",
277
+ "riskClass": "high",
278
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
279
+ "nonClaimRefs": ["NC-PROOFKIT-QUALITY-021"],
280
+ "nonClaims": ["This requirement does not change canonical source storage, semantic selection, stable identity, text output, help output, browser sessions, merge approval, release approval, or rollout readiness."],
281
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
282
+ "deferral": null,
283
+ "updatePolicy": {"reviewOwnerId": "proofkit.supply-chain-quality", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
284
+ },
285
+ {
286
+ "requirementId": "REQ-PROOFKIT-QUALITY-022",
287
+ "ownerId": "proofkit.supply-chain-quality",
288
+ "invariant": "Authored requirement workspace JavaScript and CSS are embedded through an explicit compile-time asset set, served only by exact routes with restrictive response headers, strictly type-checked without a production bundler, and covered by Go lifecycle, concurrent terminal-state, HTTP security, and repository-confined non-symlink artifact falsifiers plus a machine-admitted per-project execution report proving the same non-empty passed test identities in pinned Chromium, Firefox, and Playwright WebKit, with bounded browser-server cleanup and no added runtime package dependencies.",
289
+ "claimLevel": "blocking",
290
+ "riskClass": "high",
291
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
292
+ "nonClaimRefs": ["NC-PROOFKIT-QUALITY-022"],
293
+ "nonClaims": ["This requirement does not claim full WCAG conformance, every branded browser, provider CI ingestion, registry publication, release approval, rollout approval, or production readiness."],
294
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
295
+ "deferral": null,
296
+ "updatePolicy": {"reviewOwnerId": "proofkit.supply-chain-quality", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
271
297
  }
272
298
  ]
273
299
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@research-engineering/agentic-proofkit",
3
3
  "description": "Reusable proof profile, report, graph, and witness-planning primitives.",
4
- "version": "0.1.157",
4
+ "version": "0.1.159",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "sideEffects": false,
@@ -36,7 +36,10 @@
36
36
  ],
37
37
  "scripts": {
38
38
  "build": "go run ./internal/tools/packagebuild",
39
- "check": "npm run npm:version && npm run source-hygiene && npm run command-family:check && npm run text-policy && npm run mermaid:check && npm run go:check && npm run package:artifact && npm run self:receipt && npm run self:coverage && npm run release:closeout",
39
+ "check": "npm run npm:version && npm run source-hygiene && npm run command-family:check && npm run text-policy && npm run mermaid:check && npm run browser:check && npm run go:check && npm run package:artifact && npm run self:receipt && npm run self:coverage && npm run release:closeout",
40
+ "browser:check": "npm run browser:static-check && npm run browser:test",
41
+ "browser:static-check": "tsc -p tsconfig.browser.json && node --test scripts/browser-proof-execution.test.mjs scripts/browser-proof-inputs.test.mjs scripts/browser-selection-authority.test.mjs",
42
+ "browser:test": "go run ./internal/tools/browserproofverify --run",
40
43
  "command-family:check": "go run ./internal/tools/commandfamilygen --check",
41
44
  "go:actionlint": "go tool actionlint",
42
45
  "go:bench": "go test ./internal/kernel/admission ./internal/kernel/stablejson -run '^$' -bench . -benchmem -count=10",
@@ -69,5 +72,10 @@
69
72
  "cpu": [
70
73
  "arm64",
71
74
  "x64"
72
- ]
75
+ ],
76
+ "devDependencies": {
77
+ "@axe-core/playwright": "4.12.1",
78
+ "@playwright/test": "1.61.1",
79
+ "typescript": "7.0.2"
80
+ }
73
81
  }