From 5931e8f05db32340b0d14a5a65c9f2bfc9824115 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Mon, 14 Sep 2026 01:50:16 +0200 Subject: [PATCH 1/3] chore(www): list main first and add v0.3.4 to the version switcher --- www/app/app.config.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/www/app/app.config.ts b/www/app/app.config.ts index 511f1772..3348ef72 100644 --- a/www/app/app.config.ts +++ b/www/app/app.config.ts @@ -44,11 +44,10 @@ const DUXT_DOCS = { tag: 'deprecated' }, refs: [ + { branch: 'main' }, { tag: 'latest', default: true }, - // Hidden while `latest` resolves to v0.2.0. The resolver retains it - // automatically as deprecated when v0.3.1 is cut. + { tag: 'v0.3.4' }, { tag: 'v0.2.0' }, - { branch: 'main' }, { tag: 'v0.1.0' } ], From b05c88003622effcff8e77efe0784ed232cb01e2 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Mon, 14 Sep 2026 02:00:26 +0200 Subject: [PATCH 2/3] test(scripts): wait for the viewer image to load before measuring it The viewer's picture is sized by its own pixels, so until the file arrives it is a 0px box. check:images measured it straight after the dialog opened, which passed on 7a893f0 and failed on 5931e8f with no change to either image. It now waits for the load, and reports a file that never loads as a failure of its own. --- scripts/check-images.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/scripts/check-images.ts b/scripts/check-images.ts index b9199c8f..42511c25 100644 --- a/scripts/check-images.ts +++ b/scripts/check-images.ts @@ -244,6 +244,38 @@ async function viewer(browser: Browser): Promise { await dialog.waitFor({ state: 'visible' }); + // MEASURE A LOADED IMAGE. The viewer's picture is sized by its own pixels + // (`w-auto h-auto` inside a max box), so until the file arrives it is a 0px + // box — and measuring it straight after the dialog opens made this check a + // race: green on one CI run, "the 0px viewer image" on the next, with no + // change to either. A file that never loads is a failure of its own. + const loaded = await viewed.evaluate( + (image: HTMLImageElement) => + new Promise((resolve) => { + if (image.complete) + return resolve(image.naturalWidth > 0 ? null : 'broken'); + const timer = setTimeout(() => resolve('timeout'), 30_000); + image.addEventListener( + 'load', + () => (clearTimeout(timer), resolve(null)), + { once: true } + ); + image.addEventListener( + 'error', + () => (clearTimeout(timer), resolve('broken')), + { once: true } + ); + }) + ); + + if (loaded) { + return [ + loaded === 'timeout' + ? 'the viewer image did not load within 30 seconds' + : `the viewer image failed to load (${await viewed.getAttribute('src')})` + ]; + } + const [imageBox, closeBox] = await Promise.all([ viewed.boundingBox(), close.boundingBox() From f04c769e434416a3512c0644ac42d42dd1d6ed21 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Mon, 14 Sep 2026 02:00:27 +0200 Subject: [PATCH 3/3] fix(package): describe duxt as the landing page does --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1823aed5..2826dd17 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "$schema": "https://www.schemastore.org/package.json", "name": "@kirchdev/duxt", "version": "0.3.4", - "description": "Nuxt documentation layer on Content v3 — multi-repo, versioned docs from one compact source list.", + "description": "duxt is a Nuxt layer: extend it and your docs/ folder becomes a site, with theme, search, API reference and llms.txt included. Point it at other repositories, or at tags of the same one, and each becomes a version.", "keywords": [ "content-v3", "docs",