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>
24 lines
965 B
Svelte
24 lines
965 B
Svelte
<script>
|
|
/**
|
|
* The address an invite link points at.
|
|
*
|
|
* It exists as a route because the server has been emailing this URL since
|
|
* invites were built, and until now nothing answered for it: the SPA fallback
|
|
* served the app shell, the shell found no session, and the recipient was shown
|
|
* a plain sign-in form for an account they did not have yet. A 200 the whole
|
|
* way, which is exactly how that class of bug hides here.
|
|
*
|
|
* The form is SignIn's: signing up from an invite is one branch of signing in,
|
|
* and it reads the token out of the URL itself.
|
|
*/
|
|
import SignIn from '$lib/components/SignIn.svelte';
|
|
// Udgavens navn i titlen. Siden her tegner først, når layoutets `app.load()`
|
|
// har svaret, så udgaven er kendt — også uden en session, hvilket er hele
|
|
// pointen med den her rute.
|
|
import { app } from '$lib/stores.svelte.js';
|
|
</script>
|
|
|
|
<svelte:head><title>Invitation · {app.productSlug}</title></svelte:head>
|
|
|
|
<SignIn />
|