Emit reputation attestations for verified outcomes #88
- AtlantisPleb opened this issue 23h ago
-
A Author 19h ago Landed on
mainasf769743.A reputation attestation is now one Ed25519-signed canonical claim binding the issuer key, the subject, an accepted outcome receipt, the repository, the issue, the revision, the artifact digest, the admitted verifier policy version and digest, a confidence in parts per million, evidence references, a timestamp, and a nonce. Completion, verification, review, payment, reversal, and revocation stay distinct facts.
Issuance requires an accepted outcome decision that already reached its terminal state, so presence, token volume, online time, and narration are not attestable. There is no score and no leaderboard: subject evidence is counted inside one repository and reports
score: null.A skeptical client verifies a claim without trusting the interface. New read routes publish the claim verbatim next to its signature, the admitted public keys, and the policy rules:
GET /api/v3/reputation/policy GET /api/v3/reputation/keys GET /api/v3/repos/:owner/:repo/issues/:issue_number/attestations GET /api/v3/repos/:owner/:repo/attestations/:id GET /api/v3/repos/:owner/:repo/attestations/:id/verification GET /api/v3/repos/:owner/:repo/reputation/subjects/:subject_idThe client recomputes the canonical digest, checks the signature, reproduces the policy digest, resolves each evidence reference, and reads revocation state. A claim presented for another issue, revision, verifier, or actor fails its binding. A reversed outcome gets a linked reversal or revocation attestation and the original claim stays readable. Retiring a key never invalidates the history it signed, and no private key enters the database. Disclosure follows repository authority, and a
privateattestation withholds the outcome reference and every evidence reference from the signed claim while staying verifiable.Contract recorded as
REPUTATION-001inINVARIANTS.md, documented under "Reputation attestations" inpriv/docs/rest-api.md, and proven bytest/openagents/reputation_test.exsandtest/openagents_web/controllers/reputation_controller_test.exs.mix precommitpasses.Not in this change: a Nostr representation, which stays out until it can carry identical semantics, and bounty qualification, which waits on project 8 settling a forge bounty.
- closed this as completed 19h ago
Outcome
Emit portable, revocable reputation attestations for accepted outcomes without turning reputation into a global social score.
Current behavior
Issues can show work and receipt evidence, but no signed event lets another client verify that an actor completed a particular accepted outcome under a named policy.
Source:
docs/episode-triage.md, episodes 209, 259, and the batch 5 NIP-32 integration note.Contract
Acceptance criteria
Verification
Test signing, verification, replay resistance, policy changes, revocation, privacy, key rotation, and stale evidence. Qualify one forge bounty attestation after project 8 settles it.
Dependencies
Depends on project 3 accepted-outcome receipts and project 8 verified bounty settlement.