{
  "format": "agent-article-v0",
  "article_id": "EA-225",
  "canonical_url": "/tools/ea-225-project-issue-tracker-api-agent",
  "page_type": "reference",
  "claim_ids": [],
  "evidence_ids": [
    "EVD-EA-225-URL-B3F578E31337",
    "EVD-EA-225-URL-0B14FD6771DA",
    "EVD-EA-225-URL-58D17316E1E7",
    "EVD-EA-225-URL-B910746BFF1E",
    "EVD-EA-225-URL-746FFEF0DFBC",
    "EVD-EA-225-URL-ED038D7E56D2",
    "EVD-EA-225-URL-7D86667B3BF5",
    "EVD-EA-225-URL-C1C3B85182A2",
    "EVD-EA-225-URL-BD0258ACC0A3",
    "EVD-EA-225-URL-5D2E860530A1",
    "EA-225-CURRENT-APPROVAL",
    "EA-225-CURRENT-BODY-READBACK"
  ],
  "unknown_ids": [
    "EA-225-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": [
    "RESCUE-EA225-20261016-C1",
    "SRC-EA-225-URL-B3F578E31337",
    "SRC-EA-225-URL-0B14FD6771DA",
    "SRC-EA-225-URL-58D17316E1E7",
    "SRC-EA-225-URL-B910746BFF1E",
    "SRC-EA-225-URL-746FFEF0DFBC",
    "SRC-EA-225-URL-ED038D7E56D2",
    "SRC-EA-225-URL-7D86667B3BF5",
    "SRC-EA-225-URL-C1C3B85182A2",
    "SRC-EA-225-URL-BD0258ACC0A3",
    "SRC-EA-225-URL-5D2E860530A1",
    "BODY-SHA256:715d4ccb5154a2d5a87ab9648b9ec46d00c7199f299bd37ada4c92efb1e5d6a3"
  ],
  "article_sources": [
    {
      "id": "EVD-EA-225-URL-B3F578E31337",
      "evidence_class": "RESEARCH",
      "title": "S1 INDEPENDENT_FIRSTHAND_USER_REPORT:",
      "href": "https://github.com/PyGithub/PyGithub/issues/1994",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-B3F578E31337"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S1 INDEPENDENT_FIRSTHAND_USER_REPORT: https://github.com/PyGithub/PyGithub/issues/1994"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-0B14FD6771DA",
      "evidence_class": "RESEARCH",
      "title": "S2 INDEPENDENT_FIRSTHAND_USER_REPORT:",
      "href": "https://github.com/PyGithub/PyGithub/issues/2625",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-0B14FD6771DA"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S2 INDEPENDENT_FIRSTHAND_USER_REPORT: https://github.com/PyGithub/PyGithub/issues/2625"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-58D17316E1E7",
      "evidence_class": "RESEARCH",
      "title": "S3 AUTHOR_IMPLEMENTATION:",
      "href": "https://github.com/PyGithub/PyGithub/blob/v2.10.0/github/Repository.py",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-58D17316E1E7"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S3 AUTHOR_IMPLEMENTATION: https://github.com/PyGithub/PyGithub/blob/v2.10.0/github/Repository.py"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-B910746BFF1E",
      "evidence_class": "RESEARCH",
      "title": "S5 PROVIDER_SPEC:",
      "href": "https://docs.github.com/en/rest/issues/issues",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-B910746BFF1E"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S5 PROVIDER_SPEC: https://docs.github.com/en/rest/issues/issues"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-746FFEF0DFBC",
      "evidence_class": "RESEARCH",
      "title": "S6 PROVIDER_SPEC:",
      "href": "https://docs.github.com/en/webhooks/using-webhooks/handling-failed-webhook-deliveries",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-746FFEF0DFBC"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S6 PROVIDER_SPEC: https://docs.github.com/en/webhooks/using-webhooks/handling-failed-webhook-deliveries"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-ED038D7E56D2",
      "evidence_class": "RESEARCH",
      "title": "S7 PROVIDER_SPEC:",
      "href": "https://linear.app/developers/graphql",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-ED038D7E56D2"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S7 PROVIDER_SPEC: https://linear.app/developers/graphql"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-7D86667B3BF5",
      "evidence_class": "RESEARCH",
      "title": "S8 PROVIDER_SPEC:",
      "href": "https://linear.app/developers/pagination",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-7D86667B3BF5"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S8 PROVIDER_SPEC: https://linear.app/developers/pagination"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-C1C3B85182A2",
      "evidence_class": "RESEARCH",
      "title": "S9 PROVIDER_SPEC_LIMITED:",
      "href": "https://developer.atlassian.com/cloud/jira/platform/rate-limiting/",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-C1C3B85182A2"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S9 PROVIDER_SPEC_LIMITED: https://developer.atlassian.com/cloud/jira/platform/rate-limiting/"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-BD0258ACC0A3",
      "evidence_class": "RESEARCH",
      "title": "S10 UNAVAILABLE_BODY:",
      "href": "https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-BD0258ACC0A3"
      ],
      "supporting_locators": [
        "EVIDENCE_TABLE",
        "S10 UNAVAILABLE_BODY: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/"
      ],
      "scope": "EVIDENCE_TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-225-URL-5D2E860530A1",
      "evidence_class": "RESEARCH",
      "title": "Companion folder:",
      "href": "https://drive.google.com/drive/folders/1E9RBaf7767rf4jB8eaUqntLC9uDQpspi",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-225-URL-5D2E860530A1"
      ],
      "supporting_locators": [
        "CURRENTNESS / TEST_PROFILE",
        "Companion folder: https://drive.google.com/drive/folders/1E9RBaf7767rf4jB8eaUqntLC9uDQpspi"
      ],
      "scope": "CURRENTNESS / TEST_PROFILE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EA-225-CURRENT-APPROVAL",
      "evidence_class": "RESEARCH",
      "title": "現行本文の監査・revision対応",
      "supports": [
        "現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。"
      ],
      "limit": "監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。",
      "origin_class": "AUDITED_CANONICAL_RESEARCH_PACKET",
      "source_or_experiment_ids": [
        "RESCUE-EA225-20261016-C1"
      ],
      "supporting_locators": [
        "1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ/EA_REVISION_LEDGER!A35:U35",
        "EA_REVISION_LEDGER!A35:U35",
        "EA-225-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_CANONICAL_APPROVAL_READBACK"
    },
    {
      "id": "EA-225-CURRENT-BODY-READBACK",
      "evidence_class": "IMPL",
      "title": "現行本文の収録照合",
      "supports": [
        "公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。"
      ],
      "limit": "本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。",
      "checked_at": "2026-10-18",
      "origin_class": "IMPLEMENTATION_READBACK",
      "source_or_experiment_ids": [
        "BODY-SHA256:715d4ccb5154a2d5a87ab9648b9ec46d00c7199f299bd37ada4c92efb1e5d6a3"
      ],
      "supporting_locators": [
        "content/staging/EA-225.md",
        "715d4ccb5154a2d5a87ab9648b9ec46d00c7199f299bd37ada4c92efb1e5d6a3",
        "EA-225-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_APPROVED_BODY_HASH_MATCH"
    }
  ],
  "research_sections": [
    {
      "heading": "PUBLIC_CLAIM",
      "text": "Project/Issue Tracker API連携では、Agentの記憶ではなく外部チケットのIDと現在状態を仕事台帳の照合先にする。ただし、一覧取得の途中失敗・権限・ページ分割、書き込み後の不明な結果、Webhook未達を別々に扱う。承認は対象と変更フィールドに結び付け、結果を再読込する。PyGithub 2.10.0の模擬通信による実SDK検査では、遅延ページ取得、途中例外、省略フィールドと空配列の違い、およびUTC以外のsince入力の時刻不一致を確認した。GitHub実サーバーの更新成功やJira/Linearの実運用検証を示すものではない。"
    },
    {
      "heading": "SCOPE",
      "text": "Can an Agent reliably use an external issue tracker as the authoritative work ledger? Distinguish read completeness, requested write, acknowledged write and verified resulting state. Compare GitHub REST/PyGithub and Linear GraphQL at claim level. Jira is within the original topic but its full issue schema could not be fetched (source exceeded retrieval size); Jira-specific workflow assertions remain outside supported publication claims pending supplementation. This is a bounded packet, not certification of all three products or a live integration."
    },
    {
      "heading": "EVIDENCE_TABLE",
      "text": "S1 INDEPENDENT_FIRSTHAND_USER_REPORT: https://github.com/PyGithub/PyGithub/issues/1994 ; author Prince2347X, 2021-07-13, description lines159–165. Closed historical report of iteration consuming API budget. Available; not current frequency data or proof of a current service defect.\nS2 INDEPENDENT_FIRSTHAND_USER_REPORT: https://github.com/PyGithub/PyGithub/issues/2625 ; PatrickAlphaC, 2023-07-13, description/trace. Closed historical 404 during issue iteration. Root cause is unresolved in inspected text; usage/auth ambiguity exists. Available; no claim that current SDK causes production 404s.\nS3 AUTHOR_IMPLEMENTATION: https://github.com/PyGithub/PyGithub/blob/v2.10.0/github/Repository.py get_issues; Issue.py edit; PaginatedList.py __iter__/_fetchNextPage. Installed PyGithub 2.10.0 executed directly. Source SHA-256 and exact requests are in sdk_results.json. Author code is evidence of this SDK version, not of remote server behavior.\nS4 REPRODUCIBLE_RUNTIME: sdk_fixture.py + sdk_results.json; Python runtime, PyGithub==2.10.0 with HTTP requestJsonAndCheck mocked and socket.create_connection denied during scenarios. Fixtures contain artificial tickets only. No tenant credentials, live API request or real ticket mutation. The initial mock incorrectly detected page number from parameters only and looped; it was interrupted and corrected to inspect next-page URL. Final finite run is retained. This fixture validates actual SDK serialization/iteration against independent expected observations, not self-authored business gate logic.\nS5 PROVIDER_SPEC: https://docs.github.com/en/rest/issues/issues ; read 2026-10-05, list-issues section. GitHub issue listings include pull requests; pull_request identifies them. API-version examples are not deployed-tenant proof.\nS6 PROVIDER_SPEC: https://docs.github.com/en/webhooks/using-webhooks/handling-failed-webhook-deliveries ; current read lines21–39. GitHub does not automatically redeliver failed deliveries; operator/manual/API recovery is separate. Available, unversioned current documentation.\nS7 PROVIDER_SPEC: https://linear.app/developers/graphql ; current read lines91–96 and162–205. HTTP200 can contain GraphQL errors/partial data; issue mutation has success and returned issue, states are team-scoped. Available; no Linear runtime executed.\nS8 PROVIDER_SPEC: https://linear.app/developers/pagination ; current read, Relay pageInfo/endCursor/hasNextPage. Available; no snapshot/isolation guarantee inferred.\nS9 PROVIDER_SPEC_LIMITED: https://developer.atlassian.com/cloud/jira/platform/rate-limiting/ ; current read identifies rate-limit headers and per-issue limits. Rate-limit handling is route/account dependent; no fixed universal request quota asserted.\nS10 UNAVAILABLE_BODY: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/ ; retrieval rejected >4194305 bytes, including attempted transition anchor. Search snippets are not treated as complete claim-level verification. Do not publish detailed transition/payload/permission assertions from this packet."
    },
    {
      "heading": "ESTABLISHED / FINDINGS",
      "text": "C1 Read construction is not complete enumeration. In the executed SDK, creating a lazy get_issues(state='all') made zero mocked HTTP calls; iterating three objects followed two pages. S1 independently documents users misunderstanding iteration cost. S1's historical numeric call count is not generalized. SAFETY: budget page-level calls, explicitly request needed states, retain filters and page completion evidence.\nC2 Partial output is not a complete work ledger. Injecting a 404 on page two yielded issue1, then raised GithubException(404). S2 supplies an independent historical failure report; our injection demonstrates propagation only, not its real cause. Checkpoint must record incomplete scans and preserve the prior successful reconciliation watermark rather than declaring absent tickets deleted. The checkpoint rule is a proposed control, not built-in SDK behavior.\nC3 Tickets and PRs require explicit population definition. The executed SDK represented the artificial PR via pull_request; S5 documents the server list's mixed population. Counting all returned items as ordinary issues can misstate coverage. Permissions, private repositories and archived resources additionally make absence weaker than nonexistence.\nC4 Omitted and empty edit fields differ. Real Issue.edit(body=...) sent only body. edit(labels=[], assignees=[]) explicitly sent empty arrays. This establishes outgoing SDK payload shape, not that server accepted or cleared fields. Approval must bind exact identity and intended field changes; readback must compare resulting state. Never expand an approved body change into label/assignee replacement.\nC5 Offset-aware since can produce a wrong UTC instant in tested SDK. Input 2026-10-05T09:00:00+09:00 was serialized as 2026-10-05T09:00:00Z; independent UTC conversion expects 2026-10-05T00:00:00Z. This retained OBSERVED_MISMATCH is a nine-hour boundary error for this exact input/version. UTC-normalize before using this SDK parameter and test the request. This is not evidence that GitHub's server converts time incorrectly, nor proof every SDK/version is affected.\nC6 HTTP success and application success differ. S7 states Linear can return data plus errors under HTTP200. Inspect errors, required fields, mutation success and returned issue identity; perform authoritative readback. No exactly-once guarantee follows from mutation success. Linear runtime/tenant semantics remain untested.\nC7 Events alone are an insufficient reconciliation ledger. S6 contradicts a blanket claim that failed GitHub webhooks automatically retry. Use authenticated durable receipt, tracked delivery failures and periodic authoritative reads. Idempotent local event processing does not prove idempotent remote create. Ambiguous create timeout requires identity/reconciliation investigation before retry; no universal idempotency header is asserted."
    },
    {
      "heading": "SECURITY",
      "text": "tenant/repository/team identity and actor permissions are approval inputs; untrusted issue text/comments must not authorize tool actions. Avoid broad tokens; exact product permission support must be separately checked. PRIVACY: descriptions, attachments and comments may contain secrets/customer information; send only necessary fields to model and redact logs. AUDIT: record producer intent, approver, actor, target IDs, revision/request digest, outgoing changed fields, server response and independent readback; remote activity log alone is not a universal audit guarantee. COST: lazy iteration adds calls as pages are consumed; field hydration and reconciliation may cost additional requests. No cross-product quota or money estimate is asserted. OPERABILITY: failed page and permission-limited views are incomplete; retries respect product headers and operational budget; do not blindly repeat create/comments after unknown outcomes. AVAILABILITY: synchronous API success does not ensure webhook delivery or downstream automation completion; scheduled reconciliation and explicit UNKNOWN state are proposed controls."
    },
    {
      "heading": "OPEN_UNKNOWN",
      "text": "Jira transition/assignee/comment/create exact schema, permission and workflow behavior; independent Jira and Linear operator incidents; Linear SDK/runtime and timestamp/archive pagination behavior; real GitHub tenant permission/rate/notification/automation effects; concurrent edits, server consistency and endpoint-specific idempotency; webhook signatures/replay retention and delivery-ID behavior; deployment/account contracts. These gaps are not hidden by the GitHub fixture. Independent audit should limit supported scope or return SUPPLEMENT_ONLY, not approve blanket all-provider reliability claims."
    },
    {
      "heading": "運用上の停止・確認条件",
      "text": "Stop publication/implementation on missing independent exact-ID approval, target/scope widening, mixed provider claims without evidence, ambiguous write outcome, wrong tenant, incomplete enumeration, invalid timestamps, absent readback, or missing durable packet. Audit acceptance: inspect source-to-claim mapping, rerun SDK fixture in isolated environment, preserve timestamp mismatch, verify that fixture results are not represented as live API tests, and assess whether broad topic needs Jira/Linear supplementation before implementation. No self approval; no Git Bridge READY."
    },
    {
      "heading": "CURRENTNESS / TEST_PROFILE",
      "text": "文書に基づく製品仕様の確認日は元パケットの2026-10-05です。過去の利用者報告を現行製品全体の不具合へ一般化しません。2026-10-16に元の固定バージョンSDKと模擬通信の検査を再実行し、findingsとSDKソースハッシュが復旧済み結果と一致しました。製品の最新バージョン確認、実tenantの更新、通知、権限、競合制御、課金・配信保証の検証ではありません。\n\nCompanion folder: https://drive.google.com/drive/folders/1E9RBaf7767rf4jB8eaUqntLC9uDQpspi\n\n- `sdk_fixture.py` SHA-256 `ee671d4abfaf3b82367ffe63c3d2115a5724c51cddccd7984834882130f69dc5`\n- `sdk_results.json` SHA-256 `f7193dd3ffef2618ec31def44d0ec81fd9ee2747f8639a57afce5bdabf972ad0`"
    }
  ],
  "human_url": "/tools/ea-225-project-issue-tracker-api-agent",
  "markdown_url": "/agent/article.md?path=%2Ftools%2Fea-225-project-issue-tracker-api-agent",
  "json_url": "/agent/article.json?path=%2Ftools%2Fea-225-project-issue-tracker-api-agent"
}