{
  "format": "agent-article-v0",
  "article_id": "EA-236",
  "canonical_url": "/tools/ea-236-rebac-authorization-graph-openfga-spicedb",
  "page_type": "reference",
  "claim_ids": [],
  "evidence_ids": [
    "EA-236-CURRENT-APPROVAL",
    "EA-236-CURRENT-BODY-READBACK"
  ],
  "unknown_ids": [
    "EA-236-UNKNOWN-01"
  ],
  "operational_object_ids": [],
  "provider": [],
  "models": [],
  "plans": [],
  "surfaces": [],
  "regions": [],
  "current_status": "CURRENT",
  "observation_status": "SPEC_ONLY",
  "freshness": "CURRENT",
  "last_verified": "2026-10-05",
  "supersedes": [],
  "superseded_by": [],
  "provenance": [
    "CANDIDATE-EA236-FIRST-20261005-C2-RESCUE20261013",
    "BODY-SHA256:7331e70986664f21409acf0f7253e06cc5c24553e39f8bd08166e9cae9cf1bf2"
  ],
  "article_sources": [
    {
      "id": "EA-236-CURRENT-APPROVAL",
      "evidence_class": "RESEARCH",
      "title": "現行本文の監査・revision対応",
      "supports": [
        "現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。"
      ],
      "limit": "監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。",
      "origin_class": "AUDITED_CANONICAL_RESEARCH_PACKET",
      "source_or_experiment_ids": [
        "CANDIDATE-EA236-FIRST-20261005-C2-RESCUE20261013"
      ],
      "supporting_locators": [
        "1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ",
        "EA_REVISION_LEDGER!A39:U39",
        "EA-236-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_CANONICAL_APPROVAL_READBACK"
    },
    {
      "id": "EA-236-CURRENT-BODY-READBACK",
      "evidence_class": "IMPL",
      "title": "現行本文の収録照合",
      "supports": [
        "公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。"
      ],
      "limit": "本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。",
      "checked_at": "2026-10-13",
      "origin_class": "IMPLEMENTATION_READBACK",
      "source_or_experiment_ids": [
        "BODY-SHA256:7331e70986664f21409acf0f7253e06cc5c24553e39f8bd08166e9cae9cf1bf2"
      ],
      "supporting_locators": [
        "content/staging/EA-236.md",
        "7331e70986664f21409acf0f7253e06cc5c24553e39f8bd08166e9cae9cf1bf2",
        "EA-236-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_APPROVED_BODY_HASH_MATCH"
    }
  ],
  "research_sections": [
    {
      "heading": "PUBLIC_CLAIM",
      "text": "ReBAC/Authorization Graphは、relationshipに基づくpermission decisionを中央化する仕組みであり、外部identity/session revocation、source-of-truth同期、application enforcementまで自動的に保証するものではありません。OpenFGA/SpiceDBではmodel/schema、relationship data、condition/caveat context、consistency semantics、engine/datastore versionを分離して管理し、高リスクactionでは必要なfreshnessとexecution-time recheckを明示してください。validation PASSや単一のCheck結果だけをend-to-end authorization correctnessの証明にしません。"
    },
    {
      "heading": "FINDINGS",
      "text": "- ReBAC centralizes relationship-based authorization but does not replace identity/session revocation, resource-state validation, or application enforcement.\n- Agent/model output must not be trusted as the source of principal, tenant, resource ownership, relation or condition/caveat context. Construct authorization input from authenticated/trusted application state.\n- OpenFGA consistency is request-selectable. Latency-oriented checks may observe cached authorization state; high-risk post-write/revocation flows should deliberately request stronger freshness where required.\n- SpiceDB exposes ZedToken-based read-your-write and exact/at-least-as-fresh semantics. Exact snapshots have GC lifetime and fully-consistent checks cost latency.\n- Model/schema validation is necessary but not sufficient. Negative assertions, cross-tenant cases, revoked membership, malformed/missing condition context and migration tests are required.\n- External directory/group/OAuth state must be synchronized or checked separately. A successful graph Check does not imply that an independent OAuth grant/session remains valid.\n- Engine release, datastore, schema/model version and consistency mode belong in decision provenance for high-value actions.\n- Recent OpenFGA security and SpiceDB changelog/issue evidence shows version-bound authorization/consistency bugs exist; pin and regression-test exact deployed releases.\n- Relationship write workflows need an explicit consistency contract. Transactional outbox/reconciliation patterns can bound drift but do not make cross-system writes atomic by magic.\n- Experimental features such as OpenFGA Dynamic Conditions or SpiceDB experimental planner/FDW must not be treated as stable production guarantees without version-specific acceptance."
    },
    {
      "heading": "CONSISTENCY_AND_REVOCATION_BOUNDARY",
      "text": "Authorization graphのCheck結果だけで外部OAuth/session revocationやsource-of-truth同期まで証明しません。relationship write後・revocation後・高リスクactionでは、OpenFGA/SpiceDBのconsistency semanticsと外部identity/session stateを分離して扱い、必要なfreshnessとexecution-time recheckを明示します。"
    },
    {
      "heading": "COUNTEREVIDENCE",
      "text": "- “graphにtupleがあるから現在もidentity/sessionは有効” is false across composed systems.\n- “write成功後の次Checkは常に最新” is unsafe without selected consistency semantics and version/datastore assumptions.\n- “schema/modelがcompile/validateしたから権限設計は正しい” is false; warnings, missing negative cases and business-intent mistakes remain.\n- “caveat/condition contextはAgentが生成してよい” is unsafe when that context controls authorization.\n- “cacheはperformanceだけの問題” is false for authorization freshness; OpenFGA had a patched condition-cache policy-enforcement advisory.\n- “current SpiceDB behavior can be inferred from old issue #2026” is false; the issue is historical/version-bound and closed.\n- “fully consistent should be used everywhere” is not a universal rule; it trades latency for freshness and must match action risk/SLO."
    },
    {
      "heading": "OPERATING_CHECK",
      "text": "Pre-activation fixture should include:\n- same-tenant allow\n- cross-tenant deny\n- unknown principal/resource deny\n- removed relationship/revoked membership deny\n- write then read under required consistency\n- stale/old consistency token handling\n- missing/false condition/caveat context\n- malformed context\n- external session revoked while tuple remains => composition layer denies\n- policy/model/schema version change => regression suite rerun\n- engine timeout/error => no execution\n- delayed high-risk action => recheck current relationship/session/resource state\n- migration/reconciliation backlog observable and bounded."
    },
    {
      "heading": "AVAILABILITY_GATES",
      "text": "deployed OpenFGA/SpiceDB version; datastore/cache configuration; model/schema revision; identity/session authority; directory/group sync path; relationship writer; consistency contract per action class; enforcement gateway; condition/caveat context source; outbox/reconciliation; timeout/error policy; decision audit fields; rollback; upgrade procedure; semantic regression suite; tenant isolation; latency SLO."
    },
    {
      "heading": "SECURITY_PRIVACY_AUDIT_COST_OPERABILITY",
      "text": "Authorization graph IDs and relationship data can expose organizational structure; minimize logs and access. Record request ID, principal, tenant, action, resource, model/schema revision, engine version, consistency mode/token class and decision/error without secret-bearing context. Monitor tuple-sync lag, outbox backlog, deny/error/timeout rates and authorization latency. Maintain rollback for model/schema/engine upgrades."
    },
    {
      "heading": "FAILURE_ENVELOPE",
      "text": "wrong principal/tenant/resource; model-controlled context; missing enforcement path; stale tuple; delayed group sync; OAuth/session revoked but graph unchanged; latency-oriented cached allow after revoke; missing/incorrect authorization model ID; schema/model drift; condition/caveat missing context; unexpected provisional/conditional result; write succeeds but downstream source-of-truth fails or vice versa; outbox backlog; duplicate/missing tuple write handling hides upstream state error; stale ZedToken; expired exact snapshot; engine/datastore regression; upgrade migration failure; permission test lacks negative/cross-tenant fixtures; experimental feature behavior changes; permission check timeout/error converted to allow; audit record lacks model/schema/version/consistency provenance."
    },
    {
      "heading": "IMPLEMENTATION_STATE",
      "text": "Current desk research using official specifications/docs, security advisory, author-maintained changelog/issues, an adopter case study and a practitioner operations report. No tenant mutation."
    },
    {
      "heading": "LIMITS",
      "text": "No live OpenFGA or SpiceDB server was started in this run. No organization directory, OAuth/session layer, tuple sync, tenant model/schema, datastore, cache, caveat/condition context, ZedToken or failure injection was tested. Practitioner/community reports are not independently reproduced. OpenFGA/SpiceDB product behavior is bounded to cited documentation/releases/issues."
    },
    {
      "heading": "SAFE_WORDING",
      "text": "ReBAC/Authorization Graphは、relationshipに基づくpermission decisionを中央化する仕組みであり、外部identity/session revocation、source-of-truth同期、application enforcementまで自動的に保証するものではありません。OpenFGA/SpiceDBではmodel/schema、relationship data、condition/caveat context、consistency semantics、engine/datastore versionを分離して管理し、高リスクactionでは必要なfreshnessとexecution-time recheckを明示してください。validation PASSや単一のCheck結果だけをend-to-end authorization correctnessの証明にしません。"
    },
    {
      "heading": "OPEN_UNKNOWN",
      "text": "Target engine/version/datastore/cache; organization model/schema; identity/session authority; directory/group sync; relationship writer/outbox; action-specific consistency SLO; tool gateway coverage; condition/caveat context source; audit retention; tenant residency; current incident exposure; exact upgrade path; organization acceptance."
    },
    {
      "heading": "STOP_CONDITION",
      "text": "Provider-neutral ReBAC control boundary、OpenFGA/SpiceDB consistency semantics、external-revocation boundary、version-bound counterevidenceとsafe wordingを分離した。tenant固有保証は主張しない。独立監査がlive pinned-engine fixtureまたはorganization model/schema testを要求する場合はSUPPLEMENT_ONLYへ戻す。"
    }
  ],
  "human_url": "/tools/ea-236-rebac-authorization-graph-openfga-spicedb",
  "markdown_url": "/agent/article.md?path=%2Ftools%2Fea-236-rebac-authorization-graph-openfga-spicedb",
  "json_url": "/agent/article.json?path=%2Ftools%2Fea-236-rebac-authorization-graph-openfga-spicedb"
}