onetaskgraph-github-projects 0.2.8

A onetaskgraph source over GitHub Projects.
Documentation

A stateless onetaskgraph source over one GitHub Projects v2 project.

A project maps to the configured GitHub ProjectV2, not a repository: one Projects v2 board can contain work from several repositories and draft work from none. Project fields read ProjectV2.id, title, shortDescription, url, createdAt, and updatedAt. Tasks map from ProjectV2Item.content (Issue, PullRequest, or DraftIssue); labels read the content's labels connection and ProjectV2ItemFieldLabelValue.

Status reads the item value whose ProjectV2ItemFieldSingleSelectValue.field.name is Status. Its option name is retained. The default maps Backlog, Todo/Open, In Progress/In Review, Done/Closed/Merged, and Cancelled/Canceled; status_mapping overrides option names case-insensitively, and all other user-defined names remain Unknown.

ProjectV2.items pages but has no label, status, orphan, or content-search arguments. Project listing alone is native; the plugin ignores every unsupported query predicate so the engine can compensate from the wider result. Dependencies traverse underlying Issue nodes. Issue.blockedBy supplies DependsOn edges and Issue.blocking supplies DependedOnBy edges; pull requests and draft issues have neither field and therefore return an empty edge page. Both dependency capabilities are BothDirections; project dependency reads aggregate the configured project's issue edges. Projects v2 has no native project-to-project relationship, so those aggregate edges use the related issues' projectItems.project.id.

Writes update the configured board, create draft items (never another board), update existing draft items, set the source-owned metadata field, and use GitHub's native issue dependency mutation when both ends are issues. Required checks use only the local fixture server; the ignored credentialed lane verifies the current schema, creates and reads back one uniquely named draft, then deletes every matching project item and verifies that no residue remains.

That lane writes only to the board GH_PROJECTS_OWNER and GH_PROJECTS_NUMBER name, and skips — as it does without GH_PROJECTS_TOKEN — when they are absent. Requiring the board to be nominated is what keeps a credentialed write lane off a board nobody nominated; it never asks GitHub which project was updated most recently. Before it starts, the lane also clears any item titled the way it titles its own artifacts, which is self-healing after an interrupted run: a process killed between its write and its cleanup leaves an artifact the next run removes.