Skip to content

0.7.0 — the bracket picker everywhere, and the controls that were missing

Choose a tag to compare

@vgururao vgururao released this 28 Sep 22:38
· 58 commits to main since this release

Migrations: none. Studio UI only — nothing on the wire changes and no published document is affected. Upgrade is a pull and a deploy.

The [[ picker exists, in all three composers

[[id]] has rendered and resolved since 0.6.0, but the only way to find an id for one was to already know it: the picker lived inside the thread editor and fired only on ![[ at the start of a line, while [[id]] is legal inline and in a fragment. The one construct you can write anywhere was the one construct with no way to look anything up.

The palette is now shared by the quick composer, the fragment editor and the thread editor, and it tells the two bracket forms apart:

  • ![[ with only whitespace before it on the line → transclude, inserted over the whole line.
  • [[ anywhere not preceded by ! → link, inserted in place, leaving the rest of the sentence alone.

The directive form is offered in the thread editor only, because only a thread resolves transclusions at publish — in a fragment ![[id]] publishes as literal text, so a picker there would have written a dead line.

The picker pages, and says how many there are

The candidate list was capped at 20 silently, so a blyg with more than 20 quotable items had a picker that simply stopped — indistinguishable from having nothing more to offer. It now states "showing 20 of 63" or "26 matches, all shown", and ArrowDown at the bottom of a partial list fetches the next page instead of sticking.

The thread editor had no discard button

threadEditPage computed the control and never rendered it, so a thread draft could not be discarded and a thread's unpublished changes could not be thrown away. The fragment editor was fine, which is why this survived: every test in the discard block opened the fragment editor. noUnusedLocals is on now, so a control that is built and then dropped is a compile error.

If you run a node: this is the fix most worth having. It affects any thread you started and wanted to abandon.

Reading entries link out, and hand you a reference

Each entry now carries open ↗ — read it where it lives — derived from the origin's own declared page where it has one, the f/·t/ convention only as a fallback, and for a legacy RSS entry the anchor its feed supplied.

Beside it, copy [[id]] puts the link construct on your clipboard, offered only where the link would actually resolve at publish. This is deliberately not a peer of stub ↗: a link declares nothing on the wire, so it is citing without responding, and stub ↗ remains the one affordance that means "I am responding".

A draft can change its mind about what it is

Both editors offer make this a thread / make this a fragment on a never-published draft. The composer's toggle always worked by deleting and recreating, which is safe only because the text is still in the textarea; past the Full Editor door the draft has attachments, TK scopes and a save history, so the row changes in place instead.

Never-published only — once an item is published its kind is a field readers have and history records. A withdrawn item counts as published. A stub thread is refused rather than silently losing its citation.

Nav reordered

reading, compose, hoppers, mentions, subscriptions, settings, syntax. The order follows the shape of a session rather than the order the features were built in.


Verification: 578 tests, tsc --noEmit clean, and every change above exercised by hand against a running node.