Cairn Docs Claims Blog Packages

Claims ยท sky

sky 0.2.0: claims

Everything sky 0.2.0 claims a person can do and see, and what holds, by place, each with its evidence.

2 retired18 proved1 no proof

Sky window sky^1

Sky's window. Signed out, the sign-in screen: handle or email, app password, service, Sign in, and what went wrong. Signed in: who, Sign out, Load more, Refresh and the first posts of the home feed.

Moves

IdClaimReads as
sky^3Load moreWith a feed that isn't at its end, press Load more.proved
sky^4RefreshWhile signed in, press Refresh.proved
sky^6Type your handle or emailWhile signed out, type in the Handle or email field, and press Enter.proved
sky^7Type your app passwordWhile signed out, type in the App password field, and press Enter.proved
sky^8Type the serviceWhile signed out, type in the Service field (empty: https://bsky.social, or the default Sky reads at launch).proved
sky^9What's an app password?While signed out, press What's an app password?proved
sky^10Sign inType a handle or email and an app password, and press Sign in. It is enabled exactly when both fields are typed in and no sign-in (or resume) is in flight.proved
sky^11Sign outWhile signed in, open the account panel and press Sign out.proved
sky^12Cancel signing inWhile Sky has been signing in or resuming the session for a few seconds, press Cancel.proved
sky^13AccountWhile signed in, press Account (Done when it is open).proved

Not in a place

Moves and flows that name no place.

IdKindClaimReads as
sky^2moveSign inretired
sky^5moveSign outretired

Invariants

What holds in every state the app can reach.

IdClaimReads as
sky^20The feed is a run of the timelineThe feed is a contiguous run of the server's timeline, in its order: no post twice, none skipped. Stated against a timeline with no duplicates: a feed that is a run of it stays one when the next page is appended, when a head page puts new posts on top, and when a head page that doesn't reach the feed replaces it.proved
sky^21A stale page changes nothingA load-more page asked from a cursor the feed no longer holds (a refresh replaced the feed meanwhile) never changes the posts, the cursor or the end; nor does an answer to any call but the load-more in flight.proved
sky^22The cursor is never lostA feed with posts that isn't at its end holds a cursor: the one that came with its last page (fuzzed: equal to it).proved
sky^23A refresh racing a load-moreWith a load-more and a refresh both in flight, their answers in either order (or either failing) leave the same feed: the result of one of the two orders, and so of both.proved
sky^24Requests in flight are accounted forAt most one load-more and one refresh are in flight, each a different call the session has taken on (sent or held for a token refresh); the load-more was asked from the cursor the feed holds; the session's requests have distinct ids. The fuzz checks every request is answered, cancelled or live.proved
sky^25Signed out, nothing shown or in flightWhenever the session isn't signed in, the feed is empty and no call is in flight or held: every one was cancelled.proved
sky^26The password reaches one requestEvery step but Sign in (the button, or Enter in the password field) has the same effects whatever the password field holds. Sign in's effects are the same too, for any password of the same length, once the redacted request's contents are blanked; with Sign in enabled its only request is createSession, carrying the password and marked redact, and the field is empty after. So the password is sent in exactly one request, and never shown by a tool (Cairn redacts it in dumps and logs; the fuzzer plants text in the field and checks).proved
sky^27Signed out, no secretSign out's effects include forgetting both Keychain items (access and refresh). While signed out, no step sends a request carrying a Keychain secret.proved