MAXIA.AI CodexIdentitySpecsIssuer DID

⤓ raw markdown (machine contract)

AI Codex — Spécification d'identité canonique v0.1

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).

1. Périmètre et principes

2. DID canonique

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é.

2.1 DID Document

{
  "@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>" }
  ]
}

2.2 Métadonnées AI Codex (hors DID Core, profil AIP)

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.

3. Reputation Verifiable Credential

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..."
  }
}

3.1 Formule de score (figée, transparente, publiée)

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.

3.2 Révocation

Liste de révocation (StatusList2021) publiée à https://maxiaworld.app/status/. Toute VC référence son credentialStatus.

3.3 Normalisation des composants — GELÉE v1 (normative, non modifiable en place)

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.

4. Contrats d'adaptateurs

Même DID canonique, trois projections. Coeur stable, adaptateurs versionnés et jetables.

4.1 MCP (V1 — distribution)

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.

4.2 A2A (V2 — interop agents)

Projection du DID en Agent Card A2A à /.well-known ou service[#a2a] :

La réputation VC est liée, pas copiée (toujours fraîche, vérifiable à la source).

4.3 AP2 (V3 — rails paiement)

La Reputation VC devient une attestation attachable à un AP2 mandate :

5. Versioning et gouvernance

6. Conformité

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.

7. Prochaine étape

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.