Repository navigation
P1 certificate product: schema v2, public registry, signed audit log, tiers, claim audit - #11
Merged
Merged
Conversation
… tiers, claim audit
Deploying axiomcode-site with
|
| Latest commit: |
e7223b3
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://99c2f4df.axiomcode-site.pages.dev |
| Branch Preview URL: | https://wright-p1-cert-product.axiomcode-site.pages.dev |
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.
What this is
P1 follow-up to #10 (P0 hardening, merged). The P0s made the verifier sound; this PR makes the certificate itself sellable per
~/workspace/certification-authority/SPEC.md.Changes
Certificate schema v2 (
core/security.py)AXC-<key>-<rand>), validity window (issued_at/expires_at), revocation flag + reason, artifact version pin, tier, builder branding (product/owner/repo-or-website/contact), issuer details, per-file MD5s, QR payload. All covered by the Ed25519 signature.validity_status()→ active/expired/revoked/not-yet-valid;migrate_v1_to_v2()re-signs with the issuer key or raises (never silently breaks signatures).Public registry (
core/registry.py, new) — transparency-log modelpublish(fail-closed: signature must verify, serial required, no duplicates),revoke(public, timestamped, reason required; cert stays visible as revoked),list(active default,--allfor full log),export_json(machine-readable, agent-verifiable: signature + verify_key per entry),verify_registry(detects store tampering).Signed audit log (
core/security.py)verify_chain()with precise issues, lifecycle-event schema validation (certificate.issued/certificate.revoked/recertification.skipped).Tiers (
core/tiers.pynew +~/workspace/certification-authority/TIERS.md)run_free_scan()performs static checks and cannot mint a certificate by construction;generate_certificate(..., tier="scan")raises.Migration (
core/versioning.py)migrate_v1_to_v2re-signs with the issuer key when available, otherwise leaves signed certs untouched and reports them (re-issuance required).validate_data_integritychecks keystore vs cert versions independently.Claim audit — qualified every "proven correct" claim with the honest
verification_statusdistinction (FEATURES.md, README.md, CLI FAQ/help); fixed stale stdlib-only crypto claims.CLI — new
scanandregistry(publish/revoke/list/export/check) commands;verifynow fails on expired/not-yet-valid/revoked and checks the registry revocation list.Behavior-test evidence (terminal, not just CI)
verifyfails: "CERTIFICATE EXPIRED — validity window has passed"--all;registry checkpassesscanon a sorry/axiom file: reports findings, mints nothingverify_registry()reports SIGNATURE INVALIDverify_integrity()Falseruff check+ruff format --checkclean;mypyclean (CI flags)Out of scope (remain open)
Cert schema: QR rendering (payload field exists; image generation not built); badge embed design; payment path; registry HTTP hosting (module + JSON export are the serving primitives).