feat(http): add frontend-neutral mobile API readiness - #124
Draft
xicv wants to merge 1 commit into
Draft
Conversation
xicv
force-pushed
the
task/m14-t03-mobile-api-readiness
branch
2 times, most recently
from
August 6, 2026 02:07
4d8544a to
c764372
Compare
xicv
force-pushed
the
task/m14-t03-mobile-api-readiness
branch
from
August 6, 2026 02:55
b35ee10 to
f54f930
Compare
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.
Context and verdict
Minco 1.0 already had most of the protocol foundation required by native clients: one OpenAPI-first resource contract, RFC 9457-style problems, request IDs, opaque cursors, idempotent creates, strong ETags and
If-Match, exact CORS policy, direct object-access signing, and API Gateway JWT principal mapping.The audit found a narrower cross-client gap rather than a need for a separate mobile API:
If-Match/If-None-Match, so browser clients could not use conditional resource requests through the standard stack;ETag,Location, authentication challenge, retry, link, deprecation, or sunset response metadata;The intended architecture remains one business API for browser, iOS, Android, desktop, automation, and server clients. Client-specific concerns stay at authentication, transport, compatibility, optional attestation, and product-owned synchronization boundaries.
Changes
ApiResponseMetadata/ApiResponse<T>wrappers that preserve the underlying Axum response while attaching:Retry-Afteras delay-seconds or an application-supplied HTTP-date;WWW-Authenticate: Bearerchallenges;DeprecationStructured Field Dates;Sunset; andLinkfields.Retry-Afterforms, repeated links, and pre-Unix deprecation rejection.HttpHeaderPolicyto:If-MatchandIf-None-Match; andETag,Location,Retry-After,WWW-Authenticate,Link,Deprecation,Sunset, andX-Request-ID.Compatibility and cost
Research basis
Implementation follows current native-app OAuth and PKCE guidance, OAuth security BCP, bearer-token challenge rules, HTTP Problem Details, 429/
Retry-After, HTTP deprecation/sunset standards, AWS HTTP API JWT authorizers and authoritative gateway CORS behavior, current Cognito Sync availability guidance, and current Apple/Google app-integrity guidance.I also reviewed newer but separately scoped standards. The May 2026 IETF RateLimit fields remain an active Internet-Draft, so this shared default uses stable
Retry-Afterrather than freezing a draft field shape. OpenAPI 3.2.0 is published, but this repository deliberately pins OpenAPI 3.1 in its ADR and compatibility tooling; migrating that contract baseline belongs in a separate toolchain-qualified change, not a mobile-only patch.Validation status
uvbut no local Rust toolchain orchub; the private repository is accessible through the GitHub connector rather than a runnable checkout.rustfmt +1.97.1 --edition 2024 --check crates/minco-http/src/lib.rs crates/minco-http/src/middleware.rs crates/minco-http/src/response.rs crates/minco-plan/src/lib.rs crates/minco-plan/src/sam_cross_client.rscargo +1.97.1 test -p minco-http -p minco-plan -p minco-cli --lockedbash scripts/aws/plan.shgit diff --exit-code -- infra/aws/generated/plan.json infra/aws/generated/template.yamluv run --locked python scripts/validate_static.pyThe PR remains draft until those exact checks run in an equipped checkout or the manual hosted workflow.
Release sequencing
mainis currently the unpublished 1.1.0 candidate prepared by M14-T01. If this lands before M14-T02 publication, the 1.1 candidate and release evidence must be regenerated and requalified. Otherwise this branch should be rebased onto the next post-1.1 development boundary rather than changing an already promoted artifact.