Skip to content

Releases: ewanc26/indigo

Indigo v0.12.1

Choose a tag to compare

@ewanc26 ewanc26 released this 08 Oct 20:10
8f06bb9

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

Choose a tag to compare

@github-actions github-actions released this 07 Oct 21:56

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

Choose a tag to compare

@github-actions github-actions released this 07 Oct 18:26

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

Choose a tag to compare

@github-actions github-actions released this 07 Oct 11:08

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_classify and wf_failure_tag now, instead of a copy of them in session.c and errors.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_match and the clock-free parsing and formatting are wolfram/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

Choose a tag to compare

@github-actions github-actions released this 07 Oct 01:59

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_drag does 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

Choose a tag to compare

@github-actions github-actions released this 07 Oct 01:29

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

Choose a tag to compare

@github-actions github-actions released this 06 Oct 20:21

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.json gets 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's wf_update_verify_signature does 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

Choose a tag to compare

@github-actions github-actions released this 06 Oct 14:08

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 .3dsx on 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 --dispatch runs 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

Choose a tag to compare

@github-actions github-actions released this 06 Oct 13:48

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.py draws 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 carries update.json, a versioned indigo-<version>.3dsx and 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.sh to 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.sh only
    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

Choose a tag to compare

@ewanc26 ewanc26 released this 04 Oct 23:56
5c3bcaf

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 an Image button
    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 says 1 of 4 images. rather than implying it has one.
    B, ZR or Close goes 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
    Image button 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.