b18d9a26e64a4d4bd4fd6b15a4cadf74d6fd2039
2
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
6154e6b247 |
feat(udgaver): urd — noter-udgaven siger sit eget navn
Verdande og Urd er to af nornerne i Völuspá, og digtet har dem skære
mærker i træ: *skáru á skíði*. Verdande er det der bliver; Urd er det der
blev, og blev gemt. En instans startet uden opgaveruterne er et andet
produkt for den der bruger den, så den siger et andet navn.
Navnet læses fra udgaven i ÉT sted — Config.ProductName/ProductSlug —
frem for at stå skrevet i teksterne. Frontend-bygget er byte-identisk i
begge udgaver; serveren omdøber de to filer, browseren læser før noget
JavaScript kører.
Der er to titler, og det blev først klart, da e2e-prøven sagde det:
skallens <title>, som serveren omdøber, og rutens egen i <svelte:head>,
som appen sætter bagefter og som overskriver den første. Go-prøven var
grøn over de bytes, serveren sendte, mens fanen sagde "Noter · verdande".
Begge prøver spørger nu om begge.
Omdøbningen er ankret på hele strenge frem for på ordet "verdande", fordi
app.html også indeholder localStorage.getItem('verdande:theme'). Omdøbes
præfikset der og ikke i resten af appen, bliver temaet sat fra én nøgle og
læst fra en anden, og det eneste symptom er det hvide blink, det
indlejrede script findes for at undgå. Tre plantede fejl bekræfter, at det
er de rigtige prøver, der fanger det: et flyttet anker i app.html, en bred
søg-erstat, og en applyRebrands uden fejlretur.
Mailen var det vigtigste sted. appName var et felt med en værdi og ingen
læser, og kommentaren ved siden af sagde, at det stod i hver besked — de
tre steder havde ordet skrevet ud i stedet. En invitation fra en
urd-instans går til et andet menneskes indbakke.
Også omdøbt: web-manifestet (og sendt som application/manifest+json — Go
kender ikke .webmanifest og sniffer den til text/plain, hvorefter
browseren ignorerer manifestet uden at sige noget, og installationsknappen
bare ikke er der), mærket i menuen (ᚢ uruz frem for ᚹ wunjo),
opstartsloggen, passkey-promptens visningsnavn, ICS-kalendernavnet og
udseendet, der er opkaldt efter programmet.
Ikonet er IKKE med: icon.svg er stadig ᚹ, og de tre PNG'er genereres fra
den. Det rører binære, genererede filer og hører i sin egen ændring.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
0c45080dc2 |
feat(udgaver): VERDANDE_EDITION afgør, om instansen er et opgaveprogram
Første skridt mod noter som et selvstændigt produkt. Kun routeren: fladen, navnet og runen kommer bagefter. --- hvorfor én kodebase og ikke en fork --- Målt før noget blev skrevet. Noternes Go-kode er 2.386 af 49.407 linjer, og den nævner `Task` nul gange, `quickadd` nul, `sections` nul. Den anden vej er også nul. De to halvdele rører hinanden to steder: en `note_links`- række, hvis `kind` tilfældigvis er "task", og rettigheder, hvor en note i et projekt arver projektets rolle. Delingen findes allerede uden projekter. `note_shares` er en tildeling pr. note — note, person, rolle — med del, fjern, rolleopslag, publikum og `SyncLinkedShares`. Og adgangsreglen har allerede grenen for en note uden projekt: `WHERE project_id IS NULL AND created_by = ?`. Et selvstændigt noteprogram er de regler, der allerede er der, med projektgrenen fjernet. Det, der IKKE kan skilles ad, er fundamentet: konti, sessioner, 2FA, invitationer, beskeder, vedhæftninger, søgning, sprog, PWA, runen, beaconen, OpenAPI-dokumentet, e2e-stilladset. Begge programmer skal bruge det hele. To kopier af det er den fejl, der står flest gange i vores egen playbook — de syv plugins med et kopieret ci/-kit, den frysede delte fil. Projekter bliver derfor stående i begge udgaver. I noter-udgaven er et projekt en notesbog: samme kolonne, samme deling, andet ord. En anden grupperingsmodel ved siden af `note_shares` ville være én ting mere at holde i trit, for en forskel ingen kan se. --- skakten --- Opgaveruterne er ikke skjult i fladen. De er fraværende fra routeren, så en instans, der ikke er et opgaveprogram, heller ikke kan bedes om at være det gennem sit API. En ukendt værdi stopper programmet ved opstart. "note", "Notes", "none" — alle afvist. Det er den stille retning af fejlen: ellers ville en instans, der blev sat op uden opgaver, servere hver eneste opgaverute, og den eneste måde at opdage det på ville være at bemærke, at noget virker, som ikke burde. --- prøven --- Den tjekker ikke, at der STÅR en skakt. Den vandrer begge routere og sammenligner, hvad de faktisk serverer: 200 ruter mod 171, 29 tilbageholdt. De 29 er skrevet ned enkeltvis frem for som en præfiks- regel — et præfiks beskriver, hvad nogen mente, og det her skal beskrive, hvad der er. En rute tilføjet senere, der er forskellig mellem udgaverne, fejler i begge retninger, til nogen siger hvilken halvdel den hører til. Og den anden halvdel: noter-udgaven skal STADIG servere noter, eksport, søgning, projekter og /auth/me. En skakt, der også slukker for det, den er til for, er en sletning. Efterprøvet ved at plante fejlen: /labels-skakten åbnet, prøven fejlede og navngav alle seks ruter. Tallet står også på det grønne — "udgaverne er forskellige" over nul tilbageholdte ruter og over 29 er det samme pass. Go-suiten grøn. Fuld chromium-suite: 104 bestået, 0 fejlet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |