setspec 0.4.0__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. {setspec-0.4.0 → setspec-0.6.0}/CHANGELOG.md +88 -0
  2. {setspec-0.4.0 → setspec-0.6.0}/PKG-INFO +22 -8
  3. {setspec-0.4.0 → setspec-0.6.0}/README.md +20 -6
  4. setspec-0.6.0/docs/packages/setspec/development-plan.md +519 -0
  5. {setspec-0.4.0 → setspec-0.6.0}/docs/packages/setspec/spec.md +70 -5
  6. {setspec-0.4.0 → setspec-0.6.0}/docs/schemas.md +102 -11
  7. {setspec-0.4.0 → setspec-0.6.0}/pyproject.toml +7 -1
  8. {setspec-0.4.0 → setspec-0.6.0}/requirements/ci.lock +3 -3
  9. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/__about__.py +1 -1
  10. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/artifacts.py +26 -3
  11. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/capability/v1.py +117 -8
  12. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/envelope.py +35 -19
  13. setspec-0.6.0/src/setspec/goldens/benchmark.evidence_bundle/1.1/full.json +236 -0
  14. setspec-0.6.0/src/setspec/goldens/benchmark.evidence_bundle/1.1/minimal.json +4 -0
  15. setspec-0.6.0/src/setspec/goldens/benchmark.evidence_bundle/1.1/mixed.json +230 -0
  16. setspec-0.6.0/src/setspec/goldens/benchmark.evidence_bundle/1.1/unsupported.json +73 -0
  17. setspec-0.6.0/src/setspec/goldens/capability.evidence/1.1/full.json +85 -0
  18. setspec-0.6.0/src/setspec/goldens/capability.evidence/1.1/minimal.json +25 -0
  19. setspec-0.6.0/src/setspec/goldens/capability.evidence/1.1/unsupported.json +61 -0
  20. setspec-0.6.0/src/setspec/goldens/governance.egress_decision/1.0/denied_no_ceiling.json +20 -0
  21. setspec-0.6.0/src/setspec/goldens/governance.egress_decision/1.0/full.json +20 -0
  22. setspec-0.6.0/src/setspec/goldens/governance.egress_decision/1.0/minimal.json +20 -0
  23. setspec-0.6.0/src/setspec/goldens/governance.egress_decision/1.0/violation.json +20 -0
  24. setspec-0.6.0/src/setspec/goldens/model.adapter_manifest/1.0/full.json +19 -0
  25. setspec-0.6.0/src/setspec/goldens/model.adapter_manifest/1.0/minimal.json +16 -0
  26. setspec-0.6.0/src/setspec/goldens/model.adapter_manifest/1.0/name_only.json +19 -0
  27. setspec-0.6.0/src/setspec/governance/v1.py +139 -0
  28. setspec-0.6.0/src/setspec/model/v1.py +389 -0
  29. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.evidence_bundle/1.0.json +2 -2
  30. setspec-0.6.0/src/setspec/schemas/benchmark.evidence_bundle/1.1.json +774 -0
  31. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.result/1.0.json +2 -2
  32. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.run_summary/1.0.json +2 -2
  33. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/capability.evidence/1.0.json +2 -2
  34. setspec-0.6.0/src/setspec/schemas/capability.evidence/1.1.json +743 -0
  35. setspec-0.6.0/src/setspec/schemas/governance.egress_decision/1.0.json +158 -0
  36. setspec-0.6.0/src/setspec/schemas/model.adapter_manifest/1.0.json +135 -0
  37. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/model.identity/1.0.json +2 -2
  38. setspec-0.6.0/tests/contract/test_adapter_axis_i15.py +101 -0
  39. setspec-0.6.0/tests/contract/test_bundle_minor_is_additive.py +122 -0
  40. {setspec-0.4.0 → setspec-0.6.0}/tests/contract/test_cross_version.py +5 -1
  41. {setspec-0.4.0 → setspec-0.6.0}/tests/contract/test_goldens.py +8 -2
  42. {setspec-0.4.0 → setspec-0.6.0}/tests/contract/test_schema_snapshots.py +48 -3
  43. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_payloads_capability.py +274 -5
  44. setspec-0.6.0/tests/unit/test_payloads_governance.py +197 -0
  45. setspec-0.4.0/docs/packages/setspec/development-plan.md +0 -293
  46. setspec-0.4.0/src/setspec/model/v1.py +0 -172
  47. {setspec-0.4.0 → setspec-0.6.0}/.editorconfig +0 -0
  48. {setspec-0.4.0 → setspec-0.6.0}/.github/workflows/ci.yml +0 -0
  49. {setspec-0.4.0 → setspec-0.6.0}/.github/workflows/release.yml +0 -0
  50. {setspec-0.4.0 → setspec-0.6.0}/.gitignore +0 -0
  51. {setspec-0.4.0 → setspec-0.6.0}/.importlinter +0 -0
  52. {setspec-0.4.0 → setspec-0.6.0}/.pre-commit-config.yaml +0 -0
  53. {setspec-0.4.0 → setspec-0.6.0}/CONTRIBUTING.md +0 -0
  54. {setspec-0.4.0 → setspec-0.6.0}/LICENSE +0 -0
  55. {setspec-0.4.0 → setspec-0.6.0}/PHASE4_ISSUES.md +0 -0
  56. {setspec-0.4.0 → setspec-0.6.0}/SECURITY.md +0 -0
  57. {setspec-0.4.0 → setspec-0.6.0}/docs/README.md +0 -0
  58. {setspec-0.4.0 → setspec-0.6.0}/docs/prompts-adoption-checklist.md +0 -0
  59. {setspec-0.4.0 → setspec-0.6.0}/requirements/README.md +0 -0
  60. {setspec-0.4.0 → setspec-0.6.0}/requirements/release.in +0 -0
  61. {setspec-0.4.0 → setspec-0.6.0}/requirements/release.lock +0 -0
  62. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/__init__.py +0 -0
  63. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/base.py +0 -0
  64. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/benchmark/v1.py +0 -0
  65. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/error/v1.py +0 -0
  66. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/errors.py +0 -0
  67. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/event/v1.py +0 -0
  68. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goal/v1.py +0 -0
  69. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.calibration_report/1.0/full.json +0 -0
  70. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.calibration_report/1.0/gate_failed.json +0 -0
  71. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.calibration_report/1.0/minimal.json +0 -0
  72. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.evidence_bundle/1.0/full.json +0 -0
  73. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.evidence_bundle/1.0/minimal.json +0 -0
  74. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.evidence_bundle/1.0/unsupported.json +0 -0
  75. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.goal_pack/1.0/full.json +0 -0
  76. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.goal_pack/1.0/minimal.json +0 -0
  77. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.goal_pack/1.0/starter_unforked.json +0 -0
  78. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.result/1.0/full.json +0 -0
  79. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.result/1.0/minimal.json +0 -0
  80. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.result/1.0/unsupported.json +0 -0
  81. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.run_summary/1.0/full.json +0 -0
  82. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.run_summary/1.0/minimal.json +0 -0
  83. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.run_summary/1.0/unsupported.json +0 -0
  84. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/capability.evidence/1.0/full.json +0 -0
  85. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/capability.evidence/1.0/goal.json +0 -0
  86. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/capability.evidence/1.0/minimal.json +0 -0
  87. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/capability.evidence/1.0/unsupported.json +0 -0
  88. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/machine.profile/1.0/full.json +0 -0
  89. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/machine.profile/1.0/minimal.json +0 -0
  90. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/machine.profile/1.0/unsupported.json +0 -0
  91. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/model.identity/1.0/full.json +0 -0
  92. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/model.identity/1.0/minimal.json +0 -0
  93. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/model.identity/1.0/unsupported.json +0 -0
  94. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/prompt.manifest/1.0/full.json +0 -0
  95. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/prompt.manifest/1.0/minimal.json +0 -0
  96. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/prompt.record/1.0/full.json +0 -0
  97. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/prompt.record/1.0/minimal.json +0 -0
  98. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/machine/v1.py +0 -0
  99. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/metrics.py +0 -0
  100. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/prompts.py +0 -0
  101. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/provenance.py +0 -0
  102. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/py.typed +0 -0
  103. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.calibration_report/1.0.json +0 -0
  104. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.goal_pack/1.0.json +0 -0
  105. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/machine.profile/1.0.json +0 -0
  106. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/prompt.manifest/1.0.json +0 -0
  107. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/prompt.record/1.0.json +0 -0
  108. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/serialization.py +0 -0
  109. {setspec-0.4.0 → setspec-0.6.0}/src/setspec/vocabulary.py +0 -0
  110. {setspec-0.4.0 → setspec-0.6.0}/tests/conftest.py +0 -0
  111. {setspec-0.4.0 → setspec-0.6.0}/tests/contract/test_version_negotiation.py +0 -0
  112. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_base.py +0 -0
  113. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_envelope.py +0 -0
  114. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_errors.py +0 -0
  115. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_events.py +0 -0
  116. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_metrics.py +0 -0
  117. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_payloads_benchmark.py +0 -0
  118. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_payloads_goal.py +0 -0
  119. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_prompts.py +0 -0
  120. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_serialization.py +0 -0
  121. {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_vocabulary.py +0 -0
@@ -7,6 +7,94 @@ packaging and release standards §3.
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.6.0] — 2026-09-02
11
+
12
+ ### Added
13
+
14
+ - **`benchmark.evidence_bundle` `1.1`** (Phase 7, ADR-0068 rule 5): the adapter axis carried one
15
+ payload out from `capability.evidence` `1.1`, so an exported bundle can hold adapter-bearing
16
+ evidence records. `EvidenceBundleV1_1Fields` overrides exactly one inherited field — `evidence`
17
+ becomes `WireSequence[CapabilityEvidenceV1_1Fields]` in place of the `1.0` element type — on a
18
+ new sibling class (`EvidenceBundleV1_1Out`/`EvidenceBundleV1_1In`) rather than an edit to the
19
+ existing `EvidenceBundleFields`/`EvidenceBundleOut`/`EvidenceBundleIn`, which keep meaning `1.0`
20
+ permanently. A bundle whose records carry no adapter dumps byte-for-byte what `1.0` writes today,
21
+ because a `1.1` evidence record with no adapter already dumps byte-identically to its `1.0`
22
+ counterpart — proved over the *existing* committed `1.0` goldens by the new
23
+ `tests/contract/test_bundle_minor_is_additive.py`, the bundle's own analogue of the `1.1` I15
24
+ exit-condition test. Mixed bundles — bare-base and adapter-bearing records in the same complete
25
+ export, the shape FreeWeight 1.1's actual export (H4, LA3) produces — are the intended semantics,
26
+ golden-tested as `goldens/benchmark.evidence_bundle/1.1/mixed.json`.
27
+
28
+ ### Changed
29
+ - Every prose reference to the planned "SpotCheck" package renamed to its actual name,
30
+ **Commissioner** — `spotcheck` collided with an unrelated, already-published PyPI package.
31
+ Cosmetic only: `governance.egress_decision`'s committed `1.0` JSON Schema snapshot regenerated
32
+ because two nested-type docstrings (`EgressVerdict`, `EgressRequestFields`) named the package;
33
+ no property, type or required field moved, confirmed by a description-stripped structural diff
34
+ before committing (the same check `docs/schemas.md` §5 documents for a dependency-docstring
35
+ ripple). Goldens are untouched — no wire value changed.
36
+
37
+ ## [0.5.0] — 2026-09-02
38
+
39
+ ### Added
40
+
41
+ - **`capability.evidence` `1.1`** (Phase 6, ADR-0058): an optional `adapter` field naming the
42
+ adapter axis a measurement was taken under. Absent — and byte-for-byte identical to `1.0` — on
43
+ every record measured on the bare base; a `@model_serializer` drops the field from the dump
44
+ entirely when unset, rather than emitting `"adapter": null`, so a non-adapter record written
45
+ through the new model is indistinguishable from what `0.4.0` writes (LA0 exit condition I15).
46
+ Lives on a new sibling class, `CapabilityEvidenceV1_1Fields`
47
+ (`CapabilityEvidenceV1_1Out`/`CapabilityEvidenceV1_1In`), rather than an edit to the existing
48
+ `CapabilityEvidenceFields`/`CapabilityEvidenceOut`/`CapabilityEvidenceIn`, which keep meaning
49
+ `1.0`: `benchmark.evidence_bundle` nests the `capability.evidence` shape by reference, so an
50
+ edit in place would have silently moved that schema's own committed `1.0` snapshot too. The
51
+ mechanism and the naming rule it implies — a bare exported name keeps the version it was frozen
52
+ at, so adopting `1.1` is an explicit import of `CapabilityEvidenceV1_1Out`/`In` and never
53
+ something a dependency upgrade delivers — are ADR-0068.
54
+ - **`model.adapter_manifest` `1.0`** (Phase 6, ADR-0061): the operator-reviewed record behind one
55
+ adapter — `name`, `artifact_file`, `artifact_sha256`, optional `source_sha256`, `base` (a
56
+ provider model name plus an optional artifact digest, at `digest`-or-`name_only` confidence),
57
+ `declared_capabilities`, `data_classification`, `format`, `created_at`, `notes`. `name` and the
58
+ two digest fields are validated by reconstructing a `baseaicore.AdapterIdentity`, reusing that
59
+ type's own name-pattern and digest-normalization rules rather than a second implementation.
60
+ **`data_classification` is required, with no schema default** (ADR-0065 rule 1): a manifest that
61
+ omits it is invalid, never silently defaulted closed.
62
+ - **`governance.egress_decision` `1.0`** (Phase 6, ADR-0051 §4, ADR-0054): one recorded egress
63
+ verdict — `decision_id`, an embedded request (`run_id`, `source_ref`, `data_classification`,
64
+ `target{name, remote, max_data_classification, provider_kind}`, `requested_at`), `verdict`
65
+ (`approved`/`denied`/`violation`), `reason`, `policy_name`, `policy_version`, `decided_at`.
66
+ SetSpec's first payload under a root other than `benchmark`/`capability`/`machine`/`model` —
67
+ added because the shape has a named second reader (IdeaPress's S4 egress badge reads decisions
68
+ PromptCadence exported, with Commissioner not installed). Two nullable fields, both one level down.
69
+ `target.max_data_classification` is deliberate: "remote with no declared ceiling" is the
70
+ fail-closed case a policy must be able to deny and record. `request.requested_at` mirrors
71
+ Commissioner spec §7's own `None` default and is on the wire so that its §11 contract 4 —
72
+ `from_payload(to_payload(d))` preserves **every** field — is keepable: a value-object field with
73
+ nowhere to land makes that round trip silently lossy. It is not a second record timestamp;
74
+ `decided_at` is the record's, and it stays required. Commissioner does not exist as code yet;
75
+ nothing here imports it.
76
+ - JSON Schema and goldens for all three: `capability.evidence/1.1.json` (`minimal`, `full`,
77
+ `unsupported`), `model.adapter_manifest/1.0.json` (`minimal`, `full`, `name_only`),
78
+ `governance.egress_decision/1.0.json` (`minimal`, `full`, `denied_no_ceiling`, `violation`).
79
+ The `capability.evidence/1.0` and `benchmark.evidence_bundle/1.0` schemas and goldens are
80
+ byte-for-byte unchanged — asserted by a dedicated contract test (I15) rather than by inspection.
81
+
82
+ ### Changed
83
+
84
+ - **`baseaicore>=0.4.1,<0.5`** (was `>=0.4,<0.5`). `setspec.governance.v1` and
85
+ `setspec.model.v1` import `DataClassification` and the adapter value objects at module scope,
86
+ and neither name exists in `baseaicore 0.4.0` — the old floor permitted an install that raises
87
+ `ImportError` on import. The same floor is what makes the snapshots below reproducible.
88
+ - Five already-committed `1.0` JSON Schema snapshots (`model.identity`, `benchmark.result`,
89
+ `benchmark.run_summary`, `capability.evidence`, `benchmark.evidence_bundle`) were regenerated to
90
+ pick up two `baseaicore 0.4.1` enum docstring edits (`IdentityConfidence`,
91
+ `ModelCapabilityFlag`) that the raised floor above surfaces in their nested `$defs`
92
+ descriptions. **Structurally identical** — no property, type or required-field changed,
93
+ confirmed by a description-stripped diff before committing; the regeneration is a byproduct of
94
+ the dependency bump, not a payload change (`docs/schemas.md` §5).
95
+ - Bumped to 0.5.0 for the `capability.evidence` `1.1` addition and the two new payload types
96
+ (packaging standards §3: additive, non-breaking).
97
+
10
98
  ## [0.4.0] — 2026-08-29
