Skip to content

v2.4.0

Latest

Choose a tag to compare

@Zingzy Zingzy released this 03 Sep 23:28
· 25 commits to main since this release
eed48f3

Links can carry tags, and the block ping says what happens to the next link.

Tags are a registry, not strings on the link. Every account gets a tags collection: a tag has a name (lowercased, unique per account, 32 characters), one of nine colours, and an icon from a curated set of 87 keys that the API validates and publishes as an enum in openapi.json. Links store tag_ids and every link response embeds tags: [{id, name, color, icon}] in the link's own order. Rename or recolour a tag once and every link follows.

Four endpoints and a bulk op. GET, POST on /api/v1/tags, PATCH and DELETE on /api/v1/tags/{tag_id}; delete strips the tag from every link and reports how many. POST /api/v1/urls/bulk/tags takes {ids, add, remove} and applies both in one pipeline update per request, so a link never sits between losing its old tags and gaining the new ones. Create and PATCH on links take tag_ids as a whole-list replace; every id must be yours.

Filters take ids or names. The links list accepts tagIds and tagNames inside filter with tagsMatch: any | all. Stats and export accept tag_id and tag, resolved to the owner's link ids since clicks never carry tags; a name no tag carries matches nothing, and group_by=tag is refused because it would need a per-click join. Tags are not on the redirect cache projection, so nothing on the hot path reads them. Account erasure deletes the owner's tags; webhook link.* snapshots carry tag_ids.

The block embed says what happens next. A Discord block ping now has a Future links field derived from the block's scope: a host block refuses new links to the host at create, a pattern block refuses matching paths and leaves the rest of the host open, a links block refuses only that URL. The pattern branch used to claim the pattern was proposed for the operator blocklist. Nothing in the pipeline writes to that list, so the claim is gone and a test keeps it gone.

What's Changed

  • feat(links): tags as a per-account registry with ids, colours and icons by @Zingzy in #352
  • fix(safety): say what a block does to future links, drop blocklist claim by @Zingzy in #338

Full Changelog: v2.3.6...v2.4.0