Skip to content

v0.42.0

Pre-release
Pre-release

Choose a tag to compare

@Fade78 Fade78 released this 19 Aug 19:49
· 198 commits to main since this release

A link to a card now survives editing the article

A card's identity used to be its rank — s1, s2. Any insertion, any
reorder, any tags: excluded therefore repointed every link after it, in
silence. Measured on a four-card page under a tag filter: s1 s2 s3 s4
becomes s1 s2 s3, and a reader following a link to #s4 lands nowhere.
On a printed QR code, that is irreversible.

It is now derived from what the author wrote: a slug: if you give one,
otherwise a hash of the card's heading, of a long-form card's article:
file, or the fixed name series-nav. The rank remains the last resort
rather than the default. Reorder, insert, exclude — the links you have
already given out still land where they did.

The normalisation that precedes the hash folds what does not change the
meaning — case, runs of spaces, full-width forms, ligatures, the
non-breaking space the typography engine inserts — and folds combining
marks only on Latin bases. "Strip the accents" is a Latin speaker's
instruction: it turns हिन्दी into हिनदी, which is not a word, and does the
same to vocalised Arabic and Hebrew. Vietnamese stays exposed — má and
ma land on one identity — and that is the accepted cost the collision
report exists to surface.

slug_prefix: (meta block, or series_meta) puts a namespace in front of
every identity on the page, declared and derived alike. Two cards landing
on one identity are separated deterministically and the build says so.
audit adds the one finding a build cannot make: a card with no heading,
no file and no slug falls back to its rank, and that is the link that will
break.

Nothing you have already shared breaks. Every card also carries an
empty anchor holding its old sN name. An old link lands — including on a
card the reader's own tag filter is hiding, which a native fragment jump
cannot reach at all — and the address bar is then corrected to the durable
name.

The navigation buttons can finally be put away on a phone

They were exempt by design, and the reason recorded in the code was that
there is no cursor to wake them again. True of the mechanism, and it left
the one device where the buttons sit on the reader's own text as the one
device that could not put them away.

The same 3-second delay now applies everywhere; only the way back differs.
A double tap is the switch, both ways — it brings them back, and it puts
them away at once when you have seen enough. It is detected on the touch
events themselves rather than on synthesised clicks: a mobile engine can
hold a synthesised click back by around 300ms, so two taps 60ms apart
reach a click handler too far apart to read as one gesture. A faded button
also stops answering the finger, so touching the corner of your own text
is safe. Fullscreen stays the ⛶ button in that bar.

The address bar follows the reader who scrolls

The fragment was written only by a deliberate jump, so a reader who
scrolled to a card kept whatever id their last jump had left behind —
press F5 and the page obeyed it, teleporting them to a card they had left
minutes before. The scroll observer now writes it too, always with
replaceState: the fragment is a position, not a visit, and one history
entry per card scrolled past would turn Back — the only way out of a deck
— into a slow rewind of the article just read. A freshly opened page still
carries no fragment until the reader moves.

Migration

Nothing to do. Old links keep working through the alias. An explicit
slug: is only worth writing when you want a readable address or want to
pin one by hand. After this build, audit may report cards with no
heading — a finding, not a block.