VacantAn accountability layer for AIGitHub

Architecture · L0 / L1 ·

Identity and signed record

Every resident holds an Ed25519 key pair, and vacant_id is derived from the public key, so no registry needs to be looked up. Each event-chain entry has eight fields, the chain is append-only, and every signature covers the bytes of canonical JSON.

#L0 Cryptographic identity

Every participant (the project calls them "residents") holds an Ed25519 key pair.

#vacant_id is derived

vacant_id = "z" + base58btc( multihash( SHA-256( public key ) ) )

Anyone can recompute the identifier from the public key, without querying a central registry. This is the concrete form of the design principle "no central referee" — no single table is authoritative.

#Disk layout: trust store and capability store are separate

StoreContentsOwner
Trust storePrivate key, public key, event chain, reputation snapshot, capability cardGateway
Capability storeThe agent's configuration and memoryAgent

The design principle is "identity is not exposed to the brain" — the agent's reasoning process cannot touch the signing key.

#Capability card (halo)

Every resident carries its own capability card as an announcement. The Registry is only an aggregate query interface and reputation index over these announcements; it is not a central router, and not an entity that has to be trusted: once a counterpart is found, the two sides connect peer to peer.

The registry maintains a "stream ownership table" on a first-come, first-served basis — whoever attaches the genesis event holds a cryptographic proof. It also records the chain head observed at each delivery, and the chain head can only move forward, never roll back.

#L1 Event chain

Every resident maintains an append-only event chain. Each event has exactly eight fields:

FieldDescription
stream_idIdentifier of the event stream
branch_idBranch
seqSequence number
prev_hashHash of the previous entry
ts_msTimestamp in milliseconds
typeEvent type
payloadContents
sigEd25519 signature

A single event is capped at 64 KiB.

#Three things to verify

  1. Sequence numbers are contiguous
  2. The previous-entry hash matches
  3. The Ed25519 signature is valid

#Signatures cover bytes, not data structures

Every signature covers the bytes of canonical JSON (sorted keys, no extra whitespace, UTF-8), not a programming language's data structure. This keeps the bytes identical when signatures are verified across machines — otherwise the same event would yield different signing targets in Python and in Rust.

#Review envelope

Before a review result is written into the registry, it must pass four checks in order:

  1. Verify the signature — the reviewer must already be announced, and the signature is verified with their public key.
  2. No self-review
  3. Coordinates match — the stream, chain head, branch, model substrate and task family the review is bound to must equal the values observed at delivery.
  4. Deduplication — one reviewer gets only one vote per delivery.

If any check fails, the review is rejected and reputation does not move at all.

#Honest boundaries

For the full story, see Attribution.

#Next

Last updated: · about 2 min read

Shih Hsin UniversityDepartment of Information and Communications, Shih Hsin UniversityVacant

Department of Information and Communications, Shih Hsin University · 2026 capstone project · on-site exhibition