myna 0.2.0
curl -fsSL https://mynaposter.com/install.sh | shAlready installed? The same command upgrades in place.
Bluesky links and hashtags actually work now
Bluesky parses nothing out of post text. A URL stays plain text and a hashtag is
just a word starting with # unless the post carries a facet giving that
span's UTF-8 byte range. There is no flag to turn on.
0.1.0 built facets but got three things wrong, all of which crawlproof.com had
already found and which are now ported across with attribution:
- Facets must arrive sorted and non-overlapping. myna emitted every link,
then every tag, so a hashtag before a link came out unsorted. - A hashtag matched inside a URL fragment (
example.com/docs#install)
produced exactly the overlap the API rejects. - No tag validation and no truncation.
slice(0, 300)counts UTF-16 units, so
an emoji spends two of the 300 and a cut can split a surrogate pair into
invalid UTF-8. There is a separate 3000-byte record cap too.
Verified against a real account: the link facet resolves in Bluesky's own API.
Fixed: myna post hung outside a terminal
myna post "text" waited forever wherever stdin is not a TTY and nothing is
piped, because the argument parser read stdin unconditionally. That is cron and
CI, with no output and nothing to suggest why. Target and text are now resolved
before stdin is touched.
New
- tsbb, and a device-flow login kind. Works against any instance: the board
self-describes atGET /api/v1. 26 networks total. saveandloadto move an install between machines. Always encrypted
with a passphrase you type, never the machine-local keyfile. Additive by
default: an account already present is kept, not replaced by a stale token.- Optional cloud backup (
myna cloud). The bundle is sealed on your machine
before upload and the server refuses anything that is not; a compromise of the
server yields no token. - A performance screen with volume over time, delivery rate, per-network
breakdown, the hours you actually post, and your best posts.myna stats. - MCP over HTTP at
POST /api/mcp, for agents that cannot launch a
subprocess. Same tools as the stdio server, imported rather than restated. - Clickable tabs and target checkboxes in the TUI. They were pictures of
controls before: hqtui only registers a hit region when a handler is passed.
Housekeeping
The version was a literal in six files. It is one now, with a test asserting the
package.json files agree, because a release that updated five of them would ship
a binary reporting the wrong version and nothing would fail.
114 tests, 12 of them against a real Postgres.