fix(notes): #garageristeriet og #GarageRisteriet er samme projekt
Release / Build and publish image (push) Failing after 9m58s

De var det ikke. Nøglen blev gemt præcis som skrevet og slået op på samme måde,
så en note, der nævnte et projekt med lille begyndelsesbogstav, dukkede simpelthen
ikke op på det — stille, og uden noget der antydede hvorfor.

Foldet på vej ind og foldet i opslaget, så sammenligningen bliver ved med at være
en nøjagtig lighed og bruger sit indeks. Havde man i stedet sænket kolonnen i
forespørgslen, skulle hele tabellen læses.

Kun projekter. En [[notetitel]] er en titel, ikke en nøgle: to noter, der hedder
"Møde" og "møde", er to noter, og at folde dem sammen ville slå noget sammen,
nogen havde holdt adskilt. Der er en prøve for begge dele.

Migrationen samler de rækker, der allerede er skrevet. Primærnøglen er
(note_id, kind, target_id), så en note, der skrev begge stavemåder, ville kollidere
med sig selv — derfor bygges sættet forfra med INSERT OR IGNORE frem for en
opdatering, der ville fejle på parret.

Fladen viser projektets egen stavemåde og ikke den foldede nøgle. En etiket, ingen
har skrevet, og som står hverken i noten eller på projektet, ville være værre end
ingen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kristian Wind
2026-08-19 18:48:00 +02:00
co-authored by Claude Opus 5
parent 5e670119db
commit f6c60bdaf9
5 changed files with 137 additions and 4 deletions
+17 -1
View File
@@ -160,6 +160,22 @@
}
}
/**
* What a link is called on screen.
*
* A project tag is stored folded, because it is a key — but showing the folded
* key would mean a note that says #garageristeriet is labelled with a spelling
* that appears nowhere, neither in the note nor on the project. The project's
* own name is the right answer, and the fold is what makes it findable.
*/
function label(link) {
if (link.kind !== 'project') return link.target_id;
const project = app.projects.find(
(p) => p.name.toLowerCase() === link.target_id.toLowerCase()
);
return '#' + (project?.name ?? link.target_id);
}
// What the note points at, for the panel under the editor.
let links = $derived(selected?.links ?? []);
@@ -229,7 +245,7 @@
{#if links.length}
<span class="links">
{#each links as link}
<span class="link">{link.kind === 'project' ? '#' : ''}{link.target_id}</span>
<span class="link">{label(link)}</span>
{/each}
</span>
{/if}