Part of #3 — AI Writing Assistance is entirely missing from the Android app
Foundation for every other AI sub-issue.
- New self-contained
:feature:ai module (own Retrofit AiApi built from the shared authed
Retrofit, own DTOs) matching the per-feature module convention used elsewhere in this repo.
GET /api/ai/status → an AiAvailability domain model: provider configured? subscriber?
remaining daily quota?
- A single
AiGate observable the feature UIs consume, so composer/list/document surfaces can
hide their AI affordances entirely when AI is unavailable (unconfigured provider or free
account) rather than showing a control that errors.
- Central mapping for the quota-exhausted response to a user-readable "daily AI limit reached"
state.
- Capture the real
/api/ai/status body before writing the DTOs — see the repo's API-envelope
conventions (data wrapping, explicit nulls, coerceInputValues = true).
Tests: MockWebServer for status parse (configured / unconfigured / non-subscriber);
ViewModel test that the gate flips the UI off.
Filed from the parity review of feature/parity-wip @ 14d7795 against interlinedlist.com (OpenAPI /api/openapi.json, 233 paths) and the public help centre.
Part of #3 — AI Writing Assistance is entirely missing from the Android app
Foundation for every other AI sub-issue.
:feature:aimodule (own RetrofitAiApibuilt from the shared authedRetrofit, own DTOs) matching the per-feature module convention used elsewhere in this repo.GET /api/ai/status→ anAiAvailabilitydomain model: provider configured? subscriber?remaining daily quota?
AiGateobservable the feature UIs consume, so composer/list/document surfaces canhide their AI affordances entirely when AI is unavailable (unconfigured provider or free
account) rather than showing a control that errors.
state.
/api/ai/statusbody before writing the DTOs — see the repo's API-envelopeconventions (
datawrapping, explicit nulls,coerceInputValues = true).Tests: MockWebServer for status parse (configured / unconfigured / non-subscriber);
ViewModel test that the gate flips the UI off.
Filed from the parity review of
feature/parity-wip@14d7795against interlinedlist.com (OpenAPI/api/openapi.json, 233 paths) and the public help centre.