Repository navigation
feat: add graph-source-github-issues package - #28
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
@codex security review |
The GitHub issues adapter for the GraphSource port, ported from Graphle's GraphQL client and generalised: scopes name a repository or every repository an owner has, across any number of organisations. An issue is a bound activity whose actor is its repository, blockedBy is a transition from the blocker, sub-issues and assignees are relations, and open or closed is the overlay. Blockers and sub-issues in other repositories and organisations are included, and every nested connection is read to its end. Cursors record the scope, the owner's repository listing position and GitHub's issue cursor as plain data. Rate limiting in each of GitHub's forms is TOO_MANY_REQUESTS with the reset instant, HTTP 401 is UNAUTHORIZED, and NOT_FOUND or FORBIDDEN answers are gaps. The token comes from an injected port; the ./node entry point reads GITHUB_TOKEN or the GitHub CLI's token and never logs it. Offline tests replay exchanges recorded from public repositories and pass the conformance kit in process and over a message port; live tests run when PROCESS_GRAPH_LIVE_GITHUB=1 and are reported as skipped otherwise.
493e8f1 to
4a8ab27
Compare
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
|
@codex security review |
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
|
@codex security review |
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
|
🎉 This PR is included in version 1.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Phase 2 of the process-graph plan, second half:
@exadev/process-graph-source-github-issues, the GitHub issues adapter for theGraphSourceport. Stacked on #25; I will retarget it tomainonce that merges.It is ported from Graphle's GraphQL client and generalised. A scope is
github:owner/repoorgithub:owner(every repository the account owns, listed by name), across any number of organisations. Each issue becomes a bound activitygithub:owner/repo#nwhose actor is its repository; eachblockedByentry is a transition from the blocker; sub-issues arechild-ofrelations, assigneesassigned-torelations, repositoriespart-oftheir owner; open and closed map toopenanddonein the overlay. Blockers and sub-issues in other repositories and organisations come with their own repository and owner, so a cross-organisation dependency is a hand-off in the model. Nested connections are read to their end with follow-up queries rather than truncated.Pages are one page of one repository's issues. The cursor holds the scope, the position in the owner's repository listing and GitHub's issue cursor, so a sync resumes in another process; a stale listing position carries on after that listing page. Rate limiting in each of GitHub's forms (429, 403 with no requests remaining or naming a secondary limit, a
RATE_LIMITEDGraphQL error) becomesTOO_MANY_REQUESTSwith the reset instant fromx-ratelimit-resetorretry-afterand an injected clock; 401 becomesUNAUTHORIZED;NOT_FOUNDandFORBIDDENanswers, and an owner GitHub answers with null, are gaps.The token comes from an injected port asked per owner. The
./nodeentry point addsgithubTokenFromEnvironment, which usesGITHUB_TOKENor asksgh auth tokenonce, and reports a failure without the CLI's output. The main entry point stays isomorphic.The offline tests replay GraphQL exchanges recorded from public repositories (GitHub's
octo-org,ExaDev/document-schema.js,Mearman/agent-permissions, whose issue is blocked byExaDev/trilean#11) at a small page size, so owner listings and every nested connection span several requests. The fixture holds request documents, variables, statuses and bodies only;scripts/record-fixtures.tsre-records it. The conformance kit passes over the fixtures in process and over a message port, and the tests assert the cross-organisation transition, every blocker and sub-issue past the first page, the octo-org repositories and the gap and error mappings. The live tests (PROCESS_GRAPH_LIVE_GITHUB=1 pnpm test:integration) run the kit and a cross-organisation sync against the real API; I ran them locally and they passed. Without the variable they are reported as skipped.The npm name needs reserving before this merges:
npm-reserve @exadev/process-graph-source-github-issues --trust ExaDev/process-graph --workflow ci.yml.