{
  "schema": "aidid.status",
  "version": "1",
  "site": "https://aidid.im",
  "updatedAt": "2026-10-13",
  "summary": "AIDID is a zero-backend, quantum-safe (CRYSTALS-Dilithium-5) login protocol built on did:msg. The protocol, the RP SDK and a fully offline end-to-end demo are implemented. It is NOT production-available: the chain-side DID resolve endpoint is not authorized and there is no end-user path to obtain MSG in order to create a DID.",
  "specs": {
    "did": "v1.6",
    "signature": "v1.5",
    "login": "v1.3",
    "delegation": "v1.14",
    "events": "v1.2",
    "chain-config": "v1.20"
  },
  "capabilities": {
    "rpIntegration": {
      "status": "available",
      "see": "https://aidid.im/schemas/index.json",
      "note": "Write and self-test the RP-side integration today, offline."
    },
    "offlineEndToEnd": {
      "status": "available",
      "how": "node frontend/packages/aidid-login-sdk/examples/node/offline-demo.mjs (in-repo), or install the published bundle: npm install https://aidid.im/download/aidid-login-0.1.0.tgz and run package/examples/node/offline-demo.mjs from it",
      "note": "Real Dilithium-5 sign + verify, no network and no chain."
    },
    "didLoginProduction": {
      "status": "unavailable",
      "reason": "The chain-side DID resolve endpoint (`GET {agent_api}/agent/v1/aidid/resolve`) is not authorized yet, so an RP cannot resolve any DID in production."
    },
    "userCreatesDid": {
      "status": "unavailable",
      "reason": "There is no end-user path to obtain MSG, so no ordinary user can pay to create a DID. The login chain therefore starts broken; pending a product decision."
    },
    "vcIssuance": {
      "status": "unavailable",
      "reason": "Issuer/signer ownership is undecided and on-chain VC anchoring is not planned. The verification interfaces are implemented and fail closed."
    },
    "chainWrite": {
      "status": "unavailable",
      "reason": "Chain write paths (and the stage-B identity contract) await the chain-side window parameters. Mainnet is No-Go and no contract is deployed."
    },
    "independentAgentKey": {
      "status": "unavailable",
      "reason": "The protocol-level offline self-held key (the parent DID binds the agent's own Dilithium-5 public key with its own signature) is implemented and off by default — verifyDelegation is fail-closed unless the caller opts in with allowOwnKey. There is NO on-chain binding, NO revocation and NO quota, so production availability awaits stage B / the window parameters."
    }
  },
  "agentIdentity": {
    "canHoldDid": true,
    "model": "A did:msg held by an AI agent MUST be a sub-DID delegated from a parent DID (its document has `controller: [<parentDid>]` and an `AididDelegation` service entry). The parent DID holder is the responsible party. The agent receives restricted-scope permissions, not production key material: the default key mode reuses the parent key, and the protocol-level offline `own-key` mode (parent signs over the agent public key) is implemented but fail-closed by default and has no on-chain binding or revocation. The grant is revoked by updating the sub-DID document.",
    "schema": "https://aidid.im/schemas/delegation/delegation-payload.schema.json",
    "notAllowed": "An agent never signs in on behalf of a user, and never receives a user's private key or passphrase."
  },
  "blockers": [
    {
      "capability": "didLoginProduction",
      "owner": "MSGChain",
      "detail": "DID resolve endpoint authorization."
    },
    {
      "capability": "userCreatesDid",
      "owner": "AIDID (product decision)",
      "detail": "How an ordinary user obtains MSG to create a DID."
    },
    {
      "capability": "vcIssuance",
      "owner": "AIDID (decision)",
      "detail": "Issuer/signer ownership; anchoring is not planned."
    },
    {
      "capability": "chainWrite",
      "owner": "MSGChain",
      "detail": "《窗口参数》 release; mainnet No-Go."
    },
    {
      "capability": "independentAgentKey",
      "owner": "AIDID (policy)",
      "detail": "Protocol-level offline own-key exists but is fail-closed; on-chain binding/revocation/quota need stage B."
    }
  ],
  "notAvailable": [
    "Production DID resolution",
    "Any chain write or contract deployment",
    "VC issuance or an on-chain revocation list",
    "Signing in as, or on behalf of, another party"
  ],
  "downloads": {
    "index": "https://aidid.im/download/index.json",
    "note": "Served as static files from this site (no registry account, no backend). Byte length, sha256 and SRI for each bundle live in the generated downloads index; scripts/verify-agent-downloads.mjs checks that index against the files and that this block stays consistent with it.",
    "sdk": {
      "name": "@aidid/login",
      "version": "0.1.0",
      "url": "https://aidid.im/download/aidid-login-0.1.0.tgz",
      "entrypoints": {
        ".": "package/src/index.js",
        "types": "package/types/index.d.ts",
        "demo": "package/examples/node/offline-demo.mjs",
        "vector": "package/fixtures/offline-signin-vector.json",
        "manifest": "package/package.json"
      }
    },
    "specs": {
      "name": "AIDID prose specs (v1)",
      "version": "v1",
      "url": "https://aidid.im/download/aidid-specs-v1.tgz",
      "entrypoints": {
        "specs": "specs/"
      }
    }
  },
  "registry": {
    "authority": {
      "final": "on-chain registry (unavailable today: no contract deployed, window parameters not released)",
      "transitional": "public repo aipayim/aidid-registry — challenge-verified, auto-merged (fork pull requests included: no collaborator access or invitation needed)",
      "current": "first-party Cloudflare cache of the public repo, read by the site at runtime (workers/registry-refresh); the build-time snapshot frontend/data/rp-registry.json stays as the offline fallback"
    },
    "submission": "https://github.com/aipayim/aidid-registry",
    "live": {
      "endpoint": "https://aidid-registry-refresh.124600220.workers.dev/registry.json",
      "schedule": "on demand: a read against a cache older than 10 minutes triggers a refresh, rate-limited to one attempt per 10 minutes; this account's Workers Free plan has no cron slot left, so there is no fixed interval",
      "fallback": "the snapshot built into the deployment (frontend/data/rp-registry.json), used whenever the live read fails or the browser is offline",
      "verifier": "aipayim/aidid-registry CI checks every verified origin's /.well-known/aidid-rp.txt before merging; the cache is a cache, not a verifier"
    },
    "note": "Phase 0 registration is free and explicitly transitional; the on-chain registry (0.01 MSG per registration) is not available yet. Anyone can open a pull request — including from a fork, with no invitation — and it is auto-merged once it changes only rp-registry.json and every verified challenge is confirmed live. A verified entry proves control of the origin, not security or reputation. There is no fixed refresh schedule, so a merge normally shows up on the next visit or two, and a quiet period can make the first visit show a snapshot older than 10 minutes."
  }
}
