Skip to content

feat(lists): enable editing GitHub-backed lists (add/close/reopen issues) - #26

Merged
Adron merged 2 commits into
mainfrom
docs/github-oauth-enabled
Aug 27, 2026
Merged

feat(lists): enable editing GitHub-backed lists (add/close/reopen issues)#26
Adron merged 2 commits into
mainfrom
docs/github-oauth-enabled

Conversation

@Adron

@Adron Adron commented Aug 27, 2026

Copy link
Copy Markdown
Member

Summary

GitHub-backed lists were effectively read-only in the iOS app, even though the backend fully supports mutations by proxying them to the GitHub Issues API (POST→create, PUT→patch, DELETE→close). This branch enables adding issues and changing issue status (open ⇄ closed) from the app, and fixes a latent response-decode bug that affected all lists. It also carries the already-staged GitHub native-OAuth + Universal Links docs commits.

What's included

  • lists: enable GitHub-backed list editing (commit 485ac8f)
    • ListPropertyDef now decodes isReadOnly and select/multiselect options (validationRules.options).
    • ListItemFormView hides read-only columns (#, url, timestamps) and renders select as a Picker.
    • ListDetailView toolbar shows the add (+) button on GitHub lists (alongside Refresh); the GitHub add/edit form is limited to title/body/state.
    • One-tap, reversible Close/Reopen swipe + context action on each GitHub row (replaces Delete for GitHub lists).
    • Status changes go through a full-row update (setGitHubState): the backend rebuilds the issue from the request alone and defaults a missing title to "Untitled", so a partial update would blank it. A row's id is the issue number, so PUT/DELETE already target the right issue.
    • Fix latent decode bug: addListItem/updateItem/updateRow decoded the response as { row }, but the backend returns { data } → the optimistic UI update silently threw noData (affected local lists too, masked by pull-to-refresh).
    • Docs: the-gaps.md (read-only → editable issues view) and a new CLAUDE.md gotcha on full-row GitHub updates + the data response key.
  • docs: mark GitHub native OAuth + Universal Links as enabled (commits 46ac3b8, f9b98df)

Testing

  • xcodebuild buildBUILD SUCCEEDED
  • xcodebuild test -only-testing:InterlinedListTests/APIClientListsTests19 passed (6 new: add/update/close paths & payloads, {data} decode, schema isReadOnly/options).
  • Full suite: xcodebuild test (serialized, pinned sim UDID) — 811 passed, 0 failures.

Caveats / follow-ups

  • Not live-smoke-tested. These operations create/close real GitHub issues and require a linked GitHub identity with Issues scope. Recommend verifying on a device/sim against a throwaway repo: add an issue → swipe Close/Reopen → Edit the State picker.
  • v1 scope: labels/assignees are display-only (deferred); title/body/state are editable.

🤖 Generated with Claude Code

Adron and others added 2 commits August 17, 2026 22:43
…ues)

GitHub-backed lists were effectively read-only in the iOS UI even though the
backend fully supports mutations by proxying to the GitHub Issues API
(POST -> create, PUT -> patch, DELETE -> close). Enable add + status change:

- Model GitHub schema field metadata: ListPropertyDef now decodes isReadOnly
  and select options (validationRules.options).
- ListItemFormView hides read-only columns and renders `select` as a Picker.
- ListsView shows the add (+) button on GitHub lists, limits the GitHub form to
  title/body/state, and adds a reversible one-tap Close/Reopen swipe/context
  action. Status changes go through a FULL-row update (setGitHubState): the
  backend rebuilds the issue from the request alone and defaults a missing title
  to "Untitled", so a partial update would blank it. A row's id is the issue
  number, so PUT/DELETE already target the right issue.
- Fix latent decode bug: addListItem/updateItem/updateRow decoded the response
  as {row}, but the backend returns {data} -> the optimistic UI update silently
  threw noData (affected local lists too, masked by refresh).
- Tests: +6 covering add/update/close paths & payloads, {data} decode, and
  schema isReadOnly/options decoding. Docs updated (the-gaps.md, CLAUDE.md).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V16mvNBWyYLncSQL8isDNF
@Adron
Adron merged commit 7ee7330 into main Aug 27, 2026
1 check passed
@Adron
Adron deleted the docs/github-oauth-enabled branch August 27, 2026 05:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant