canonical() fjernede enhver linje med godkendt: fra det signerede, og Zola kan lukke
frontmatter midt på en linje. Sammen gav det plads til ugodkendt tekst i et gyldigt
stemplet indlæg. Nu er kun den linje tjenesten skriver usigneret, og kun én gang.
Bruger runnerens python3 i stedet for setup-python, som kun har builds til Ubuntu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Samme indhold, URL'er og udseende, bygget af en enkelt zola-binær og Tailwind
standalone-CLI uden Node. Kanonisk domæne er asger.weirsoe.dk.
Blogindlæg ligger som page bundles med frontmatter Zola forstår, så de gamle
stempler er ugyldige, indtil scripts/omstempl.py er kørt med PUBLISH_KEY.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Posts are written in a private drafts repo and only reach this repo through
an approval step that stamps them with an HMAC over path and content. The
deploy workflow now runs scripts/verify-approvals.mjs before the build and
refuses to build if a post is unstamped, changed after approval, or still
marked as a draft (this repo is public, so a draft here is already published).
PW_PREVIEW=1 builds the site under /udkast for the private review page:
noindex, a banner, no service worker, sitemap or comments.
The nine existing posts are stamped as approved.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
Run logs of a public repository are public, and Gitea prints variables in
them in clear text; only secrets are masked. The previous commit moved the
host into a variable and so still published it, in the deploy log.
Claude-Session: https://claude.ai/code/session_01GGe7kUhooMFuzY6GaDb2w9
The workflow named the web host, its address and the web root path, and the
README named the container. Host, user and path now come from repository
variables, and the deploy step fails clearly if one is missing.
Claude-Session: https://claude.ai/code/session_01GGe7kUhooMFuzY6GaDb2w9
Fire ugers adgangslog (81k requests) viser at ægte Googlebot kun hentede robots.txt,
favicon og et par billeder — plus én enkelt HTML-side i hele perioden. Intet af det her
løser dét (kun indgående links gør), men det fjerner de undskyldninger vi selv havde
lagt ud.
- Sitemappet havde ingen lastmod overhovedet. Nu udleder astro.config.mjs den pr. side:
statiske sider fra deres sidste commit, blogindlæg fra updated/date i frontmatter,
og oversigts-/tagsider fra det nyeste indlæg de viser. Kan en dato ikke fastslås
præcist, udelades lastmod helt — en forkert dato er værre end ingen, fordi Google
holder op med at stole på feltet.
- Det kræver rigtig git-historik, så checkout kører nu fetch-depth: 0 (default shallow
ville give alle filer samme dato).
- Nyt deploy-step pinger IndexNow med de sider dette push faktisk ændrede — udregnet af
scripts/indexnow.mjs ud fra diffen, ikke hele sitemappet, da gentagne fuld-lister er
støj. Nøglefilen lå allerede i public/, men blev aldrig brugt. Hjælper kun Bing/Yandex;
Google understøtter ikke IndexNow. continue-on-error, så det aldrig vælter et deploy.
- /favicon.ico gav 404. Tilføjet som rigtig 3-størrelses ICO (16/32/48) genereret fra
favicon.svg med samme baggrund som de øvrige ikoner.
Claude-Session: https://claude.ai/code/session_018oXJWTRxTYdcV9Kw6M7e5J
The runner omits optional deps, dropping @img/sharp-linux-x64 (sharps own
optional platform package). --include=optional forces it back in.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bun --bun crashed Bun runtime (SIGILL); plain bun run hit missing Sharp
native binary for astro:assets. npm install pulls @img/sharp-linux-x64
reliably.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replaces the placeholder repo with the asger.weirsoe.dk site source.
Adds 6 blog posts (Proxmox, Authentik/OIDC, NPMplus migration, JS injection,
ah-fail) and .gitea/workflows/deploy.yml (bun build + rsync over SSH).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>