LifeLab · tag system
The tag-in-title approach is fused: one CodeMirror slice does display, edit, and add all at once, so tag count fights title length on a single line. These mocks pull the three jobs apart — keep a calm inline display that handles overflow, move deliberate editing to the minibuffer, keep inline : for fast-add, and push rename/merge to a tags surface.
Right-aligned column with +N collapse at rest; expands to a full second line when the block has the cursor.
C-c C-qorg's own set-tags chord opens the minibuffer — removable chips + completion against the tag index.
:Type : on a headline and the completion popup fires — the same source [[ and (( use.
The [all] filter bar grows into rename / merge / browse. Cleanup lives off the block.
A couple of tags right-align fine — that's the org look you want. But a long headline plus five tags collide, and there's nowhere to read either. The slice that shows tags is also the only place to edit them, so the crowding hurts twice.
+NTags get a fixed column boundary. The title truncates with … before it reaches the column, so the two never collide. When the tag set itself overflows, it collapses to :study:habit: +3 — the +18 more pattern you already use.
+3 previews the rest; focusing the block reveals all (see A→B).The recommended default. At rest a block reads as A — truncated title, +N tags. The moment your cursor is in the block, tags drop to a full left-aligned second line (B) and the title stops truncating. Calm while scanning, complete while editing.
:tags: drawerFor blocks that carry a lot of tags, reuse the ▸ :PROPERTIES: … :END: drawer you already render on trades. Show the first two inline; fold the rest into a collapsible ▸ :tags: drawer. Hides noise hard — costs one click to see everything.
:PROPERTIES:. Best if heavy-tag blocks are the exception, not the rule; otherwise the click tax adds up versus A→B.C-c C-q opens the tag editororg's real org-set-tags-command chord. Stop editing tags wedged in the title — point on a block, C-c C-q, and the bottom minibuffer takes over with full width: current tags as removable chips, type-to-filter against the tag index, ↵ commits back to block metadata which re-syncs the inline display.
:tag: stays the only notation; no #, no pill-cards in the river.:: and the popup firesFast-add stays inline and frictionless. Type : anywhere on a headline and the same completion source that backs [[pages]] and ((blocks)) offers matching tags with their block counts. ↵ drops the :tag: in; keep typing for the next.
: for one quick tag while you write; C-c C-q for considered editing of the whole set. Both complete against the same tag list, so the vocabulary never drifts.[all] bar grows upRename, merge and browse don't belong on a block. Your existing [all] [page] :Jun 20: filter bar is the seed — expand it into a tags page: every tag with its block count, inline rename, merge-into, and "open all blocks with this tag." Keyboard-first, same row grammar as search results.
:study: touches 142 blocks at once — that's a corpus operation, not an inline edit. The block-level affordances (A→B, C-c C-q, inline :) handle one block's tags; the tags surface handles the vocabulary itself.