From 8c7553d619927ccb2186b072746db5cf5e0bea72 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 31 Aug 2026 15:53:28 -0400 Subject: [PATCH] copy: the product says "tags" now, and the schema keeps saying Label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two words for one concept cost real comprehension: over a single exchange the operator concluded that auto-tagging did not exist (it does, in `derive.rs`) and that a tag-management view did not exist (it does, `LabelsModal.vue`). The `#` is how most of these get made, so the `#` wins the noun. User-visible strings only, on all three surfaces plus the server's errors. `Label`, `NoteLabel`, `via_tag`, `label_id`, the tables, `/api/labels` and the FFI names are all untouched — renaming those touches migrations and the wire format to buy nothing a reader can see. Two of these were more than a find-and-replace: * Android's `label_from_tag` said "from #tag", sitting beside a chip that already renders as `#name`. Once every one of them IS a tag that hint is circular. What it actually tells you is that the note's BODY owns this one — which is why it alone has no remove cross — so it now says "from the text". * The web's empty state said "No labels yet — create one above" while Android's already mentioned the `#` route. The web now says it too. That is the exact fact the operator did not have. The paired `aria-label`s went with their `title`s; a screen reader saying "label" while the tooltip says "tag" is the same confusion with a smaller audience. Left alone deliberately: `json_error("invalid label")` and `"label_ids must be a list"` in `notes/__init__.py` name the `?label=` query parameter and the `label_ids` request field. Those are wire surface, not the word a person reads. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01K3MMqUtzX1TJgA1oypvm1c --- android/app/src/main/res/values/strings.xml | 14 +++++++------- frontend/src/components/AppShell.vue | 8 ++++---- frontend/src/components/FilterBar.vue | 2 +- frontend/src/components/LabelPicker.vue | 4 ++-- frontend/src/components/LabelsModal.vue | 16 ++++++++-------- frontend/src/views/BoardView.vue | 2 +- src/thoughtsync/labels.py | 8 ++++---- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 2224f4a..72e08a7 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -6,7 +6,7 @@ Search your notes Clear search Open navigation - Labels + Tags New note @@ -42,7 +42,7 @@ Take a note… Add item Remove item - Remove label + Remove tag Set a reminder More actions Saving… @@ -52,7 +52,7 @@ Done Pin Unpin - Labels… + Tags… Archive Unarchive Move to trash @@ -67,10 +67,10 @@ Delete - Labels - Type a label and press enter - from #tag - No labels yet. Type one above, or write a #tag in a note and it becomes one. + Tags + Type a tag and press enter + from the text + No tags yet. Type one above, or write a #tag in a note and it becomes one. Next Set Pick a time diff --git a/frontend/src/components/AppShell.vue b/frontend/src/components/AppShell.vue index 3eaadb0..b457415 100644 --- a/frontend/src/components/AppShell.vue +++ b/frontend/src/components/AppShell.vue @@ -441,18 +441,18 @@ async function signOut() {
- Labels + Tags
-

No labels yet

+

No tags yet

- Labels + Tags