11
99
 
12
100
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: setspec
3
- Version: 0.4.0
3
+ Version: 0.6.0
4
4
  Summary: Every versioned data contract that crosses an application boundary: benchmark results, capability evidence, event/error envelopes, prompt records.
5
5
  Project-URL: Homepage, https://github.com/JPKell/SetSpec
6
6
  Project-URL: Documentation, https://github.com/JPKell/SetSpec/tree/main/docs
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Typing :: Typed
18
18
  Requires-Python: >=3.12
19
- Requires-Dist: baseaicore<0.5,>=0.4
19
+ Requires-Dist: baseaicore<0.5,>=0.4.1
20
20
  Requires-Dist: jinja2<4,>=3.1
21
21
  Requires-Dist: pydantic<3,>=2.9
22
22
  Provides-Extra: dev
@@ -35,18 +35,32 @@ Description-Content-Type: text/markdown
35
35
 
36
36
  Every versioned data contract that crosses an application boundary: benchmark results, capability evidence, event/error envelopes, prompt records.
37
37
 
38
- **Status:** `0.3.0` — Phases 1–2, 3A and 4 complete, and **the v1.0 contracts are frozen.** Eight
39
- payload types are published at `1.0` — `model.identity`, `machine.profile`, `benchmark.result`,
40
- `benchmark.run_summary`, `capability.evidence`, `benchmark.evidence_bundle`,
38
+ **Status:** `0.6.0` — Phases 1–2, 3A, 4, 5, 6 and 7 complete, and **the v1.0 contracts are frozen**,
39
+ with two additive minors now published on top of that freeze. Six payload types remain frozen at
40
+ `1.0` only — `model.identity`, `machine.profile`, `benchmark.result`, `benchmark.run_summary`,
41
41
  `benchmark.goal_pack` and `benchmark.calibration_report` — each with generated JSON Schema and at
42
42
  least three golden payloads shipped as package data. `setspec.DRAFT_SCHEMAS` is empty, which is
43
43
  where the freeze is readable at runtime rather than only stated here; from now on a new optional
44
44
  field is a minor bump and anything else is a major, enforced by a snapshot diff in CI.
45
45
 
46
+ Phase 6 (the adapter arc's LA0 checkpoint) adds three things without touching any of the above:
47
+ `capability.evidence` gains an additive `1.1` (an optional `adapter` field, absent — and
48
+ byte-identical to `1.0` — on every record with no adapter); `model.adapter_manifest` `1.0`
49
+ publishes the operator-reviewed record behind one adapter; and `governance.egress_decision` `1.0`
50
+ is the package's first payload under a root other than `benchmark`/`capability`/`machine`/`model`,
51
+ carrying a recorded egress verdict for a reader that has Commissioner installed or not. Phase 7
52
+ carries that same minor one payload out: `benchmark.evidence_bundle` gains its own additive `1.1`,
53
+ nesting `capability.evidence` `1.1` in place of the `1.0` element type its frozen `1.0` still
54
+ nests, so an exported bundle can now carry adapter-bearing evidence — absent any adapter,
55
+ byte-identical to `1.0`. `capability.evidence` and `benchmark.evidence_bundle` are therefore the
56
+ two payload types with a second published minor; every other payload type remains exactly `1.0`.
57
+
46
58
  The [schema catalogue](docs/schemas.md) lists every payload type, its artifacts, and the
47
- cross-field rules the JSON Schema cannot express. Event and error envelopes (Phase 3) and prompt
48
- records (Phase 5) are not yet written and are therefore not part of the freeze. See the
49
- [development plan](docs/packages/setspec/development-plan.md) for what each phase adds.
59
+ cross-field rules the JSON Schema cannot express. Event and error envelopes (Phase 3) are not yet
60
+ written and are therefore not part of the freeze. Prompt records (`setspec.prompts`, Phase 5,
61
+ added in 0.4.0) are shipped: prompt packs with their three content hashes and sandboxed
62
+ rendering; they carry their own record schema version rather than joining the frozen payload types.
63
+ See the [development plan](docs/packages/setspec/development-plan.md) for what each phase adds.
50
64
 
51
65
  Part of the **Local AI Suite**.
52
66
 
@@ -2,18 +2,32 @@
2
2
 
3
3
  Every versioned data contract that crosses an application boundary: benchmark results, capability evidence, event/error envelopes, prompt records.
4
4
 
5
- **Status:** `0.3.0` — Phases 1–2, 3A and 4 complete, and **the v1.0 contracts are frozen.** Eight
6
- payload types are published at `1.0` — `model.identity`, `machine.profile`, `benchmark.result`,
7
- `benchmark.run_summary`, `capability.evidence`, `benchmark.evidence_bundle`,
5
+ **Status:** `0.6.0` — Phases 1–2, 3A, 4, 5, 6 and 7 complete, and **the v1.0 contracts are frozen**,
6
+ with two additive minors now published on top of that freeze. Six payload types remain frozen at
7
+ `1.0` only — `model.identity`, `machine.profile`, `benchmark.result`, `benchmark.run_summary`,
8
8
  `benchmark.goal_pack` and `benchmark.calibration_report` — each with generated JSON Schema and at
9
9
  least three golden payloads shipped as package data. `setspec.DRAFT_SCHEMAS` is empty, which is
10
10
  where the freeze is readable at runtime rather than only stated here; from now on a new optional
11
11
  field is a minor bump and anything else is a major, enforced by a snapshot diff in CI.
12
12
 
13
+ Phase 6 (the adapter arc's LA0 checkpoint) adds three things without touching any of the above:
14
+ `capability.evidence` gains an additive `1.1` (an optional `adapter` field, absent — and
15
+ byte-identical to `1.0` — on every record with no adapter); `model.adapter_manifest` `1.0`
16
+ publishes the operator-reviewed record behind one adapter; and `governance.egress_decision` `1.0`
17
+ is the package's first payload under a root other than `benchmark`/`capability`/`machine`/`model`,
18
+ carrying a recorded egress verdict for a reader that has Commissioner installed or not. Phase 7
19
+ carries that same minor one payload out: `benchmark.evidence_bundle` gains its own additive `1.1`,
20
+ nesting `capability.evidence` `1.1` in place of the `1.0` element type its frozen `1.0` still
21
+ nests, so an exported bundle can now carry adapter-bearing evidence — absent any adapter,
22
+ byte-identical to `1.0`. `capability.evidence` and `benchmark.evidence_bundle` are therefore the
23
+ two payload types with a second published minor; every other payload type remains exactly `1.0`.
24
+
13
25
  The [schema catalogue](docs/schemas.md) lists every payload type, its artifacts, and the
14
- cross-field rules the JSON Schema cannot express. Event and error envelopes (Phase 3) and prompt
15
- records (Phase 5) are not yet written and are therefore not part of the freeze. See the
16
- [development plan](docs/packages/setspec/development-plan.md) for what each phase adds.
26
+ cross-field rules the JSON Schema cannot express. Event and error envelopes (Phase 3) are not yet
27
+ written and are therefore not part of the freeze. Prompt records (`setspec.prompts`, Phase 5,
28
+ added in 0.4.0) are shipped: prompt packs with their three content hashes and sandboxed
29
+ rendering; they carry their own record schema version rather than joining the frozen payload types.
30
+ See the [development plan](docs/packages/setspec/development-plan.md) for what each phase adds.
17
31
 
18
32
  Part of the **Local AI Suite**.
19
33