@research-engineering/agentic-proofkit 0.5.0 → 0.6.0

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/README.md CHANGED
@@ -50,7 +50,7 @@ CLI, not as a Python SDK. Python projects should still treat CLI/JSON records,
50
50
  exit codes, and package metadata as the public contract.
51
51
 
52
52
  <!-- proofkit:platform-python:start -->
53
- Supported binary targets are macOS 12 or later on arm64 or x64.
53
+ Supported binary targets are macOS 13 or later on arm64 or x64.
54
54
  Linux manylinux 2.17 or later is supported on arm64 or x64. Windows is unsupported. The Python
55
55
  runner requires Python 3.9 or later and wraps the same Go CLI; it is not a
56
56
  Python SDK.
@@ -94,11 +94,17 @@ Route ambiguous modernization work through the smallest matching family:
94
94
 
95
95
  ## Agent Decision Procedure
96
96
 
97
- Agents should use `agent-route` for executable routing and
98
- `agent-route --agent-envelope` when a bounded work packet is needed. The command
99
- returns deterministic JSON from explicit caller-owned facts; the envelope is an
100
- opt-in derived projection over the same report. This map explains the route
101
- families without becoming an execution, freshness, or merge decision.
97
+ Agents should use `agent-route` for the complete deterministic route report and
98
+ `agent-route --agent-envelope` for the default bounded brief packet. Explicit
99
+ `--agent-envelope-mode brief` is byte-identical to the bare envelope form;
100
+ `--agent-envelope-mode full` preserves the complete generic agent envelope for
101
+ debugging or demand-loaded detail. Every brief binds its source report ID and
102
+ stable digest and admitted launcher profile in one top-level `detailAccess`
103
+ record, so callers retain the original admitted input and launcher context and
104
+ recompute report or full detail instead of adding a detail reference to every
105
+ item. All three forms are derived from explicit caller-owned facts. This map
106
+ explains route families without becoming an
107
+ execution, freshness, or merge decision.
102
108
  The exact route input vocabulary is machine-readable in
103
109
  `proofkit/cli-contract.v2.json` under `agent-route.inputContract`; the Go
104
110
  admission implementation owns nested and semantic behavior, while the shipped
@@ -110,7 +116,7 @@ Formal rule:
110
116
  goal plus caller-owned state
111
117
  -> smallest matching command family
112
118
  -> explicit required input
113
- -> deterministic report or bounded envelope
119
+ -> deterministic report, bounded brief, or explicit full envelope
114
120
  -> caller-owned execution, proof freshness, and merge decision
