Repository navigation
Releases: ewanc26/indigo
Release list
Indigo v0.12.1
What has and has not been run, plainly: host tests pass, cache codec/store added (feat/oncard-cache v1), session-agent guard consolidated (BUG 1), encode stub added (BUG 2), PARITY.md updated, version 0.12.1 from 0.12.0. The video poster (#69) is still not verified on 3DS; DM/video parity gaps remain.
Added
- On-card cache codec/store (feat/oncard-cache, v1 format).
- Cache encode fix (BUG 2) in cache_store.c.
- Diagnostics include build info in indigo settings.
- Indigo update menu reflects fetched release info.
Fixed
- Cache-store encode missing (BUG 2).
- Session-agent guard macro (#53) applied.
Changed
- Indigo version: 0.12.1 (linear from 0.12.0).
Indigo 0.12.0
What has and has not been run, plainly: the host tests pass (4035 checks), the warnings sweep is clean, and the 3DS build links against Wolfram v0.37.0. The video poster has not been seen on a 3DS or in Azahar; the snapshot harness renders it with a stand-in font, so the widths there are approximate.
Added
- A video in a post shows its poster frame, decoded at the size it is drawn (400 px at most), with a line saying it cannot play on the 3DS. The poster and its shape come from Wolfram v0.37.0's
wf_post_embed. (#69)
Indigo 0.11.0
What has and has not been run, plainly: the host tests pass (4029 checks) and the 3DS build links against Wolfram v0.36.2. The new tabs have not been run on a 3DS or in Azahar.
Added
- A person's posts screen has replies, media and (on your own account) likes tabs: tap the header box to move to the next one. The tabs, their filters and the fetch are Wolfram v0.36's
wolfram/profile_tab.h. (#67)
Indigo 0.10.0
What has and has not been run, plainly: the host tests pass (4019 checks under AddressSanitizer and UBSan), all 148 snapshots render, and the 3DS build links in CI against Wolfram v0.35.0. The new image attachment (picker, alt text, upload) has been run on the host only, not on an emulator or a real 3DS, and the upload has never reached a server from Indigo. The code moved into smaller files in this release; its layout renders byte-identically to 0.9.0 but the worker thread and touch handling were not re-run on a console.
Fixed
- A release whose version number is too long to show is now refused as unreadable instead of being cut short in the update screen. (#60)
Added
- I can attach one picture to a post, reply or quote: SELECT, or the "Add an image" button in compose, opens a list of the JPEG and PNG files in
sdmc:/3ds/indigo/images(under 950 KB), then asks for alt text. Wolfram does the filtering and the upload. The upload has not been run on an emulator or a 3DS. (#58)
Changed
- The feed picker reads the saved feeds through Wolfram v0.35.0's
wf_agent_get_saved_feeds; my copy of the preferences walk is deleted. (#65) - Reply gates are set with Wolfram v0.34.0's
wf_agent_set_reply_gate; my copy of the threadgate rules is deleted. (#59) - What kind of failure a call was (wrong credentials, no network, a slow service, a TLS problem, a rate limit, a server fault, a reply I could not read) is Wolfram's
wf_failure_classifyandwf_failure_tagnow, instead of a copy of them insession.canderrors.c; only the wording stays here. Nothing you would see changes (#56, #20). - Muted-word matching and the RFC 3339 timestamp code are Wolfram's now, not copies of Cobalt's: the matcher is
wf_muted_words_matchand the clock-free parsing and formatting arewolfram/time.h. A mute's expiry is checked at match time with Wolfram's parser, which also reads numeric offsets (the old one refused them). My copies, about 250 lines, are deleted. The host build now needs a Wolfram checkout and cJSON's headers (#54, #20).
Indigo 0.9.0
What has and has not been run, plainly: the host tests pass (4000 checks under AddressSanitizer and UBSan) and the 3DS build links in CI against Wolfram v0.30.0. The new scrolling (touch drag, held D-pad and Circle Pad, C-Stick paging) has not been run on an emulator or a real 3DS: I cannot send touch or stick input to the emulator from here.
Changed
- Indigo now builds against Wolfram v0.30.0 (was v0.29.0). (#50)
Added
- Feeds scroll by dragging a finger up or down the list on the touch screen, a row for every row's height dragged, and the D-pad and Circle Pad repeat while held, so running down a feed no longer takes a press per post. The C-Stick pages on a New 3DS. A drag that begins on a button or the header does not scroll. Wolfram's
wf_dragdoes the tap-versus-drag work. Checked on the host; not on an emulator or a console, where I cannot send it a touch (#50).
Indigo 0.8.1
What has and has not been run, plainly: the host tests pass (3993 checks under AddressSanitizer and UBSan), the 3DS build links in CI against Wolfram v0.29.0, and I ran this build in Azahar on a signed-in session, where the timeline's avatars load and draw square and upright. It has not been run on a real 3DS.
Changed
- Indigo now builds against Wolfram v0.29.0 (was v0.28.0). (#48)
Fixed
- Avatars load. Four things stopped them, none visible on the host: the AppView's avatar URLs are about 130 bytes and Indigo cut them to 128, so the CDN answered 400; a URL with no format comes back as WebP, which the decoder cannot read; the first JPEG decode crashed the loader thread (stb_image's thread-local state, fixed in Wolfram); and the decoded image was copied into the GPU texture without being tiled. Indigo now asks the CDN for the 128 px avatar thumbnail or the feed thumbnail as a JPEG, URL buffers are 160 bytes, and textures are tiled. The profile screen also used the avatar's blob key instead of its URL. Checked in Azahar on a signed-in session; not on a console (#48).
Indigo 0.8.0
What has and has not been run, plainly: everything here passes the host tests
(3983 checks under AddressSanitizer and UBSan) and builds and links for the 3DS
in CI against Wolfram v0.28.0. The signature check has not been run on an
emulator or a real 3DS. This is the first release whose update.json is signed,
so an Indigo that predates the check still takes releases on the SHA-256 alone.
Changed
- Indigo now builds against Wolfram v0.28.0 (was v0.27.0). (#46)
Added
- Updates are signed. Each release's
update.jsongets a detached Ed25519 signature,update.json.sig, made by the Release workflow with a key that exists only as a repository secret. Indigo checks it against the public key built in before it reads the manifest, and refuses a release that has no signature or the wrong one, so a replaced release no longer passes on its SHA-256 alone. Wolfram'swf_update_verify_signaturedoes the check. Releases up to 0.7.0 are unsigned. None of it has run on an emulator or a console (#24).
Indigo 0.7.0
What has and has not been run, plainly: everything here passes the host tests
(3941 checks under AddressSanitizer and UBSan) and builds and links for the 3DS
in CI against Wolfram v0.27.0. None of it has been run on an emulator or a
real 3DS: not the update screen, not browser sign-in through the new pairing
client, and not the icon.
Added
- Indigo can update itself. More, then "Check for updates", asks GitHub for the latest release and shows its version, and nothing is downloaded until I press Install. The download is checked against the size and SHA-256 the release states, written to the card, read back and checked again, and only then swapped in, keeping the old build until the new one has started. A build that is not a plain release, or was not started from a
.3dsxon the SD card, says it cannot update and why. It is not signed, so it does not prove a release is mine, and none of it has run on an emulator or a console. (#43)
Changed
- Browser sign-in now uses Wolfram's pairing client rather than Indigo's own copy, so if the sign-in node has forgotten the pairing (it restarted), Indigo says so at once instead of polling for nine minutes. Indigo now builds against Wolfram v0.27.0. (#42)
- A release can be started without pushing a tag:
scripts/release.sh --dispatchruns the Release workflow, and GitHub creates the tag itself, which I needed because tag pushes from the agents' sandbox are refused. (#41)
Indigo 0.6.0
What has and has not been run, plainly: everything here passes the host tests
(3957 checks under AddressSanitizer and UBSan) and builds for the 3DS in CI.
None of it has been run on an emulator or a real 3DS, including the new icon,
who liked or reposted a post, and the start-up update recovery.
Added
- Who liked a post and who reposted it, from the post menu, as paged lists of
people with avatars, the same as followers. This was the one thing on
Cobalt's list that Indigo lacked.
(#12) - The draft of an unsent post survives closing Indigo, or the battery running
out. (#12) - A logo and a Homebrew Menu icon: an indigo bunting on a twig, in pixel art.
tools/gen_logo.pydraws them all from one set of shapes, and draws the
24x24 small icon at its own size rather than letting it be averaged down from
the 48x48 one. (#28,
#29) - The groundwork for updating from inside Indigo (docs/UPDATE.md). Each release
now carriesupdate.json, a versionedindigo-<version>.3dsxand its
.sha256. At start-up Indigo finishes or undoes an update that was
interrupted, and keeps the old build until the new one has started. The
screen that offers an update is not in yet; it waits on Wolfram's shared
update module. (#27) - docs/PARITY.md, saying what Indigo does next to Cobalt and where each thing
has been checked, with app-password and browser sign-in as separate rows.
(#21) - Everything a Universal-DB listing needs, generated: the entry, a 256x128
banner, and screenshots rendered from the layout code, plus
scripts/udb-submit.shto open the pull request in my name.
(docs/UNIVERSAL-DB.md, #36)
Changed
- The text-size setting now applies to post bodies.
(#12) - The settings screen says reduce motion is reserved. Indigo draws no
animation yet, so the toggle changes nothing, and the screen no longer
implies otherwise. (#16) - Releases are built and published by CI from the tag, against a pinned
Wolfram release (wolfram.ref, currently v0.26.0).scripts/release.shonly
checks and tags, so nothing is uploaded from my machine any more.
(#32) - Changes go through pull requests checked by the flow shared with the other
four projects, and are merged by rebase.
(#17,
#27,
#29)
Indigo 0.5.0
Added
- Search results page in. Actor search, post search, a profile's posts,
followers and following, lists, list members, mutes and blocks all grow
more results as the cursor nears the end of what is held -- the same
prefetch rule the timeline uses, so scrolling does not pause at a page
boundary. Pages append rather than replace, a page that brings back
nothing ends the paging, and the list stops asking at sixty entries.
Saved feeds are the one exception: they come from the account's
preferences in a single fetch, so there is no second page to ask for. - Muted words and "hide reposts" are honoured in the home timeline and custom
feeds. The account's saved preferences are fetched once per sign-in, and a
post whose text or tags carry a muted word is dropped from the page before
the app ever sees it. An expiry in the past is skipped rather than honoured,
a single alphanumeric word matches whole words only (muting "cat" does not
hide "category"), and a phrase matches as a substring. Hide-reposts applies
to the home timeline only, which is what the preference means. The rules are
the same ones Cobalt settled, so the two clients do not diverge on what a
person asked to stop seeing. A failed preferences fetch is not fatal: the
feed is shown unfiltered and the next page tries again. - A full-size image viewer. With a post that has a picture selected, the
timeline, the thread and a post in the search results grow anImagebutton
in the header bar, and ZR does the same on a New 3DS. The picture is drawn on
the top screen fitted to the whole 400x240 and centred, from the aspect ratio
the server declared, so a portrait uses the screen's height and a panorama
its width. The description of the picture is on the bottom screen -- the one
with room for a sentence -- and follows the alt-text setting, and a post of
several photographs says1 of 4 images.rather than implying it has one.
B, ZR orClosegoes back to the screen it was opened from.
Changed
- The image cache will decode a post's picture up to 400px, the top screen's
width, instead of 256px. The detail band still asks only for the size it
draws, so nothing else changes; the viewer is the screen that draws one
across the full width, and a 256px copy of that is an enlargement. - The GPU texture pool is bounded by bytes as well as by count, and holds
twelve textures rather than eight. A texture is power-of-two padded, so an
avatar costs 128x128 and a full-size photograph 512x512: eight of the latter
would be 32MB of texture memory, which the console does not have, while eight
avatars is half a megabyte.
Internal
- Opening the viewer drops the picture's cache slot so the next request decodes
it at the size the viewer draws. First-request-wins cuts both ways: a portrait
photograph the detail band drew 60px tall would otherwise still be 60px on a
240px screen. The screen that wanted the smaller copy is not on screen while
the viewer is, and the button it was drawn for is not either. - The header bar's status text moves to the top screen's title bar while the
Imagebutton is up. A status is only ever a transient "Loading...", a
"Nothing here yet" for a list with no posts, or a fetch error, and the first
two cannot happen while a post is selected -- so the button only ever
displaces an error, which is worth more of the top bar's room than the
reminder of which key reloads the list.