Parity audit3 min read

What Gitsu does and does not do versus github.com

An operation-by-operation audit of what github.com lets you do on a project or an issue, and whether Gitsu does it, partly does it or does not.

By Published Updated

This page lists what Gitsu can and cannot do next to github.com, one operation at a time. The tables below are built from Gitsu's parity audit when the site is built, so the counts on this page are the audit's counts. Most gaps are real, and many are large: github.com does much more than Gitsu does today.

What does the audit measure?

It measures, for every operation github.com offers on a project, an issue, or anything attached to them, whether a Gitsu user can do the same thing. An operation is a concrete action such as "add an assignee who is not already on the issue" or "set a milestone's due date", not a feature name. Labels, milestones, custom fields, views, sub-issues, comments and the project itself are each broken down into their create, read, update and delete actions.

Each operation gets one of three answers:

  • Done: Gitsu does it, with a matching control a user can reach.
  • Partial: Gitsu does some of it, such as fewer options than github.com, only some of the places github.com offers it, or a path that only works in some cases.
  • Missing: Gitsu does not do it yet.

The note beside each row is the audit's one-line description of the gap, or where the control lives in Gitsu when it is done.

How was it run?

It was run on 5 August 2026, in three steps, against a demo repository and project on github.com.

First, the audit established what github.com offers from three sources: GitHub's GraphQL schema, which lists 258 mutations; a signed-in pass over github.com's own menus, settings pages and pickers; and Gitsu's product requirements, which record what Gitsu leaves out on purpose.

Second, an auditor per capability area checked each operation against Gitsu's source code. Every answer carries evidence: a file and line in Gitsu for a done row, or the search that proved a control is absent for a missing one.

Third, a verifier went over every area and tried to refute each claim. That pass overturned 70 claims, added 103 operations the auditors had missed, and struck 5 rows as false alarms. The verifier's corrections win over the auditor's answers, false alarms are left out of every count, and the rows it added are counted with the rest.

How should I read the counts?

Read them as a map of where Gitsu is thin, not as a score. The counts include only operations github.com offers, so an action github.com cannot do never counts as a gap. Every operation counts once, whether it is a rarely used setting or the main way people assign work, so a group with many missing rows may still cover the actions you use every day.

The audit has not been re-run since August 2026. Features Gitsu shipped after that date can still show as missing, so check the getting started guide and the Web App itself for what is there today.

Where does github.com win?

On most operations. github.com is the full product, and Gitsu is a faster client for part of it. Project workflows, insights, most project settings, many view options and much of issue administration are only on github.com, and the tables show each one.

Gitsu keeps your data in GitHub, so nothing is lost by using both: do the daily work in Gitsu and open github.com for the rest. The pricing page explains what the free Web App and a subscription include.

The audit, capability by capability

817 operations that github.com offers, across 14 capability groups.

Done
209
Partial
131
Missing
475
Unverified
2

Assignees, reviewers and people pickers

