Surfaced by the 2026-09-14 coverage re-measure. No previous issue or planning-doc revision mentions this feature at all — it was missed by every prior parity sweep.
The gap
Five live operations the client does not build. All are x-auth-type: sync-token (Bearer-reachable) and x-subscription-tier: free, so this is buildable today and gates on nothing.
| Operation |
What the spec says |
GET /api/lists/{id}/views |
"Every shared view on the list, plus this user's own personal views." |
POST /api/lists/{id}/views |
Creates a saved view — {name, scope, config, isDefault} |
POST /api/lists/{id}/views/{viewId} |
"Forks a shared view into a personal copy owned by the caller — the escape hatch." |
PUT /api/lists/{id}/views/{viewId} |
Updates a view's name, config or default flag |
DELETE /api/lists/{id}/views/{viewId} |
Removes a view |
Why it matters
The shape implies a real collaboration model, not a cosmetic preference:
- shared views belong to the list and everyone with access sees them
- personal views belong to the caller
- fork exists as a deliberate "escape hatch" — you can take someone else's shared view and make it yours rather than being stuck with how the list owner arranged it
isDefault is per-user, so two people can open the same list and correctly see different default arrangements
macOS currently has one hard-coded arrangement per list. On a shared list the owner's choices are simply not visible to collaborators.
⚠️ Probe before modelling — config is a string
config is declared {"type": "string"}, not an object, so the schema says nothing about its grammar. It presumably encodes column order / visibility / sort / filter, but that is an inference.
Capture a real saved view from the web app before writing any decoder. This repo has a documented history of exactly this failure — G21 link metadata (nested metadata decoded to all-nil, so every timeline link rendered host-only) and G25 org members (OrganizationMemberDTO required userId where live rows key by id). Both had green tests against fabricated fixtures. Do not add a third.
Also worth confirming: whether scope is the shared/personal discriminator and what its token set is.
Sequencing
Additive — nothing currently shipped is wrong without it. Suggest after the account cluster (#44 → #47 → #46 → #45).
Acceptance
- Views listed, created, updated, deleted, and forked from macOS.
- Shared vs personal is visually distinct; the fork affordance is discoverable.
isDefault is honoured per user on list open.
config is modelled against a captured payload, with a contract test that fails on a renamed key rather than degrading to nil.
- BDD quartet across Kit / Domain / App.
Recorded as G40 in work-consolidation.md §1f.
Surfaced by the 2026-09-14 coverage re-measure. No previous issue or planning-doc revision mentions this feature at all — it was missed by every prior parity sweep.
The gap
Five live operations the client does not build. All are
x-auth-type: sync-token(Bearer-reachable) andx-subscription-tier: free, so this is buildable today and gates on nothing.GET /api/lists/{id}/viewsPOST /api/lists/{id}/views{name, scope, config, isDefault}POST /api/lists/{id}/views/{viewId}PUT /api/lists/{id}/views/{viewId}DELETE /api/lists/{id}/views/{viewId}Why it matters
The shape implies a real collaboration model, not a cosmetic preference:
isDefaultis per-user, so two people can open the same list and correctly see different default arrangementsmacOS currently has one hard-coded arrangement per list. On a shared list the owner's choices are simply not visible to collaborators.
configis a stringconfigis declared{"type": "string"}, not an object, so the schema says nothing about its grammar. It presumably encodes column order / visibility / sort / filter, but that is an inference.Capture a real saved view from the web app before writing any decoder. This repo has a documented history of exactly this failure — G21 link metadata (nested
metadatadecoded to all-nil, so every timeline link rendered host-only) and G25 org members (OrganizationMemberDTOrequireduserIdwhere live rows key byid). Both had green tests against fabricated fixtures. Do not add a third.Also worth confirming: whether
scopeis the shared/personal discriminator and what its token set is.Sequencing
Additive — nothing currently shipped is wrong without it. Suggest after the account cluster (#44 → #47 → #46 → #45).
Acceptance
isDefaultis honoured per user on list open.configis modelled against a captured payload, with a contract test that fails on a renamed key rather than degrading tonil.Recorded as G40 in
work-consolidation.md§1f.