Skip to main content

csoai-gspc

Read the live GSPC AI-governance board and verify its Ed25519-signed measurement cards.

PyPI version PyPI downloads License board DOI 10.5281/zenodo.21991104: Zenodo record unavailable

GET https://councilof.ai/api/gspc is the authority. This package is a reader: it never caches a verdict, never prints a number the board did not return, and reports three states and only three.

pip install "csoai-gspc[verify]"

The verify extra pulls in cryptography for the Ed25519 check. Without it the library still reads the board; card verification then returns UNCHECKABLE, which is the honest answer and not a silent pass.

Three states, never two

state means
VALID the body reproduces its id and the signature verifies under the pinned key
INVALID the card fails the rule — altered body, wrong key, bad signature
UNCHECKABLE the check could not complete — no Ed25519 backend, unfetchable card, malformed file

UNCHECKABLE is a different claim from INVALID. "I could not check" is not "it is forged", and this library never collapses the two. bool(verdict) is true only for VALID.

Command line

$ csoai-gspc check
{"agree": true, "printed_slots": …, "printed_measured": …,
 "derived_slots": …, "derived_measured": …, ...}   # the numbers are whatever the live array holds
OK — the printed totals are derived from the axis array, not typed.

$ csoai-gspc board          # every slot, its bench, its n, its frozen bank
$ csoai-gspc axis governance
$ csoai-gspc verify acf6bf0356123632758bf6c98c83d81c7a8392c3b111b311317c516cc65133a4
VALID — acf6bf0356123632 · id and signature check under the pinned key
$ csoai-gspc root           # the Merkle root over the published cards
$ csoai-gspc snapshot       # the dated snapshot bundled with this release — not the live GET

check exists because a headline count is worth nothing if it was typed. It fetches the board, recomputes the slot and measured counts from the axis array, and exits non-zero if the printed totals disagree — so you can refute us with our own payload.

Library

from csoai_gspc import fetch_board, check_totals, get_axis, fetch_card, verify_card, pinned_key

board = fetch_board()
assert check_totals(board)["agree"]

gov = get_axis("governance", board)                # aliases resolve too: "gov", "GSPC-Governance"
print(gov["bench"], gov["n"], gov["status"])     # bench, n and status exactly as the board carries them

key = pinned_key()                                # from https://councilof.ai/.well-known/did.json
v = verify_card(fetch_card("acf6bf0356123632758bf6c98c83d81c7a8392c3b111b311317c516cc65133a4"), key)
print(v.state, v.reason)

fetch_card takes the card's full id — 64 hex characters — and raises ValueError for anything else (an abbreviated acf6bf03…65133a4 included) before touching the network.

Pin the key. This step is not optional

A card carries its own pubkey. Verifying a card against the key it ships with proves only that the file is self-consistent — anyone can alter a body, sign it with a key made a second ago, and have it "verify". pinned_key() reads did:web:csoai.org#card-attestation-1 from the published DID document, and verify_card returns INVALID when a card's key is not that one.

Why this library is written in Python

The published preimage rule is CPython's own serialiser:

json.dumps(body, sort_keys=True, separators=(",", ":"), ensure_ascii=True).encode("utf-8")

CPython renders a float of integral value as 0.0. ECMAScript JSON.stringify, Go's encoding/json and RFC 8785 (JCS) all render the same value as 0. A naive verifier in those languages computes a different preimage and reports a false failure on roughly a third of the published set. In Python the rule reproduces exactly, so this package needs no canonicalisation shim — and you should not re-canonicalise a published card with JCS.

Tests run against the published bytes

There are no fixtures and no mocks. The suite fetches the real DID document and a real card, asserts the documented key, asserts the preimage rule reproduces the published id, and asserts that altering one character or substituting the key is loud.

What this is not

Not a certification, not a rating, not an endorsement, and not legal advice. A card is evidence of what specific bytes scored on a frozen bank at a specific time. No slot is for sale.

Lid: printed live by csoai-gspc board — totals.lid verbatim, never typed here.

Issued by CSOAI Ltd (England & Wales, Companies House 16939677), 3rd Floor, 86–90 Paul Street, London EC2A 4NE. Apache-2.0.

Metadata

Release files for csoai-gspc 0.2.20260930.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for csoai-gspc 0.2.20260930.1
File Size Uploaded
csoai_gspc-0.2.20260930.1.tar.gz 19.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for csoai-gspc 0.2.20260930.1
File Interpreter ABI Platform
csoai_gspc-0.2.20260930.1-py3-none-any.whl Python 3 none any Details

Total release size: 36.8 kB

Release files / csoai_gspc-0.2.20260930.1.tar.gz

Download URL csoai_gspc-0.2.20260930.1.tar.gz
Size 19.4 kB
Tags Source
SHA-256 checksum
How to use checksums
3d1479340a33f408bfb6312ea8b881394d59d500ed9a7eca73ead9f26478d7d3
BLAKE2b-256 checksum
How to use checksums
f23ecd03c840550a164443bc6e9c9f5b771883defeecbe16cd6eeaa7e7774e18
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / csoai_gspc-0.2.20260930.1-py3-none-any.whl

Download URL csoai_gspc-0.2.20260930.1-py3-none-any.whl
Size 17.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
037acf709d5cd0fa01af5bacbcb375b75a96c5c6e29926fd6a44ce3117605be4
BLAKE2b-256 checksum
How to use checksums
9bf12a4a77c15a91957d06cf8b0d5b8bbb5de2e1a3f27cd53cf67dcf664d9ead
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page