⤓ raw markdown (machine contract)
Document de référence. Neutre, ouvert, versionné. Aucun code applicatif : formats de données et contrats d'interface uniquement. Toute implémentation future doit s'y conformer.
Décisions verrouillées 2026-05-18 (déléguées par l'utilisateur) : - Coeur canonique = W3C DID + Verifiable Credentials par-dessus l'ed25519 existant. - 3 premiers adaptateurs = MCP → A2A → AP2 (dans cet ordre). - Marketplace crypto DÉCOUPLÉE de l'identité (neutralité = condition du rôle de pont).
EdDSA).Méthode : did:key (auto-souverain, par défaut) ou did:web (organisations). Identifiant dérivé de la clé publique Ed25519 existante : aucune migration de clé.
{
"@context": ["https://www.w3.org/ns/did/v1"],
"id": "did:key:z6Mk...",
"controller": "did:key:z6Mk...",
"verificationMethod": [{
"id": "did:key:z6Mk...#key-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:key:z6Mk...",
"publicKeyMultibase": "z6Mk..."
}],
"authentication": ["did:key:z6Mk...#key-1"],
"assertionMethod": ["did:key:z6Mk...#key-1"],
"service": [
{ "id": "#mcp", "type": "AICodexMCP", "serviceEndpoint": "https://maxiaworld.app/mcp" },
{ "id": "#a2a", "type": "A2ACard", "serviceEndpoint": "https://maxiaworld.app/a2a/<did>.json" },
{ "id": "#reputation", "type": "AICodexReputation", "serviceEndpoint": "https://maxiaworld.app/reputation/<did>" }
]
}
Bloc séparé, lié au DID, jamais dans le DID Document (le DID Document reste W3C-pur pour interop) :
{
"did": "did:key:z6Mk...",
"aip": "0.3.0",
"birth": { "block": "<chain>:<height>", "ts": "2026-..." },
"lineage": { "parent": "did:key:z6Mk...|null", "inherited": 0.10 },
"frameworks": ["claude","gpt","gemini","llama","custom"]
}
Neutralité : birth.block ancre l'existence sur une chaîne au choix, n'impose aucun rail de paiement. Preuve d'antériorité, pas dépendance crypto.
Le seul actif rare. Émise par AI Codex, signée Ed25519, expiration courte (réémission périodique), vérifiable par n'importe qui hors plateforme.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://maxiaworld.app/contexts/aicodex-reputation-v1.json"
],
"type": ["VerifiableCredential", "AICodexReputationCredential"],
"issuer": "did:web:maxiaworld.app",
"validFrom": "2026-05-18T00:00:00Z",
"validUntil": "2026-05-25T00:00:00Z",
"credentialSubject": {
"id": "did:key:z6Mk...",
"score": 0,
"components": {
"escrow": 0, "uptime": 0, "reviews": 0,
"stake": 0, "age": 0, "disputes": 0
},
"counts": { "tx": 0, "disputes": 0 },
"lineage": { "parent": "did:key:...|null", "dynastyBadge": "none|bronze|..." }
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-jcs-2022",
"verificationMethod": "did:web:maxiaworld.app#key-1",
"proofValue": "z..."
}
}
score = escrow*0.40 + uptime*0.20 + reviews*0.20 + stake*0.10 + age*0.10 - disputes*0.30
Chaque composant normalisé [0..100]. Formule publique et versionnée (aicodex-reputation-v1) : une réputation opaque n'est jamais adoptée comme référence.
Liste de révocation (StatusList2021) publiée à https://maxiaworld.app/status/. Toute VC référence son credentialStatus.
Contexte JSON-LD figé : https://maxiaworld.app/contexts/aicodex-reputation-v1.json
(normalizationProfile = "aicodex-norm-v1"). Tout changement = nouveau profil versionné, jamais d'édition en place.
Règles globales : tous calculs en UTC ; chaque composant est un entier ∈ [0,100] ; arrondi au plus proche, demi vers le haut ; un composant non calculable prend sa valeur plancher définie ci-dessous.
| Composant | Entrée brute | Fenêtre | Normalisation → [0,100] | Plancher / cas vide |
|---|---|---|---|---|
| escrow | E = nb escrows complétés avec succès |
cumulatif (all-time) | round(100 · ln(1+E) / ln(101)) (E=1→15, E=10→52, E≥100→100) |
E=0 → 0 |
| uptime | sondes santé réussies / total | glissante 30 j, sonde /15 min (max 2880) ; pas de réponse = échec | round(100 · réussies/total) |
<672 sondes (7 j de données) → plafonné à 50 |
| reviews | notes ∈ [1..5] des contreparties | all-time, lissage bayésien | bayes = (C·m + Σnotes)/(C + n), m=3.0, C=10 ; puis round((bayes−1)/4 · 100) |
n=0 → bayes=3 → 50 |
| stake | S = montant staké équiv. USD |
snapshot à l'émission | round(100 · ln(1+S) / ln(1001)) (S=10→35, S=100→67, S≥1000→100) |
S=0 → 0 |
| age | A = jours pleins depuis birth.ts |
cumulatif | round(100 · min(A,365)/365) (linéaire, plateau 365 j) |
A=0 → 0 |
| disputes | D = litiges perdus/ouverts non résolus en faveur de l'agent |
glissante 180 j (les + anciens tombent) | round(100 · min(D,10)/10) (D≥10 → 100 = pénalité pleine) |
D=0 → 0 |
Score final (formule §3.1, gelée) :
score_raw = escrow·0.40 + uptime·0.20 + reviews·0.20 + stake·0.10 + age·0.10 − disputes·0.30
score = round( clamp(score_raw, 0, 100) )
lineage.dynastyBadge (figé, basé sur le score du parent à la naissance de l'enfant) :
none si <40 ; bronze [40,60) ; silver [60,80) ; gold [80,95) ; platinum ≥95.
TTL & fraîcheur : VC ré-émise tous les 7 j (validUntil − validFrom). Chaque émission recalcule tous les composants sur leurs fenêtres. Une VC expirée n'est jamais réputée valide.
Même DID canonique, trois projections. Coeur stable, adaptateurs versionnés et jetables.
Serveur MCP exposant 3 outils :
| Outil | Entrée | Sortie |
|---|---|---|
register |
pubkey ed25519, challenge signé | DID canonique |
resolve |
DID | DID Document (§2.1) |
get_reputation |
DID | Reputation VC (§3) |
Enregistrement = 1 appel signé (challenge/response ed25519), pas de 2-étapes UI. La friction d'onboarding est le goulot unique.
Contrat détaillé GELÉ : SPEC-adapter-mcp-v1.md (I/O des 3 outils, chaîne canonique signée, ordre de validation, codes d'erreur, quotas). Référence normative de l'adaptateur V1.
Projection du DID en Agent Card A2A à /.well-known ou service[#a2a] :
name, provider ← métadonnées agenturl ← endpoint A2Ax-aicodex : { did, reputationCredentialUrl }La réputation VC est liée, pas copiée (toujours fraîche, vérifiable à la source).
La Reputation VC devient une attestation attachable à un AP2 mandate :
https://maxiaworld.app/spec/. Trajectoire : soumission ultérieure vers corps ouvert (W3C CG / FIDO / Linux Foundation) = condition d'universalité.Un agent est AI Codex-conforme s'il : (a) possède un DID Document §2.1 valide W3C, (b) résout une Reputation VC §3 signée et non révoquée, (c) expose ≥1 adaptateur §4. Les trois sont nécessaires et suffisants.
Contexte aicodex-reputation-v1 GELÉ (§3.3 + fichier contexts/aicodex-reputation-v1.json).
Adaptateur V1 MCP GELÉ (SPEC-adapter-mcp-v1.md).
Suivant : adaptateur V2 A2A (Agent Card /.well-known/agent.json, extension x-aicodex, lien VC réputation).
Frozen specification. The raw .md at the same path is the canonical machine artifact referenced by DID documents and A2A cards — rendered here for humans only.