feat(lists): enable editing GitHub-backed lists (add/close/reopen issues) - #26
Merged
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
ListPropertyDefnow decodesisReadOnlyandselect/multiselectoptions (validationRules.options).ListItemFormViewhides read-only columns (#, url, timestamps) and rendersselectas a Picker.ListDetailViewtoolbar shows the add (+) button on GitHub lists (alongside Refresh); the GitHub add/edit form is limited to title/body/state.setGitHubState): the backend rebuilds the issue from the request alone and defaults a missingtitleto"Untitled", so a partial update would blank it. A row'sidis the issue number, soPUT/DELETEalready target the right issue.addListItem/updateItem/updateRowdecoded the response as{ row }, but the backend returns{ data }→ the optimistic UI update silently threwnoData(affected local lists too, masked by pull-to-refresh).the-gaps.md(read-only → editable issues view) and a newCLAUDE.mdgotcha on full-row GitHub updates + thedataresponse key.Testing
xcodebuild build— BUILD SUCCEEDEDxcodebuild test -only-testing:InterlinedListTests/APIClientListsTests— 19 passed (6 new: add/update/close paths & payloads,{data}decode, schemaisReadOnly/options).xcodebuild test(serialized, pinned sim UDID) — 811 passed, 0 failures.Caveats / follow-ups
🤖 Generated with Claude Code