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.
- {setspec-0.4.0 → setspec-0.6.0}/CHANGELOG.md +88 -0
- {setspec-0.4.0 → setspec-0.6.0}/PKG-INFO +22 -8
- {setspec-0.4.0 → setspec-0.6.0}/README.md +20 -6
- setspec-0.6.0/docs/packages/setspec/development-plan.md +519 -0
- {setspec-0.4.0 → setspec-0.6.0}/docs/packages/setspec/spec.md +70 -5
- {setspec-0.4.0 → setspec-0.6.0}/docs/schemas.md +102 -11
- {setspec-0.4.0 → setspec-0.6.0}/pyproject.toml +7 -1
- {setspec-0.4.0 → setspec-0.6.0}/requirements/ci.lock +3 -3
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/__about__.py +1 -1
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/artifacts.py +26 -3
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/capability/v1.py +117 -8
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/envelope.py +35 -19
- setspec-0.6.0/src/setspec/goldens/benchmark.evidence_bundle/1.1/full.json +236 -0
- setspec-0.6.0/src/setspec/goldens/benchmark.evidence_bundle/1.1/minimal.json +4 -0
- setspec-0.6.0/src/setspec/goldens/benchmark.evidence_bundle/1.1/mixed.json +230 -0
- setspec-0.6.0/src/setspec/goldens/benchmark.evidence_bundle/1.1/unsupported.json +73 -0
- setspec-0.6.0/src/setspec/goldens/capability.evidence/1.1/full.json +85 -0
- setspec-0.6.0/src/setspec/goldens/capability.evidence/1.1/minimal.json +25 -0
- setspec-0.6.0/src/setspec/goldens/capability.evidence/1.1/unsupported.json +61 -0
- setspec-0.6.0/src/setspec/goldens/governance.egress_decision/1.0/denied_no_ceiling.json +20 -0
- setspec-0.6.0/src/setspec/goldens/governance.egress_decision/1.0/full.json +20 -0
- setspec-0.6.0/src/setspec/goldens/governance.egress_decision/1.0/minimal.json +20 -0
- setspec-0.6.0/src/setspec/goldens/governance.egress_decision/1.0/violation.json +20 -0
- setspec-0.6.0/src/setspec/goldens/model.adapter_manifest/1.0/full.json +19 -0
- setspec-0.6.0/src/setspec/goldens/model.adapter_manifest/1.0/minimal.json +16 -0
- setspec-0.6.0/src/setspec/goldens/model.adapter_manifest/1.0/name_only.json +19 -0
- setspec-0.6.0/src/setspec/governance/v1.py +139 -0
- setspec-0.6.0/src/setspec/model/v1.py +389 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.evidence_bundle/1.0.json +2 -2
- setspec-0.6.0/src/setspec/schemas/benchmark.evidence_bundle/1.1.json +774 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.result/1.0.json +2 -2
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.run_summary/1.0.json +2 -2
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/capability.evidence/1.0.json +2 -2
- setspec-0.6.0/src/setspec/schemas/capability.evidence/1.1.json +743 -0
- setspec-0.6.0/src/setspec/schemas/governance.egress_decision/1.0.json +158 -0
- setspec-0.6.0/src/setspec/schemas/model.adapter_manifest/1.0.json +135 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/model.identity/1.0.json +2 -2
- setspec-0.6.0/tests/contract/test_adapter_axis_i15.py +101 -0
- setspec-0.6.0/tests/contract/test_bundle_minor_is_additive.py +122 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/contract/test_cross_version.py +5 -1
- {setspec-0.4.0 → setspec-0.6.0}/tests/contract/test_goldens.py +8 -2
- {setspec-0.4.0 → setspec-0.6.0}/tests/contract/test_schema_snapshots.py +48 -3
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_payloads_capability.py +274 -5
- setspec-0.6.0/tests/unit/test_payloads_governance.py +197 -0
- setspec-0.4.0/docs/packages/setspec/development-plan.md +0 -293
- setspec-0.4.0/src/setspec/model/v1.py +0 -172
- {setspec-0.4.0 → setspec-0.6.0}/.editorconfig +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/.github/workflows/ci.yml +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/.github/workflows/release.yml +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/.gitignore +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/.importlinter +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/.pre-commit-config.yaml +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/CONTRIBUTING.md +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/LICENSE +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/PHASE4_ISSUES.md +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/SECURITY.md +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/docs/README.md +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/docs/prompts-adoption-checklist.md +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/requirements/README.md +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/requirements/release.in +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/requirements/release.lock +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/__init__.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/base.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/benchmark/v1.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/error/v1.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/errors.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/event/v1.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goal/v1.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.calibration_report/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.calibration_report/1.0/gate_failed.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.calibration_report/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.evidence_bundle/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.evidence_bundle/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.evidence_bundle/1.0/unsupported.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.goal_pack/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.goal_pack/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.goal_pack/1.0/starter_unforked.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.result/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.result/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.result/1.0/unsupported.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.run_summary/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.run_summary/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/benchmark.run_summary/1.0/unsupported.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/capability.evidence/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/capability.evidence/1.0/goal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/capability.evidence/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/capability.evidence/1.0/unsupported.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/machine.profile/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/machine.profile/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/machine.profile/1.0/unsupported.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/model.identity/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/model.identity/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/model.identity/1.0/unsupported.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/prompt.manifest/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/prompt.manifest/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/prompt.record/1.0/full.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/goldens/prompt.record/1.0/minimal.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/machine/v1.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/metrics.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/prompts.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/provenance.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/py.typed +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.calibration_report/1.0.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/benchmark.goal_pack/1.0.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/machine.profile/1.0.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/prompt.manifest/1.0.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/schemas/prompt.record/1.0.json +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/serialization.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/src/setspec/vocabulary.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/conftest.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/contract/test_version_negotiation.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_base.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_envelope.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_errors.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_events.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_metrics.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_payloads_benchmark.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_payloads_goal.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_prompts.py +0 -0
- {setspec-0.4.0 → setspec-0.6.0}/tests/unit/test_serialization.py +0 -0
- {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.
|
|
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.
|
|
39
|
-
|
|
40
|
-
`
|
|
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)
|
|
48
|
-
|
|
49
|
-
|
|
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.
|
|
6
|
-
|
|
7
|
-
`
|
|
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)
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|