Premise

Kestrel Platform fictional company

Company Brain

ADR-012

Payment service skips its own idempotency check

Lifecycle: acceptedCurrent reviewers: Jun Park, Anika Rao

Reasoning paths

  1. provides

    G_CHARGE_ONCEG_DEDUPEA_REDIS_TTL

    redis.max_ttl_hours, webhook.dedupe_ttl_hours
  2. provides

    G_CHARGE_ONCEG_DEDUPEA_RETRY_WINDOW

    webhook.dedupe_ttl_hours, paylane.retry_window_hours
  3. provides

    G_CHARGE_ONCEG_DEDUPEA_STABLE_EVENT_ID

  4. relies_on

    G_DEDUPEA_REDIS_TTL

    redis.max_ttl_hours, webhook.dedupe_ttl_hours
  5. relies_on

    G_DEDUPEA_RETRY_WINDOW

    webhook.dedupe_ttl_hours, paylane.retry_window_hours
  6. relies_on

    G_DEDUPEA_STABLE_EVENT_ID

Reviewer evidence

Unavailable accountable people: Lena Fischer, Marco Ruiz

  • Jun Park7recent authored sources
  • Anika Rao2recent authored sources

ADR-012 supersedes ADR-010

Full graph evidence
{
  "active_accountable": [],
  "candidates": [
    {
      "evidence": 7,
      "person": "p_jun",
      "team": "t_payments"
    },
    {
      "evidence": 2,
      "person": "p_anika",
      "team": "t_payments"
    }
  ],
  "decision": {
    "decided_at": 1770681600000,
    "id": "ADR-012",
    "search_text": "ADR-012 Payment service skips its own idempotency check",
    "seen_rev": 1,
    "status": "accepted",
    "title": "Payment service skips its own idempotency check"
  },
  "names": {
    "p_anika": "Anika Rao",
    "p_jun": "Jun Park"
  },
  "paths": [
    {
      "assumption": "A_REDIS_TTL",
      "chain": [
        "G_CHARGE_ONCE",
        "G_DEDUPE",
        "A_REDIS_TTL"
      ],
      "decision": "ADR-012",
      "facts": [
        "redis.max_ttl_hours",
        "webhook.dedupe_ttl_hours"
      ],
      "guarantee": "G_CHARGE_ONCE",
      "role": "PROVIDES"
    },
    {
      "assumption": "A_RETRY_WINDOW",
      "chain": [
        "G_CHARGE_ONCE",
        "G_DEDUPE",
        "A_RETRY_WINDOW"
      ],
      "decision": "ADR-012",
      "facts": [
        "webhook.dedupe_ttl_hours",
        "paylane.retry_window_hours"
      ],
      "guarantee": "G_CHARGE_ONCE",
      "role": "PROVIDES"
    },
    {
      "assumption": "A_STABLE_EVENT_ID",
      "chain": [
        "G_CHARGE_ONCE",
        "G_DEDUPE",
        "A_STABLE_EVENT_ID"
      ],
      "decision": "ADR-012",
      "facts": [],
      "guarantee": "G_CHARGE_ONCE",
      "role": "PROVIDES"
    },
    {
      "assumption": "A_REDIS_TTL",
      "chain": [
        "G_DEDUPE",
        "A_REDIS_TTL"
      ],
      "decision": "ADR-012",
      "facts": [
        "redis.max_ttl_hours",
        "webhook.dedupe_ttl_hours"
      ],
      "guarantee": "G_DEDUPE",
      "role": "RELIES_ON"
    },
    {
      "assumption": "A_RETRY_WINDOW",
      "chain": [
        "G_DEDUPE",
        "A_RETRY_WINDOW"
      ],
      "decision": "ADR-012",
      "facts": [
        "webhook.dedupe_ttl_hours",
        "paylane.retry_window_hours"
      ],
      "guarantee": "G_DEDUPE",
      "role": "RELIES_ON"
    },
    {
      "assumption": "A_STABLE_EVENT_ID",
      "chain": [
        "G_DEDUPE",
        "A_STABLE_EVENT_ID"
      ],
      "decision": "ADR-012",
      "facts": [],
      "guarantee": "G_DEDUPE",
      "role": "RELIES_ON"
    }
  ],
  "reviewers": [
    "p_jun",
    "p_anika"
  ],
  "sources": [
    {
      "commit_sha": "local",
      "id": "ADR-012",
      "line": 2,
      "path": "adr/ADR-012.md",
      "url": null
    },
    {
      "commit_sha": "local",
      "id": "A_REDIS_TTL",
      "line": 24,
      "path": "adr/ADR-007.md",
      "url": null
    },
    {
      "commit_sha": "local",
      "id": "A_RETRY_WINDOW",
      "line": 21,
      "path": "adr/ADR-007.md",
      "url": null
    },
    {
      "commit_sha": "local",
      "id": "A_STABLE_EVENT_ID",
      "line": 27,
      "path": "adr/ADR-007.md",
      "url": null
    },
    {
      "commit_sha": "local",
      "id": "G_CHARGE_ONCE",
      "line": 12,
      "path": "adr/ADR-012.md",
      "url": null
    },
    {
      "commit_sha": "local",
      "id": "G_DEDUPE",
      "line": 12,
      "path": "adr/ADR-007.md",
      "url": null
    },
    {
      "commit_sha": "local",
      "id": "paylane.retry_window_hours",
      "line": 4,
      "path": "config/partners/paylane.yaml",
      "url": null
    },
    {
      "commit_sha": "local",
      "id": "redis.max_ttl_hours",
      "line": 4,
      "path": "config/platform/redis.yaml",
      "url": null
    },
    {
      "commit_sha": "local",
      "id": "webhook.dedupe_ttl_hours",
      "line": 4,
      "path": "config/webhookingress.yaml",
      "url": null
    }
  ],
  "supersession": [
    {
      "id": "ADR-010",
      "newer": "ADR-012"
    }
  ],
  "unavailable": [
    "p_lena",
    "p_marco"
  ]
}

Recorded assessments

Sources

  • ADR-012 adr/ADR-012.md:2 (local checkout)
  • A_REDIS_TTL adr/ADR-007.md:24 (local checkout)
  • A_RETRY_WINDOW adr/ADR-007.md:21 (local checkout)
  • A_STABLE_EVENT_ID adr/ADR-007.md:27 (local checkout)
  • G_CHARGE_ONCE adr/ADR-012.md:12 (local checkout)
  • G_DEDUPE adr/ADR-007.md:12 (local checkout)
  • paylane.retry_window_hours config/partners/paylane.yaml:4 (local checkout)
  • redis.max_ttl_hours config/platform/redis.yaml:4 (local checkout)
  • webhook.dedupe_ttl_hours config/webhookingress.yaml:4 (local checkout)
  • adr/ADR-012.md:2 (local checkout)