115
121
  ```
116
122
 
@@ -154,14 +160,19 @@ Semantic context routes are `requirement-context-compose`,
154
160
  2. Start from this map when a human or agent only needs the correct command
155
161
  family.
156
162
  3. Use `agent-route` when a coding agent needs a deterministic next-command
157
- packet from explicit current state. Use `agent-route --agent-envelope` when
158
- the agent needs compact context refs, blockers, command refs, and non-claims
159
- instead of a plain route report. Treat `blocked_*` states as stop signals,
160
- not as permission to guess missing inputs. `knownChangedPaths` are
163
+ report from explicit current state. Use `agent-route --agent-envelope` when
164
+ the agent needs exactly one next action or terminal state, bounded blockers,
165
+ caller-owned context refs, exact omission counts, and uniquely resolvable
166
+ shipped boundary-policy requirement refs instead of the full route report.
167
+ Resolve further detail with the packet's exact output-argument suffixes and
168
+ retained original input and launcher context only after checking the brief's source digest and launcher profile; request
169
+ `--agent-envelope-mode full` only when the generic envelope is actually
170
+ needed. Treat `blocked_*` states as stop signals, not as permission to guess
171
+ missing inputs. `knownChangedPaths` are
161
172
  diagnostic-only until the caller supplies a `changed_path_set`; browser
162
173
  server startup requires explicit `browserMode: "serve_local_view"`.
163
- 4. Use agent-envelope output only when a coding agent needs bounded context;
164
- do not expand whole proof graphs into chat.
174
+ 4. Prefer the brief packet for agent context; do not expand full route reports,
175
+ full envelopes, or proof graphs into chat without a specific detail need.
165
176
  5. Treat generated views and rendered HTML as presentation only. They never
166
177
  replace the structured source record.
167
178
  6. Escalate to the consuming repository's owner policy whenever Proofkit reports
@@ -20,11 +20,12 @@ The public capability is deliberately small:
20
20
  3. Existing descriptors, dispatch, command families, root-shape CLI contracts,
21
21
  agent envelopes, and package gates provide public-surface closure.
22
22
 
23
- Neither command scans a repository. Both command cores are stateless pure
24
- projections with no filesystem, Git, process, environment, clock, random,
25
- network, container, or provider dependency. No setup facade, agent-route extension,
26
- external prompt resource, persisted experiment state, or second source codec is
27
- introduced.
23
+ Neither workflow command scans a repository. Both command cores are stateless
24
+ pure projections with no filesystem, Git, process, environment, clock, random,
25
+ network, container, or provider dependency. Neither workflow command adds a
26
+ setup facade, hidden route policy, external prompt resource, persisted
27
+ experiment state, or second source codec. Agent-route brief and full
28
+ projections remain independently owned by the spec-proof-core package.
28
29
 
29
30
  ## Requirements
30
31
 
@@ -48,7 +49,7 @@ introduced.
48
49
  limits.
49
50
  - `REQ-PROOFKIT-WORKFLOW-006`: only existing launcher and presentation
50
51
  capabilities outside explicit input, with no ambient repository authority,
51
- setup facade, hidden policy, or agent-route extension.
52
+ setup facade, hidden policy, or ownership of agent-route projections.
52
53
  - `REQ-PROOFKIT-WORKFLOW-007`: pure deterministic repository-neutral
53
54
  native-evidence guidance from one versioned typed table with five closed
54
55
  applicability classes, explicit absent-channel decisions, and finite
@@ -73,7 +73,7 @@
73
73
  {
74
74
  "requirementId": "REQ-PROOFKIT-WORKFLOW-006",
75
75
  "ownerId": "proofkit.agent-workflow",
76
- "invariant": "After existing bounded CLI transport, immutable installed-launcher profile admission, and immutable presentation-capability capture, the semantic planner accepts no repository root, caller prompt, caller-selected bound, command, environment, receipt body, or external authority field and has no filesystem, Git, process, environment, clock, random, network, container, or provider dependency; the CLI reads only the explicit input transport, the existing launcher-profile and optional Python-executable transport capabilities, and startup TTY/NO_COLOR presence needed by requested presentation, and the capability adds no setup facade, ambient scan, hidden repository policy, consumer-specific route, or agent-route extension.",
76
+ "invariant": "After existing bounded CLI transport, immutable installed-launcher profile admission, and immutable presentation-capability capture, the semantic planner accepts no repository root, caller prompt, caller-selected bound, command, environment, receipt body, or external authority field and has no filesystem, Git, process, environment, clock, random, network, container, or provider dependency; the CLI reads only the explicit input transport, the existing launcher-profile and optional Python-executable transport capabilities, and startup TTY/NO_COLOR presence needed by requested presentation, and this two-command workflow capability adds no setup facade, ambient scan, hidden repository policy, consumer-specific route, or ownership of the independently specified agent-route projections.",
77
77
  "claimLevel": "blocking",
78
78
  "riskClass": "high",
79
79
  "proofBindingRefs": ["proofkit/requirement-bindings.json"],
@@ -154,6 +154,25 @@ execution receipts, and merge policy.
154
154
  package, field, representation, variant, and positive/negative relation
155
155
  coverage without attributing correlated edits to independent field
156
156
  causality, selecting a codec, or changing a public source boundary.
157
+ - `REQ-PROOFKIT-SPEC-025`: a versioned disjoint-role experiment selects one
158
+ admitted private v2 source-grammar owner record, grouped JSON with an
159
+ entity-local hybrid layout;
160
+ its strict bounded codec delegates meaning to the representation-neutral
161
+ model, binds each collection to one model-limit owner, preserves every
162
+ projection, metadata-presence state, and lexical source location, and emits
163
+ deterministic nondisclosing diagnostics. A bounded single-member traversal-,
164
+ symlink-, duplicate-, and trailing-data-closed archive byte-binds the exact
165
+ V3 screen, while independent
166
+ field, limit, selection, mutant, round-trip, fuzz-seed, package, and
167
+ admitted grammar-owner-record and package-inventory witnesses close the
168
+ selected owner boundary without migrating current sources, exposing a new
169
+ public CLI, proving open-world absence of undeclared equivalent parsers, or
170
+ claiming that no future owner-approved grammar can be added.
171
+ - `REQ-PROOFKIT-SPEC-026`: agent-route v3 emits a deterministic 3072-byte
172
+ brief packet by default with one canonical action or typed blockers, exact
173
+ omission accounting, stable source-report identity, one top-level detail
174
+ access record, and explicit full-envelope retrieval without repeating policy
175
+ prose or promoting route guidance to authority.
157
176
 
158
177
  ## Non-Claims
159
178
 
@@ -568,6 +568,32 @@
568
568
  "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
569
569
  "deferral": null,
570
570
  "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
571
+ },
572
+ {
573
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
574
+ "ownerId": "proofkit.spec-proof-core",
575
+ "invariant": "A private requirement-source codec selection admits grouped JSON with the frozen entity-local hybrid layout through one admitted v2 persisted-grammar owner record for internal/kernel/requirementsourcecodec after a versioned disjoint-role screen rejects compact and pretty JSON layouts for edit-locality failure and admits no YAML, TOML, or restricted-text parser authority. The selection record byte-binds a bounded single-member traversal-, symlink-, duplicate-, and trailing-data-closed binary archive and the exact extracted V3 evidence tree, including its method sources, fixture corpus, rendered candidates, independent token reports, review results, validation, edit rows, and decision, and its metric registry, layout order, thresholds, observations, and evaluator have exact decision closure. The selected codec maps bounded UTF-8 bytes through duplicate-, case-, unknown-, missing-, null-, integer-, and Unicode-scalar-closed structural admission into exactly one requirementsourcemodel.NormalizeWithLimits call; each wire collection names one model-limit owner; immutable atomic, authoring-layout, typed-reference, and lexical source-map projections preserve metadata absence, present-null deferral, present-record deferral, ordered actions, sorted dynamic maps, and caller wire order; and formatting re-admits the semantic model before emitting fixed-order entity-local canonical JSON with exact unsafe-scalar escaping and one final line feed. Raw-byte, UTF-8, lexical-token, nesting, representation-cardinality, model-resource, model-semantic, and canonical-output failures have fixed precedence, while diagnostic paths contain only canonical field names, numeric indexes, or placeholders and resolve synthetic model identities to exact wire spans. Independently authored field, limit-coefficient, selection, and executable mutant manifests close DTO fields and cardinalities, structural schema, resource formula, candidate roles, decision, diagnostic paths, and losing-grammar dependencies; round-trip, idempotence, source-span replay, exact-limit, fuzz-seed, admitted grammar-owner record, and exact package-inventory witnesses close the currently selected owner boundary without claiming open-world absence of undeclared semantically equivalent parsers or a ban on future owner-approved grammars.",
576
+ "claimLevel": "blocking",
577
+ "riskClass": "high",
578
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
579
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-025"],
580
+ "nonClaims": ["This private codec does not migrate or rewrite current requirement sources, expose a public source extension or CLI command, retain a normalized mirror, authenticate requirement meaning or derivation provenance, generalize the frozen formatter screen beyond its byte-bound corpus, prove the open-world absence of undeclared semantically equivalent parsers, prevent a future owner-approved grammar from being added, execute native witnesses, approve merge or release, or establish rollout or production readiness."],
581
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
582
+ "deferral": null,
583
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
584
+ },
585
+ {
586
+ "requirementId": "REQ-PROOFKIT-SPEC-026",
587
+ "ownerId": "proofkit.spec-proof-core",
588
+ "invariant": "Agent-route output contract v3 derives every report, brief packet, and full envelope from one fully admitted immutable route input, one admitted launcher profile, and one command-owned route report: route artifact refs in both available inputs and observed reports identify materialized caller-owned artifacts and never use the stdin transport sentinel; the nested report contract preserves the exact required route-report fields, schemaVersion 3, closed route-family vocabulary, guidance-to-selected-family relation, pre-suppression available-command count, and launcher profile; a bare --agent-envelope and explicit brief mode emit the same deterministic schema-v1 proofkit.agent-route.brief root while explicit full mode preserves the prior generic envelope; a routed brief selects exactly the first canonical nextCommands entry as its sole nextAction, retains its exact command and argv identity when the 3072-byte pretty stable-JSON bound permits, otherwise removes only inline argv and marks argvState detail_required, while every blocked state emits null nextAction; blockers are projected in deterministic unknown-goal, required-input, then sorted non-passed observed-report order, retain at most four typed entries without materializing omitted blocker maps, and report the exact omitted remainder; contextRefs refer to all and only caller-owned artifact operands of the selected command through resolvable source-report JSON pointers; one top-level detailAccess record binds the source report ID, stable digest, and launcher profile, provides exact report and full output-argument suffixes for replay with the original input and launcher context, and no per-item detail reference is added; omissionSummary exactly counts pre-suppression unselected available commands, source-omitted commands, and omitted blockers; fixed uniquely resolvable shipped requirement IDs replace repeated boundary-policy prose; the complete brief is at most 3072 bytes, and unsupported modes, invalid flag values, repeated single-value flags, or a detail mode without --agent-envelope fail before input is read. Reports and envelopes remain derived route guidance and never become requirement, proof, execution, merge, release, rollout, deployment, or readiness authority.",
589
+ "claimLevel": "blocking",
590
+ "riskClass": "high",
591
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
592
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-026"],
593
+ "nonClaims": ["The 3072-byte packet bound and stable source-report digest do not prove provider token consumption, semantic sufficiency, source freshness, command execution, native witness truth, or policy approval; detail retrieval requires the caller to retain the original admitted input and launcher context."],
594
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
595
+ "deferral": null,
596
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
571
597
  }
572
598
  ],
573
599
  "nonClaims": [
@@ -337,7 +337,7 @@
337
337
  {
338
338
  "requirementId": "REQ-PROOFKIT-QUALITY-026",
339
339
  "ownerId": "proofkit.supply-chain-quality",
340
- "invariant": "Every repository-owned stable JSON implementation used by a public or retained-evidence path accepts only Unicode 15.0.0 scalar strings, rejecting malformed UTF-8 byte strings and unpaired UTF-16 surrogates as applicable, emits the same deterministic semantic-preserving JSON escapes for the pinned Cc, Cf, Zl, and Zp range table, preserves ordinary decoded values, and remains byte-compatible with one versioned owner-authored literal range corpus whose Go projection is exhaustively checked against the Unicode 15.0.0 category oracle and whose JavaScript and generated TypeScript projections are exhaustively checked over the scalar domain.",
340
+ "invariant": "Every repository-owned stable JSON implementation used by a public or retained-evidence path accepts only Unicode 17.0.0 scalar strings, rejecting malformed UTF-8 byte strings and unpaired UTF-16 surrogates as applicable, emits the same deterministic semantic-preserving JSON escapes for the pinned Cc, Cf, Zl, and Zp range table, preserves ordinary decoded values, and remains byte-compatible with one versioned owner-authored literal range corpus whose Go projection is exhaustively checked against the Unicode 17.0.0 category oracle and whose JavaScript and generated TypeScript projections are exhaustively checked over the scalar domain.",
341
341
  "claimLevel": "blocking",
342
342
  "riskClass": "high",
343
343
  "proofBindingRefs": ["proofkit/requirement-bindings.json"],
@@ -350,7 +350,7 @@
350
350
  {
351
351
  "requirementId": "REQ-PROOFKIT-QUALITY-027",
352
352
  "ownerId": "proofkit.supply-chain-quality",
353
- "invariant": "Every report-visible diagnostic and structural-text sanitizer accepts only Unicode 15.0.0 scalar strings, recognizes one explicit Unicode whitespace alphabet plus the pinned Cc, Cf, Zl, and Zp range table and contiguous or control-split secret-shaped values through one shared taxonomy, replaces any rejected caller-owned value as a whole with one fixed command-owned label without emitting its bytes, code points, prefix, suffix, or caller-controlled replacement text, and bounds admitted diagnostic projection to 512 Unicode scalars; every Go and JavaScript repository tool entrypoint routes dynamic errors through that owner, failed child-process stderr that enters this diagnostic boundary is captured under a fixed byte limit before whole-value sanitization while successful child stderr is not projected, direct child stderr wiring is rejected, and the installed-carrier smoke adapter bounds stdout, stderr, time, and cleanup; on supported Unix hosts, a successful installed-carrier result requires confirmed process-group absence after the command parent is reaped, while cleanup timeout or probe failure is an explicit failed operation rather than a successful terminal result.",
353
+ "invariant": "Every report-visible diagnostic and structural-text sanitizer accepts only Unicode 17.0.0 scalar strings, recognizes one explicit Unicode whitespace alphabet plus the pinned Cc, Cf, Zl, and Zp range table and contiguous or control-split secret-shaped values through one shared taxonomy, replaces any rejected caller-owned value as a whole with one fixed command-owned label without emitting its bytes, code points, prefix, suffix, or caller-controlled replacement text, and bounds admitted diagnostic projection to 512 Unicode scalars; every Go and JavaScript repository tool entrypoint routes dynamic errors through that owner, failed child-process stderr that enters this diagnostic boundary is captured under a fixed byte limit before whole-value sanitization while successful child stderr is not projected, direct child stderr wiring is rejected, and the installed-carrier smoke adapter bounds stdout, stderr, time, and cleanup; on supported Unix hosts, a successful installed-carrier result requires confirmed process-group absence after the command parent is reaped, while cleanup timeout or probe failure is an explicit failed operation rather than a successful terminal result.",
354
354
  "claimLevel": "blocking",
355
355
  "riskClass": "high",
356
356
  "proofBindingRefs": ["proofkit/requirement-bindings.json"],
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@research-engineering/agentic-proofkit",
3
3
  "description": "Reusable proof profile, report, graph, and witness-planning primitives.",
4
- "version": "0.5.0",
4
+ "version": "0.6.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "sideEffects": false,
8
- "packageManager": "npm@11.18.0",
8
+ "packageManager": "npm@12.0.2",
9
9
  "publishConfig": {
10
10
  "access": "public",
11
11
  "registry": "https://registry.npmjs.org"
@@ -74,8 +74,8 @@
74
74
  "x64"
75
75
  ],
76
76
  "devDependencies": {
77
- "@playwright/test": "1.62.0",
78
- "axe-core": "4.12.1",
77
+ "@playwright/test": "1.62.1",
78
+ "axe-core": "4.13.0",
79
79
  "typescript": "7.0.2"
80
80
  }
81
81
  }
@@ -347,9 +347,30 @@
347
347
  ],
348
348
  "allowedFlags": [
349
349
  "--agent-envelope",
350
+ "--agent-envelope-mode",
350
351
  "--input",
351
352
  "--input-pointer"
352
353
  ],
354
+ "singleOccurrenceFlags": [
355
+ "--agent-envelope",
356
+ "--agent-envelope-mode",
357
+ "--input",
358
+ "--input-pointer"
359
+ ],
360
+ "flagChoices": {
361
+ "--agent-envelope-mode": [
362
+ "brief",
363
+ "full"
364
+ ]
365
+ },
366
+ "flagPresenceRequirements": [
367
+ {
368
+ "flag": "--agent-envelope-mode",
369
+ "requiredFlags": [
370
+ "--agent-envelope"
371
+ ]
372
+ }
373
+ ],
353
374
  "inputContract": {
354
375
  "contractId": "proofkit.agent-route.input.v1",
355
376
  "schemaVersion": 1,
@@ -400,7 +421,7 @@
400
421
  ]
401
422
  },
402
423
  "ref": {
403
- "format": "safe repo-relative caller-owned file, report ref, or scanner root ref; scanner root refs may be ."
424
+ "format": "safe repo-relative materialized caller-owned file, report ref, or scanner root ref; stdin sentinel - is forbidden and scanner root refs may be ."
404
425
  }
405
426
  },
406
427
  "uniqueBy": "kind"
@@ -414,7 +435,6 @@
414
435
  "nonClaim": "serve_local_view only adds --serve to requirement-browser-server routes; it does not create a public server or approve rendered artifacts."
415
436
  },
416
437
  "goal": {
417
- "required": true,
418
438
  "enum": [
419
439
  "admit_receipts",
420
440
  "adopt_repository",
@@ -435,7 +455,8 @@
435
455
  "unknown",
436
456
  "validate_requirement_source",
437
457
  "verify_typescript_public_api"
438
- ]
458
+ ],
459
+ "required": true
439
460
  },
440
461
  "knownChangedPaths": {
441
462
  "default": [],
@@ -443,20 +464,21 @@
443
464
  "nonClaim": "knownChangedPaths is diagnostic-only; selective routing requires a caller-owned changed_path_set input ref."
444
465
  },
445
466
  "mode": {
446
- "required": true,
447
467
  "enum": [
448
468
  "enforce-all",
449
469
  "enforce-touched",
450
470
  "observe",
451
471
  "warn"
452
- ]
472
+ ],
473
+ "required": true
453
474
  },
454
475
  "nonClaims": {
455
476
  "default": [],
456
- "maxItems": 8,
457
- "maxItemRunes": 240
477
+ "maxItemRunes": 240,
478
+ "maxItems": 8
458
479
  },
459
480
  "observedReports": {
481
+ "blockingSemantics": "any observed report state other than passed blocks command emission",
460
482
  "default": [],
461
483
  "item": {
462
484
  "kind": {
@@ -472,7 +494,7 @@
472
494
  ]
473
495
  },
474
496
  "ref": {
475
- "format": "safe repo-relative report ref"
497
+ "format": "safe repo-relative materialized caller-owned report ref; stdin sentinel - is forbidden"
476
498
  },
477
499
  "state": {
478
500
  "enum": [
@@ -484,7 +506,6 @@
484
506
  ]
485
507
  }
486
508
  },
487
- "blockingSemantics": "any observed report state other than passed blocks command emission",
488
509
  "uniqueBy": "ref"
489
510
  },
490
511
  "openBrowser": {
@@ -492,9 +513,9 @@
492
513
  "nonClaim": "openBrowser only adds --open when browserMode is serve_local_view."
493
514
  },
494
515
  "routeId": {
495
- "required": true,
496
516
  "format": "safe stable id",
497
- "maxRunes": 96
517
+ "maxRunes": 96,
518
+ "required": true
498
519
  },
499
520
  "schemaVersion": {
500
521
  "required": true,
@@ -511,7 +532,7 @@
511
532
  "rootDefinitionDigest": "sha256:fd1121285d1b357ed848febc248700a75417d06619e22ed36991631d7526375b",
512
533
  "nativeSource": {
513
534
  "path": "internal/command/agentroute",
514
- "canonicalDigest": "sha256:2fc5d42c6126069aad7cad9a18acf9683289ce54be3a0d2f3aef6f429e2bcbdf",
535
+ "canonicalDigest": "sha256:3256eac5777824ad0b7b9bce6537efdb42b75430579a1a3f160577cf8cdce379",
515
536
  "evidenceClass": "source_checkout"
516
537
  },
517
538
  "nativeAdmissionWitnessSelector": {
@@ -536,76 +557,133 @@
536
557
  "ownerRequirementRefs": [
537
558
  "REQ-PROOFKIT-PACKAGE-002",
538
559
  "REQ-PROOFKIT-QUALITY-004",
539
- "REQ-PROOFKIT-SPEC-005"
560
+ "REQ-PROOFKIT-SPEC-005",
561
+ "REQ-PROOFKIT-SPEC-026"
540
562
  ]
541
563
  },
542
564
  "outputContract": {
543
- "contractId": "proofkit.agent-route.output.v2",
544
- "schemaVersion": 2,
545
- "authority": "deterministic route report derived from admitted agent-route input",
546
- "requiredFields": [
547
- "guidanceSlice",
548
- "reportId",
549
- "reportKind",
550
- "schemaVersion",
551
- "selectedRouteFamily",
552
- "state"
553
- ],
554
- "fields": {
555
- "schemaVersion": {
556
- "value": 2
557
- },
558
- "selectedRouteFamily": {
559
- "enum": [
560
- "adoption",
561
- "migration",
562
- "release_and_deployment",
563
- "rendered_views",
564
- "repository_structure",
565
- "requirement_proof_binding",
566
- "requirement_source",
567
- "selective_evidence",
568
- "selective_planning",
569
- "test_inventory_and_coverage",
570
- "unknown"
571
- ]
572
- },
573
- "guidanceSlice": {
574
- "requiredFields": [
575
- "routeFamily"
576
- ],
577
- "routeFamilyRule": "must equal selectedRouteFamily"
565
+ "contractId": "proofkit.agent-route.output.v3",
566
+ "schemaVersion": 3,
567
+ "authority": "deterministic route report, brief packet, full envelope, or invalid-input repair packet selected from the admitted invocation",
568
+ "reportContract": {
569
+ "contractId": "proofkit.agent-route.report.v3",
570
+ "schemaVersion": 3,
571
+ "requiredFields": [
572
+ "guidanceSlice",
573
+ "reportId",
574
+ "reportKind",
575
+ "schemaVersion",
576
+ "selectedRouteFamily",
577
+ "state",
578
+ "summary"
579
+ ],
580
+ "fields": {
581
+ "schemaVersion": {
582
+ "value": 3
583
+ },
584
+ "selectedRouteFamily": {
585
+ "enum": [
586
+ "adoption",
587
+ "migration",
588
+ "release_and_deployment",
589
+ "rendered_views",
590
+ "repository_structure",
591
+ "requirement_proof_binding",
592
+ "requirement_source",
593
+ "selective_evidence",
594
+ "selective_planning",
595
+ "test_inventory_and_coverage",
596
+ "unknown"
597
+ ]
598
+ },
599
+ "guidanceSlice": {
600
+ "requiredFields": [
601
+ "routeFamily"
602
+ ],
603
+ "routeFamilyRule": "must equal selectedRouteFamily"
604
+ },
605
+ "summary": {
606
+ "availableCommandCount": "exact count before blocked-state command suppression",
607
+ "launcherProfile": "exact admitted command-renderer profile that affects route argv and report identity"
608
+ }
578
609
  }
579
610
  },
580
- "changesFromV1": [
581
- "selectedFamily is replaced by selectedRouteFamily",
582
- "guidanceSlice.family is replaced by guidanceSlice.routeFamily"
611
+ "briefPacketContract": {
612
+ "boundaryPolicyRefs": [
613
+ "REQ-PROOFKIT-SPEC-005",
614
+ "REQ-PROOFKIT-SPEC-026"
615
+ ],
616
+ "contractId": "proofkit.agent-route.brief.v1",
617
+ "fieldRules": {
618
+ "blockers": "unknown-goal blocker when applicable, then required-input blockers, then sorted non-passed observed-report blockers; retain at most four and count the exact remainder without materializing the omitted blocker maps",
619
+ "boundaryPolicyRefs": "exactly the shipped and uniquely resolvable requirement IDs REQ-PROOFKIT-SPEC-005 and REQ-PROOFKIT-SPEC-026; policy prose is not duplicated",
620
+ "contextRefs": "only caller-owned artifact operands of the selected next command, each addressed by an RFC 6901 pointer into the source report",
621
+ "detailAccess": "binds source report ID, stable digest, and launcher profile and provides exact outputArgs suffixes for report and full retrieval from the original admitted input and launcher context",
622
+ "nextAction": "null for blocked states; otherwise the first canonical nextCommands entry with exact command identity and inline argv unless the byte bound requires argvState=detail_required",
623
+ "omissionSummary": "exact counts for unselected available commands, source-omitted commands, and blockers omitted by the packet bound",
624
+ "packetKind": "proofkit.agent-route.brief",
625
+ "schemaVersion": "1"
626
+ },
627
+ "maxBlockers": 4,
628
+ "maxPrettyJSONBytes": 3072,
629
+ "nonClaims": [
630
+ "The brief packet is derived route guidance, not requirement, proof, execution, merge, release, rollout, deployment, or readiness authority.",
631
+ "The packet byte bound does not claim tokenizer-specific token consumption or semantic sufficiency."
632
+ ],
633
+ "requiredFields": [
634
+ "blockers",
635
+ "boundaryPolicyRefs",
636
+ "contextRefs",
637
+ "detailAccess",
638
+ "nextAction",
639
+ "omissionSummary",
640
+ "packetId",
641
+ "packetKind",
642
+ "routeFamily",
643
+ "schemaVersion",
644
+ "state"
645
+ ],
646
+ "schemaVersion": 1
647
+ },
648
+ "changesFromV2": [
649
+ "bare --agent-envelope emits proofkit.agent-route.brief",
650
+ "--agent-envelope-mode full preserves the prior generic envelope projection",
651
+ "route report schemaVersion advances to 3 while preserving prior route-family semantics and adding exact launcher and available-command context"
583
652
  ],
584
653
  "rootType": "object",
585
654
  "closed": true,
586
- "rootDefinitionRef": "proofkit.agent-route.output.v2.root-shape",
587
- "rootDefinitionDigest": "sha256:db7d5b29083a939eea0f23253632394212b0d73b5f1b6206d0811d236d6a84ca",
588
- "nativeSource": {
589
- "path": "internal/command/agentroute",
590
- "canonicalDigest": "sha256:2fc5d42c6126069aad7cad9a18acf9683289ce54be3a0d2f3aef6f429e2bcbdf",
591
- "evidenceClass": "source_checkout"
592
- },
655
+ "rootDefinitionRef": "proofkit.agent-route.output.v3.root-shape",
656
+ "rootDefinitionDigest": "sha256:0881bc0765f61ea76d681a8bb2ddd915504c5a350a3a8286253e2959693be60e",
657
+ "nativeSources": [
658
+ {
659
+ "path": "internal/app",
660
+ "canonicalDigest": "sha256:3fb162add7aad5988f19c88016571f113af948190c0042f74016b7a688625386",
661
+ "evidenceClass": "source_checkout"
662
+ },
663
+ {
664
+ "path": "internal/command/agentroute",
665
+ "canonicalDigest": "sha256:3256eac5777824ad0b7b9bce6537efdb42b75430579a1a3f160577cf8cdce379",
666
+ "evidenceClass": "source_checkout"
667
+ }
668
+ ],
593
669
  "nativeOutputWitnessSelector": {
594
- "path": "internal/command/agentroute/agentroute_test.go",
595
- "test": "TestBuildRoutesRequirementSourceAndBlocksUnknownGoal",
596
- "command": "go test ./internal/command/agentroute -run '^TestBuildRoutesRequirementSourceAndBlocksUnknownGoal$'",
670
+ "path": "internal/app/cli_abi_test.go",
671
+ "test": "TestAgentRouteEnvelopeModesUseExactRootShapes",
672
+ "command": "go test ./internal/app -run '^TestAgentRouteEnvelopeModesUseExactRootShapes$'",
597
673
  "evidenceClass": "source_checkout"
598
674
  },
599
675
  "compatibilitySummary": [
600
676
  "guidanceSlice",
601
- "schemaVersion",
602
677
  "selectedRouteFamily",
603
- "root-shape-only definition proofkit.agent-route.output.v2.root-shape; nested fields, types, and cardinalities are non-claims"
678
+ "schemaVersion=3",
679
+ "brief agent packet by default with explicit full envelope detail mode",
680
+ "nested proofkit.agent-route.brief.v1 contract plus root-shape definition proofkit.agent-route.output.v3.root-shape"
604
681
  ],
605
682
  "ownerRequirementRefs": [
606
683
  "REQ-PROOFKIT-PACKAGE-002",
607
684
  "REQ-PROOFKIT-QUALITY-004",
608
- "REQ-PROOFKIT-SPEC-005"
685
+ "REQ-PROOFKIT-SPEC-005",
686
+ "REQ-PROOFKIT-SPEC-026"
609
687
  ]
610
688
  }
611
689
  },
@@ -1118,7 +1196,7 @@
1118
1196
  "rootDefinitionDigest": "sha256:b343c1093476cd9f50970f58608e43c1a6ae681a2c06b17c217ab4f22ea454e5",
1119
1197
  "nativeSource": {
1120
1198
  "path": "internal/command/conformanceprofile",
1121
- "canonicalDigest": "sha256:fba2ae58bf66cfc43834368dec84ca85abd11e08a541786dc59eafaf7628c322",
1199
+ "canonicalDigest": "sha256:fba2ae58bf66cfc43834368dec84ca85abd11e08a541786dc59eafaf7628c322",
1122
1200
  "evidenceClass": "source_checkout"
1123
1201
  },
1124
1202
  "nativeAdmissionWitnessSelector": {
@@ -1145,7 +1223,7 @@
1145
1223
  "rootDefinitionDigest": "sha256:5817a9d259deb8ff48d8dc6298b46164e7b132304ca1d865967c611d147b1793",
1146
1224
  "nativeSource": {
1147
1225
  "path": "internal/command/conformanceprofile",
1148
- "canonicalDigest": "sha256:fba2ae58bf66cfc43834368dec84ca85abd11e08a541786dc59eafaf7628c322",
1226
+ "canonicalDigest": "sha256:fba2ae58bf66cfc43834368dec84ca85abd11e08a541786dc59eafaf7628c322",
1149
1227
  "evidenceClass": "source_checkout"
1150
1228
  },
1151
1229
  "nativeOutputWitnessSelector": {
@@ -2421,7 +2499,7 @@
2421
2499
  "nativeSources": [
2422
2500
  {
2423
2501
  "path": "internal/app",
2424
- "canonicalDigest": "sha256:af43c7dae19e019887fd3c43ddef4d453966b517880dc3fb76be5f3ed048281d",
2502
+ "canonicalDigest": "sha256:3fb162add7aad5988f19c88016571f113af948190c0042f74016b7a688625386",
2425
2503
  "evidenceClass": "source_checkout"
2426
2504
  },
2427
2505
  {
@@ -5663,7 +5741,7 @@
5663
5741
  "rootDefinitionDigest": "sha256:3c842174dff5361e7f83166469b832805e05aa314b073c16234b5b64e346281e",
5664
5742
  "nativeSource": {
5665
5743
  "path": "internal/app",
5666
- "canonicalDigest": "sha256:af43c7dae19e019887fd3c43ddef4d453966b517880dc3fb76be5f3ed048281d",
5744
+ "canonicalDigest": "sha256:3fb162add7aad5988f19c88016571f113af948190c0042f74016b7a688625386",
5667
5745
  "evidenceClass": "source_checkout"
5668
5746
  },
5669
5747
  "nativeAdmissionWitnessSelector": {
@@ -5692,7 +5770,7 @@
5692
5770
  "rootDefinitionDigest": "sha256:0ea95e277ebe44cd2de42c29b47c38686ac0b6b390d8965367437b3fe138e209",
5693
5771
  "nativeSource": {
5694
5772
  "path": "internal/app",
5695
- "canonicalDigest": "sha256:af43c7dae19e019887fd3c43ddef4d453966b517880dc3fb76be5f3ed048281d",
5773
+ "canonicalDigest": "sha256:3fb162add7aad5988f19c88016571f113af948190c0042f74016b7a688625386",
5696
5774
  "evidenceClass": "source_checkout"
5697
5775
  },
5698
5776
  "nativeOutputWitnessSelector": {
@@ -7706,7 +7784,7 @@
7706
7784
  "canonicalDigest": "sha256:fd1121285d1b357ed848febc248700a75417d06619e22ed36991631d7526375b"
7707
7785
  },
7708
7786
  {
7709
- "definitionId": "proofkit.agent-route.output.v2.root-shape",
7787
+ "definitionId": "proofkit.agent-route.output.v3.root-shape",
7710
7788
  "schemaVersion": 1,
7711
7789
  "rootType": "object",
7712
7790
  "closed": true,
@@ -7718,6 +7796,39 @@
7718
7796
  "Root-shape definitions do not replace direct public-CLI runtime witnesses for variant selection."
7719
7797
  ],
7720
7798
  "variants": [
7799
+ {
7800
+ "allowedFields": [
7801
+ "blockers",
7802
+ "boundaryPolicyRefs",
7803
+ "contextRefs",
7804
+ "detailAccess",
7805
+ "nextAction",
7806
+ "omissionSummary",
7807
+ "packetId",
7808
+ "packetKind",
7809
+ "routeFamily",
7810
+ "schemaVersion",
7811
+ "state"
7812
+ ],
7813
+ "requiredFields": [
7814
+ "blockers",
7815
+ "boundaryPolicyRefs",
7816
+ "contextRefs",
7817
+ "detailAccess",
7818
+ "nextAction",
7819
+ "omissionSummary",
7820
+ "packetId",
7821
+ "packetKind",
7822
+ "routeFamily",
7823
+ "schemaVersion",
7824
+ "state"
7825
+ ],
7826
+ "rootKind": "object",
7827
+ "variantId": "01-agent-brief",
7828
+ "when": [
7829
+ "--agent-envelope=present --agent-envelope-mode=absent|brief; admitted route input"
7830
+ ]
7831
+ },
7721
7832
  {
7722
7833
  "allowedFields": [
7723
7834
  "actionPlan",
@@ -7752,9 +7863,48 @@
7752
7863
  "sourceReport"
7753
7864
  ],
7754
7865
  "rootKind": "object",
7755
- "variantId": "01-agent-envelope",
7866
+ "variantId": "02-agent-envelope-full",
7756
7867
  "when": [
7757
- "--agent-envelope"
7868
+ "--agent-envelope=present --agent-envelope-mode=full; admitted route input"
7869
+ ]
7870
+ },
7871
+ {
7872
+ "allowedFields": [
7873
+ "actionPlan",
7874
+ "blockedPreconditions",
7875
+ "bounds",
7876
+ "clarificationQuestions",
7877
+ "commands",
7878
+ "contextRefs",
7879
+ "costContract",
7880
+ "envelopeId",
7881
+ "nonClaims",
7882
+ "omitted",
7883
+ "receiptRefs",
7884
+ "routeQuestions",
7885
+ "schemaVersion",
7886
+ "sourceReport"
7887
+ ],
7888
+ "requiredFields": [
7889
+ "actionPlan",
7890
+ "blockedPreconditions",
7891
+ "bounds",
7892
+ "clarificationQuestions",
7893
+ "commands",
7894
+ "contextRefs",
7895
+ "costContract",
7896
+ "envelopeId",
7897
+ "nonClaims",
7898
+ "omitted",
7899
+ "receiptRefs",
7900
+ "routeQuestions",
7901
+ "schemaVersion",
7902
+ "sourceReport"
7903
+ ],
7904
+ "rootKind": "object",
7905
+ "variantId": "03-invalid-input-repair",
7906
+ "when": [
7907
+ "--agent-envelope=present; route input or input-pointer admission failed"
7758
7908
  ]
7759
7909
  },
7760
7910
  {
@@ -7795,7 +7945,7 @@
7795
7945
  "summary"
7796
7946
  ],
7797
7947
  "rootKind": "object",
7798
- "variantId": "02-routed",
7948
+ "variantId": "04-routed",
7799
7949
  "when": [
7800
7950
  "without --agent-envelope; known goal"
7801
7951
  ]
@@ -7808,6 +7958,7 @@
7808
7958
  "guidanceSlice",
7809
7959
  "nextCommands",
7810
7960
  "nonClaims",
7961
+ "observedReports",
7811
7962
  "omitted",
7812
7963
  "reportId",
7813
7964
  "reportKind",
@@ -7825,6 +7976,7 @@
7825
7976
  "guidanceSlice",
7826
7977
  "nextCommands",
7827
7978
  "nonClaims",
7979
+ "observedReports",
7828
7980
  "omitted",
7829
7981
  "reportId",
7830
7982
  "reportKind",
@@ -7836,14 +7988,14 @@
7836
7988
  "summary"
7837
7989
  ],
7838
7990
  "rootKind": "object",
7839
- "variantId": "03-unknown-goal",
7991
+ "variantId": "05-unknown-goal",
7840
7992
  "when": [
7841
7993
  "without --agent-envelope; goal=unknown"
7842
7994
  ]
7843
7995
  }
7844
7996
  ]
7845
7997
  },
7846
- "canonicalDigest": "sha256:db7d5b29083a939eea0f23253632394212b0d73b5f1b6206d0811d236d6a84ca"
7998
+ "canonicalDigest": "sha256:0881bc0765f61ea76d681a8bb2ddd915504c5a350a3a8286253e2959693be60e"
7847
7999
  },
7848
8000
  {
7849
8001
  "definitionId": "proofkit.binding-partition.input.v1.root-shape",
@@ -696,6 +696,22 @@
696
696
  "proofState": "witness_backed",
697
697
  "nonClaims": ["This private single-source model does not select or expose a source codec, parse or serialize a persisted source, retain a normalized mirror, establish cross-source requirement identity, authenticate derivation objects, digests, selectors, or freshness, authenticate a caller-declared sourceKind or prove its author's authority or trust class, cut over any current requirement consumer, prove requirement meaning or implementation correctness, execute native witnesses, approve merge or release, or establish rollout or production readiness."]
698
698
  },
699
+ {
700
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
701
+ "ownerId": "proofkit.spec-proof-core",
702
+ "specPath": "docs/specs/proofkit-spec-proof-core/requirements.v1.json",
703
+ "claimLevel": "blocking",
704
+ "proofState": "witness_backed",
705
+ "nonClaims": ["This private codec does not migrate or rewrite current requirement sources, expose a public source extension or CLI command, retain a normalized mirror, authenticate requirement meaning or derivation provenance, generalize the frozen formatter screen beyond its byte-bound corpus, prove the open-world absence of undeclared semantically equivalent parsers, prevent a future owner-approved grammar from being added, execute native witnesses, approve merge or release, or establish rollout or production readiness."]
706
+ },
707
+ {
708
+ "requirementId": "REQ-PROOFKIT-SPEC-026",
709
+ "ownerId": "proofkit.spec-proof-core",
710
+ "specPath": "docs/specs/proofkit-spec-proof-core/requirements.v1.json",
711
+ "claimLevel": "blocking",
712
+ "proofState": "witness_backed",
713
+ "nonClaims": ["The 3072-byte packet bound and stable source-report digest do not prove provider token consumption, semantic sufficiency, source freshness, command execution, native witness truth, or policy approval; detail retrieval requires the caller to retain the original admitted input and launcher context."]
714
+ },
699
715
  {
700
716
  "requirementId": "REQ-PROOFKIT-WORKFLOW-001",
701
717
  "ownerId": "proofkit.agent-workflow",
@@ -1100,6 +1116,10 @@
1100
1116
  "selector": "TestAdoptionContractEnvelopeCLIABI",
1101
1117
  "command": "go test ./internal/app -run '^TestAdoptionContractEnvelopeCLIABI$'"
1102
1118
  },
1119
+ {
1120
+ "selector": "TestAgentRouteEnvelopeModesUseExactRootShapes",
1121
+ "command": "go test ./internal/app -run '^TestAgentRouteEnvelopeModesUseExactRootShapes$'"
1122
+ },
1103
1123
  {
1104
1124
  "selector": "TestRequirementAuthoringPlanOutputUsesVersionedRootShape",
1105
1125
  "command": "go test ./internal/app -run '^TestRequirementAuthoringPlanOutputUsesVersionedRootShape$'"
@@ -2315,6 +2335,10 @@
2315
2335
  "selector": "TestAdoptionContractEnvelopeCLIABI",
2316
2336
  "command": "go test ./internal/app -run '^TestAdoptionContractEnvelopeCLIABI$'"
2317
2337
  },
2338
+ {
2339
+ "selector": "TestAgentRouteEnvelopeModesUseExactRootShapes",
2340
+ "command": "go test ./internal/app -run '^TestAgentRouteEnvelopeModesUseExactRootShapes$'"
2341
+ },
2318
2342
  {
2319
2343
  "selector": "TestRequirementAuthoringPlanOutputUsesVersionedRootShape",
2320
2344
  "command": "go test ./internal/app -run '^TestRequirementAuthoringPlanOutputUsesVersionedRootShape$'"
@@ -3858,8 +3882,8 @@
3858
3882
  "command": "go test ./internal/kernel/unicodepolicy -run '^TestUnsafeScalarTableMatchesVersionedOwnerCorpus$'"
3859
3883
  },
3860
3884
  {
3861
- "selector": "TestUnsafeScalarTableMatchesEveryUnicode15Scalar",
3862
- "command": "go test ./internal/kernel/unicodepolicy -run '^TestUnsafeScalarTableMatchesEveryUnicode15Scalar$'"
3885
+ "selector": "TestUnsafeScalarTableMatchesEveryUnicode17Scalar",
3886
+ "command": "go test ./internal/kernel/unicodepolicy -run '^TestUnsafeScalarTableMatchesEveryUnicode17Scalar$'"
3863
3887
  },
3864
3888
  {
3865
3889
  "selector": "TestValidScalarStringRejectsMalformedUTF8",
@@ -4577,6 +4601,450 @@
4577
4601
  "commandIds": ["proofkit.go-test"],
4578
4602
  "environmentClasses": ["local-go"]
4579
4603
  },
4604
+ {
4605
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4606
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-selection-closure",
4607
+ "witnessId": "proofkit.requirement-source-codec.selection-closure-falsifier",
4608
+ "witnessKind": "contract",
4609
+ "witnessPath": "internal/kernel/requirementsourcecodec/selection_test.go",
4610
+ "witnessSelectors": [
4611
+ {
4612
+ "selector": "TestSelectionRecordIsClosedAndDecisionIsReproducible",
4613
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestSelectionRecordIsClosedAndDecisionIsReproducible$'"
4614
+ }
4615
+ ],
4616
+ "commandIds": ["proofkit.go-test"],
4617
+ "environmentClasses": ["local-go"]
4618
+ },
4619
+ {
4620
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4621
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-selection-evidence-closure",
4622
+ "witnessId": "proofkit.requirement-source-codec.selection-evidence-closure-falsifier",
4623
+ "witnessKind": "contract",
4624
+ "witnessPath": "internal/kernel/requirementsourcecodec/selection_evidence_test.go",
4625
+ "witnessSelectors": [
4626
+ {
4627
+ "selector": "TestSelectionEvidenceIsByteBoundAndProjectsDecision",
4628
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestSelectionEvidenceIsByteBoundAndProjectsDecision$'"
4629
+ },
4630
+ {
4631
+ "selector": "TestScreenTreeDigestRejectsByteAndInventoryMutation",
4632
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestScreenTreeDigestRejectsByteAndInventoryMutation$'"
4633
+ },
4634
+ {
4635
+ "selector": "TestScreenArchiveAdmissionRejectsUnsafeTopology",
4636
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestScreenArchiveAdmissionRejectsUnsafeTopology$'"
4637
+ },
4638
+ {
4639
+ "selector": "TestScreenArchiveAdmissionRejectsTrailingCompressedData",
4640
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestScreenArchiveAdmissionRejectsTrailingCompressedData$'"
4641
+ }
4642
+ ],
4643
+ "commandIds": ["proofkit.go-test"],
4644
+ "environmentClasses": ["local-go"]
4645
+ },
4646
+ {
4647
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4648
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-decision-projection-closure",
4649
+ "witnessId": "proofkit.requirement-source-codec.decision-projection-closure-falsifier",
4650
+ "witnessKind": "contract",
4651
+ "witnessPath": "internal/kernel/requirementsourcecodec/selection_projection_test.go",
4652
+ "witnessSelectors": [
4653
+ {
4654
+ "selector": "TestDecisionProjectionRejectsReplacementObservationDrift",
4655
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestDecisionProjectionRejectsReplacementObservationDrift$'"
4656
+ }
4657
+ ],
4658
+ "commandIds": ["proofkit.go-test"],
4659
+ "environmentClasses": ["local-go"]
4660
+ },
4661
+ {
4662
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4663
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-replacement-predicate-closure",
4664
+ "witnessId": "proofkit.requirement-source-codec.replacement-predicate-closure-falsifier",
4665
+ "witnessKind": "contract",
4666
+ "witnessPath": "internal/kernel/requirementsourcecodec/selection_evaluator_test.go",
4667
+ "witnessSelectors": [
4668
+ {
4669
+ "selector": "TestChallengerEligibilityRequiresEveryReplacementPredicate",
4670
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestChallengerEligibilityRequiresEveryReplacementPredicate$'"
4671
+ },
4672
+ {
4673
+ "selector": "TestSelectionMetricRegistrySemanticsDriveEvaluator",
4674
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestSelectionMetricRegistrySemanticsDriveEvaluator$'"
4675
+ }
4676
+ ],
4677
+ "commandIds": ["proofkit.go-test"],
4678
+ "environmentClasses": ["local-go"]
4679
+ },
4680
+ {
4681
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4682
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-package-boundary-closure",
4683
+ "witnessId": "proofkit.requirement-source-codec.package-boundary-closure-falsifier",
4684
+ "witnessKind": "contract",
4685
+ "witnessPath": "internal/kernel/requirementsourcecodec/package_boundary_test.go",
4686
+ "witnessSelectors": [
4687
+ {
4688
+ "selector": "TestProductionPackageHasOneCodecAndNoSyntaxDependency",
4689
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestProductionPackageHasOneCodecAndNoSyntaxDependency$'"
4690
+ },
4691
+ {
4692
+ "selector": "TestSelectedV2GrammarOwnerRecordIsExact",
4693
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestSelectedV2GrammarOwnerRecordIsExact$'"
4694
+ }
4695
+ ],
4696
+ "commandIds": ["proofkit.go-test"],
4697
+ "environmentClasses": ["local-go"]
4698
+ },
4699
+ {
4700
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4701
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-field-closure",
4702
+ "witnessId": "proofkit.requirement-source-codec.field-closure-falsifier",
4703
+ "witnessKind": "contract",
4704
+ "witnessPath": "internal/kernel/requirementsourcecodec/field_manifest_test.go",
4705
+ "witnessSelectors": [
4706
+ {
4707
+ "selector": "TestFieldManifestMatchesWireDTOAndClosedShape",
4708
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestFieldManifestMatchesWireDTOAndClosedShape$'"
4709
+ }
4710
+ ],
4711
+ "commandIds": ["proofkit.go-test"],
4712
+ "environmentClasses": ["local-go"]
4713
+ },
4714
+ {
4715
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4716
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-roundtrip-closure",
4717
+ "witnessId": "proofkit.requirement-source-codec.roundtrip-closure-falsifier",
4718
+ "witnessKind": "contract",
4719
+ "witnessPath": "internal/kernel/requirementsourcecodec/roundtrip_test.go",
4720
+ "witnessSelectors": [
4721
+ {
4722
+ "selector": "TestFormatParseRoundTripPreservesEveryProjection",
4723
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestFormatParseRoundTripPreservesEveryProjection$'"
4724
+ },
4725
+ {
4726
+ "selector": "TestCanonicalFormatIsIdempotent",
4727
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestCanonicalFormatIsIdempotent$'"
4728
+ },
4729
+ {
4730
+ "selector": "TestFormatPreservesMetadataAbsenceNullAndRecord",
4731
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestFormatPreservesMetadataAbsenceNullAndRecord$'"
4732
+ },
4733
+ {
4734
+ "selector": "TestSourceMapReplaysKeyAndValueSpans",
4735
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestSourceMapReplaysKeyAndValueSpans$'"
4736
+ },
4737
+ {
4738
+ "selector": "TestReturnedSourceMapIsImmutable",
4739
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestReturnedSourceMapIsImmutable$'"
4740
+ },
4741
+ {
4742
+ "selector": "TestSourceMapIndexesLexicalWireOrderNotNormalizedOrder",
4743
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestSourceMapIndexesLexicalWireOrderNotNormalizedOrder$'"
4744
+ }
4745
+ ],
4746
+ "commandIds": ["proofkit.go-test"],
4747
+ "environmentClasses": ["local-go"]
4748
+ },
4749
+ {
4750
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4751
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-layout-closure",
4752
+ "witnessId": "proofkit.requirement-source-codec.layout-closure-falsifier",
4753
+ "witnessKind": "contract",
4754
+ "witnessPath": "internal/kernel/requirementsourcecodec/format_layout_test.go",
4755
+ "witnessSelectors": [
4756
+ {
4757
+ "selector": "TestHybridLayoutKeepsStableSiblingEntityLinesUnchanged",
4758
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestHybridLayoutKeepsStableSiblingEntityLinesUnchanged$'"
4759
+ },
4760
+ {
4761
+ "selector": "TestHybridLayoutUsesCommaFirstEntityArrays",
4762
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestHybridLayoutUsesCommaFirstEntityArrays$'"
4763
+ },
4764
+ {
4765
+ "selector": "TestCanonicalStringsEscapeUnsafeScalarsWithoutHTMLEscaping",
4766
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestCanonicalStringsEscapeUnsafeScalarsWithoutHTMLEscaping$'"
4767
+ },
4768
+ {
4769
+ "selector": "TestCanonicalMapKeysAreSorted",
4770
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestCanonicalMapKeysAreSorted$'"
4771
+ },
4772
+ {
4773
+ "selector": "TestOrderedActionsRetainOrder",
4774
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestOrderedActionsRetainOrder$'"
4775
+ }
4776
+ ],
4777
+ "commandIds": ["proofkit.go-test"],
4778
+ "environmentClasses": ["local-go"]
4779
+ },
4780
+ {
4781
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4782
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-mutant-closure",
4783
+ "witnessId": "proofkit.requirement-source-codec.mutant-closure-falsifier",
4784
+ "witnessKind": "contract",
4785
+ "witnessPath": "internal/kernel/requirementsourcecodec/mutant_manifest_test.go",
4786
+ "witnessSelectors": [
4787
+ {
4788
+ "selector": "TestCodecMutantManifestClosesRepresentationFailures",
4789
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestCodecMutantManifestClosesRepresentationFailures$'"
4790
+ }
4791
+ ],
4792
+ "commandIds": ["proofkit.go-test"],
4793
+ "environmentClasses": ["local-go"]
4794
+ },
4795
+ {
4796
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4797
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-resource-closure",
4798
+ "witnessId": "proofkit.requirement-source-codec.resource-closure-falsifier",
4799
+ "witnessKind": "contract",
4800
+ "witnessPath": "internal/kernel/requirementsourcecodec/limits_test.go",
4801
+ "witnessSelectors": [
4802
+ {
4803
+ "selector": "TestRawByteBoundaryIsExactAndDominatesUTF8",
4804
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestRawByteBoundaryIsExactAndDominatesUTF8$'"
4805
+ },
4806
+ {
4807
+ "selector": "TestTokenAndNestingLimitsPrecedeShapeAdmission",
4808
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestTokenAndNestingLimitsPrecedeShapeAdmission$'"
4809
+ },
4810
+ {
4811
+ "selector": "TestLexicalTokenLimitDominatesNestingWhenBothFail",
4812
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestLexicalTokenLimitDominatesNestingWhenBothFail$'"
4813
+ },
4814
+ {
4815
+ "selector": "TestRepresentationCollectionLimitPrecedesModelSemantics",
4816
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestRepresentationCollectionLimitPrecedesModelSemantics$'"
4817
+ },
4818
+ {
4819
+ "selector": "TestDynamicMapCollectionLimitPrecedesParameterSemantics",
4820
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestDynamicMapCollectionLimitPrecedesParameterSemantics$'"
4821
+ },
4822
+ {
4823
+ "selector": "TestModelResourcePreflightPrecedesSemanticValidation",
4824
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestModelResourcePreflightPrecedesSemanticValidation$'"
4825
+ },
4826
+ {
4827
+ "selector": "TestCodecLimitsCannotUnderCoverModel",
4828
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestCodecLimitsCannotUnderCoverModel$'"
4829
+ }
4830
+ ],
4831
+ "commandIds": ["proofkit.go-test"],
4832
+ "environmentClasses": ["local-go"]
4833
+ },
4834
+ {
4835
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4836
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-limit-formula-closure",
4837
+ "witnessId": "proofkit.requirement-source-codec.limit-formula-closure-falsifier",
4838
+ "witnessKind": "contract",
4839
+ "witnessPath": "internal/kernel/requirementsourcecodec/limit_manifest_test.go",
4840
+ "witnessSelectors": [
4841
+ {
4842
+ "selector": "TestLimitCoefficientManifestMatchesProductionFormula",
4843
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestLimitCoefficientManifestMatchesProductionFormula$'"
4844
+ },
4845
+ {
4846
+ "selector": "TestLimitArithmeticRejectsOverflow",
4847
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestLimitArithmeticRejectsOverflow$'"
4848
+ },
4849
+ {
4850
+ "selector": "TestCanonicalByteBoundCoversWorstAdmittedEscapeExpansion",
4851
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestCanonicalByteBoundCoversWorstAdmittedEscapeExpansion$'"
4852
+ }
4853
+ ],
4854
+ "commandIds": ["proofkit.go-test"],
4855
+ "environmentClasses": ["local-go"]
4856
+ },
4857
+ {
4858
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4859
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-diagnostic-closure",
4860
+ "witnessId": "proofkit.requirement-source-codec.diagnostic-closure-falsifier",
4861
+ "witnessKind": "contract",
4862
+ "witnessPath": "internal/kernel/requirementsourcecodec/diagnostics_test.go",
4863
+ "witnessSelectors": [
4864
+ {
4865
+ "selector": "TestInvalidUTF8UsesByteOnlyCoordinates",
4866
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestInvalidUTF8UsesByteOnlyCoordinates$'"
4867
+ },
4868
+ {
4869
+ "selector": "TestValidUnicodeDiagnosticsUseScalarColumns",
4870
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestValidUnicodeDiagnosticsUseScalarColumns$'"
4871
+ },
4872
+ {
4873
+ "selector": "TestBareCRAndCRLFAdvanceScalarLinesOnce",
4874
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestBareCRAndCRLFAdvanceScalarLinesOnce$'"
4875
+ },
4876
+ {
4877
+ "selector": "TestMultipleValueDiagnosticSpansSecondToken",
4878
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestMultipleValueDiagnosticSpansSecondToken$'"
4879
+ }
4880
+ ],
4881
+ "commandIds": ["proofkit.go-test"],
4882
+ "environmentClasses": ["local-go"]
4883
+ },
4884
+ {
4885
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4886
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-admission-closure",
4887
+ "witnessId": "proofkit.requirement-source-codec.admission-closure-falsifier",
4888
+ "witnessKind": "contract",
4889
+ "witnessPath": "internal/kernel/requirementsourcecodec/admission_test.go",
4890
+ "witnessSelectors": [
4891
+ {
4892
+ "selector": "TestParseDiagnosticsDoNotDiscloseCallerTextOrDynamicKeys",
4893
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestParseDiagnosticsDoNotDiscloseCallerTextOrDynamicKeys$'"
4894
+ },
4895
+ {
4896
+ "selector": "TestPreShapeDiagnosticsDoNotDiscloseUnknownKeys",
4897
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestPreShapeDiagnosticsDoNotDiscloseUnknownKeys$'"
4898
+ },
4899
+ {
4900
+ "selector": "TestParseDiagnosticsRedactSemanticEntityIDsAndResolveExactSpan",
4901
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestParseDiagnosticsRedactSemanticEntityIDsAndResolveExactSpan$'"
4902
+ },
4903
+ {
4904
+ "selector": "TestParseAcceptsValidUnicodeSurrogatePairLosslessly",
4905
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestParseAcceptsValidUnicodeSurrogatePairLosslessly$'"
4906
+ }
4907
+ ],
4908
+ "commandIds": ["proofkit.go-test"],
4909
+ "environmentClasses": ["local-go"]
4910
+ },
4911
+ {
4912
+ "requirementId": "REQ-PROOFKIT-SPEC-025",
4913
+ "scenarioId": "proofkit.spec-proof-core.requirement-source-codec-fuzz-seed-closure",
4914
+ "witnessId": "proofkit.requirement-source-codec.fuzz-seed-closure-falsifier",
4915
+ "witnessKind": "contract",
4916
+ "witnessPath": "internal/kernel/requirementsourcecodec/codec_fuzz_test.go",
4917
+ "witnessSelectors": [
4918
+ {
4919
+ "selector": "TestFuzzSeedCorpusRoundTrips",
4920
+ "command": "go test ./internal/kernel/requirementsourcecodec -run '^TestFuzzSeedCorpusRoundTrips$'"
4921
+ }
4922
+ ],
4923
+ "commandIds": ["proofkit.go-test"],
4924
+ "environmentClasses": ["local-go"]
4925
+ },
4926
+ {
4927
+ "requirementId": "REQ-PROOFKIT-SPEC-026",
4928
+ "scenarioId": "proofkit.spec-proof-core.agent-route-brief-cli-abi",
4929
+ "witnessId": "proofkit.agent-route-brief.cli-abi-falsifier",
4930
+ "witnessKind": "contract",
4931
+ "witnessPath": "internal/app/cli_abi_test.go",
4932
+ "witnessSelectors": [
4933
+ {
4934
+ "selector": "TestAgentRouteEnvelopeModesUseExactRootShapes",
4935
+ "command": "go test ./internal/app -run '^TestAgentRouteEnvelopeModesUseExactRootShapes$'"
4936
+ }
4937
+ ],
4938
+ "commandIds": ["proofkit.go-test"],
4939
+ "environmentClasses": ["local-go"]
4940
+ },
4941
+ {
4942
+ "requirementId": "REQ-PROOFKIT-SPEC-026",
4943
+ "scenarioId": "proofkit.spec-proof-core.agent-route-brief-projection",
4944
+ "witnessId": "proofkit.agent-route-brief.projection-falsifier",
4945
+ "witnessKind": "contract",
4946
+ "witnessPath": "internal/command/agentroute/brief_test.go",
4947
+ "witnessSelectors": [
4948
+ {
4949
+ "selector": "TestAgentBriefBindsLauncherContextThatAffectsReportDigest",
4950
+ "command": "go test ./internal/command/agentroute -run '^TestAgentBriefBindsLauncherContextThatAffectsReportDigest$'"
4951
+ },
4952
+ {
4953
+ "selector": "TestAgentBriefClosesEverySelectedCommandInputReference",
4954
+ "command": "go test ./internal/command/agentroute -run '^TestAgentBriefClosesEverySelectedCommandInputReference$'"
4955
+ },
4956
+ {
4957
+ "selector": "TestAgentBriefCompactsAtDeclaredByteBoundary",
4958
+ "command": "go test ./internal/command/agentroute -run '^TestAgentBriefCompactsAtDeclaredByteBoundary$'"
4959
+ },
4960
+ {
4961
+ "selector": "TestAgentBriefIsBoundedAndFullEnvelopeRemainsAvailable",
4962
+ "command": "go test ./internal/command/agentroute -run '^TestAgentBriefIsBoundedAndFullEnvelopeRemainsAvailable$'"
4963
+ },
4964
+ {
4965
+ "selector": "TestAgentBriefNamesCompleteInputBundleBlocker",
4966
+ "command": "go test ./internal/command/agentroute -run '^TestAgentBriefNamesCompleteInputBundleBlocker$'"
4967
+ },
4968
+ {
4969
+ "selector": "TestAgentBriefPreservesBlockedRouteOmissionsAndUnknownReportBlockers",
4970
+ "command": "go test ./internal/command/agentroute -run '^TestAgentBriefPreservesBlockedRouteOmissionsAndUnknownReportBlockers$'"
4971
+ },
4972
+ {
4973
+ "selector": "TestBriefBlockerBoundDominatesMapMaterialization",
4974
+ "command": "go test ./internal/command/agentroute -run '^TestBriefBlockerBoundDominatesMapMaterialization$'"
4975
+ },
4976
+ {
4977
+ "selector": "TestBuildEnvelopeCapsBlockersAndCountsOmittedDetails",
4978
+ "command": "go test ./internal/command/agentroute -run '^TestBuildEnvelopeCapsBlockersAndCountsOmittedDetails$'"
4979
+ },
4980
+ {
4981
+ "selector": "TestBuildEnvelopeCompactsOversizedArgvWithoutLosingActionIdentity",
4982
+ "command": "go test ./internal/command/agentroute -run '^TestBuildEnvelopeCompactsOversizedArgvWithoutLosingActionIdentity$'"
4983
+ }
4984
+ ],
4985
+ "commandIds": ["proofkit.go-test"],
4986
+ "environmentClasses": ["local-go"]
4987
+ },
4988
+ {
4989
+ "requirementId": "REQ-PROOFKIT-SPEC-026",
4990
+ "scenarioId": "proofkit.spec-proof-core.agent-route-flag-pre-read-admission",
4991
+ "witnessId": "proofkit.agent-route.flag-pre-read-admission-falsifier",
4992
+ "witnessKind": "contract",
4993
+ "witnessPath": "internal/app/app_test.go",
4994
+ "witnessSelectors": [
4995
+ {
4996
+ "selector": "TestAgentRouteModeAdmissionPrecedesInputRead",
4997
+ "command": "go test ./internal/app -run '^TestAgentRouteModeAdmissionPrecedesInputRead$'"
4998
+ }
4999
+ ],
5000
+ "commandIds": ["proofkit.go-test"],
5001
+ "environmentClasses": ["local-go"]
5002
+ },
5003
+ {
5004
+ "requirementId": "REQ-PROOFKIT-SPEC-026",
5005
+ "scenarioId": "proofkit.spec-proof-core.agent-route-materialized-ref-admission",
5006
+ "witnessId": "proofkit.agent-route.materialized-ref-falsifier",
5007
+ "witnessKind": "contract",
5008
+ "witnessPath": "internal/command/agentroute/agentroute_test.go",
5009
+ "witnessSelectors": [
5010
+ {
5011
+ "selector": "TestBuildRejectsStdinTransportSentinelAsArtifactReference",
5012
+ "command": "go test ./internal/command/agentroute -run '^TestBuildRejectsStdinTransportSentinelAsArtifactReference$'"
5013
+ }
5014
+ ],
5015
+ "commandIds": ["proofkit.go-test"],
5016
+ "environmentClasses": ["local-go"]
5017
+ },
5018
+ {
5019
+ "requirementId": "REQ-PROOFKIT-SPEC-026",
5020
+ "scenarioId": "proofkit.spec-proof-core.agent-route-report-contract-closure",
5021
+ "witnessId": "proofkit.agent-route.report-contract-closure-falsifier",
5022
+ "witnessKind": "contract",
5023
+ "witnessPath": "internal/app/cli_contract_test.go",
5024
+ "witnessSelectors": [
5025
+ {
5026
+ "selector": "TestAgentRouteOutputContractPreservesReportSemantics",
5027
+ "command": "go test ./internal/app -run '^TestAgentRouteOutputContractPreservesReportSemantics$'"
5028
+ }
5029
+ ],
5030
+ "commandIds": ["proofkit.go-test"],
5031
+ "environmentClasses": ["local-go"]
5032
+ },
5033
+ {
5034
+ "requirementId": "REQ-PROOFKIT-SPEC-026",
5035
+ "scenarioId": "proofkit.spec-proof-core.agent-route-brief-version-edge",
5036
+ "witnessId": "proofkit.agent-route-brief.version-edge-falsifier",
5037
+ "witnessKind": "contract",
5038
+ "witnessPath": "internal/app/agent_route_version_edge_test.go",
5039
+ "witnessSelectors": [
5040
+ {
5041
+ "selector": "TestAgentRouteVersionEdgeClosesBriefDefaultMigration",
5042
+ "command": "go test ./internal/app -run '^TestAgentRouteVersionEdgeClosesBriefDefaultMigration$'"
5043
+ }
5044
+ ],
5045
+ "commandIds": ["proofkit.go-test"],
5046
+ "environmentClasses": ["local-go"]
5047
+ },
4580
5048
  {
4581
5049
  "requirementId": "REQ-PROOFKIT-SPEC-023",
4582
5050
  "scenarioId": "proofkit.spec-proof-core.requirement-traceability-topology-closure",