Repository navigation
Epic: List schema / columns (DSL) — no longer API-blocked #16
Copy link
Copy link
Open
4 / 64 of 6 issues completedOpen
4 / 64 of 6 issues completed
Copy link
Labels
P0Must have for a credible parity claimMust have for a credible parity claimarea:listsArea: listsArea: listsepicFeature-area parent issue with sub-issuesFeature-area parent issue with sub-issuesparityWeb/API feature-parity workWeb/API feature-parity work
Description
Summary
Lists on interlinedlist.com are structured data with typed columns. The Windows app treats every row as a freeform JSON blob (Views/ListsView.xaml has an inline JSON editor), because CLAUDE.md records the schema DSL as "only partially reverse engineered ... not implemented".
That blocker is stale. The DSL is now fully published at /help/api/lists-dsl, and both endpoints answer the bearer sync-token.
Live verification (2026-09-15, test account)
GET /api/lists/{id}/schema -> 200 {"data":{"name":"New list","fields":[]}}
The contract
GET /api/lists/{id}/schema— read the schema as DSL.PUT /api/lists/{id}/schema— two body shapes, selected by payload:- a
schemaDSL object → destructive rebuild (wipes and recreates all columns); - a
propertiesarray → non-destructive small edits (rename a label, add/remove one column) preserving row data.
- a
POST /api/listsalso acceptsschemaat create time.
The DSL
{ "name": "Books to Read", "description": "My reading backlog.",
"fields": [
{ "key": "title", "type": "text", "label": "Title", "required": true },
{ "key": "year", "type": "number", "label": "Year" },
{ "key": "read", "type": "boolean", "label": "Read", "defaultValue": false }
] }fieldsmust contain at least one column;keys must be unique.- Field props:
key,type,label(required) +required,defaultValue,options,placeholder,helpText,validation,visible,visibility,displayOrder. - Twelve types:
text,textarea,number,boolean,date,datetime,email,url,tel,select,multiselect,priority. - Row data (
POST /api/lists/{id}/data) is keyed by each column'skey, not its label.
Why this matters
Every other list feature — typed row entry, Powered Templates, Create from…, GitHub-backed lists, saved views — assumes real columns exist. This epic is the foundation for them.
Repo conventions to follow
- Service: one
partial class InterlinedApiClientfile per domain inInterlinedList/Services/. - Wire types in
InterlinedList/Models/matching real API JSON. - ViewModel per view in
InterlinedList/ViewModels/(CommunityToolkit.MvvmObservableObject+[RelayCommand]). - View is a self-contained
UserControlinInterlinedList/Views/that news up its own VM fromAppServices.Session. - Strata tokens only — no colors/fonts/radii outside
Resources/Palette.xaml+Theme.*.xaml. - Read-after-write for any mutating endpoint whose response envelope has not been live-verified.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
P0Must have for a credible parity claimMust have for a credible parity claimarea:listsArea: listsArea: listsepicFeature-area parent issue with sub-issuesFeature-area parent issue with sub-issuesparityWeb/API feature-parity workWeb/API feature-parity work
Activity
GET/PUT /api/lists/{id}/schemaservice #17propertiesedit #22