Civic
Civic is two things at once: the framework — a constitution plus a catalog of specifications — and the on-chain namespace, civic/<version> (currently civic/0.3), that those specs define. Repo: blurt/civlayer/civic.
Versioned and evolving
civic/0.3, Constitution v0.9.6. Payloads are additive across versions, but the contract is still moving — treat this as the shape, and read the repo's SCHEMAS/ and PAYLOADS/ for the authoritative current form.
The contract (civic/0.3)
- One on-chain id. Every civic declaration is a
custom_jsonwithid: "civic". The payload'sgraph+actiondistinguish it — there is nocivic_declare/civic_revokeid, and no per-action id. - Graph + action.
graphselects the domain (trust,membership, … — six graphs);actionis the verb within that graph. A parser routes on the pair and validates the rest against the graph's schema. - Key / signing matrix. Civic declarations (anchors and exits) are active-key
custom_json; the readable membership posts are posting-keycommentops. The acting account is always read fromrequired_auths[0], never from a field in the payload. - Action, not status. The chain records what happened. Recognition tiers and trust scores are explorer-derived and never authored on-chain (
recognition.tier,trust.*arenullat write time). - Schema-validated. Every payload is validated against its JSON Schema (draft 2020-12) before broadcast.
Graphs
The graph field selects the domain of a declaration. Two are the most developed:
membership— joining and leaving a civilization (see Membership below).trust— trust declarations between accounts (the graph the indexer projects into/trust/given,/trust/received,/trust/feed). The optional context message is length-capped by the payload spec.
Additional graphs (identity, association, authority, endorsement) round out the "voluntary digital association" surface; each ships as a payload spec + JSON Schema in the framework.
Membership
Membership is tiered: CIV0 is the Blurt civilization, with sub-civilizations addressed through a civilization target. An account joins CIV0 by:
- Publishing four readable CDO posts (posting key): a Civic Affirmation Manifest as the thread root, with the Civic Charter, Civic Declaration, and Civic Oath threaded beneath it as comments.
- Broadcasting one immutable
custom_jsonanchor (active key) withid: "civic",graph: "membership",action: "register",spec: "civic/0.3", the post permlinks + their SHA-256 hashes, and a Custody Disclosure.
Membership is durable and ends only by an explicit exit — renounce (human / cybernetic Citizens) or leave (Organisations / Agents) — which returns the account to Pioneer (the pre-membership state).
The framework repo
The civic/ framework is a documentation-and-spec tree, not a service:
Civic/
FOUNDING/ constitution, declaration of independence, guarantees, recognition
ARCHITECTURE/ layers, account classes, graph taxonomy, economic security
REGISTRY/ declaration catalog, Explorer spec, onboarding flow
PAYLOADS/ per-graph payload specs (standard + graphs)
SCHEMAS/ JSON Schemas (envelope + graphs + profile)
TEMPLATES-shared/ charter, declaration, manifest, civic-profile.json
KITS/ per-account-class onboarding packs
REFERENCE/ glossary, principles
PROJECT/ state, hierarchy, changelog, open itemsGood entry points: the constitution (FOUNDING/), what you can declare (REGISTRY/), and the data shapes (PAYLOADS/ + SCHEMAS/).