5 done · 7 partial · 26 missing · 1 unverified of 39
OperationGitsuNote
Add an assignee who is not already on the issue (detail rail)Issue assignees (write path)MissingThe assignee dropdown is a list of the issue's current assignees.
Set assignees by node id over the wireIssue assignees (write path)MissingEvery set-assignees write that carries a non-empty list sends logins into an [ID!] argument and is rejected by GitHub.
Unassign everyone (clear the list)Issue assignees (write path)DoneDetail rail Assignee dropdown; BulkEditBar "Clear"
Unassign one person while others stay assignedIssue assignees (write path)MissingPartial unassign is unreachable; the user can only clear all.
Assign someone at issue-creation timeIssue assignees (write path)MissingThe compose dialog shows an Assignee chip that cannot be clicked and always reads "Unassigned".
Assign to me / self-assign shortcutIssue assignees (write path)MissingNo self-assign anywhere: not in the rail, the row menu, the board card, or the command palette.
Bulk assign across selected rowsIssue assignees (write path)PartialCandidate list is the selection's own assignees, not the repository's assignable users; it also replaces the whole list with a single person rather than…
Bulk assign from the command palette ("Assign to X")Issue assignees (write path)PartialCandidate list is whoever is already assigned somewhere in the loaded page of items; the id is a login so the write fails.
Bulk unassign ("Clear assignee")Issue assignees (write path)DoneBulkEditBar; command palette "Clear assignee" (locales/en.json:84)
Assign several people in one interactionIssue assignees (write path)PartialRail supports multi in principle but has nobody to choose from; bulk edit is structurally single-assignee.
Assign a pull-request itemIssue assignees (write path)MissingPR rows are read-only for assignees although GitHub allows the write.
Respect / surface GitHub's 10-assignee capIssue assignees (write path)MissingNo cap and no message.
Assign the Copilot coding agent / a botIssue assignees (write path)MissingNo agent/bot assignment path at all.
Candidate list = repository assignable usersAssignee candidate source (the people picker itself)MissingThe correct candidate set is already in the codebase and already reaches the client; it is simply not connected to the assignee control.
Candidate list = suggestedActors(capabilities:[CAN_BE_ASSIGNED])Assignee candidate source (the people picker itself)MissingGitsu has no equivalent of GitHub's "Suggestions" section ordering.
Candidate list = repository collaborators (with permission level)Assignee candidate source (the people picker itself)MissingGitsu cannot distinguish or display permission level.
Server-side typeahead / search inside the pickerAssignee candidate source (the people picker itself)MissingNo typeahead, and a hard 100-user ceiling on the only assignable-user read the app makes.
Multi-repository scoping of the candidate listAssignee candidate source (the people picker itself)UnverifiedNot determinable — no candidate list exists to scope.
List an item's assignees on rows, cards and the railIssue assignees (read path)DoneListView row, BoardCard, detail rail
Show the assignee's avatar imageIssue assignees (read path)MissingAssignees are shown as two-letter initials derived from the login everywhere except the comment @-mention list.
Show the assignee's display nameIssue assignees (read path)MissingOnly logins are ever shown.
Show bot / Copilot / Mannequin / Organization assigneesIssue assignees (read path)MissingAn issue assigned to Copilot or to a migrated Mannequin renders as unassigned in Gitsu.
Show assignees on sub-issue / linked-item / dependency rowsIssue assignees (read path)PartialOnly the first assignee is fetched and shown; a two-person sub-issue looks single-assigned.
Filter items by assigneeIssue assignees (read path)PartialFiltering by assignee works only if the user already knows and types the login; no suggestion list, and no @me token (grep for '@me' across src/domain and…
Group items by assigneeIssue assignees (read path)DoneListView / BoardView grouping
Read the Reviewers column value on a project itemReviewers (ProjectV2 REVIEWERS field)MissingThe Reviewers column is invisible in Gitsu: not in the table, not in the rail, not in the field-settings drawer.
Request / remove a PR reviewerReviewers (ProjectV2 REVIEWERS field)Missing
List who has access to a project, and at what roleProject collaborators / access listMissingNo access list.
Add a collaborator to a project / change their roleProject collaborators / access listMissingThe mutation exists upstream and nothing in the app calls it.
Remove a collaborator from a projectProject collaborators / access listMissing
Assign a draft issueDraft-issue assigneesMissingGitHub does allow assigning drafts.
Read a draft issue's assigneesDraft-issue assigneesMissingA draft that is assigned on github.com renders as unassigned in Gitsu, and is invisible to assignee filters and grouping.
Group items by assigneeAssignee as a grouping keyPartialgithub.com's project table has a 'Group by' menu that lists Assignees.
Sort items by assigneeAssignee as a sort keyMissinggithub.com's project table 'Sort by' menu lists Assignees.
Show who opened an issueIssue author / opened-byMissingIssue.author is a core people surface on github.com — the issue header reads '<login> opened this issue', and the author avatar appears on list rows and…
Disable the assignee control when the viewer cannot assignAssignee write permissionMissingIntrospection of the Issue type returns [assignedActors, assignees, viewerCanAssign] for assignment-related fields — GitHub exposes viewerCanAssign precisely…
@-mention a person in a commentMention people picker (comment editor)PartialThis is the cluster's one working people picker and the auditor cited it only as evidence, never scored it.
Show assigned / unassigned events in the activity timelineAssignment historyDoneListed because a thorough audit should record the cluster's one clean pass.
Edit assignees inline from a table rowAssignees cell in the list viewMissingOn github.com the project table's Assignees cell is directly editable — click the cell, pick people, without leaving the table.

Auth, accounts, repositories, and app configuration

11 done · 13 partial · 25 missing of 49
OperationGitsuNote
Sign in on desktop via OAuth device flowGitHub session (sign-in / sign-out)DoneOnboarding step 1 (desktop) - device code + copy button
Sign in on web via OAuth redirect flowGitHub session (sign-in / sign-out)DoneOnboarding step 1 (web) - "Continue with GitHub"
Sign in with a Personal Access Token (classic or fine-grained)GitHub session (sign-in / sign-out)MissingA user whose org blocks OAuth apps, or who wants a scoped fine-grained token, has no way to sign in at all.
See whether a credential is stored (connected / not connected)GitHub session (sign-in / sign-out)DoneSettings > Account > GitHub token badge
Re-authenticate after a 401 (revoked token)GitHub session (sign-in / sign-out)PartialFR-005 asks for a persistent re-auth banner with writes disabled and cached data readable.
Sign out on this device (clear token + persisted cache)GitHub session (sign-in / sign-out)DoneSettings > Account > Sign out
Revoke the OAuth authorization at GitHubGitHub session (sign-in / sign-out)MissingAfter "Sign out" the access token is still live on GitHub's side.
Authorize the token for a SAML-SSO-protected organizationGitHub session (sign-in / sign-out)MissingA project owned by a SAML-enforced org fails with an unactionable "GitHub returned HTTP 403" and no link to authorize the token.
Sign in against GitHub Enterprise ServerGitHub session (sign-in / sign-out)MissingNo enterprise host field.
Read the signed-in identity (login, name, avatar)Account (viewer)DoneSettings > Account > Signed in as
See the signed-in identity outside the settings screenAccount (viewer)MissingNothing in the app chrome says which account you are looking at - relevant precisely because the app supports only one account at a time.
List the organizations you belong toAccount (viewer)PartialOrg membership is read but never shown, so a user cannot tell why an org's board is or is not in the picker.
Switch to a different signed-in accountAccount (viewer)MissingSwitching accounts requires Sign out then Sign in, which also wipes the persisted cache (useSignOut.ts:37-44).
Read the rest of the viewer profile (email, company, bio, plan)Account (viewer)MissingDeliberate narrowing; nothing in the product needs it.
See which scopes the stored token actually hasOAuth token and scopesMissingIf the `project` scope is missing or was stripped by an org policy, the user sees generic HTTP errors instead of "this token lacks the project scope".
Choose which scopes to request at sign-inOAuth token and scopesMissing
See the GraphQL rate-limit budget and when it resetsOAuth token and scopesDoneApp-wide banner (app.rate-limit-banner)
Store the token securely on each platformOAuth token and scopesDonenone (invisible)
Export the config to a fileApp configuration document (.gh-proj.json)DoneSettings > Config > Save to repo
Designate a config repo and write config into it (FR-011, FR-012)App configuration document (.gh-proj.json)MissingFR-011/FR-012 (config repo, .gh-projects/config.json via the Contents API, desktop<->web sync) are unimplemented and the design was reversed to local-first.
Store saved views as .gh-projects/views/<id>.json in the config repo (FR-013)App configuration document (.gh-proj.json)MissingSame reversal as FR-012.
Delete a saved viewApp configuration document (.gh-proj.json)DoneSaved views sidebar row menu
Map a project field onto Status / Priority / Estimate / CycleField mapping onto canonical conceptsMissingFR-014 promises a skippable mapping step.
See the current mapping (which field is Status, which is Priority)Field mapping onto canonical conceptsMissingWhen the alias table guesses wrong, the user has no way to see that it guessed at all.
Change the themePreferences (theme, density, language, shortcut)PartialThree options against GitHub's eight.
Change the interface languagePreferences (theme, density, language, shortcut)PartialOn web the Preferences dialog cannot be opened at all, so language cannot be changed.
Preferences panes free of placeholder controlsPreferences (theme, density, language, shortcut)MissingUsers are shown four settings that do nothing and forget their value on close.
List the projects the token can see, to pick oneOnboarding and active projectPartialA board owned by another user with no linked repository is undiscoverable through the API.
Create a new projectOnboarding and active projectMissingConsistent with BR-004 (never a dead end), but a user with no board must leave the app.
Switch the active project laterOnboarding and active projectDoneApp sidebar project header; command palette
Work on more than one project at a timeOnboarding and active projectMissing
List the repositories the account can accessRepositoryPartialNo general repository list exists, so nothing can offer a repo outside the current project.
Choose which repository a new issue is created inRepositoryMissingIn a project spanning several repositories the new issue lands in whichever repo the first selected (or first loaded) item happens to belong to, with no…
See which repository an item belongs toRepositoryPartialThe dense list view - the product's primary surface - cannot tell two identically titled issues from different repositories apart.
Filter or group by repositoryRepositoryMissingIn a multi-repo project there is no way to narrow the view to one repository - neither by filter chip nor by typed query.
Scope of the issue-search picker (add existing issue / sub-issue)RepositoryPartialBy default only the viewer's own repositories are searched, so issues in org-owned repositories - the common case for a work project - do not appear unless…
Create a repositoryRepositoryMissingOnly matters because FR-011 wanted the app to create a private gh-projects-config repository.
Link or unlink a repository to the projectRepositoryMissingThe set of repositories a project spans is read-only in Gitsu, which also means the milestone and label catalogues cannot be widened from inside the app.
Force a refresh of cached project dataLocal caches and device stateDoneCommand palette > Refresh data
Open the command palette and run commands that have no other surfaceCommand palette and keyboard shortcutsMissinggithub.com ships a Cmd/Ctrl+K command palette on every page.
Refresh cached project data on demandLocal caches and device statePartialTwo refresh affordances exist and both are desktop-only: src/lib/menu.ts:96-104 (View > Refresh, Cmd+R -> queryClient.refetchQueries({queryKey:['github']…
Move an issue to a different repositoryRepositoryMissingGraphQL `transferIssue` is present in live introspection of `{ __type(name:"Mutation"){ fields{ name } } }`, and github.com offers "Transfer issue" in the…
Close, make public/private, or delete the active projectOnboarding and active projectPartialLive introspection of UpdateProjectV2Input returns inputFields projectId, title, shortDescription, readme, closed, public, and `deleteProjectV2` is present in…
Stay signed in on web, and know when the session endsGitHub session (sign-in / sign-out)Partialapi/auth/session-config.ts:27-33 builds the iron-session cookie with httpOnly/secure/sameSite/path and NO `ttl` and NO `maxAge`, so the browser session lives…
Choose which field drives board columns / grouping (GitHub's "Column field" and "Group by")Field mapping onto canonical conceptsMissingStronger than the alias-table gap the auditor filed.
Read or write the project's own saved views (Board/Table/Roadmap tabs)Project view configuration (ProjectV2.views)MissingGitHub exposes this as a full public API, not only in the web UI.
Stay signed in for as long as the GitHub token is valid (web session lifetime, token refresh)GitHub session (sign-in / sign-out)PartialGitHub OAuth user tokens do not expire by default, and an app that opts into expiring tokens receives a refresh_token on exchange.
Know whether the token may actually write to this project or repositoryAccount (viewer)MissingGitHub publishes this per object: ProjectV2.viewerCanUpdate, and Repository.viewerPermission, Repository.viewerCanCreateIssues and Repository.isArchived (all…
See the remaining API rate-limit budgetOAuth token and scopesPartialGitHub exposes the budget through the rateLimit GraphQL field and the X-RateLimit-* headers (verified: X-Ratelimit-Limit: 5000 on gh api -i /user).

Comments and reactions

16 done · 9 partial · 40 missing of 65
OperationGitsuNote
Post a comment on an issueIssue commentDoneDetail view > Comments > composer (src/features/detail/components/CommentList.tsx:352-378)
Post a comment on a pull-request itemIssue commentDoneDetail view > Comments
Submit a comment with Cmd/Ctrl+EnterIssue commentMissingPosting always needs the mouse or a Tab to the button; no keyboard submit.
List comments with paginationIssue commentDoneDetail view > Comments
Comment author login and avatarIssue commentDoneDetail view > Comments > group header
Comment created timestamp (relative + absolute)Issue commentDoneDetail view > Comments > comment header
Edited marker and edit historyIssue commentMissingA reader cannot tell an edited comment from an original one, nor see what changed.
Author association badge (Owner / Member / Collaborator / Contributor)Issue commentMissingNo way to tell a maintainer's comment from a drive-by one.
Viewer permission flags on a comment (viewerCanUpdate / viewerCanDelete / viewerDidAuthor)Issue commentMissingGitsu offers Edit and Delete on other people's comments.
Comment count on list / board rowsIssue commentMissingA triager cannot see which issues have discussion without opening each one.
Render comment body (markdown, images, task lists, mentions, emoji)Issue commentDoneDetail view > Comments
Copy a permalink to one commentIssue commentPartialSharing a comment requires a round trip through the browser address bar.
Edit a comment bodyIssue commentDoneDetail view > Comments > Edit
Delete a comment (with confirmation)Issue commentDoneDetail view > Comments > Delete
Quote reply to a commentIssue commentMissingReplying to a specific point means retyping or hand-writing the `>` block; the composer's toolbar has no blockquote button either.
Preserve an unposted draft commentIssue commentDoneDetail view > Comments > composer
Lock the conversationIssue commentMissingMaintainer moderation must be done on github.com.
Write the body of a new issueIssue body (as distinct from a comment)DoneCompose dialog
Render the issue body from GitHub's own HTMLIssue body (as distinct from a comment)DoneDetail view > body
Edit the issue bodyIssue body (as distinct from a comment)DoneDetail view > body > Edit
Issue-body edited marker and revision historyIssue body (as distinct from a comment)MissingNo indication that a body was rewritten after posting.
Toggle a task-list checkbox in the rendered body or commentIssue body (as distinct from a comment)MissingTicking a checklist item needs a full body edit in the markdown source, or a trip to github.com.
Add a reaction to an issueReaction (issue and comment)MissingThe lightest-weight signal on GitHub (a 👍 instead of a '+1' comment) cannot be given at all.
Remove the viewer's reaction from an issueReaction (issue and comment)Missing
Add a reaction to a commentReaction (issue and comment)Missing
Remove the viewer's reaction from a commentReaction (issue and comment)Missing
Offer the full 8-emoji vocabularyReaction (issue and comment)Missing
Read reaction counts per emoji on an issue or commentReaction (issue and comment)MissingReactions added on github.com are invisible in Gitsu, so consensus recorded as 👍 is lost to a Gitsu-only triager.
Read whether the viewer has already reactedReaction (issue and comment)Missing
Read who reacted (reactor list behind each emoji)Reaction (issue and comment)Missing
Filter or sort items by reaction countReaction (issue and comment)MissingOverlaps the filtering cluster; noted here because the data is never fetched, so it could not be filtered on locally even if the grammar allowed it.
Minimize (hide) a comment with a classifierComment moderation (minimize / pin / report)Missing
Unminimize (show) a hidden commentComment moderation (minimize / pin / report)Missing
Show a minimized comment collapsed, with its reasonComment moderation (minimize / pin / report)MissingSpam, abuse and off-topic comments that GitHub deliberately hides are shown in full in Gitsu.
Pin / unpin an issue commentComment moderation (minimize / pin / report)MissingA pinned answer set on github.com is neither shown nor settable.
Report abusive content / block the authorComment moderation (minimize / pin / report)MissingEscape hatch is BR-004's open-on-GitHub button.
Markdown formatting toolbarComment composer (markdown editor)PartialNo heading, blockquote, ordered list, task list, table, strikethrough, mention or reference button.
Markdown previewComment composer (markdown editor)PartialTables, task lists, strikethrough, images, bare-URL autolinks, @mention and #ref rendering, emoji shortcodes and footnotes all fall through as plain text in…
Auto-continue list markers on EnterComment composer (markdown editor)Missing
Paste rich text as markdownComment composer (markdown editor)PartialA pasted table arrives as run-together text rather than a markdown table.
Paste a URL over a selection to make a markdown linkComment composer (markdown editor)Missing
Emoji autocomplete on `:`Comment composer (markdown editor)MissingShortcodes must be typed from memory; there is no picker and the preview will not render them either.
Slash-command menu in the composerComment composer (markdown editor)Missing
Composer parity between compose dialog, body editor and comment boxComment composer (markdown editor)Doneall four surfaces
@ user candidate sourceMention and reference suggestionsPartialWrong axis and wrong set.
@ organisation-team mentions (@org/team)Mention and reference suggestionsMissingNotifying a whole team, the normal escalation move, is unassisted.
@ suggestion ordering by relevanceMention and reference suggestionsPartialOn a large repo the person being replied to is not near the top.
# issue/PR candidate sourceMention and reference suggestionsPartialAn issue that lives in the repository but is not on the board cannot be suggested at all — exactly the backlog item a triager most often references.
# suggests pull requests as well as issuesMention and reference suggestionsMissing
Insert a cross-repository reference correctlyMention and reference suggestionsMissingOn a multi-repository project, picking an issue from repo B while commenting on an issue in repo A writes `#<number>`, which GitHub resolves against repo A.
Mention suggestions available in every composerMention and reference suggestionsDoneall composer surfaces
Mention suggestions outside a project routeMention and reference suggestionsPartialAny future composer mounted off a project route silently gets an empty popover rather than repository-scoped candidates.
Upload an image or file into a comment (drag-drop or file picker)Attachments and uploadsMissingAttaching a screenshot — the most common thing added to a bug comment — requires leaving for github.com.
Paste an image from the clipboard into a commentAttachments and uploadsMissingA pasted screenshot vanishes with no feedback at all — the paste appears to have been swallowed.
Display images and attachments already in a body or commentAttachments and uploadsDoneDetail view > body and comments
List the viewer's saved repliesSaved repliesMissing
Insert a saved reply into the composerSaved repliesMissing
Create / edit / delete a saved replySaved repliesMissingNot a parity gap: no API client can do this.
Composer is offered on a locked conversationIssue commentMissingSame class of defect as the viewerCan* row, and not covered by it.
Comments and events are two separate sections, not one timelineIssue commentPartialGitHub side: Issue.timelineItems interleaves IssueComment bodies with AssignedEvent, LabeledEvent, ClosedEvent and the rest in one chronological stream.
Comment and close (close with comment) in one actionIssue commentMissinggithub.com puts a second button next to Comment that posts the body and changes the issue state together.
Comment author name and avatar link to the GitHub profileIssue commentMissinggithub.com links the avatar and the login of every comment author to the profile page.
Create, read, update and delete comments on a pull-request itemIssue commentDoneRecorded because it is easy to assume the opposite and the auditor never tested it.
Body and title edit affordance is not gated on viewerCanUpdateIssue body (as distinct from a comment)MissingThe auditor covered this for comments but not for the issue body, although the body is one of its two declared entities.
Subscribe or unsubscribe from the threadComment moderation (minimize / pin / report)Missinggithub.com puts Subscribe/Unsubscribe in the issue sidebar, next to Lock conversation.

Everything else github.com offers that has no obvious Gitsu home

19 done · 7 partial · 62 missing of 88
OperationGitsuNote
List the project's workflows and their enabled stateProject workflow (built-in automation)MissingA user cannot tell that 7 automations are mutating their project behind Gitsu's back.
Create a workflow / add an automation ruleProject workflow (built-in automation)MissingUnreachable for both, but GitHub's UI can and Gitsu offers no link to it.
Enable or disable a workflowProject workflow (built-in automation)MissingThe single most common workflow action, and Gitsu has neither the control nor a deep link to it.
Delete a workflowProject workflow (built-in automation)MissingAPI-capable on GitHub's side, nothing in Gitsu.
View the project's Insights chartsProject insights / chartMissingNo API to build on; Gitsu offers no link to the Insights tab either.
Create a chartProject insights / chartMissing
Edit a chart (filter, X axis, grouping, type)Project insights / chartMissing
Delete a chartProject insights / chartMissing
Post a status update (status + body + start/target date)Project status updateMissingThe project-header feature GitHub pushes hardest right now has no Gitsu home at all.
Read the status-update historyProject status updateMissing
Edit an existing status updateProject status updateMissing
Delete a status updateProject status updateMissing
Distinguish archived items from live onesProject item archiveMissingArchived items are indistinguishable in Gitsu's snapshot; the app has no way to hide or filter them.
Archive an itemProject item archiveMissingArchiving is GitHub's standard way to retire a project row without deleting the issue.
Unarchive an itemProject item archiveMissing
See the project's server-side viewsProject view (server-side, shared)MissingViews a team already agreed on upstream do not appear in Gitsu, and Gitsu's own views never reach the team.
Create a shared project viewProject view (server-side, shared)MissingGitsu's saved view is private to one machine; locales/en.json:320 says so to the user.
Rename / reconfigure a shared project viewProject view (server-side, shared)Missing
Delete a shared project viewProject view (server-side, shared)Missing
Roadmap and Table layoutsProject view (server-side, shared)PartialNo roadmap/timeline at all; the dense list is not a spreadsheet-style table with per-field columns.
Edit project titleProject lifecycle and settingsDoneProjectSettingsDrawer
Edit project short descriptionProject lifecycle and settingsDoneProjectSettingsDrawer
Edit the project READMEProject lifecycle and settingsMissingOne of five fields on the same input, omitted.
Close / reopen the projectProject lifecycle and settingsMissingGitsu cannot even show that a project is closed.
Change project visibility (public/private)Project lifecycle and settingsMissingA privacy-relevant setting with no indicator and no control.
Create a new projectProject lifecycle and settingsMissingEscape hatch exists, so this is a soft gap consistent with BR-004.
Delete a projectProject lifecycle and settingsMissing
Copy a project / mark as templateProject lifecycle and settingsMissing
Manage project access / collaborators, link to repo or teamProject lifecycle and settingsMissingCovered by the deep link, in the spirit of BR-004.
Export the current view to CSV/TSVProject data exportMissingWould have to be built client-side from the cached snapshot, which Gitsu already holds in memory (FR-020).
Read the GitHub notification inboxNotifications and subscriptionsMissing
Subscribe / unsubscribe from an issueNotifications and subscriptionsMissing
See whether you are subscribed to an issueNotifications and subscriptionsMissing
Watch / unwatch a repositoryNotifications and subscriptionsMissing
Close an issue with a reason (Completed / Not planned / Duplicate)Issue lifecycle extrasPartialEvery Gitsu close is an unqualified close; Not planned vs Completed, which drives GitHub's own reporting, is unreachable.
See why an issue was closedIssue lifecycle extrasMissingReasons set on github.com are invisible in Gitsu.
Mark an issue as a duplicate of anotherIssue lifecycle extrasMissingA core triage verb, absent even as a read.
Transfer an issue to another repositoryIssue lifecycle extrasMissing
Pin / unpin an issue on the repositoryIssue lifecycle extrasMissing
Lock / unlock the conversationIssue lifecycle extrasMissingGitsu will happily show a comment box on a locked issue, since it never reads Issue.locked.
Delete an issueIssue lifecycle extrasMissingDestructive and rare; a reasonable omission, but not a documented one.
Set the issue type (Bug / Feature / Task)Issue lifecycle extrasMissingA first-class native issue attribute that FR-031's 'native tier' does not model at all.
React to an issue or comment (emoji reactions)Issue lifecycle extrasMissingReactions on github.com are invisible in Gitsu's comment list.
Pick an issue template or form when creatingIssue body: templates, attachments, task listsMissingOn any repo that uses templates, issues created from Gitsu bypass them silently.
Attach a file or image to a body or commentIssue body: templates, attachments, task listsMissingScreenshots are the normal currency of issue triage and cannot be added from Gitsu at all.
Tick a task-list checkbox in a rendered bodyIssue body: templates, attachments, task listsMissingReachable with the existing update-issue op (src/github/mutations.ts:56-60) — it just has no handler.
See linked branches / the Development sectionIssue body: templates, attachments, task listsMissing
See which other projects an issue belongs toIssue body: templates, attachments, task listsMissingConsistent with one-active-project.
Render the issue activity timelineTimeline and cross-referencesPartial41 event types are dropped, including MarkedAsDuplicate, Transferred, Locked, Pinned, Referenced, Mentioned, Subscribed, ConvertedFromDraft, AddedToProjectV2…
See cross-references from other issues/PRsTimeline and cross-referencesDoneDetailView -> IssueRelationships
See which PRs will close this issueTimeline and cross-referencesDoneDetailView -> LinkedItemsEditor / IssueRelationships
Render a PR row with its own state (draft/open/merged/closed)Pull request as a project itemDoneListView IssueRow, BoardCard
Edit a PR's project field values (Status, Priority, custom)Pull request as a project itemPartialFR-032 explicitly permits project-field edits on PRs; the implementation blocks them.
Set a PR's assignees, labels, milestone, reviewersPull request as a project itemMissing
Comment on a PRPull request as a project itemDoneDetailView -> CommentList
Review a PR, read files/commits/checks, mergePull request as a project itemMissing
Create a draft item directly in the projectDraft project itemMissingThe fastest capture path on github.com's board has no Gitsu equivalent.
Render a draft itemDraft project itemDoneListView, BoardView, DetailView
Edit a draft's title or bodyDraft project itemMissingFR-033 requires drafts to be editable.
Convert a draft into a real issueDraft project itemMissingFR-033 states drafts 'can be converted to real issues'.
Open the command paletteCommand palette and keyboardDoneCommandPalette
Palette covers every mutation operation (FR-080)Command palette and keyboardPartialNo palette command for labels, milestone, close/reopen, title/body, comments, sub-issues, dependencies, linked items, field settings, or…
Advertised shortcuts G L / G B / G S / C / D / T / Cmd+R actually fireCommand palette and keyboardPartialThe palette tells the user a shortcut exists and pressing it does nothing (FR-082).
List keyboard model (j/k/Enter/x/Escape)Command palette and keyboardDoneListView
Keyboard drag on the boardCommand palette and keyboardDoneBoardView
Discover keyboard shortcuts (cheat sheet)Command palette and keyboardPartialAnd the hints it does show are partly false (row above).
Poll for upstream changesSync, real-time and offlineDoneimplicit
Live / real-time collaborative updatesSync, real-time and offlineMissingUp to 60 s of staleness versus github.com's instant update.
Manual refreshSync, real-time and offlineDoneCommandPalette
Surface rate-limit stateSync, real-time and offlineDonebanner
Open an item on github.com from the detail viewPermalinks and escape hatches (BR-004)DoneDetailView header
Open an item on github.com from a list row or board cardPermalinks and escape hatches (BR-004)MissingBR-004 says 'every item offers a one-click escape'.
Copy a link to an itemPermalinks and escape hatches (BR-004)MissingNo way to hand a colleague a link to the row you are looking at without opening github.com first.
Deep-link to an item inside the appPermalinks and escape hatches (BR-004)Donerouter
Share a filtered view by URLPermalinks and escape hatches (BR-004)DoneFilterBar / QueryInput
Open project settings on github.comPermalinks and escape hatches (BR-004)DoneProjectSettingsDrawer header
Choose the repository the issue lands inIssue creation optionsMissingOn a multi-repo project the new issue silently lands in whichever repo happened to be first.
Set title and body at creationIssue creation optionsDoneComposeDialog
Set assignees and labels at creationIssue creation optionsDoneComposeDialog property chips
Set milestone at creationIssue creation optionsMissingMilestone is a first-class native field everywhere else in Gitsu (FR-031) but is missing from the composer.
Set issue type at creationIssue creation optionsMissing
Choose which project(s) to add the new issue toIssue creation optionsMissing
Add an existing issue to the project (by search or URL)Issue creation optionsMissingTextbook 'API-capable but no UI': the mutation, the URL resolver and the issue search all exist, and nothing joins them into an 'Add item' affordance.
Remove an item from the projectIssue creation optionsMissingItems can be added but never removed, so Gitsu is a one-way door for project membership.
Manually reorder an item within the projectIssue creation optionsMissingFR-031 names 'position' as a Projects v2 built-in that the model should carry, and no write reaches it.
Hide (minimize) a comment, and see that a comment was hiddenIssue commentMissingminimizeComment and unminimizeComment are both in the Mutation field list (introspected, not deprecated); github.com's comment kebab menu offers Hide as…
Respect ProjectV2.viewerCanUpdate — hide or disable writes the token cannot performProject write permissionMissingProjectV2 exposes viewerCanUpdate, viewerCanClose and viewerCanReopen (introspection; viewerCanUpdate returned true on PVT_kwHOAEOMRc4BfGWG).
Pick an iteration for an itemIteration field valueMissinggithub.com's project offers an iteration picker listing current, upcoming and completed iterations.

Filtering, sorting, grouping and search

18 done · 21 partial · 36 missing of 75
OperationGitsuNote
Filter by assignee loginProject filter qualifier languagePartialDifferent spelling from github.com, and the chip value step offers no picker for a users-kind field — freeform text only.
Assignee value picker offers repo collaborators / suggested actorsProject filter qualifier languageMissingUser must know and type the exact login; no discovery of who can be filtered on.
Filter by assignee = me (assignee:@me)Project filter qualifier languageMissingThe single most common project filter cannot be expressed, and a saved view is device-local so it cannot stand in.
Filter by labelProject filter qualifier languagePartialQualifier spelled `Labels:` not `label:`.
Filter by Status / any custom single-select fieldProject filter qualifier languageDoneFilterBar chip editor + query bar
Filter by open/closed state (is:open / is:closed)Project filter qualifier languageDoneFilterBar; also the route default filter src/routes/project-search.ts:24 pre-applies State not-in CLOSED,MERGED
Filter by item type (is:issue / is:pr / is:draft)Project filter qualifier languageMissingCannot separate issues from pull requests or drafts in a mixed project.
Filter for unset field (no:label, no:assignee, no:milestone, no:<custom>)Project filter qualifier languagePartialSpelled `<Field>:empty` not `no:<field>`.
Filter for set field (has:label, has:<custom>)Project filter qualifier languagePartialSpelled `-<Field>:empty` not `has:<field>`.
Wildcard 'any value' (status:*)Project filter qualifier languageMissingFunctionally covered by `-<Field>:empty`, so this is a syntax gap only.
Negate any qualifier with -Project filter qualifier languageDonequery bar; chips expose is-not / is none of (FilterBar.tsx:38-45)
Comma = OR within one qualifierProject filter qualifier languageDonequery bar only
Quoted values (spaces, commas, colons)Project filter qualifier languageDonequery bar
Explicit OR keyword and parentheses, nested arbitrarilyProject filter qualifier languageDonequery bar (full); chips support one flat level of OR groups (FilterBar.tsx:121)
Filter by close reason (reason:completed / "not planned")Project filter qualifier languageMissingCannot separate 'done' from 'won't do' — a core triage distinction.
Filter by date columns (updated:, created:, closed:, last-updated:)Project filter qualifier languageMissing'What changed this week' and 'what is stale' are unaskable.
Range and relative-date operands (>, <, .., @today-1w)Project filter qualifier languageMissingNumeric and date custom fields can only be matched exactly.
Iteration relative qualifiers (@current / @previous / @next)Project filter qualifier languageMissingAn iteration filter must name the sprint literally and be rewritten every cycle.
Filter by iteration nameProject filter qualifier languageDoneFilterBar / query bar
Filter by repositoryProject filter qualifier languagePartialSpelled `Repository:`; freeform text where github.com offers the project's linked repositories.
Filter by parent issue (parent-issue:owner/repo#n)Project filter qualifier languageMissingCannot narrow a list to one epic's children, although the detail view renders the hierarchy.
Free-text search across itemsProject filter qualifier languagePartialTitle substring only.
Show archived itemsProject filter qualifier languageMissingArchived items are invisible and unrecoverable from Gitsu.
Paste a github.com filter string and have it workProject filter qualifier languagePartialNo alias table maps GitHub's qualifier vocabulary onto the field names.
Add a filter condition via chipsFilter authoring, application and sharingDoneFilterBar 'Filter' popover, list view only
Add a multi-value `in` condition via chipsFilter authoring, application and sharingPartial'is any of' produces a one-element condition.
Add a nested OR group via chipsFilter authoring, application and sharingPartialChips cannot express OR-of-ANDs or any second nesting level; the query bar can.
Add a `contains` (substring) condition via chipsFilter authoring, application and sharingMissingDeliberate per filter.ts:36 ('the chip UI is free to ignore them'), but it means the commonest search is chip-inaccessible.
Read a filter back from a shared URLFilter authoring, application and sharingDonerouter search param `filter` (src/routes/project-search.ts:41)
Edit an existing condition (field / operator / value)Filter authoring, application and sharingDoneclick a chip's label
Remove one conditionFilter authoring, application and sharingDonechip 'x' button (FilterChip.tsx:73)
Clear all filtersFilter authoring, application and sharingDone'Clear all' button + list empty-state action
Filter the board viewFilter authoring, application and sharingMissingThe board always shows every non-archived item, including closed and merged ones, with no way to narrow it.
Persist / share the typed query textFilter authoring, application and sharingMissingReload, navigate to detail and back, or open a shared link, and the query box is empty even though its chips are still applied.
Combine chips and typed queryFilter authoring, application and sharingPartialTyping in the query bar silently discards the chips, and closing/reopening the query bar leaves a stale-looking empty box that will clear the filter on the…
Server-side filtering (one round trip, exact counts)Filter authoring, application and sharingMissingDeliberate, and the right call — but it makes the next two rows load-bearing.
Warn that a filter ran over a capped/partial snapshotFilter authoring, application and sharingMissingFR-024 says projects above ~2000 items 'warn and cap'.
Show matched / total item countsFilter authoring, application and sharingMissingNo way to tell how much a filter removed.
Filter commands in the command paletteFilter authoring, application and sharingPartialFR-080 says the palette covers 'navigation, filtering, and every mutation operation'; filtering is represented only by applying a saved view.
Sort the list by a chosen fieldSortingMissingItems appear in project position order only.
Choose sort direction (ascending / descending)SortingMissing
Multi-level sortSortingMissing
Read a project view's configured sort from GitHubSortingMissingGitsu could import the sort a team already configured on github.com and apply it locally; it does not look.
Persist a sort choice in the URL / a saved viewSortingMissingDead schema.
Manual drag-to-reorder items, persistedSortingMissingDragging a card to a specific slot in a column appears to work and then snaps back on refetch — position is never sent.
Group the list by any fieldGroupingPartialFR-041 requires 'group by any mapped concept or custom field'.
Group by a multi-valued field (labels, assignees, multi-select)GroupingDonenone (reachable only by hand-editing ?group=)
Per-group item countsGroupingDonelist group headers, board column headers
Collapse / expand a groupGroupingDonelist group header chevron
Group order follows the field's declared option orderGroupingDonelist
Trailing group for items with no valueGroupingDonelist group header, board last column
Choose the board's column fieldGroupingMissingFR-050 scopes the board to the mapped Status field, so this is arguably in-spec — but github.com's ability to board by Priority, Milestone or Iteration is a…
Swimlanes / secondary vertical groupingGroupingMissing
Roadmap / timeline layoutGroupingMissing
Create a saved viewSaved viewPartialAPI-capable and UI-complete, but dead code in the shipped tree.
List saved viewsSaved viewPartialNo visible list.
Rename a saved viewSaved viewPartial
Delete a saved viewSaved viewPartial
Apply a saved viewSaved viewDonecommand palette
Sidebar navigation to a saved viewSaved viewMissingA permanently broken link: it always lands on the router.savedViews.openError placeholder (screens.tsx:189-197).
Store a view's layout (table / board / roadmap)Saved viewPartialNo roadmap layout to store.
Store per-view visible columnsSaved viewMissingColumn choice is neither configurable nor savable.
Store a view's grouping and sortingSaved viewPartiallocales/en.json 'router.savedViews.saveDescription' promises 'Filters, grouping, sorting, and view mode are saved' — two of the four cannot be set.
Share a saved view with the teamSaved viewMissingDeviates from FR-047: views are device-local, not repo-backed, so they do not follow the user between machines and cannot be shared.
Full-text issue search across repositoriesIssue search (global)PartialNo global search.
Use search qualifiers (author:, is:, in:, involves:, mentions:, linked:, project:, sort:)Issue search (global)PartialEvery GitHub qualifier works, but nothing says so: the placeholder is a plain 'search' string and there is no syntax hint, no completion and no error feedback.
Search pull requestsIssue search (global)Missing
Page beyond the first resultsIssue search (global)MissingA term with more than 20 matches silently truncates with no indication.
Import a project view's filter string from GitHub (ProjectV2View.filter), and write one backSaved viewMissingThe auditor checked whether Gitsu reads a view's sortByFields but never checked the one view property GitHub actually lets the API both READ and WRITE.
Keyboard shortcut to open or focus the filter / query barFilter authoring, application and sharingMissinggithub.com binds `/` to focus the project filter box.
Qualifier and value autocomplete in the query barFilter authoring, application and sharingMissinggithub.com's filter box completes qualifier names and then their values as you type — that is how a user discovers the vocabulary at all.
Choose which fields the list row showsList column configurationMissingThe auditor only asked whether a saved view STORES visible columns; it never asked whether the app lets you pick them.
Filter survives a view switch or a sidebar navigationFilter authoring, application and sharingMissingDistinct from 'the board cannot filter': the URL state is discarded at the door, so even the list loses it.
Iteration value picker offers the project's iterationsProject filter qualifier languageMissingThe auditor found this for users-kind fields but not for iteration, where it is worse.
Group-collapse state persistsGroupingPartialFR-041 requires 'per-group counts and collapse'.

Issue core lifecycle

7 done · 5 partial · 53 missing of 65
OperationGitsuNote
Create an issue with a titleIssueDoneComposeDialog, opened from AppSidebar.tsx:319 and the command palette (product-commands.ts:191-199)
Create an issue with a markdown bodyIssueDoneComposeDialog body editor
Choose which repository the new issue is created inIssueMissingThe user cannot pick the target repository; a multi-repo project silently files every new issue into whichever repo the first row happens to belong to, and an…
Set assignees at creation timeIssueMissingFR-070 asks for "a composer with a property chip row"; the chip row exists visually but none of the four chips is interactive, so nothing but title and body…
Set labels at creation timeIssueMissingSame as assignees — the Labels chip is inert.
Set milestone at creation timeIssueMissingNo milestone affordance at all in the composer, not even a decorative chip.
Set the project Status / Priority at creation timeIssueMissingThe Status and Priority chips promise a setting they do not make, and there is no per-column create on the board either.
Add the created issue to the project in the same callIssuePartialTwo writes instead of one, with a real partial-failure state ("created but not added") that the user has to resolve by resubmitting.
Create an issue from an issue template or issue formIssueMissingA repo with issue templates or forms gets no template chooser and no prefilled body/labels/assignees.
Set the issue type at creation timeIssueMissingSee the Issue Type entity.
Create an issue already parented to another issueIssuePartialWorks, but as two writes with a manual undo path where GitHub offers one atomic input.
Read title, body, number, url, stateIssueDoneListView, BoardCard, DetailView
Read the close reason (completed / not planned / duplicate)IssueMissingAn issue closed as NOT_PLANNED is indistinguishable from one closed as COMPLETED anywhere in Gitsu — list, board, detail header and activity feed all render…
Read lock state and lock reasonIssueMissingA locked conversation still shows a live comment composer in CommentList, so the user only learns it is locked when the write fails.
Read whether the issue is pinnedIssueMissing
Read what this issue is a duplicate ofIssueMissing
Read the edit history of the title/body ("edited" marker)IssueMissing
Update the titleIssueDoneDetailView title (click-to-edit, Enter/blur commits, Escape discards)
Rename an issue inline from a list row or board cardIssueMissingRenaming costs a navigation into the detail route where github.com does it in place.
Update the bodyIssueDoneDetailView "Edit issue description"
Close an issueIssueDoneDetailView header toggle button (locales/en.json:205)
Close with a state reason (COMPLETED / NOT_PLANNED / DUPLICATE)IssueMissingGitsu can only close as COMPLETED (GitHub's default).
Reopen an issueIssueDoneDetailView header toggle (locales/en.json:206)
Close or reopen from a list row or board cardIssueMissingClosing an issue always costs a round trip into the detail route.
Bulk close / reopen the selected issuesIssueMissingFR-074 says "bulk-edit any settable field", and state is settable — but the bulk union omits it.
Mark an issue as a duplicate of anotherIssueMissing
Unmark an issue as a duplicateIssueMissing
Lock the conversation, with a reasonIssueMissing
Unlock the conversationIssueMissing
Pin the issue to the repositoryIssueMissing
Unpin the issueIssueMissing
Transfer the issue to another repositoryIssueMissingNot merely missing: the codebase records a false reason for its absence, so the gap is invisible to anyone reading the module that owns writes.
React to the issue with an emojiIssueMissing
Delete the issueIssueMissingBR-004 ("never a dead end") is served by the Open-on-GitHub button, but deletion is a genuinely absent verb.
Convert the issue to a discussionIssueMissingNot a parity gap Gitsu could close — GitHub offers no API for it.
Read an issue's typeIssue TypeMissingOrg repos using issue types (Bug/Feature/Task) show nothing in Gitsu; the type is also unavailable to the filter language (src/domain/query-parser.ts) and to…
List the issue types available to a repositoryIssue TypeMissingNo catalogue read, so a picker could not be populated even if one existed.
Set or change an issue's typeIssue TypeMissing
Clear an issue's typeIssue TypeMissing
Create / update / delete the org's issue types themselvesIssue TypeMissingArguably out of scope — Gitsu is a project client, not an org-admin tool — but it is not written down as a non-goal anywhere in docs/PRD.md §3.
List a repository's issue templates and formsIssue Template / FormMissing
Create an issue from a chosen template (prefilled title/body/labels/assignees)Issue Template / FormMissingA repo whose contribution process depends on issue forms cannot be served from Gitsu's composer — the user has to leave for github.com.
Read whether the viewer is subscribed / ignoringIssue Subscription (notifications)Missing
Subscribe, unsubscribe or ignore an issueIssue Subscription (notifications)Missing
Read the issue activity feedIssue Timeline / ActivityPartialRecognised: Assigned, Closed, CrossReferenced, IssueComment, Labeled, Milestoned, Reopened, RenamedTitle, Unassigned, Unlabeled, Demilestoned.
Show why an issue was closed in the activity feedIssue Timeline / ActivityMissingThe reason is dropped on the read side as well as the write side.
Page beyond the first 100 timeline eventsIssue Timeline / ActivityMissingA long-running issue's older history is unreachable in-app.
Assign a person who is not already assigned to something in the projectIssuePartialThe brief names this exact class of gap ('the source and scope of choices'), and the auditor did not test it.
See who opened the issue and whenIssueMissinggithub.com's issue header always reads '<author> opened this issue on <date> · N comments'.
Create a draft item on the board, and convert a draft to a real issueDraft issueMissingGitsu reads and partly edits drafts — `item.type === 'draft'` gates behaviour at src/features/board/components/BoardCard.tsx:259 and :313…
Remove the issue from the project, or archive itIssueMissing`MutationOp` carries `add-item-to-project` (src/github/mutations.ts:79) with no counterpart.
Read and set GitHub's repository-level issue fieldsIssue Field (repo-level custom issue field)MissingA whole sibling concept to Issue Type, entirely uncovered by the audit.
Attach an image or file to the body or a commentIssueMissingRecording it so the audit does not chase it, exactly as the auditor did for 'convert to discussion'.
Assign the issue to Copilot / a coding agentIssueMissingVerified by introspection: `CreateIssueInput.agentAssignment` is documented as 'Configuration for assigning Copilot to this issue'…
Read who opened the issue and whenIssueMissinggithub.com's issue header is 'X opened this issue on <date>' and the repo issue list sorts by newest/recently updated.
Read whether the viewer may edit, close or delete this issueIssueMissingGitHub answers this per issue: Issue.viewerCanUpdate, viewerCanClose, viewerCanReopen, viewerCanDelete, viewerCanAssign, viewerCanLabel…
Pick an assignee from the repository's assignable usersIssueMissingOverlaps an assignee-focused cluster, but it decides whether Gitsu can assign at all, so it belongs in any audit that includes 'set assignees'.
Bulk-set labels and assignees from the selection bar / command paletteIssuePartialThe auditor checked which *kinds* bulk edit supports but not what it sends.
Create a draft issue, edit it, or convert it to a real issueDraft issueMissinggithub.com's '+ Add item' on a board or table creates a draft, the row menu converts it, and the title/body stay editable meanwhile: addProjectV2DraftIssue…
Remove an issue from the project, or archive itProject itemMissingThe auditor covered `add-item-to-project` (create side) but not its inverse.
Reorder an item manually within a column or the tableProject itemMissinggithub.com persists manual card/row order via updateProjectV2ItemPosition (confirmed in the Mutation field list).
Read reaction counts on the issue and its commentsIssueMissingThe auditor filed the write (addReaction/removeReaction) but not the read.
Attach an image or file to the issue bodyIssueMissingWorth recording so nobody chases it.
Read linked branches, or create a branch for the issueIssueMissinggithub.com's issue sidebar has a Development section: 'Create a branch for this issue'.
Read or set GitHub's new repository-level issue fieldsIssue Field (repo-level)MissingThe schema now carries a whole issue-field system the auditor did not consider: Repository.issueFields, Repository.viewerCanSeeIssueFields…

Labels

12 done · 6 partial · 20 missing of 38
OperationGitsuNote
Create a repository label (name + colour + description)Repository label (the catalogue)MissingA Gitsu user cannot create a label at all; they must leave the app and use github.com.
Rename a repository labelRepository label (the catalogue)MissingNo rename path.
Recolour a repository labelRepository label (the catalogue)MissingColour is read-only.
Change a repository label's descriptionRepository label (the catalogue)MissingNo way to add or correct a label description.
Delete a repository labelRepository label (the catalogue)MissingNo delete path.
List every label a repository declares, past the first 100Repository label (the catalogue)Donedetail rail label popover; board card label popover
Search the label catalogue by name AND descriptionRepository label (the catalogue)PartialFiltering matches names only, and uses cmdk fuzzy scoring rather than GitHub's substring match.
See a label's description in the pickerRepository label (the catalogue)MissingThe user cannot tell `type:bug` from `bug` by their descriptions inside Gitsu.
See a label's colour on the picker rows and triggerRepository label (the catalogue)PartialColour is present but at lower fidelity (dot, not fill), and absent entirely from the filter-bar catalogue.
Distinguish GitHub's 9 default labels from custom onesRepository label (the catalogue)MissingInformational only; matters if label management is ever added, because github.com blocks nothing but does mark defaults.
See how many issues carry a labelRepository label (the catalogue)MissingNo usage count, so no way to judge which labels are dead before deleting them (and no delete anyway).
Reach a label-management screen from the picker footerRepository label (the catalogue)PartialThe affordance is visible and dead — worse than absent, because it advertises a capability that does not exist.
Scope the label choices to the item's own repository in a multi-repo projectRepository label (the catalogue)Donelabel popover; filter bar
Perform label writes from the web build (feasibility)Repository label (the catalogue)MissingIf label CRUD is added the REST route (the one src/github/milestones.ts uses for the sibling entity) is blocked on web; GraphQL is the only cross-platform…
Add a label to an issue from the detail railLabel assignment on an issueDoneDetail view -> MetadataRail -> Labels row -> popover
Remove a label from an issue from the detail railLabel assignment on an issueDoneDetail view -> MetadataRail -> Labels row -> popover
Add / remove labels from a board card without opening the itemLabel assignment on an issueDoneBoard -> card -> label chips
Write label changes as deltas rather than as a whole-set replaceLabel assignment on an issueMissingLost-update race: a label added by a teammate (or a bot, or an Action) between Gitsu's last read and the user's next toggle is silently stripped.
Preserve labels beyond the 20 the item query readsLabel assignment on an issueMissingAn issue with 21+ labels loses labels 21..n the moment the user toggles any label.
Preserve an applied label whose id the catalogue cannot resolveLabel assignment on an issueMissingAny name/id mismatch (stale catalogue, partial page, transferred issue) removes the label without telling the user, and the optimistic UI hides it until the…
Set labels while creating an issueLabel assignment on an issueMissingLabels must be applied in a second step after the issue exists.
Bulk-apply a label to the selected itemsLabel assignment on an issueMissingBulk label apply is broken, not merely limited.
Choose from the full repository label set when bulk-editingLabel assignment on an issueMissingA label no selected row carries cannot be applied in bulk, so bulk edit can never introduce a new label to a selection.
Bulk-apply more than one label, or add without removingLabel assignment on an issueMissingEven if the id bug were fixed, a bulk apply would erase every other label on every selected row.
Bulk-clear all labels from the selected itemsLabel assignment on an issueDoneListView -> BulkEditBar -> Labels select -> "Clear Labels"
Clear all labels on one issue in a single actionLabel assignment on an issuePartialAt parity with github.com's UI; behind GitHub's API.
Apply labels to a pull-request item in the projectLabel assignment on an issueMissingA user can tick a label on a PR card and see it appear optimistically; GitHub rejects it and the value reverts on the next refetch.
See an issue's labels in list, board and detailLabel assignment on an issueDoneListView rows; BoardCard; MetadataRail
See label colours on list rows and board cardsLabel assignment on an issuePartialColour is the primary way people scan labels on github.com.
See every label on a board cardLabel assignment on an issuePartialOnly two labels are visible per card; the rest are behind a count.
Filter items by labelLabel assignment on an issueDoneFilterBar; QueryInput
Group items by labelLabel assignment on an issueDoneListView grouping; BoardView columns
See label add/remove events in the issue timelineLabel assignment on an issueDoneDetail view -> activity feed
Apply or remove a label from the keyboard or the command paletteLabel assignment on an issueMissinggithub.com binds `l` on an issue/PR page to open the Labels dropdown, and `l` on the issue list applies the label menu to the selected rows.
Edit an item's labels in place from a list rowLabel assignment on an issueMissinggithub.com's Projects v2 table has a Labels column whose cell opens the label picker in place, and the issue list has the bulk Label menu.
Learn why the label picker will not writeLabel assignment on an issueMissingsrc/features/shared/components/LabelPicker.tsx:268-269 sets `editingDisabled` when `labels.length === 0` or `issueId === null` — i.e.
Filter items by labelLabel assignment on an issueDoneSupported and reasonably complete.
Read labelled/unlabelled events in the item's activity feedLabel assignment on an issueDonelocales/en.json:258 `detail.activity.event.labeled` ('{{actor}} added the {{detail}} label') and :264 `detail.activity.event.unlabeled` — the timeline renders…

Milestones

24 done · 10 partial · 19 missing · 1 unverified of 54
OperationGitsuNote
Create a milestone with a titleMilestone (the object itself)DoneSettings -> Milestones -> "New milestone" (src/features/settings/MilestonesScreen.tsx:133-142)
Set the description while creatingMilestone (the object itself)PartialPlain textarea: no markdown Write/Preview tabs, no mention autocomplete, unlike github.com's description editor.
Set the due date while creatingMilestone (the object itself)DoneSettings -> Milestones -> New milestone dialog
Choose which repository the milestone is created inMilestone (the object itself)PartialCandidate source is only the repositories LINKED to the project (GraphQL description of ProjectV2.repositories: "The repositories the project is linked to.").
Create a milestone already in the closed stateMilestone (the object itself)MissingREST-only capability that github.com's UI does not expose either; parity with the UI, not with the API.
List open milestones with title, state and due dateMilestone (the object itself)DoneSettings -> Milestones
List closed milestonesMilestone (the object itself)PartialOpen and closed are interleaved in one list.
Milestone progress bar and completion percentageMilestone (the object itself)PartialThe bar renders but the numeric "N% complete" is never printed — the percentage is only conveyed by bar width and by an aria-label of "Completion".
Open and closed issue counts per milestoneMilestone (the object itself)DoneSettings -> Milestones, each row
Milestone description shown when reading the listMilestone (the object itself)MissingA user must open Edit to read a milestone's description.
Overdue / relative due-date wordingMilestone (the object itself)MissingNo overdue signal at all; an overdue milestone looks identical to a future one.
Milestone creator, created-at, closed-atMilestone (the object itself)Missing
Open a milestone on github.comMilestone (the object itself)MissingThe data is already in hand.
See the issues that belong to one milestoneMilestone (the object itself)PartialNo click-through from a milestone row to its items.
Sort or reorder the milestone listMilestone (the object itself)MissingAlways due-date ascending.
Read more than 100 milestones, or a project with more than 100 linked repositoriesMilestone (the object itself)MissingSilent truncation past 100.
Rename a milestoneMilestone (the object itself)DoneSettings -> Milestones -> row "Edit"
Edit a milestone's descriptionMilestone (the object itself)DoneSettings -> Milestones -> row "Edit"
Change a milestone's due dateMilestone (the object itself)DoneSettings -> Milestones -> row "Edit"
Clear a milestone's due dateMilestone (the object itself)UnverifiedCould NOT determine whether GitHub's REST API accepts `due_on: null` — proving it requires a PATCH against the demo repo, which this audit is forbidden from…
Close a milestoneMilestone (the object itself)DoneSettings -> Milestones -> row "Close"
Reopen a closed milestoneMilestone (the object itself)DoneSettings -> Milestones -> row "Reopen"
Delete a milestoneMilestone (the object itself)DoneSettings -> Milestones -> row "Delete"
Hide Edit and Delete from a viewer who may not writeMilestone (the object itself)MissingInconsistent with the row's own close/reopen gating, which already reads viewerCanClose/viewerCanReopen.
Reach the Milestones screenMilestone (the object itself)PartialBuried two levels inside project field settings; not reachable from the command palette, the project header, or a milestone chip.
Transport: which API the writes use, and whether that costs anythingMilestone (the object itself)Donen/a
Set an issue's milestoneIssue milestone assignmentDoneDetail view -> metadata rail -> Milestone (src/features/detail/components/MetadataRail.tsx:381-392)
Clear an issue's milestoneIssue milestone assignmentDoneDetail view -> rail -> Milestone -> first (empty) entry
Picker candidate source is the issue's own repositoryIssue milestone assignmentDoneDetail view -> rail -> Milestone dropdown
Closed milestones are distinguishable in the pickerIssue milestone assignmentMissingOpen and closed milestones are interleaved alphabetically-by-due-date with no badge.
Filter/search inside the milestone pickerIssue milestone assignmentMissingA repository with dozens of milestones becomes a long unsearchable scroll.
Display the current milestone's title while the catalogue is still loadingIssue milestone assignmentMissingThe rail shows the raw GraphQL node id (MI_kwDO...) instead of the milestone title on every detail open until the milestone query lands, and permanently for…
Set a milestone on many selected items at onceIssue milestone assignmentDoneList/board -> select rows -> BulkEditBar "Milestone"
Bulk-edit picker's candidate sourceIssue milestone assignmentPartialA milestone that no currently-loaded item already carries cannot be bulk-applied at all — which is exactly the common case (a milestone just created in the…
Bulk-edit milestone is scoped to each row's repositoryIssue milestone assignmentMissingIn a multi-repo project, applying a repo-A milestone to selected repo-B issues fails per row and is reported only as a count of failures, with no explanation…
Bulk clear the milestone on selected itemsIssue milestone assignmentDoneBulkEditBar -> Milestone -> Clear
Set a milestone on a pull requestIssue milestone assignmentMissingPRs in a project can be read but their milestone can never be changed from the app.
Set a milestone inline from a list rowIssue milestone assignmentMissingTriage from the list requires opening the detail view for every item, or using the bulk bar with its restricted option list.
Set a milestone from a board cardIssue milestone assignmentMissing
Milestone shown on a board cardIssue milestone assignmentMissingThe list row shows a milestone chip; the board card shows nothing.
Milestoned / demilestoned events in the item timelineIssue milestone assignmentDoneDetail view -> activity timeline
Filter items by milestone nameMilestone as a view dimension (filter / group / sort)DoneFilter bar -> field "Milestone"; QueryInput text syntax
Filter items that have no milestoneMilestone as a view dimension (filter / group / sort)DoneFilter bar / QueryInput
Group items by milestoneMilestone as a view dimension (filter / group / sort)PartialThe capability exists end-to-end but no control exposes it, so in practice a user cannot group by milestone.
Sort items by milestone or by milestone due dateMilestone as a view dimension (filter / group / sort)MissingNo sorting of any kind exists in the item views; the `sort` search param is dead.
Milestone as a visible column/field in the item viewsMilestone as a view dimension (filter / group / sort)PartialVisibility of the milestone chip cannot be toggled per view the way GitHub's column can, and the board does not render it at all.
Set the milestone while creating an issueIssue milestone assignmentMissinggithub.com's new-issue form has a Milestone picker in the sidebar, and the API agrees: CreateIssueInput exposes `milestoneId` (introspected, alongside…
Hide 'New milestone' from a viewer who may not writeMilestone (the object itself)MissingSame defect as the auditor's Edit/Delete row but on the create side, and it is not covered by it.
Milestone counts and progress stay current after an item's milestone changesMilestone (the object itself)PartialInvalidation runs one way only.
Clear the milestone from an item (single and bulk)Issue milestone assignmentDoneParity, and worth recording because the cluster's other clear paths are broken.
Filter items by milestoneMilestone as a view dimension (filter / group / sort)DoneParity, and the auditor never listed it even though it is the cluster's one strong view-dimension.
Close and reopen a milestoneMilestone (the object itself)DoneParity, never listed.
Delete a milestone with an impact previewMilestone (the object itself)DoneParity, and ahead of github.com.
Read milestone added / removed events in the item timelineIssue milestone assignmentDoneParity, never listed.

Project (ProjectV2) itself

5 done · 6 partial · 30 missing of 41
OperationGitsuNote
Create a user-owned projectProject (ProjectV2)MissingCannot create a project in-app; the user is bounced to github.com.
Create an org-owned project (choose owner)Project (ProjectV2)MissingNo owner choice at all, so the user/org distinction GitHub offers at creation time does not exist in Gitsu.
Create a project from a template (template gallery)Project (ProjectV2)MissingTemplate gallery is a github.com-UI-only feature; Gitsu could not offer it via the public API even if it wanted to.
List / discover projects the token can seeProject (ProjectV2)DoneOnboarding ProjectPicker; AppSidebar project switcher; command palette `project.switch.*` (src/lib/commands/product-commands.ts:118-132)
Search / filter the project list (is:open, is:closed, text)Project (ProjectV2)PartialWith many projects the picker is an unsearchable scroll list that silently truncates at 2000; GitHub gives a search box plus open/closed tabs.
Open one project with its field schemaProject (ProjectV2)DoneBoard / List / Detail (all read `useProject`)
Project numberProject (ProjectV2)PartialOnce a project is active, its number is never shown — not in ProjectHeader, not in the sidebar switcher, not in the settings drawer.
Project URL / open the project on github.comProject (ProjectV2)PartialNo control opens the project *board* on github.com — only its settings page.
Owner (user vs organization) of the active projectProject (ProjectV2)PartialOwner is visible while choosing but not while working — the settings drawer, which is where it would matter, cannot show it.
Project READMEProject (ProjectV2)MissingREADME is neither read nor written; a project that documents itself in its README shows nothing in Gitsu.
Visibility (public / private)Project (ProjectV2)MissingA user cannot tell from Gitsu whether the board they are editing is public.
Closed / open state of the projectProject (ProjectV2)Missing`projectsV2` with no `query` argument returns closed projects too (verified: `query:"is:open"` and no-query both return 1 on the demo owner), so a closed…
Template flagProject (ProjectV2)MissingNot read; a template project is indistinguishable from a normal one.
Created / updated timestamps and creatorProject (ProjectV2)MissingNo provenance shown anywhere.
Viewer permission on the project (can update / close / reopen)Project (ProjectV2)MissingConcrete consequence: ProjectMetaSection (src/features/settings/drawer/ProjectMetaSection.tsx:43-63) renders live title and description inputs for every viewer.
Linked repositoriesProject (ProjectV2)PartialRead, but only as a means to source labels and milestones.
Linked teamsProject (ProjectV2)MissingNot read at all.
Project views (Table / Board / Roadmap tabs)Project (ProjectV2)MissingA user's existing GitHub views (names, layouts, per-view filters) are invisible in Gitsu, and Gitsu's own saved views are invisible on github.com.
Project workflows (built-in automations)Project (ProjectV2)MissingWorkflows silently change item state behind Gitsu's back (an added item gets a Status, a closed issue moves lane) with nothing in the app explaining why.
Project status updatesProject (ProjectV2)MissingNot read or written.
Rename the project (title)Project (ProjectV2)DoneSettings drawer → Project section → "Project title" input (saves on blur and Enter)
Edit the short descriptionProject (ProjectV2)DoneSettings drawer → Project section → "Description" textarea
Edit the project READMEProject (ProjectV2)MissingOne input field short of parity on a mutation the app already calls — the cheapest gap in this cluster to close.
Change visibility (public / private)Project (ProjectV2)MissingMaking a board public is a consequential, one-way-feeling action; its absence is defensible, but nothing in the app says where to do it beyond the generic…
Close a projectProject (ProjectV2)MissingNo close.
Reopen a closed projectProject (ProjectV2)MissingNo reopen, and since `closed` is never read, a user could be looking at a closed project without knowing.
Delete the projectProject (ProjectV2)MissingAbsent, and reasonably so for a client — but there is no in-app pointer to where it is done either, beyond the drawer's generic settings link.
Copy / duplicate a projectProject (ProjectV2)MissingAbsent entirely.
Mark / unmark the project as a templateProject (ProjectV2)MissingAbsent entirely.
Manage access — add/remove collaborators and set their roleProject (ProjectV2)MissingAbsent.
Link / unlink a repository to the projectProject (ProjectV2)MissingThis matters more than it looks: the linked-repository set is what sources the label and milestone catalogues (src/services/catalogues.ts:70) and therefore…
Link / unlink a team to the projectProject (ProjectV2)MissingAbsent entirely.
Create / rename / delete a GitHub project view (Table, Board, Roadmap)Project (ProjectV2)MissingNo create, rename, reorder, delete, or layout change for real GitHub views, and no roadmap layout at all.
Enable / disable / edit project workflowsProject (ProjectV2)MissingAuthoring workflows is a github.com-UI-only capability; Gitsu could not reach parity through the public API.
Post / edit / delete a project status updateProject (ProjectV2)MissingAbsent entirely.
Project insights / chartsProject (ProjectV2)Missinggithub.com-UI-only on GitHub's side too, so unreachable for any API client.
Reach the project's settings page on github.comProject (ProjectV2)DoneSettings drawer header → `settings.drawer.openOnGitHub`
View and restore archived project items (the project-level "Archived items" page)Project (ProjectV2)MissingGitHub: ProjectV2.items takes archivedStates with introspected defaultValue [NOT_ARCHIVED], and archiveProjectV2Item / unarchiveProjectV2Item are both in the…
Open a project by URL or owner+number (reach a board the discovery walk cannot see)Project (ProjectV2)MissingGitHub: User.projectV2(number:) and Organization.projectV2(number:) both exist (introspected), so any accessible board is reachable from a URL the user can…
Export project / view data as CSVProject (ProjectV2)MissingGitHub: github.com project ⋯ menu → "Export view data (CSV)", documented as "Exporting your project data" in the Managing-your-project docs index.
Display the project short description outside the settings drawerProject (ProjectV2)PartialCreate/read/update all work: shortDescription is selected at src/github/queries/project.ts:172, typed at src/domain/types.ts:176-181, and edited through…

Project custom fields and their options

18 done · 13 partial · 18 missing of 49
OperationGitsuNote
Create a TEXT fieldProject field declarationDoneSettings > Project fields screen > Create field dialog (/p/$projectId/settings/fields, src/routes/router.tsx:122)
Create a NUMBER fieldProject field declarationDoneCreate field dialog
Create a DATE fieldProject field declarationDoneCreate field dialog
Create a SINGLE_SELECT field with its initial options (name + colour + description each)Project field declarationDoneCreate field dialog
Create a MULTI_SELECT field with its initial optionsProject field declarationDoneCreate field dialog
Create an ITERATION field with start date + durationProject field declarationPartialAlways sends an empty iterations list, so the field is born with no iterations and Gitsu has no surface to add any afterwards.
Add an organisation-level issue field to a projectProject field declarationMissingOrg-level issue fields cannot be attached to a project from Gitsu.
Read the project's field list with each field's typeProject field declarationPartialEight upstream field types are silently dropped and appear nowhere in Gitsu: LINKED_PULL_REQUESTS, REVIEWERS, PARENT_ISSUE, SUB_ISSUES_PROGRESS, ISSUE_TYPE…
Read a single-select field's options (id, name, colour, description)Project field declarationDoneSettings drawer option rows, Project fields screen options section
Read a multi-select field's optionsProject field declarationDoneSettings drawer
Read an iteration field's configuration (start day, duration, iterations, completed iterations)Project field declarationMissingBecause the iterations are never fetched, FieldDef.options stays undefined for iteration fields (project.ts:286), and the item-level iteration picker at…
Read field metadata: createdAt, updatedAt, databaseIdProject field declarationMissingNot surfaced anywhere; no user-visible consequence found.
Rename a custom fieldProject field declarationDoneProject fields screen name input (FieldSettings.tsx:344-362) and settings drawer name input (FieldAccordionRow.tsx:283-301)
Rename the Status fieldProject field declarationMissingGitsu treats Status as immutable.
Reorder fields (change column order)Project field declarationMissingField order is a per-view property upstream and Gitsu has no view mutations at all, so column order is fixed to whatever GitHub returns.
Show or hide a field in a viewProject field declarationMissing
Delete a custom fieldProject field declarationDoneDelete field button on both surfaces, each with an affected-item count (field-settings-model.ts:85-93)
Add an option to an existing single-select fieldSingle-select / multi-select optionDone'Add option' button (fields screen) and 'Add option…' inline input (drawer, locales/en.json settings.drawer.addOptionPlaceholder)
Add an option to an existing MULTI_SELECT fieldSingle-select / multi-select optionPartialThe drawer sends singleSelectOptions for a MULTI_SELECT field — the create path deliberately switches the key by dataType (CreateFieldDialog.tsx:176-180), so…
Add an option at field-creation time with name, colour and descriptionSingle-select / multi-select optionDoneCreate field dialog option cards
Rename an optionSingle-select / multi-select optionDoneInline name input on both surfaces
Set or change an option's descriptionSingle-select / multi-select optionDoneInline description input on both surfaces
Recolour an option (the eight GitHub colours)Single-select / multi-select optionDoneColour select (fields screen) and a colour submenu in the option overflow menu (drawer)
Render option colours faithfully to GitHub's paletteSingle-select / multi-select optionPartialDeliberate and documented at field-settings-model.ts:10-17 (the palette must follow light/dark theme).
Reorder optionsSingle-select / multi-select optionPartialWorks, but by discrete moves only.
Preserve option identity (and therefore item values) across an option editSingle-select / multi-select optionDonen/a (behaviour)
Delete an optionSingle-select / multi-select optionDoneTrash button + confirm dialog (fields screen); 'Delete option' menu item + confirm dialog (drawer)
Delete an option from a MULTI_SELECT fieldSingle-select / multi-select optionPartial
Set the iteration start dateIteration field configurationPartialSettable once at creation; never editable afterwards.
Set the iteration durationIteration field configurationPartialNo days/weeks unit toggle, and no way to change duration after creation.
Read the configured start day and durationIteration field configurationMissingNote also the shape mismatch: the write input takes startDate (a Date) while the read side returns startDay (a weekday Int 1-7).
Read the list of iterations (id, title, startDate, duration)Iteration field configurationMissing
Read completed iterationsIteration field configurationMissing
Assign an iteration to an itemIteration field configurationPartialAn iteration select with an empty option list.
Add an iterationIteration field configurationMissingAPI-capable but no UI: the MutationOp/helper accepts iterationConfiguration on update (src/github/mutations.ts:108-111, :770-780), and nothing in src/features…
Rename an iterationIteration field configurationMissingEven at API level this is awkward upstream: without ids the list is positional, so a rename is a whole-list rewrite.
Change an individual iteration's date or durationIteration field configurationMissing
Delete an individual iterationIteration field configurationMissing
Insert a break between iterationsIteration field configurationMissinggithub.com UI only; the public API cannot express it either, so this is not something Gitsu could implement.
List Title, Assignees, Labels, Milestone, Repository as project fieldsBuilt-in and native project fieldsDoneDetail rail, filter bar, board grouping; drawer shows Labels + Milestone read-only
List Linked pull requests, Reviewers, Parent issue, Sub-issues progress, Created, Updated, Closed, Issue typeBuilt-in and native project fieldsMissingGitsu under-reports the project's own field inventory by ten columns.
Edit the Status field's optionsBuilt-in and native project fieldsDoneBoth surfaces
Read or edit a custom field value from the list row or the board cardCustom field value (item cell)Partialgithub.com's table shows one column per visible field and edits each cell in place; board cards show the fields the view configures…
Bulk-edit an arbitrary custom field on selected itemsCustom field value (item cell)Partialgithub.com edits many cells of any field column at once — copy one cell into many, drag-fill down, or clear the field on a multi-item selection (docs 'Editing…
Group items by an arbitrary custom fieldProject field declarationPartialgithub.com offers a 'Group by' menu on the table and the board, over any groupable field (ProjectV2View.groupByFields exists in the schema).
Sort items by a custom fieldProject field declarationMissinggithub.com sorts a table by any field column, and ProjectV2View.sortByFields records it.
Know whether the viewer may edit this project's fieldsProject field declarationMissingProjectV2 exposes viewerCanUpdate (confirmed by introspection of the ProjectV2 type), and github.com hides or disables the field settings for a user with…
Create a field from the project settings drawerProject field declarationPartialgithub.com offers 'New field' wherever fields are listed — the project settings page and the table's '+' column.
Read or set an organisation issue field value, and read an issue's typeOrganisation issue fieldMissingThe auditor considered only createProjectV2IssueField (attaching the declaration to a project).

Project items: adding, removing, archiving, ordering, bulk

8 done · 8 partial · 30 missing of 46
OperationGitsuNote
Add an existing issue or PR to the project (search picker)Project item (ProjectV2Item) lifecycleMissingThe mutation is wired but reachable only for an issue Gitsu itself just created; an issue that already exists cannot be put into the project at all.
Add an existing issue or PR by pasting its URLProject item (ProjectV2Item) lifecycleMissingThe URL-resolution machinery is present but never connected to project membership.
Create a new issue and add it to the projectProject item (ProjectV2Item) lifecycleDoneAppSidebar "Create issue" button; command palette
Choose which repository the new issue is created inProject item (ProjectV2Item) lifecycleMissingIn a project spanning two repositories the user cannot say which one the issue lands in, and a project with no items yet can create no issues.
Set fields (Status/Priority/assignees/labels/milestone) while creating the itemProject item (ProjectV2Item) lifecycleMissingFR-070 asks for "a composer with a property chip row"; the chips render but set nothing, so every new item starts with no Status even when created from a…
List items in the project's manual (POSITION) orderProject item (ProjectV2Item) lifecycleDoneListView, BoardView
See whether an item is archivedProject item (ProjectV2Item) lifecycleMissingNo archived state is modelled at all; harmless only because archived rows are also filtered out upstream (see next row).
View the project's archived itemsProject item (ProjectV2Item) lifecycleMissingArchived items are invisible and unreachable in Gitsu; a user who archived items on github.com has no way to see or restore them here.
Move an item between board columns (write the Status field)Project item (ProjectV2Item) lifecycleDoneBoardView drag and drop
Reorder an item manually (drag within a column, or reorder table rows)Project item (ProjectV2Item) lifecycleMissingOrder can be read but never written.
Move an item to the top or bottom of its column/groupProject item (ProjectV2Item) lifecycleMissing
Change an item's group by dragging a row in the list/table viewProject item (ProjectV2Item) lifecycleMissingDrag-to-regroup exists on the board only.
Remove (delete) an item from the projectProject item (ProjectV2Item) lifecycleMissingAn item added by mistake can never be taken out of the project from Gitsu.
Archive an itemProject item (ProjectV2Item) lifecycleMissingArchiving is the primary way a Projects v2 board is kept clean; Gitsu offers no equivalent (and no delete either, so there is no way to shrink a board).
Unarchive an itemProject item (ProjectV2Item) lifecycleMissing
Show an item whose content is redacted/inaccessibleProject item (ProjectV2Item) lifecycleMissingItem counts in Gitsu can differ from github.com with no explanation.
Open the item on github.comProject item (ProjectV2Item) lifecycleDoneDetailView header; command palette
Create a draft issue inside the projectDraft issue (DraftIssue item)MissingThe fastest capture path on github.com (type a title, get a draft, no repo needed) has no counterpart.
Read a draft's title and bodyDraft issue (DraftIssue item)DoneListView row, BoardCard, DetailView body
Read a draft's assigneesDraft issue (DraftIssue item)MissingA draft assigned to someone on github.com shows as unassigned in Gitsu, and filtering by assignee silently excludes it.
Read a draft's creator and timestampsDraft issue (DraftIssue item)Missing
Edit a draft's titleDraft issue (DraftIssue item)MissingDirectly contradicts FR-033 ("Draft issues render and are editable").
Edit a draft's bodyDraft issue (DraftIssue item)MissingContradicts FR-033.
Set a draft's assigneesDraft issue (DraftIssue item)MissingFR-033 assumes assignees "cannot apply" to drafts and hides the row by design — but upstream drafts do carry assignees, so the requirement's premise is wrong…
Set a project field value (Status, Priority, custom column) on a draftDraft issue (DraftIssue item)DoneMetadataRail, BoardCard inline editors, BulkEditBar, board drag
Convert a draft issue into a real issueDraft issue (DraftIssue item)MissingFR-033 explicitly requires it ("…and can be converted to real issues").
Delete a draft (remove it from the project)Draft issue (DraftIssue item)MissingA draft has no existence outside the project, so with no delete a mistaken draft is permanent from Gitsu's side.
Select multiple rowsBulk selection and bulk editPartialSelection is discoverable only by knowing the shortcut; FR-081 is met, but a mouse user sees no affordance.
Select a contiguous range of rowsBulk selection and bulk editPartialRange selection exists but not with the mouse.
Select all items in the current viewBulk selection and bulk editMissingA 200-row bulk change means 200 keystrokes.
Bulk set Status on the selectionBulk selection and bulk editPartialA project whose status column is called "Stage" or "State" gets a permanently disabled Status control even though the app already knows the mapping.
Bulk set Priority on the selectionBulk selection and bulk editPartialSame exact-name limitation as Status.
Bulk set any other project field (number, date, text, iteration, multi-select, other single-selects)Bulk selection and bulk editMissingFR-074 says "bulk-edit any settable field"; Estimate, Iteration, dates and every other custom column are unreachable in bulk.
Bulk assign a userBulk selection and bulk editPartialTwo gaps at once.
Bulk set labelsBulk selection and bulk editPartialSame two defects as bulk assign: choices limited to labels already on the selection, and names sent where node ids are required.
Bulk set milestoneBulk selection and bulk editPartialCannot move a selection onto a milestone that none of the selected items already carries.
Bulk clear a fieldBulk selection and bulk editDoneBulkEditBar ("Clear …" option in each select)
Bulk add (rather than replace) assignees or labels, or set several at onceBulk selection and bulk editMissingBulk-assigning wipes every other assignee and bulk-labelling wipes every other label on the selected rows — silently.
Bulk archive the selectionBulk selection and bulk editMissing
Bulk delete the selection from the projectBulk selection and bulk editMissing
Report which rows a bulk run failed onBulk selection and bulk editDoneBulkEditBar toast and inline message
Bulk edit a selection containing draft issuesBulk selection and bulk editPartialDrafts are counted as failures rather than explained, and the assignee change that upstream would in fact accept on a draft is never attempted.
Add the open item to another project, or take it out of this project, from the detail viewProject item (ProjectV2Item) lifecycleMissinggithub.com puts a "Projects" picker in the issue sidebar: it lists the projects you may write to, adds the issue to one, and removes it again.
Warn the user when the project is larger than the item capProject item (ProjectV2Item) lifecycleMissingGitsu stops the item walk at 2000 rows: src/github/client.ts:48 (DEFAULT_MAX_ITEMS = 2000), applied at client.ts:576 and enforced at client.ts:634-644, which…
Add an item directly into a group (the group header "+")Project item (ProjectV2Item) lifecycleMissinggithub.com's table view puts a "+ Add item" control in each group header; the new item is created already carrying that group's field value.
Group the board by a field other than Status, and drag a card to write that fieldProject item (ProjectV2Item) lifecycleMissinggithub.com's board layout can be grouped by any single-select, iteration, assignee, milestone or repository, and dragging a card between columns writes that…

Project views, layouts and per-view configuration

0 done · 7 partial · 34 missing of 41
OperationGitsuNote
Create a new view tab in the projectProject view (ProjectV2View tab)MissingGitsu cannot create a GitHub project view even though the public API supports it.
List the project's views and render a tab stripProject view (ProjectV2View tab)MissingA user who has 5 views on github.com sees none of them in Gitsu.
Read a view's stored layout, filter, group-by, sort-by and visible fieldsProject view (ProjectV2View tab)MissingNone of the per-view config a user already set on github.com is visible to Gitsu.
Rename a viewProject view (ProjectV2View tab)Missing
Change a view's layout (Table / Board / Roadmap)Project view (ProjectV2View tab)PartialTwo of GitHub's three layouts exist as app-local modes only; Roadmap is absent; layout choice never round-trips.
Set the filter query saved on a viewProject view (ProjectV2View tab)Missing
Duplicate a viewProject view (ProjectV2View tab)MissingNot fixable through the public API — GitHub exposes duplication only in its own web UI.
Reorder the view tabsProject view (ProjectV2View tab)MissingNot fixable through the public API.
Delete a viewProject view (ProjectV2View tab)Missing
Open / copy a link to a specific view on github.comProject view (ProjectV2View tab)PartialViolates BR-004 ("never a dead end") for the view/project surface: there is no one-click escape from a project screen to the same view on github.com.
Save / discard the unsaved changes banner on a viewProject view (ProjectV2View tab)MissingNot applicable — Gitsu has no server-side view to be dirty against.
Choose which fields (table columns) are visiblePer-view configuration knobsMissingGitsu shows one hard-coded row shape; a project with 9 custom fields cannot choose what appears.
Reorder the visible fields (column order)Per-view configuration knobsMissing
Set Group byPer-view configuration knobsPartialFR-041 ("Group by any mapped concept or custom field") is implemented in the domain layer but has no picker; the board ignores `group` entirely.
Set Sub-group / vertical group (board column field, table sub-group)Per-view configuration knobsMissingA project that groups its board by Priority or Iteration on github.com cannot be reproduced in Gitsu at all.
Set Sort by (field + ASC/DESC, multi-key)Per-view configuration knobsMissingSorting is completely unimplemented while FR-047 promises saved views persist a sort, and BR-003 names sorting as part of the product.
Set Slice byPer-view configuration knobsMissingNot fixable through the public API.
Set a field sum / aggregate on group headers and board columnsPer-view configuration knobsMissingNot fixable through the public API.
Set a board column item limit (WIP limit)Per-view configuration knobsMissingNot fixable through the public API.
Choose the roadmap's start/target date fieldsPer-view configuration knobsMissingWhole layout missing.
Set the roadmap zoom level (month / quarter / year)Per-view configuration knobsMissingNot fixable through the public API.
Set roadmap markers (iterations / milestones overlay)Per-view configuration knobsMissingNot fixable through the public API.
Express the same filter query the view stores (syntax parity)Per-view configuration knobsPartialA GitHub view filter pasted into Gitsu will not parse the same way, and Gitsu's filter cannot be saved back onto a GitHub view.
Save the current filter/group/sort/mode as a named viewGitsu app-local saved viewMissingAPI-capable but no UI, in the strongest sense: the whole feature is dark code.
List saved views and switch between themGitsu app-local saved viewPartialNo persistent tab strip or list; the one sidebar entry is broken by construction.
Rename a saved viewGitsu app-local saved viewMissing
Update an existing saved view in place (save changed filter onto it)Gitsu app-local saved viewMissingAbsent entirely, even in the dark code.
Delete a saved viewGitsu app-local saved viewMissing
Reorder saved viewsGitsu app-local saved viewMissing
Persist saved views where the PRD says (config repo, synced desktop↔web)Gitsu app-local saved viewMissingContradicts FR-012/FR-013 (`.gh-projects/config.json`, `.gh-projects/views/<id>.json` in the designated config repo) and FR-047 ("persist … to the config…
Round-trip a saved view with a GitHub ProjectV2ViewGitsu app-local saved viewMissingThe two systems are entirely disjoint: a Gitsu saved view is invisible on github.com and vice versa.
A saved view's filter is actually applied when it opens in board modeGitsu app-local saved viewMissingA saved view with view:'board' silently shows every item — its stored filter is discarded.
A saved view's grouping is appliedGitsu app-local saved viewPartial
A saved view's sort is appliedGitsu app-local saved viewMissingDead field in the persisted schema.
A saved view's text query (`q`) is appliedGitsu app-local saved viewMissingSecond dead field in the persisted schema.
Switching layout keeps the current filter and groupingGitsu app-local saved viewMissingMoving list→board→list silently resets the user's filter to the default open-work filter.
Share a view with another person by linkGitsu app-local saved viewPartialFilter links travel; saved-view links do not, and there is no affordance to copy either.
Reorder items manually (drag a card inside a board column, or drag table rows when no sort is set)Item order inside a viewMissingGitHub: `updateProjectV2ItemPosition` is present in `{ __type(name:"Mutation"){ fields{ name } } }`; UpdateProjectV2ItemPositionInput = projectId, itemId…
Open the board column menu (collapse column, and the actions GitHub puts there)Board columnMissinggithub.com: every board column has a ⋯ menu (collapse column, set limit, field sum, delete).
Archive an item out of every view, and browse the project's archiveArchived itemsMissingGitHub: `archiveProjectV2Item` and `unarchiveProjectV2Item` are both present in the Mutation type (introspected).
Land on the project's own default view (github.com opens view number 1) or on the layout last usedProject view (ProjectV2View tab)Missinggithub.com opens a project on its first view tab and keeps the view in the URL, so returning to the project restores the user's own default.

Setting and clearing field values on an item

46 done · 8 partial · 47 missing of 101
OperationGitsuNote
Read a TEXT cell from GitHubTEXT field value (custom column)Donenone (data layer)
Show a TEXT value in the detail metadata railTEXT field value (custom column)DoneDetail metadata rail
Show a TEXT value in the list row / table columnTEXT field value (custom column)MissingA TEXT column is invisible in list view; the user must open each item to see it.
Show a TEXT value on a board cardTEXT field value (custom column)PartialOnly two hardcoded field names render on a card; any other TEXT field is hidden.
Set a TEXT valueTEXT field value (custom column)DoneDetail metadata rail (text input, commits on blur)
Clear a TEXT valueTEXT field value (custom column)DoneDetail metadata rail (blank the input)
Set a TEXT value across a multi-row selectionTEXT field value (custom column)MissingNo bulk path for TEXT.
Read a NUMBER cell from GitHubNUMBER field value (custom column)Donenone (data layer)
Show a NUMBER value in the railNUMBER field value (custom column)DoneDetail metadata rail
Show a NUMBER value in the list rowNUMBER field value (custom column)MissingNUMBER columns (e.g.
Set a NUMBER valueNUMBER field value (custom column)DoneDetail metadata rail (numeric input, commits on blur)
Clear a NUMBER valueNUMBER field value (custom column)DoneDetail metadata rail
Read a DATE cell from GitHubDATE field value (custom column)Donenone (data layer)
Show a DATE value in the rail (grouped under Dates)DATE field value (custom column)DoneDetail metadata rail
Show a DATE value in the list rowDATE field value (custom column)PartialA project with Start date and Target date shows one of them, chosen by object key order, with no indication which.
Set a DATE valueDATE field value (custom column)DoneDetail metadata rail (calendar popover)
Clear a DATE valueDATE field value (custom column)DoneDetail metadata rail (Clear button in the calendar popover)
Respect read-only state on the date editorDATE field value (custom column)MissingThe DatePicker ignores readOnly and pending.
Read a SINGLE_SELECT cellSINGLE_SELECT field value (custom column, not Status/Priority)Donenone (data layer)
Show a SINGLE_SELECT value in the railSINGLE_SELECT field value (custom column, not Status/Priority)DoneDetail metadata rail
Set a SINGLE_SELECT optionSINGLE_SELECT field value (custom column, not Status/Priority)DoneDetail metadata rail (select)
Clear a SINGLE_SELECT optionSINGLE_SELECT field value (custom column, not Status/Priority)DoneDetail metadata rail ('Not set' row)
Bulk-set a non-Status/Priority single-select across selected rowsSINGLE_SELECT field value (custom column, not Status/Priority)MissingBulk edit covers two single-selects by name, not the project's single-select fields.
Show a SINGLE_SELECT option colourSINGLE_SELECT field value (custom column, not Status/Priority)MissingOption colours round-trip through the data layer but are never shown on an item.
Read and render StatusStatus (builtin single-select)DoneList row glyph, board column + card, detail rail
Set Status from the detail railStatus (builtin single-select)DoneDetail metadata rail
Set Status inline on a board cardStatus (builtin single-select)DoneBoard card (icon-only select)
Set Status by dragging a card between columnsStatus (builtin single-select)DoneBoard drag-and-drop (with keyboard equivalent per FR-052)
Clear Status by dropping on the No-status laneStatus (builtin single-select)DoneBoard (No status column)
Bulk-set Status on a multi-row selectionStatus (builtin single-select)DoneBulk edit bar (list view)
Bulk-clear StatusStatus (builtin single-select)DoneBulk edit bar ('Clear Status')
Set Status on a pull-request itemStatus (builtin single-select)PartialFR-032 requires PRs to be 'editable only for project field values'; the rail and card controls disable them instead.
Locate the Status field when the project renamed itStatus (builtin single-select)MissingFR-014 promises a user-configured mapping of project fields onto Status/Priority/Estimate/Cycle.
Read a MULTI_SELECT cellMULTI_SELECT field value (custom column)Donenone (data layer)
Show MULTI_SELECT values as badgesMULTI_SELECT field value (custom column)DoneDetail rail (badges), list row (tags, mixed with labels)
Add / remove one MULTI_SELECT optionMULTI_SELECT field value (custom column)DoneDetail metadata rail (checkbox dropdown)
Clear a MULTI_SELECT value (uncheck the last option)MULTI_SELECT field value (custom column)PartialMulti-select is the one type whose 'clear' does not use clearProjectV2ItemFieldValue.
Bulk-set / bulk-clear a MULTI_SELECTMULTI_SELECT field value (custom column)Missing
Read an ITERATION cellITERATION field value (custom column)PartialstartDate and duration of the assigned iteration are not read, so nothing can show 'ends in 3 days'.
Show an ITERATION value in the railITERATION field value (custom column)DoneDetail metadata rail
List the project's available iterationsITERATION field value (custom column)MissingNo source of iteration ids exists in the app.
Assign an item to an iterationITERATION field value (custom column)MissingAn ITERATION column can be read but never written.
Clear an iterationITERATION field value (custom column)DoneDetail metadata rail
Offer the @current / @next relative iteration shortcutsITERATION field value (custom column)Missing
Read the titleTitle (native issue field)DoneList row, board card, detail header
Rename an issueTitle (native issue field)DoneDetail header (pencil → input → save)
Rename inline from the list row or board cardTitle (native issue field)MissingRenaming always costs a navigation to the detail screen.
Rename a draft issueTitle (native issue field)MissingFR-033 states 'Draft issues render and are editable'.
Rename a pull requestTitle (native issue field)Missing
Read the assignee listAssignees (native issue field)DoneList row avatars, board card avatars, detail rail
Show assignee avatarsAssignees (native issue field)PartialavatarUrl is never fetched for the item list, so no real avatar ever renders on a row or card.
List the users who may be assignedAssignees (native issue field)MissingNo source of candidate assignees exists.
Assign a user to an item from the detail rail or board cardAssignees (native issue field)MissingA user can never be added as an assignee anywhere in Gitsu.
Remove one assignee when several are assignedAssignees (native issue field)MissingUnchecking one of two assignees fails; only going to zero succeeds, because an empty array carries no bad id.
Unassign everyoneAssignees (native issue field)DoneDetail rail, board card, bulk bar 'Clear Assignee', command palette 'Clear assignee'
Bulk-assign across a multi-row selectionAssignees (native issue field)MissingTwo compounding faults: wrong id type, and a candidate list drawn from the selection instead of the repository.
Assign on a draft issueAssignees (native issue field)Missing
Read the label listLabels (native issue field)DoneList row tags, board card chips, detail rail
List the repository's labels as choicesLabels (native issue field)DoneDetail rail popover, board card popover
Add / remove one labelLabels (native issue field)DoneDetail metadata rail, board card
Remove all labelsLabels (native issue field)DoneDetail rail, board card, bulk bar 'Clear Labels'
Bulk-set labels across a multi-row selectionLabels (native issue field)MissingBulk label application is broken.
Bulk-add a label without discarding existing onesLabels (native issue field)MissingEven once the id bug is fixed, one bulk label write would erase every other label on all selected rows.
Create a new label from the pickerLabels (native issue field)MissingA documented product decision in code, not in the PRD.
Read the milestoneMilestone (native issue field)DoneList row badge, detail rail
List the repository's milestones as choicesMilestone (native issue field)DoneDetail rail dropdown
Set the milestoneMilestone (native issue field)DoneDetail metadata rail
Clear the milestoneMilestone (native issue field)DoneDetail rail ('Not set'), bulk bar 'Clear Milestone'
Set the milestone from a board cardMilestone (native issue field)Missing
Bulk-set the milestoneMilestone (native issue field)PartialYou can only bulk-apply a milestone that at least one selected row already carries; a brand-new milestone is unreachable from bulk edit even though the…
Read the item stateState — open / closed (native issue field)DoneList row badge (PRs only), detail header glyph
Close or reopen an issueState — open / closed (native issue field)DoneDetail header button
Close with a reason (completed / not planned / duplicate)State — open / closed (native issue field)MissingEvery issue Gitsu closes is closed as 'completed'.
Close an item from the list row, board card, bulk bar or command paletteState — open / closed (native issue field)MissingClosing always costs a navigation to the detail screen; there is no bulk close.
Read the item's repositoryRepository (native, read-only column)DoneBoard card badge (BoardCard.tsx:301-312, only when the project spans several repos), detail rail 'Project' row (MetadataRail.tsx:374-379)
Show the repository on a list rowRepository (native, read-only column)Missing
Move an item to another repositoryRepository (native, read-only column)MissingParity with github.com's project table is intact, so this is not a user-facing gap — but the stated reason is factually wrong: transferIssue does exist.
Read the pull requests that close this issueLinked pull requests (computed column)DoneDetail screen, Linked items section
Show linked PRs as a list/board columnLinked pull requests (computed column)MissingOnly visible after opening the item.
Read the reviewers of a pull-request itemReviewers (computed column)MissingA PR item in a project shows no reviewer information anywhere in Gitsu, while github.com renders the column in every view.
Request a reviewerReviewers (computed column)Missing
Read the item's parent issueParent issue (writable relationship column)DoneDetail screen, Linked items section (as an untyped link, not labelled 'Parent')
Set this item's parent from the item itselfParent issue (writable relationship column)MissingRe-parenting requires navigating to the intended parent and adding the current item as a child there.
Detach this item from its parentParent issue (writable relationship column)Missing
Read completed-of-total sub-issue progressSub-issues progress (computed column)DoneDetail screen, Sub-issues section (progress bar)
Show sub-issue progress as a list/board columnSub-issues progress (computed column)Missing
Read the item's createdAtCreated / Updated / Closed timestamps (computed columns)MissingCannot show or sort by creation date; github.com renders it as a column and offers sort/filter on it.
Read the item's updatedAtCreated / Updated / Closed timestamps (computed columns)MissingNo 'stale items' view is possible.
Read the item's closedAtCreated / Updated / Closed timestamps (computed columns)Missing
Read the item's issue typeIssue type (writable native column)MissingOrganisations using issue types (Bug/Feature/Task) see none of it in Gitsu.
Set the issue typeIssue type (writable native column)Missing
Clear the issue typeIssue type (writable native column)Missing
Edit any field value from a keyboard shortcutCross-cutting write mechanicsMissingField editing is pointer-driven everywhere except through the command palette.
Edit any field value inline in the list viewCross-cutting write mechanicsMissingThis is the single largest structural divergence in the cluster: Gitsu's list is a read surface with a bulk bar bolted on, while github.com's equivalent is a…
Reorder an item within its Status column / set its manual positionItem position (Projects v2 built-in)Missing`updateProjectV2ItemPosition` is present in { __type(name:"Mutation"){ fields{ name } } } (introspected), and github.com persists manual card order inside a…
Set Status / Priority / assignees / labels / milestone while creating the itemAny field value, at creation timeMissingsrc/features/compose/ComposeDialog.tsx:281-300 renders four <Badge> elements labelled Status, Priority, Assignee and Labels inside a role="group" — they carry…
Disable the field editors when the viewer has no write access to the projectCross-cutting write mechanicsMissingProjectV2.viewerCanUpdate exists (confirmed in the ProjectV2 field list) and github.com uses it: a read-only collaborator sees the table and side pane…
Bulk-set or bulk-clear a NUMBER or DATE value across a selectionNUMBER and DATE field values (custom columns)MissingThe auditor raised the bulk gap for TEXT, MULTI_SELECT and non-Status single-selects but never for the other two writable custom types.
Edit the body of a draft issueBody (native issue field)MissingThe auditor covered the draft's title but not its body, which is the other half of what a draft actually is.
Read a MULTI_SELECT value on the list row as its own fieldMULTI_SELECT field value (custom column)PartialThe auditor checked TEXT, NUMBER and DATE reads on the row and concluded MULTI_SELECT was not a problem, but the row does render it — badly.
Create an item already carrying the group's field value (per-group quick add)Status (builtin single-select)Missingsrc/features/items/components/GroupSection.tsx:64-75 implements a per-group '+' button behind an optional onQuickAdd prop, and locales/en.json carries its…

Sub-issues, parent issue, dependencies and linked items

20 done · 11 partial · 35 missing of 66
OperationGitsuNote
Create a new issue and link it as a sub-issueSub-issue linkDoneDetail view > Sub-issues > inline create form (src/features/detail/components/SubIssuesEditor.tsx:173-184)
Set a body/description on the new sub-issueSub-issue linkMissingThe create form is a single title input; a sub-issue can only be born empty and must be filled in afterwards.
Set assignees, labels, issue type and milestone on the new sub-issueSub-issue linkMissingNone of the four can be set at creation time; the user must open the new issue on github.com (it is not in the project, so it cannot be opened in Gitsu).
Add the new sub-issue to a projectSub-issue linkMissingA sub-issue created in Gitsu never enters the open project, so it never appears in the list or board and its own detail view is unreachable…
Create several sub-issues in a row without reopening a dialogSub-issue linkDoneDetail view > Sub-issues > create form
Link an existing issue as a sub-issue by searchSub-issue linkDoneDetail view > Sub-issues > "Add existing" popover (src/features/detail/components/SubIssuesEditor.tsx:114-122)
Link an existing issue from a different repositorySub-issue linkPartialNo repository switcher.
Add a sub-issue by pasting its URLSub-issue linkMissingThe one input GitHub offers for reaching an issue you already have in hand is missing; only free-text search is available.
Re-parent an issue that already has a parentSub-issue linkMissingAlready-parented issues are deliberately hidden from the picker rather than offered with a "move it here" confirmation, so a sub-issue can never be moved…
Offer candidate sub-issues before the user typesSub-issue linkMissingThe picker opens empty; there are no suggested actors/issues.
Convert a task-list checkbox in the body into a sub-issueSub-issue linkMissingUI-only capability upstream; Gitsu could not implement it through the public API anyway.
List sub-issues with state, repository, number and assigneeSub-issue linkDoneDetail view > Sub-issues
Sub-issue progress (completed / total, percentage bar)Sub-issue linkDoneDetail view > Sub-issues > badge and Progress bar
Expand a child in place to see its own sub-issues (nested hierarchy)Sub-issue linkMissingOnly one level of the hierarchy is visible.
Open a sub-issue from its rowSub-issue linkPartialDrilling into a child always leaves the app, even when the child is an item of the same project and has its own Gitsu detail view.
See beyond 100 sub-issues, or be told the list was cutSub-issue linkPartial100 equals GitHub's own ceiling so nothing is lost today, but the computed `truncated` flag is never shown, so any future overflow is silent.
Reorder a sub-issue by draggingSub-issue linkDoneDetail view > Sub-issues > drag handle
Move a sub-issue before a named sibling (beforeId)Sub-issue linkMissingExpressively equivalent — afterId plus "omit for front" reaches every position — so this is not a user-visible gap.
Unlink a sub-issue, leaving the issue itself intactSub-issue linkDoneDetail view > Sub-issues > row X button (SubIssuesEditor.tsx:152-160)
Delete the underlying issue from the sub-issue rowSub-issue linkMissingBelongs more to the issue-lifecycle cluster, but the sub-issue row's only destructive action is unlink.
See the parent of the open issue, identified as the parentParent issuePartialThe parent is displayed, but indistinguishable from a closing pull request or an inbound cross-reference.
Set a parent from the child issue's pageParent issueMissingThe only way to give an issue a parent in Gitsu is to open the intended parent and use its "Add existing" picker — and that parent must itself be an item of…
Change an issue's parent (move it to a different parent)Parent issueMissingRe-parenting is impossible; the child must first be unlinked from its current parent, which itself needs that parent to be in the project.
Remove the parent from the child issue's pageParent issueMissingThere is no child-side unparent.
Follow the parent link to open the parent issueParent issuePartialNavigation leaves the app even when the parent is an item of the same project.
Mark the open issue as blocked by another issueIssue dependency (blocked by / blocking)DoneDetail view > Blocked by > "Add blocker" popover (src/features/detail/components/IssueDependencies.tsx:127-135)
Mark the open issue as blocking another issueIssue dependency (blocked by / blocking)DoneDetail view > Blocking > "Add blocked issue" popover
Add several dependencies in one dialogIssue dependency (blocked by / blocking)MissingEach dependency costs a fresh popover open, search and select.
Add a dependency on an issue in another repositoryIssue dependency (blocked by / blocking)PartialCross-repo dependencies need a hand-typed repo:/org: qualifier; there is no repository switcher and no hint that one is possible.
Add a dependency by pasting a URL or typing #numberIssue dependency (blocked by / blocking)MissingA user holding the issue URL must still search for it by words.
List the issues blocking this oneIssue dependency (blocked by / blocking)DoneDetail view > Blocked by
List the issues this one blocksIssue dependency (blocked by / blocking)DoneDetail view > Blocking
Dependency counts that stay right when the list is truncatedIssue dependency (blocked by / blocking)DoneDetail view > Blocked by / Blocking badges
"Blocked" indicator on the board and the item listIssue dependency (blocked by / blocking)MissingA bottleneck is invisible everywhere except inside one issue's detail view, which defeats the point of dependencies for triage.
See beyond 50 blockers or 50 blocked issuesIssue dependency (blocked by / blocking)PartialThe badge stays correct because it uses the summary totals, but the list silently stops at 50 with no "and N more".
Cycle rejection explained to the userIssue dependency (blocked by / blocking)DoneToast
Remove a blockerIssue dependency (blocked by / blocking)DoneDetail view > Blocked by > row X button
Remove a blocked issue from the Blocking listIssue dependency (blocked by / blocking)DoneDetail view > Blocking > row X button
Attach an existing issue as a linked itemLinked items and external links (Gitsu's own concept)DoneDetail view > Linked items > "Link issue" popover (src/features/detail/components/LinkedItemsEditor.tsx:217-226)
Attach an arbitrary external (non-GitHub) URLLinked items and external links (Gitsu's own concept)DoneDetail view > Linked items > external URL form (LinkedItemsEditor.tsx:125-181)
A link added on this issue is still listed after the view refetchesLinked items and external links (Gitsu's own concept)MissingThe row disappears from the issue where the user added it as soon as the view remounts, and instead turns up on the other issue's Linked items list.
Remove a user-added link after leaving and returning to the issueLinked items and external links (Gitsu's own concept)MissingRemoval works only in the same session, before any remount, while the comment id is still in the query cache.
Remove a link inside the current sessionLinked items and external links (Gitsu's own concept)DoneDetail view > Linked items > row X
Pick a pull request in the link pickerLinked items and external links (Gitsu's own concept)MissingThe picker is issue-only; PRs must be reached by pasting a URL.
Scope of the link picker's choicesLinked items and external links (Gitsu's own concept)PartialOnly the viewer's own repositories are searched.
Tell a parent, a closing pull request and an inbound cross-reference apartLinked items and external links (Gitsu's own concept)MissingOne undifferentiated list, so the user cannot tell what kind of relationship any row represents.
See beyond 50 closing-PR references or 100 timeline eventsLinked items and external links (Gitsu's own concept)PartialSilent truncation with no "show more".
Pull requests that will close this issueDevelopment panel: linked pull requests and linked branchesDoneDetail view > Linked items (with a pull-request glyph, LinkedItemsEditor.tsx:44-47)
Manually link an existing pull request to the issueDevelopment panel: linked pull requests and linked branchesMissingA Gitsu "link" to a PR is a comment cross-reference, which does not create GitHub's closing relationship and does not auto-close the issue on merge.
Unlink a manually linked pull requestDevelopment panel: linked pull requests and linked branchesMissing
Branches linked to the issueDevelopment panel: linked pull requests and linked branchesMissingWork in progress on a branch is invisible in Gitsu.
Create a branch for the issue (custom name, destination repository)Development panel: linked pull requests and linked branchesMissing
Delete or unlink a linked branchDevelopment panel: linked pull requests and linked branchesMissing
Closing-keyword links ("Closes #12") reflected on the issueDevelopment panel: linked pull requests and linked branchesDoneDetail view > Linked items
Show the "Parent issue" column in a viewHierarchy project fields (Parent issue, Sub-issue progress, Tracks / Tracked by, Linked pull requests)MissingThe column cannot be shown, grouped, sorted or filtered because the field never becomes a FieldDef.
Show the "Sub-issue progress" column in a viewHierarchy project fields (Parent issue, Sub-issue progress, Tracks / Tracked by, Linked pull requests)MissingProgress is visible only inside one issue's detail view, never on a row or a card, so a triage pass cannot see which parents are nearly done.
Group a view by "Parent issue"Hierarchy project fields (Parent issue, Sub-issue progress, Tracks / Tracked by, Linked pull requests)MissingThere is no hierarchical view of a project anywhere in Gitsu.
Filter with parent-issue:OWNER/REPO#NUMBERHierarchy project fields (Parent issue, Sub-issue progress, Tracks / Tracked by, Linked pull requests)Missing
Show the "Linked pull requests" columnHierarchy project fields (Parent issue, Sub-issue progress, Tracks / Tracked by, Linked pull requests)Missing
Show the legacy "Tracks" / "Tracked by" columnsHierarchy project fields (Parent issue, Sub-issue progress, Tracks / Tracked by, Linked pull requests)MissingTask-list tracking is superseded by sub-issues upstream, so the practical cost is small.
Hide or show these built-in fields on a viewHierarchy project fields (Parent issue, Sub-issue progress, Tracks / Tracked by, Linked pull requests)MissingGitsu cannot even list these fields, so it cannot offer the show/hide control.
Add a link without posting a bare-URL comment into the issue threadLinked items and external links (Gitsu's own concept)MissingGitHub's own link affordances (Development panel, the manual PR link) write no comment — there is no addComment behind them.
See a pull request that was closed without merging, and tell manual links from automatic onesLinked items and external links (Gitsu's own concept)MissingIntrospected: Issue.closedByPullRequestsReferences takes includeClosedPrs (default false), orderByState (default false) and userLinkedOnly (default false).
Keep inbound cross-references visible on a busy issueLinked items and external links (Gitsu's own concept)PartialLinked items is not read from a cross-reference connection: src/github/queries/item-detail.ts:490-502 filters CrossReferencedEvent out of timelineItems(first…
Show the new sub-issue's repository correctly before the next refetchSub-issue linkPartialsrc/features/detail/useMutateSubIssues.ts:166 builds the optimistic row with `detail.subIssues[0]?.repository ??
Set a parent while creating a new issueParent issueMissingIntrospected CreateIssueInput carries parentIssueId, and `gh issue create --parent` uses it; github.com's own new-issue form has no parent field, so this is…

Frequently asked questions

Does Gitsu replace github.com?

No. Gitsu works on top of GitHub Issues and GitHub Projects, and github.com still does far more. Anything Gitsu cannot do, you can still do on github.com against the same issue or board.

When was the audit run?

On 5 August 2026. The tables show Gitsu as it was then; the audit has not been re-run since, so a feature shipped later can still show as missing.

How is an operation marked partial?

Partial means Gitsu offers the operation but not the whole of it: fewer options than github.com, only some of the places github.com offers it, or a path that works only in some cases.

Why are some things github.com offers not counted?

Parity is counted only over operations github.com actually offers. Rows the verifier struck as false alarms are left out of every count.

Try it on your own boardsGitsu opens your GitHub Projects boards in the browser. Sign in with GitHub; your data stays in GitHub.

Open the Web App