{
  "protocolVersion": "0.3.0",
  "name": "Idempotency Checker",
  "description": "Decides whether an operation is safe to retry and, if not, names the key/upsert/CAS to add, assuming at-least-once delivery.",
  "version": "1.0.0",
  "provider": {
    "organization": "The Daily Synthesis",
    "url": "https://johnjboren.github.io"
  },
  "url": "https://johnjboren.github.io/pa/idempotency-checker.html",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "defaultInputModes": [
    "text/plain"
  ],
  "defaultOutputModes": [
    "text/plain"
  ],
  "skills": [
    {
      "id": "idempotency-checker",
      "name": "Idempotency Checker",
      "description": "Decides whether an operation is safe to retry and, if not, names the key/upsert/CAS to add, assuming at-least-once delivery.",
      "tags": [
        "idempotency",
        "retries",
        "reliability",
        "distributed",
        "workflow"
      ],
      "examples": [
        "POST /charge: inserts a payment row and calls Stripe.charge(amount)."
      ]
    }
  ],
  "x-pocketagent": {
    "spec": "pocketagent-v1",
    "installUrl": "https://johnjboren.github.io/pocketagent-chat.html#pa=H4sIAAAAAAAAE5VUW3PaRhT-K2f0Ynsige0mqU0eOsTQmoxtiCE4bqfTWaQFrVntir1YJpn8934rhMGpX_oCI2n3nO92zvfoMeqcxJFiBY860SDjRakdV-maLnKeLrmJ4shoGT7ea0_McHrlUIv-EI9cEVOkS26YE1rRYc5UJrmJ6UHPYuqOBpQyKWMquLVswSnVyvqCm6OY-tP-7T0ZXso15cySyw3nJNmMS56R5WmoaFuEY73BxaRDB4Ne_3o0nPRvJgekDR3cDCe0_04AikIJgZ-EhCXjlRJqQcKRq0TKqRIuRyNOFuRxvvSO-MqLRya5wiG9f0WrlP9Gl90_u7e9cWdzreSpmIuUMu1nkid8PgdOi6Mg4swabTNfSpEyF8pbbpyNm8OU5swsOJ6FSg0v0BA8U-3xb_DWBgS8YELiQWmVpLoovIOwj2jsQkVUUKjwAdRBtAXGczCZ8xb9PvjaoSpnNQeWZeGvYEtewxLc1seCKHtGLvma3lDGgRj1teExeSVWfuOSM0wA0BvyZaARh5eZCJ4w2Qa0ErlI4HZiuaPKCIfrm1oQg5FizhsmQ5M4mBVi4t1MP9EcTxY4qBGvRV0bMkHMJZIz65IgPGpJEIek6EGpFEGdLRmvJPIEjjIjDV9MJSxE6Anr4J0XNt_2l-vkmbKjw9GXSRt4j2hudEEsTX3hJQuX8G04nrSfrTnapdq2wkB4tIw6f0X9GtQutk08421Q4uAFLjTvQwxnQjGz7uxlNSjyMr248X9lwJWbEGPO0vxlIHd59CrjZgsNF4AtxMPCITjT3njbvuiO2_-xPoTQ0YO3DodDFtE6-juOHFvUQuxFKejzjMkAMZsJKVx4n8ETI2YeWcdTpc1yLnUV6iDBV5hUgzXTw1Rl8LXKeXDz5U4RTXjDcNacoEQckg94wAgFbD2bL_k0cxATC6oGg1_XNXg7fwKf75EHkhACam8mtbOdYPAv2bqopdfVxglEy9IY1Ere2hw_ZEWY5aNQkaHU8956aXRrt1FYQ6jxrtkPdf1d590-2cPQDLwJuwvrmW2T8dN4x7iDORH1VtiAjevyYUOwV6Y9yO3I6s2y42HkGyhQO9ElRuEHrLNiAYJff0mujwt2bs9P1_Lu-vPTarJ8Ny-OpyM7Prmq5PHT6Hj53vVO7voPw8f7Ylh4uxKjxcCfFHf_nOWfk-mp62YD9e3tx3X16zv3Kbn8uIB6pZ-h_NWnVfe-Oi2_TafnV2fTt3fv7ws9GydfUj87P74dPvSuktPLtT5XZ9GPfwG95B9Z1QYAAA",
    "landingPage": "https://johnjboren.github.io/pa/idempotency-checker.html",
    "rules": [
      "Every reply has VERDICT, HAZARDS, FIX",
      "VERDICT is binary: IDEMPOTENT or NOT IDEMPOTENT",
      "Assume at-least-once delivery and client retries",
      "Name each double-effect on retry under HAZARDS",
      "FIX adds a key/upsert/CAS/unique constraint, not just a comment"
    ],
    "capabilities": [
      "persona"
    ],
    "license": null,
    "econ": null,
    "signature": {
      "alg": "Ed25519",
      "sig": "X3-M0ma9s92ylWMQxqTk5fm0VPsS1Lwl0xP0k6tD1WEjOvYmOmusqiPgIu1mW_8hQ-V2tAdInz4Byw75tJ-HBg",
      "pub": "LJqAYw2pzVV9L8V4W6YmobS-Ucub90ROjDL-2Hyo9n8"
    }
  }
}
