CR-010.R1: freeze the proof spec + ship a conformance suite - #241
Merged
Merged
Conversation
Publish the proof-bundle envelope, the trusted-key manifest, and the verify-result contract as versioned JSON Schemas + prose, plus a conformance corpus any third-party verifier must classify identically. Spec version (1.0) is decoupled from the SDK version. Schemas and corpus ship in the wheel and load via importlib.resources, so an external implementer can build a conformant verifier from the published artifacts alone -- verified by running all 9 cases from an installed wheel at a neutral cwd. Corpus covers all 7 VerifyFailure members plus the exit-2 usage path. Expectations are empirically derived from the reference implementation, and each case asserts the typed failure, the process exit code, and the absent-vs-false check semantics. Additive: no signing or verification logic changed. proof_format_version is published as an opaque, signature-covered string -- it sits inside both the signed preimage and the leaf hash, so forging it fails closed (measured: wrapper-only -> UNTRUSTED_KID, wrapper+record -> TAMPERED_LEAF). Unifying its three divergent in-tree values is deferred to R2 and would be signature-breaking; documented in SPEC 8.2. Sentinel: pass 1 BLOCK (3 blockers + 3 majors). Every finding reproduced before action -- the installed-wheel path bug was real and is fixed; the hatchling-artifacts and unconstrained-version blockers were refuted by measurement. Pass 2 APPROVE 89%, 0 blockers. TS-1..TS-4 screen: 0 hits. 568 tests green across test_pct + test_verify + test_tamper_evidence, verifier isolation guard included. Plan: plan_60634c1a
🛡️ GraQle PR Guardian💥 Blast Radius: 20 modules affected
Total blast radius: 20 🏛️ Governance Verdict🚫 FAIL
🔍 SHACL ViolationsNo SHACL violations detected. ✅ 🔐 Approval RequirementsThis PR requires approval from:
❌ Approval requirement NOT yet satisfied.
🔬 Powered by GraQle PR Guardian v0.1.0 · Scan completed 2026-07-27T20:35:19.476493+00:00 |
harishquantamix
approved these changes
Jul 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CR-010.R1 — Freeze the proof spec + ship a conformance suite (public)
Cherry-pick of the feature commit
1fa41b70from private PR #318 (merged 2026-07-27, merge commit9acbf4cf), applied onto public master356dae49.What this publishes
GraQle's tamper-evidence proof format is now a frozen, versioned, independently-implementable spec rather than an implicit contract living in code and docstrings.
graqle/pct/schema/proof-spec/v1.0/bundle.schema.jsongraqle/pct/schema/proof-spec/v1.0/keyring.schema.jsongraqle/pct/schema/proof-spec/v1.0/verify-result.schema.json--format jsonresult contractgraqle/pct/schema/proof-spec/v1.0/SPEC.mdgraqle/pct/schema/conformance/tests/test_pct/test_proof_spec_conformance.pyModified — 2 files only:
graqle/pct/schema/__init__.py(loader API) andpyproject.toml(wheel artifacts). No signing or verification logic changed.Why it matters
A third party can now implement a conformant verifier from the published artifacts alone. That claim is tested literally, not asserted: the full corpus runs from an installed wheel at a neutral cwd, over a subprocess/JSON boundary, with no GraQle imports on the consuming side.
VerifyFailuremembers + the exit-2 usage pathSPEC_VERSION(1.0) is decoupled from the SDK version — pinning to the spec does not pin you to a releaseproof_format_versionis published as opaque — deliberatelyThe field is inside both the ed25519 signed preimage and the leaf hash, so cryptography pins it, not schema validation:
UNTRUSTED_KID— signature no longer validatesTAMPERED_LEAF— leaf hash no longer matchesA schema
enumwould therefore add no security while breaking legitimately divergent values already in circulation. Both attacks are pinned as regression tests; the rationale is in SPEC §3.1, and SPEC §8.2 records that any future unification of this field is signature-breaking and needs a migration path rather than an in-place rewrite.Verification on this public base
test_pct+test_verify+test_tamper_evidence, verifier isolation guard includedGovernance
Private-first per ABSOLUTE RULE #0: private PR #318 opened, reviewed, and merged first; this public PR carries the feature commit only. Sentinel (2-pass adversarial) APPROVE 89%, 0 blockers — pass 1 blocked on a real installed-wheel path bug that is fixed and regression-pinned, and on two further claims that were refuted by measurement. Plan
plan_60634c1a· lessonlesson_20260727T190027.🤖 Generated with Claude Code