9199709aa51efd4436d2d94cb7ac2f2ce998065f
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
8c3aa33f13 |
fix(udgaver): porten dækkede 29 ruter og skulle dække 63 — og fladen ringede stadig på dørene
Prøven, der skal holde udgaverne adskilt, stod grøn gennem to merges, mens
34 opgaveruter blev betjent af noter-udgaven. Den fejlede ikke: den
sammenligner routeren med en nedskreven liste, og listen var skrevet ud
fra de ruter, nogen havde tænkt på. Den er en DRIFT-kontrol, og den kan
ikke være en fuldstændighedskontrol. Det står nu i prøven selv.
Lukket: CalDAV-træet (8 ruter, alle læser eller skriver en VTODO),
.well-known/caldav (en påstand om at der er en CalDAV-server), ICS-feedet
og de to ruter til dets token, de fire opgave-eksporter, Todoist- og
CSV-importen, skabelonerne, sektionerne, de seks AI-opgaveruter og
indbakke-krogen. Plus fem af ni MCP-værktøjer — endepunktet er der
stadig, værktøjslisten er kortere.
Tre blev afgjort ved at læse frem for ved navnet: en skabelon laver
opgaver (CreateProjectFromTemplate), `section_id` står på `tasks` og
findes ikke på `notes`, og add_comment hænger på en opgave.
Men den dyre halvdel var fladen. En vandring gennem hver side, der kan
nås i noter-udgaven, med konsollen og svarene aflæst, fandt SYV brud —
fire af dem fra den første port:
sidebjælken GET /filters 404 ved hver navigation, ædt af .catch()
sidebjælken GET /labels 404 ved hver navigation, ædt af .catch()
notifikationer GET /ai/plan 404, stille
notesbogens side GET /tasks kastede → status = 'failed'
notesbogens side GET /sections kastede → samme fejlskærm
indstillinger GET /templates toast med fejlbesked på skærmen
integrationer GET /feed 404, stille
Den fjerde er den, der har kostet noget: /projekt/{id} er notesbogens
side, og kaldene samles i et Promise.all, så én 404 tog hele siden med.
Den har vist en fejlskærm frem for noter siden porten blev sat. Ingen
prøve åbnede en notesbog i den udgave, og .catch(() => {}) sørgede for,
at resten ikke sagde noget. "Fladen følger udgaven" var sandt om menuen
og falsk om hentningerne.
Vagten for opgaver står i butikken frem for ved kaldestederne: der var
tre, og den fjerde blev glemt — hvilket er præcis sådan, den slap
igennem.
Og rettelsen lavede selv en fejl, som vandringen fangede: da opgavekaldet
holdt op med at fejle, kom en uendelig effekt-løkke frem, som 404'eren
havde holdt låg på. En ubetinget tilskrivning til app.tasks får
projektsidens effekt til at kalde tilbage. 404'eren var låget på en
løkke, ikke bare støj.
Også: -timeout 20m i begge CI-workflows. internal/httpapi tog 664s her og
498s i CI på #95, mod Go's standardgrænse på 600 — og når den krydses, er
beskeden "panic: test timed out after 10m0s" plus et goroutine-dump, som
læser som en deadlock i koden frem for som en suite, der blev for stor.
watchForTrouble udskilt til web/e2e/trouble.js, så udgave-suiten kan bruge
den samme.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
3cee9bfb6e |
feat(udgaver): fladen følger udgaven, og søgningen holder opgaverne inde
Trin 2. Serveren kunne allerede lade være med at montere opgaveruterne; fladen tilbød dem stadig, så en noter-instans havde links til sider, der ikke fandtes. --- hvordan fladen får det at vide --- `/auth/setup` bærer nu `edition`. Dér og ikke på `/auth/me`: udgaven er en egenskab ved instansen, ikke ved den, der er logget ind, og fladen skal kende den, før nogen er. Det er i forvejen kaldet, der spørger "hvad er det her for en instans", så den følger med uden en ekstra tur. Butikken henter formen ved siden af kontoen og tier, hvis den fejler: en 401 fra `me` må ikke tage udgaven med sig — login-skærmen er også en flade i en udgave. Afventet før `loading` slippes, så fladen aldrig tegnes, før den ved hvilket program den er; tegnet først og rettet bagefter ville vise opgaver i et sekund på en instans, der ikke har nogen. `full` som udgangspunkt, fordi det er det, programmet altid har været. --- hvad der forsvinder --- Menuens opgaveindgange er udeladt, ikke gråtonet. Forsiden er noterne. En gemt adresse til /upcoming, /kalender, /uddelegeret, /faerdige, /opgave, /filter eller /etiket fører til noterne frem for en blindgyde — der er ikke sket noget forkert, adressen hører bare til et andet program end det, der kører her. Listen står ét sted i layoutet frem for som en vagt pr. rute: listen ER beslutningen, og en vagt pr. fil er syv steder at glemme den ottende. --- et hul, prøven fandt --- /search er monteret i begge udgaver, fordi noter og notesbøger skal kunne findes — og den returnerede opgaver. Ikke teoretisk: en instans lavet om fra en fuld har opgaverne liggende i databasen endnu, så ⌘K ville være den ene dør, der stod åben ind til den halvdel, resten af programmet lige havde lukket. Lukket på serveren, hvor det hører hjemme, og ⌘K spørger også selv — en tom liste af den rigtige grund og en tom liste ved et tilfælde ser ens ud. Prøven har en kontrol: den fulde udgave SKAL finde opgaven, ellers beviser nullet i noter-udgaven ingenting. --- prøverne --- Et nyt Playwright-projekt med sin egen server, sin egen port og sin egen database. Ingen lånt session: den instans har aldrig set den konto, den fulde udgaves opsætning lavede. En skakt, der kun er prøvet ved at kalde en funktion, er prøvet på det, nogen mente — det her måler programmet, som en bruger møder det. Seks prøver, heriblandt forskellen på skjult og fraværende målt udefra: /api/v1/tasks, /labels, /upcoming og /filters skal svare 404, og /api/v1/notes skal svare 200 — ellers ville de fire bestå på en server, der bare var væk. `testIgnore` på chromium-projektet, fordi filen ellers også kørte dér, mod den fulde udgave, hvor den fejler med beskeder der læser som om skakten ikke virker. Den rigtige fejl stod i projektnavnet, ikke i påstanden. Go-suiten grøn. chromium + notes-edition: 110 bestået, 0 fejlet. 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> |