From f03d9144b9ff9878b0b1f6b254e24ccf9ca55a5f Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Sat, 5 Sep 2026 17:34:21 +0200 Subject: [PATCH] chore(deps): bump the workflow bodies to v0.8.0 and pnpm to 12.3.4 v0.8.0 carries the _promotion-pr.yml fix: a push that adds no commit the target lacks no longer fails the job. pnpm 12.3.4 replaces the bin placeholder that made an --ignore-scripts install unrunnable. --- .github/workflows/ci.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/fast-forward-queue.yml | 2 +- .github/workflows/promotion-pr.yml | 2 +- .github/workflows/queue-branch.yml | 2 +- .github/workflows/release-please.yml | 2 +- package.json | 2 +- pnpm-lock.yaml | 74 +- www/.data/content/contents.sqlite | Bin 0 -> 688128 bytes .../github.com-kirchDev-workflows-main | 1 + .../github.com-kirchDev-workflows-tag-v0.7.0 | 1 + www/.nuxt/app.config.mjs | 21 + ...dhvv2zR_CefjvFBqmJmVETaodqkqNEg2wms_M.json | 1 + ...HAmFQcgSVvHl0QymhHErHErbeZbuQYUrxSk7I.json | 1 + ...bmQxXNhkRKcEcE9TWTL07PjMVSqlT0wRt1M0E.json | 1 + ...u5JSkG1HW0hbeketi1pRJnwkyf0U7nFwEqHU8.json | 1 + ...eyYMFUjoQZJE6P3yawFXG_HN7SH3KwyQv6Fz8.json | 1 + ...QrBSymNSEigs5hFnHB1oHyQtakLRn3H2HerVY.json | 1 + ...Eqyhkorpwd3Yca9NIVi6skvpfJHCce69OQqRk.json | 1 + ...iFLmGl3G7wmwdWhy96S1gfz9gJV2rRXKAKEJo.json | 1 + www/.nuxt/components.d.ts | 66 + www/.nuxt/content/components.ts | 175 + www/.nuxt/content/database.compressed.mjs | 3 + www/.nuxt/content/manifest.ts | 75 + www/.nuxt/content/sql_dump.txt | 61 + www/.nuxt/content/types.d.ts | 34 + www/.nuxt/dev/index.mjs | 3351 ++ www/.nuxt/dev/index.mjs.map | 1 + www/.nuxt/fetch.d.ts | 1 + www/.nuxt/i18n-route-resources.mjs | 8 + www/.nuxt/imports.d.ts | 34 + www/.nuxt/manifest/latest.json | 1 + .../5d994bb4-a3a3-43d0-be2a-e7b6aa3dce57.json | 1 + www/.nuxt/manifest/meta/dev.json | 1 + www/.nuxt/mdc-configs.mjs | 8 + www/.nuxt/mdc-highlighter.mjs | 215 + www/.nuxt/mdc-image-component.mjs | 1 + www/.nuxt/mdc-imports.mjs | 12 + www/.nuxt/nitro.json | 17 + www/.nuxt/nuxt-icon-client-bundle.mjs | 12 + www/.nuxt/nuxt-icon-server-bundle.mjs | 19 + www/.nuxt/nuxt.d.ts | 19 + www/.nuxt/nuxt.json | 9 + www/.nuxt/nuxt.node.d.ts | 13 + www/.nuxt/nuxt.shared.d.ts | 7 + www/.nuxt/schema/nuxt.schema.d.ts | 17 + www/.nuxt/schema/nuxt.schema.json | 3 + www/.nuxt/tsconfig.app.json | 198 + www/.nuxt/tsconfig.json | 201 + www/.nuxt/tsconfig.node.json | 117 + www/.nuxt/tsconfig.server.json | 150 + www/.nuxt/tsconfig.shared.json | 153 + www/.nuxt/types/app.config.d.ts | 35 + www/.nuxt/types/build.d.ts | 50 + www/.nuxt/types/builder-env.d.ts | 1 + www/.nuxt/types/components.d.ts | 71 + www/.nuxt/types/i18n-plugin.d.ts | 133 + www/.nuxt/types/imports.d.ts | 396 + www/.nuxt/types/layouts.d.ts | 16 + www/.nuxt/types/middleware.d.ts | 11 + www/.nuxt/types/modules.d.ts | 59 + www/.nuxt/types/nitro-config.d.ts | 14 + www/.nuxt/types/nitro-imports.d.ts | 150 + www/.nuxt/types/nitro-layouts.d.ts | 17 + www/.nuxt/types/nitro-middleware.d.ts | 11 + www/.nuxt/types/nitro-nuxt.d.ts | 75 + www/.nuxt/types/nitro-routes.d.ts | 14 + www/.nuxt/types/nitro.d.ts | 3 + www/.nuxt/types/plugins.d.ts | 35 + www/.nuxt/types/runtime-config.d.ts | 28 + www/.nuxt/types/shared-app.config.d.ts | 28 + www/.nuxt/types/shared-imports.d.ts | 10 + www/.nuxt/types/vue-shim.d.ts | 0 www/.output/nitro.json | 15 + .../__nuxt_content/docs_duxt/sql_dump.txt | 1 + .../docs_workflows/sql_dump.txt | 1 + .../docs_workflows_v0_7_0/sql_dump.txt | 1 + www/.output/public/_nuxt/0XqUuWfO.js | 1 + www/.output/public/_nuxt/1ar_Pkce.js | 1 + www/.output/public/_nuxt/2IIEA8gg.js | 1 + www/.output/public/_nuxt/4CJ0cIlV.js | 1 + www/.output/public/_nuxt/4ECif3Ni.js | 1 + www/.output/public/_nuxt/4G7pJPwS.js | 1 + www/.output/public/_nuxt/4Rifxk1h.js | 1 + www/.output/public/_nuxt/4ZHwLPI5.js | 1 + www/.output/public/_nuxt/5eyTD99u.js | 1 + www/.output/public/_nuxt/63DygqXV.js | 1 + www/.output/public/_nuxt/7GGW24-e.js | 1 + www/.output/public/_nuxt/7_athoDk.js | 6 + www/.output/public/_nuxt/8PwUyIlP.js | 1 + www/.output/public/_nuxt/9MfHhQsQ.js | 1 + www/.output/public/_nuxt/B-GNTpdW.js | 2 + www/.output/public/_nuxt/B-ZEM4O_.js | 1 + www/.output/public/_nuxt/B0KNNn43.js | 1 + www/.output/public/_nuxt/B1ASEJ_x.js | 1 + www/.output/public/_nuxt/B1RWQWA5.js | 1 + www/.output/public/_nuxt/B2OO5cIa.js | 1 + www/.output/public/_nuxt/B2gwz-sJ.js | 1 + www/.output/public/_nuxt/B3KkkTXl.js | 1 + www/.output/public/_nuxt/B3gFvitq.js | 1 + www/.output/public/_nuxt/B5B4dYe2.js | 1 + www/.output/public/_nuxt/B5W6OYN7.js | 1 + www/.output/public/_nuxt/B5eOa1yu.js | 1 + www/.output/public/_nuxt/B68TUdTA.js | 1 + www/.output/public/_nuxt/B6D30XZt.js | 1 + www/.output/public/_nuxt/B7YBb3Hq.js | 1 + www/.output/public/_nuxt/B7ZEbQpA.js | 1 + www/.output/public/_nuxt/BAWPOn9u.js | 1 + www/.output/public/_nuxt/BAlpcs8r.js | 1 + www/.output/public/_nuxt/BApYaJfA.js | 1 + www/.output/public/_nuxt/BC2Px7Mm.js | 1 + www/.output/public/_nuxt/BCNUyKfg.js | 1 + www/.output/public/_nuxt/BCRDcNX_.js | 1 + www/.output/public/_nuxt/BC_s9l72.js | 1 + www/.output/public/_nuxt/BDNMzG2s.js | 1 + www/.output/public/_nuxt/BHWKrbxM.js | 1 + www/.output/public/_nuxt/BHpQb5nM.js | 1 + www/.output/public/_nuxt/BJ5XuW7r.js | 1 + www/.output/public/_nuxt/BJ7z_olH.js | 1 + www/.output/public/_nuxt/BJitypiv.js | 1 + www/.output/public/_nuxt/BKPPkBW4.js | 1 + www/.output/public/_nuxt/BLLp2fMj.js | 1 + www/.output/public/_nuxt/BML5mF2J.js | 1 + www/.output/public/_nuxt/BMqwQI7S.js | 1 + www/.output/public/_nuxt/BNLmms1o.js | 1 + www/.output/public/_nuxt/BPWYMyMF.js | 1 + www/.output/public/_nuxt/BPjhmG05.js | 1 + www/.output/public/_nuxt/BQ8TNH-l.js | 1 + www/.output/public/_nuxt/BR5RXkoi.js | 1 + www/.output/public/_nuxt/BRdr0IET.js | 1 + www/.output/public/_nuxt/BSMLrYjP.js | 1 + www/.output/public/_nuxt/BSPImt4y.js | 1 + www/.output/public/_nuxt/BSWPekZh.js | 1 + www/.output/public/_nuxt/BUDT5pXO.js | 1 + www/.output/public/_nuxt/BWXHIvNe.js | 1 + www/.output/public/_nuxt/BXViO-2h.js | 1 + www/.output/public/_nuxt/BXeXVLqQ.js | 1 + www/.output/public/_nuxt/BXorSQgm.js | 2 + www/.output/public/_nuxt/BYOwaDjH.js | 1 + www/.output/public/_nuxt/BYnGhZoM.js | 1 + www/.output/public/_nuxt/BYpltu6W.js | 1 + www/.output/public/_nuxt/BZCL-v6S.js | 1 + www/.output/public/_nuxt/BZKGQDc2.js | 1 + www/.output/public/_nuxt/B_IxL0uk.js | 1 + www/.output/public/_nuxt/B_bV9PQ9.js | 1 + www/.output/public/_nuxt/B_tTalzw.js | 1 + www/.output/public/_nuxt/Bczc5xTa.js | 1 + www/.output/public/_nuxt/Bd5PR4J-.js | 1 + www/.output/public/_nuxt/Bd__XmdH.js | 3 + www/.output/public/_nuxt/BgfXC-Er.js | 1 + www/.output/public/_nuxt/BhOFtLLF.js | 1 + www/.output/public/_nuxt/BiFt_7mu.js | 1 + www/.output/public/_nuxt/BiJDBrnU.js | 1 + www/.output/public/_nuxt/Bj61d0ZC.js | 1 + www/.output/public/_nuxt/Bj7E1mRn.js | 1 + www/.output/public/_nuxt/Bky6fOYQ.js | 1 + www/.output/public/_nuxt/BkyTk9wS.js | 1 + www/.output/public/_nuxt/Bm3Qr25_.js | 1 + www/.output/public/_nuxt/BmoHmdaw.js | 1 + www/.output/public/_nuxt/BmuOG9ZW.js | 1 + www/.output/public/_nuxt/BnjxR4X6.js | 1 + www/.output/public/_nuxt/BnlCZFoB.js | 1 + www/.output/public/_nuxt/Bozd7klA.js | 1 + www/.output/public/_nuxt/BqSvPtSC.js | 1 + www/.output/public/_nuxt/Bqwy1Gya.js | 1 + www/.output/public/_nuxt/BrPxG357.js | 1 + www/.output/public/_nuxt/BroJfC0k.js | 1 + www/.output/public/_nuxt/BsKzXJz4.js | 1 + www/.output/public/_nuxt/BsSzOQcm.js | 1 + www/.output/public/_nuxt/BtDbiS_P.js | 1 + www/.output/public/_nuxt/BuMHcmVP.js | 1 + www/.output/public/_nuxt/Bx1FflLF.js | 1 + www/.output/public/_nuxt/Bx91Zils.js | 1 + www/.output/public/_nuxt/BxMlprV5.js | 1 + www/.output/public/_nuxt/BxpfTIzt.js | 1 + www/.output/public/_nuxt/ByJddavk.js | 1 + www/.output/public/_nuxt/ByWQv1Qj.js | 1 + www/.output/public/_nuxt/ByZLo-HZ.js | 1 + www/.output/public/_nuxt/BzHyRl2O.js | 13 + www/.output/public/_nuxt/C-LZuMrd.js | 1 + www/.output/public/_nuxt/C03EYrpw.js | 1 + www/.output/public/_nuxt/C0MpOrj4.js | 1 + www/.output/public/_nuxt/C1IUL_tW.js | 1 + www/.output/public/_nuxt/C2pBCSgt.js | 1 + www/.output/public/_nuxt/C3h-C4tm.js | 1 + www/.output/public/_nuxt/C4cDjZDF.js | 1 + www/.output/public/_nuxt/C4mPaxYk.js | 1 + www/.output/public/_nuxt/C5JeTiTv.js | 1 + www/.output/public/_nuxt/C5qYipkI.js | 1 + www/.output/public/_nuxt/C7UOKdEL.js | 1 + www/.output/public/_nuxt/C7mF5XQf.js | 1 + www/.output/public/_nuxt/C820rvS2.js | 1 + www/.output/public/_nuxt/C8oCnwJJ.js | 1 + www/.output/public/_nuxt/C8pVoKbM.js | 1 + www/.output/public/_nuxt/C8r90Shi.js | 1 + www/.output/public/_nuxt/C8ufuNyb.js | 1 + www/.output/public/_nuxt/C9Q5zVZY.js | 1 + www/.output/public/_nuxt/C9uZIIAs.js | 1 + www/.output/public/_nuxt/C9xNZdZF.js | 1 + www/.output/public/_nuxt/CA96_NUW.js | 1 + www/.output/public/_nuxt/CA9gdOdF.js | 1 + www/.output/public/_nuxt/CAekHB0j.js | 1 + www/.output/public/_nuxt/CBce3t8t.js | 1 + www/.output/public/_nuxt/CCSX75yM.js | 1 + www/.output/public/_nuxt/CCn79oCD.js | 1 + www/.output/public/_nuxt/CD0b4qGD.js | 1 + www/.output/public/_nuxt/CDI4W71p.js | 1 + www/.output/public/_nuxt/CDQGk31u.js | 1 + www/.output/public/_nuxt/CDeNXAV0.js | 1 + www/.output/public/_nuxt/CDv2pdJW.js | 1 + www/.output/public/_nuxt/CE9AQfxI.js | 1 + www/.output/public/_nuxt/CE9ld1lL.js | 1 + www/.output/public/_nuxt/CEGMly9W.js | 1 + www/.output/public/_nuxt/CFho3top.js | 1 + www/.output/public/_nuxt/CHQ94UKr.js | 1 + www/.output/public/_nuxt/CJTPZ8u_.js | 1 + www/.output/public/_nuxt/CJptbzkE.js | 1 + www/.output/public/_nuxt/CLvhMVsD.js | 1 + www/.output/public/_nuxt/CLwyXe_n.js | 1 + www/.output/public/_nuxt/CMLA9XwU.js | 1 + www/.output/public/_nuxt/CN-kk2g8.js | 1 + www/.output/public/_nuxt/CP7-lDPc.js | 1 + www/.output/public/_nuxt/CPBLT8Qm.js | 1 + www/.output/public/_nuxt/CQ2zXKGN.js | 1 + www/.output/public/_nuxt/CQ30axUk.js | 1 + www/.output/public/_nuxt/CRGYupPL.js | 1 + www/.output/public/_nuxt/CSRkHgEL.js | 1 + www/.output/public/_nuxt/CTte8Vi7.js | 1 + www/.output/public/_nuxt/CUHmPFLl.js | 1 + www/.output/public/_nuxt/CUNNN1IS.js | 1 + www/.output/public/_nuxt/CV2tkWYe.js | 1 + www/.output/public/_nuxt/CX3SVN5J.js | 1 + www/.output/public/_nuxt/CXuKk5E8.js | 1 + www/.output/public/_nuxt/CYIUgYqB.js | 1 + www/.output/public/_nuxt/CYNrtFtB.js | 1 + www/.output/public/_nuxt/CYpm1nAK.js | 1 + www/.output/public/_nuxt/CZbG8q4J.js | 1 + www/.output/public/_nuxt/CZd0xW_V.js | 1 + www/.output/public/_nuxt/C_8bwKvT.js | 1 + www/.output/public/_nuxt/CaODJcyn.js | 3 + www/.output/public/_nuxt/CacY0gHj.js | 1 + www/.output/public/_nuxt/Cb4Vim4T.js | 1 + www/.output/public/_nuxt/CcDslhWf.js | 1 + www/.output/public/_nuxt/CcmNWLt0.js | 1 + www/.output/public/_nuxt/CdMecpZ7.js | 1 + www/.output/public/_nuxt/CewbzKMR.js | 1 + www/.output/public/_nuxt/Cfkwpbl8.js | 1 + www/.output/public/_nuxt/Cg2SuelU.js | 1 + www/.output/public/_nuxt/CgoNMtux.js | 1 + www/.output/public/_nuxt/ChRtAoqB.js | 1 + www/.output/public/_nuxt/CiLtUuC3.js | 1 + www/.output/public/_nuxt/Ci_nEsc7.js | 1 + www/.output/public/_nuxt/CjNLYCLg.js | 1 + www/.output/public/_nuxt/Ck9IwBE1.js | 1 + www/.output/public/_nuxt/CkJuzc1o.js | 1 + www/.output/public/_nuxt/Ckw8ddFX.js | 1 + www/.output/public/_nuxt/ClFFjSW2.js | 1 + www/.output/public/_nuxt/ClKdZ_lG.js | 1 + www/.output/public/_nuxt/Cluzi2Zq.js | 1 + www/.output/public/_nuxt/CmCQp5Yx.js | 1 + www/.output/public/_nuxt/Cmm7eHzH.js | 1 + www/.output/public/_nuxt/CnvKMtbv.js | 1 + www/.output/public/_nuxt/CoRGU80-.js | 1 + www/.output/public/_nuxt/CohzipZa.js | 1 + www/.output/public/_nuxt/ConPMQyx.js | 1 + www/.output/public/_nuxt/Cp5y-YJe.js | 1 + www/.output/public/_nuxt/Cs2F2srj.js | 1 + www/.output/public/_nuxt/Cs6JJXT5.js | 1 + www/.output/public/_nuxt/CsD5j6eV.js | 1 + www/.output/public/_nuxt/CsJ9-EYl.js | 1 + www/.output/public/_nuxt/CsvMBhTu.js | 1 + www/.output/public/_nuxt/CtfBBspg.js | 1 + www/.output/public/_nuxt/CtsyrtPq.js | 1 + www/.output/public/_nuxt/Cv5bFMCO.js | 1 + www/.output/public/_nuxt/CvHqhWa5.js | 1 + www/.output/public/_nuxt/CvII7bbI.js | 1 + www/.output/public/_nuxt/Cvrh5tZx.js | 1 + www/.output/public/_nuxt/CxM7S82f.js | 3 + www/.output/public/_nuxt/CxZEssPk.js | 1 + www/.output/public/_nuxt/CyEgAFGc.js | 1 + www/.output/public/_nuxt/CzszQKcx.js | 1 + www/.output/public/_nuxt/D-usSTwE.js | 1 + www/.output/public/_nuxt/D0apG41V.js | 1 + www/.output/public/_nuxt/D0iMoLMB.js | 1 + www/.output/public/_nuxt/D1A_Heim.js | 1 + www/.output/public/_nuxt/D2LTy7AW.js | 1 + www/.output/public/_nuxt/D4DZuGyf.js | 1 + www/.output/public/_nuxt/D7Lr4KcI.js | 1 + www/.output/public/_nuxt/D7qyCx1q.js | 1 + www/.output/public/_nuxt/D8IpX4py.js | 1 + www/.output/public/_nuxt/D8VeW0ES.js | 1 + www/.output/public/_nuxt/DANvH5hh.js | 1 + www/.output/public/_nuxt/DB4EqR-F.js | 1 + www/.output/public/_nuxt/DBj4K9d_.js | 1 + www/.output/public/_nuxt/DCQb3MpD.js | 1 + www/.output/public/_nuxt/DCvM94v7.js | 1 + www/.output/public/_nuxt/DDDFy-MD.js | 1 + www/.output/public/_nuxt/DDpmG2fV.js | 1 + www/.output/public/_nuxt/DDqZBno9.js | 1 + www/.output/public/_nuxt/DExj1W_8.js | 1 + www/.output/public/_nuxt/DGHpHOYJ.js | 1 + www/.output/public/_nuxt/DHYfO66s.js | 1 + www/.output/public/_nuxt/DJMQeKeT.js | 1 + www/.output/public/_nuxt/DK3Fl9T5.js | 1 + www/.output/public/_nuxt/DKDWkdEs.js | 1 + www/.output/public/_nuxt/DKpUyyne.js | 1 + www/.output/public/_nuxt/DKxQjsmF.js | 1 + www/.output/public/_nuxt/DLL8P-h_.js | 1 + www/.output/public/_nuxt/DMgNhnYS.js | 1 + www/.output/public/_nuxt/DMhq2aVH.js | 1 + www/.output/public/_nuxt/DMoTqEGO.js | 1 + www/.output/public/_nuxt/DNMTfnFr.js | 1 + www/.output/public/_nuxt/DO-qXg-I.js | 1 + www/.output/public/_nuxt/DOwzaHZ0.js | 1 + www/.output/public/_nuxt/DQCgrYNe.js | 1 + www/.output/public/_nuxt/DQZ5AkYe.js | 1 + www/.output/public/_nuxt/DQwYfKfQ.js | 1 + www/.output/public/_nuxt/DQxkIbk2.js | 1 + www/.output/public/_nuxt/DRFjx7u4.js | 1 + www/.output/public/_nuxt/DRpR5_BG.js | 1 + www/.output/public/_nuxt/DSNQnXHK.js | 1 + www/.output/public/_nuxt/DUlkwFs2.js | 1 + www/.output/public/_nuxt/DV4VLySd.js | 1 + www/.output/public/_nuxt/DVQuIRkW.js | 1 + www/.output/public/_nuxt/DVTAwKKz.js | 1 + www/.output/public/_nuxt/DW3nJb8Q.js | 1 + www/.output/public/_nuxt/DWted8aI.js | 1 + www/.output/public/_nuxt/DX1BQOs8.js | 1 + www/.output/public/_nuxt/DX3OCDL9.js | 1 + www/.output/public/_nuxt/DXG-b-1a.js | 1 + www/.output/public/_nuxt/DXrisJhu.js | 1 + www/.output/public/_nuxt/DXw9l8Rf.js | 1 + www/.output/public/_nuxt/DY-B0LvR.js | 1 + www/.output/public/_nuxt/DYvRD3hg.js | 1 + www/.output/public/_nuxt/DYxiniQT.js | 1 + www/.output/public/_nuxt/DZXEPr72.js | 1 + www/.output/public/_nuxt/D_oBsfn8.js | 1 + www/.output/public/_nuxt/Db8ZRI78.js | 1 + www/.output/public/_nuxt/DcIDlBhZ.js | 1 + www/.output/public/_nuxt/DcKNpsj9.js | 1 + www/.output/public/_nuxt/DdrHHSXu.js | 1 + www/.output/public/_nuxt/DdvCle-K.js | 1 + www/.output/public/_nuxt/De3T5VzI.js | 2 + www/.output/public/_nuxt/DeH7TEqX.js | 1 + www/.output/public/_nuxt/Df2xbC6M.js | 1 + www/.output/public/_nuxt/DfvsDSvi.js | 1 + www/.output/public/_nuxt/DgV8mo85.js | 1 + www/.output/public/_nuxt/Dgaz7aur.js | 1 + www/.output/public/_nuxt/DgjMoLWr.js | 1 + www/.output/public/_nuxt/Dh228itO.js | 1 + www/.output/public/_nuxt/Dh5ihWbf.js | 1 + www/.output/public/_nuxt/DhhofPvG.js | 1 + www/.output/public/_nuxt/DhmEMT88.js | 1 + www/.output/public/_nuxt/Dixweg8N.js | 1 + www/.output/public/_nuxt/DjWxqDcA.js | 1 + www/.output/public/_nuxt/DjuaAJKi.js | 1 + www/.output/public/_nuxt/Dlh5hvp9.js | 1 + www/.output/public/_nuxt/DluEY0Gj.js | 1 + www/.output/public/_nuxt/DmSAzd2n.js | 1 + www/.output/public/_nuxt/DnToyrRv.js | 1 + www/.output/public/_nuxt/DoanWoRz.js | 1 + www/.output/public/_nuxt/DojpP95n.js | 1 + www/.output/public/_nuxt/DqHOMS-s.js | 1 + www/.output/public/_nuxt/DqKBuwfJ.js | 1 + www/.output/public/_nuxt/DqYfTBBL.js | 1 + www/.output/public/_nuxt/Ds2j86fC.js | 1 + www/.output/public/_nuxt/DsAllRJ7.js | 1 + www/.output/public/_nuxt/DsUTQ-LC.js | 1 + www/.output/public/_nuxt/DswuEJGm.js | 1 + www/.output/public/_nuxt/DuBRPxYg.js | 1 + www/.output/public/_nuxt/DuGS1h6M.js | 1 + www/.output/public/_nuxt/DvXPmvsu.js | 1 + www/.output/public/_nuxt/Dx-8-gkx.js | 1 + www/.output/public/_nuxt/EUqPIrTm.js | 1 + www/.output/public/_nuxt/Eu7fqxDR.js | 1 + www/.output/public/_nuxt/Fd0NR9zb.js | 1 + www/.output/public/_nuxt/Fe1Jh2GI.js | 1 + www/.output/public/_nuxt/H0vgBklw.js | 1 + www/.output/public/_nuxt/HkrtbYu3.js | 1 + www/.output/public/_nuxt/ITNYJIBc.js | 1 + www/.output/public/_nuxt/IvuFDN5E.js | 1 + www/.output/public/_nuxt/IyjqRm3v.js | 1 + www/.output/public/_nuxt/JfUyCp_c.js | 1 + www/.output/public/_nuxt/KFGFyKwG.js | 1 + www/.output/public/_nuxt/KYRAD2b_.js | 1 + www/.output/public/_nuxt/LoGZLucS.js | 1 + www/.output/public/_nuxt/MqsMv5Is.js | 1 + www/.output/public/_nuxt/MrdJrrXF.js | 1 + www/.output/public/_nuxt/O90oeIOV.js | 1 + www/.output/public/_nuxt/Og0Hsp47.js | 1 + www/.output/public/_nuxt/Oin7G6kE.js | 2 + www/.output/public/_nuxt/PQzR-riV.js | 1 + www/.output/public/_nuxt/PYXmkWQR.js | 1 + www/.output/public/_nuxt/R4sQ-3Hc.js | 1 + www/.output/public/_nuxt/R8nAf1vR.js | 1 + www/.output/public/_nuxt/SCjQUq34.js | 1 + www/.output/public/_nuxt/T3cCP3-D.js | 3 + www/.output/public/_nuxt/TYx63Zh7.js | 1 + www/.output/public/_nuxt/U0d_L8uA.js | 1 + www/.output/public/_nuxt/UW2ZBlb9.js | 1 + www/.output/public/_nuxt/UdsmMDCL.js | 1 + www/.output/public/_nuxt/UpS_fPjk.js | 1 + www/.output/public/_nuxt/V2PzDzCX.js | 1 + www/.output/public/_nuxt/VE6WKepZ.js | 1 + www/.output/public/_nuxt/VUp2lXgN.js | 1 + www/.output/public/_nuxt/VbXTXTou.js | 1 + www/.output/public/_nuxt/Yf0g_uY-.js | 1 + www/.output/public/_nuxt/_5a1GRtc.js | 1 + www/.output/public/_nuxt/_6rzW9BS.js | 1 + www/.output/public/_nuxt/_X_XdTYD.js | 1 + www/.output/public/_nuxt/aMsaMD1D.js | 1 + www/.output/public/_nuxt/bTVj8UrX.js | 1 + www/.output/public/_nuxt/builds/latest.json | 1 + .../6d7065f5-cf70-4bcb-929b-8527688103e6.json | 1 + www/.output/public/_nuxt/c_oH4hRZ.js | 1 + www/.output/public/_nuxt/eJ-hLW7d.js | 1 + www/.output/public/_nuxt/entry.CWY55tU6.css | 2 + www/.output/public/_nuxt/f061FGWn.js | 2 + www/.output/public/_nuxt/fCzbojIh.js | 1 + www/.output/public/_nuxt/fg40_ntQ.js | 1 + www/.output/public/_nuxt/fwtXNY1n.js | 1 + www/.output/public/_nuxt/gaAr2yJe.js | 1 + www/.output/public/_nuxt/gvVh-RSc.js | 2 + www/.output/public/_nuxt/gzcpVVnB.js | 1 + www/.output/public/_nuxt/iXnhIJG7.js | 1 + www/.output/public/_nuxt/iXq6mRRF.js | 1 + www/.output/public/_nuxt/ilITqXS6.js | 1 + www/.output/public/_nuxt/jWbiW1Ev.js | 1 + www/.output/public/_nuxt/kpZube0q.js | 1 + www/.output/public/_nuxt/nFMaYfgc.js | 1 + www/.output/public/_nuxt/oM2G3aXe.js | 1 + www/.output/public/_nuxt/oWP401Qp.js | 1 + www/.output/public/_nuxt/oeQT6MSM.js | 1 + www/.output/public/_nuxt/oqKa8noW.js | 1 + www/.output/public/_nuxt/ot-7Btpt.js | 1 + www/.output/public/_nuxt/q7bdLbId.js | 1 + www/.output/public/_nuxt/qD-0Kul2.js | 1 + www/.output/public/_nuxt/qdxAdBWQ.js | 1 + www/.output/public/_nuxt/rLFTqkRN.js | 1 + www/.output/public/_nuxt/sB-x3p7T.js | 1 + www/.output/public/_nuxt/sltzmVWM.js | 1 + .../sqlite3-opfs-async-proxy.D_xnb1D8.js | 876 + .../public/_nuxt/sqlite3-worker1-Dla_zcLf.js | 43 + .../public/_nuxt/sqlite3.BVKGSWc-.wasm | Bin 0 -> 864752 bytes www/.output/public/_nuxt/uhdI0v04.js | 1 + www/.output/public/_nuxt/uy4dubMv.js | 1 + www/.output/public/_nuxt/vGVdxbeo.js | 1 + www/.output/public/_nuxt/woXpYk--.js | 1 + www/.output/public/_nuxt/x1QpYndt.js | 1 + www/.output/public/_nuxt/x7Oz0ub3.js | 1 + www/.output/public/_nuxt/yck5y8x3.js | 1 + www/.output/public/_nuxt/zf12oZj6.js | 1 + www/.output/server/chunks/_/error-500.mjs | 20 + www/.output/server/chunks/_/error-500.mjs.map | 1 + www/.output/server/chunks/_/executor.mjs | 428 + www/.output/server/chunks/_/executor.mjs.map | 1 + www/.output/server/chunks/_/icons.mjs | 2205 + www/.output/server/chunks/_/icons.mjs.map | 1 + www/.output/server/chunks/_/icons2.mjs | 6302 +++ www/.output/server/chunks/_/icons2.mjs.map | 1 + www/.output/server/chunks/_/icons3.mjs | 11518 +++++ www/.output/server/chunks/_/icons3.mjs.map | 1 + www/.output/server/chunks/_/icons4.mjs | 4886 ++ www/.output/server/chunks/_/icons4.mjs.map | 1 + www/.output/server/chunks/_/index.mjs | 489 + www/.output/server/chunks/_/index.mjs.map | 1 + .../server/chunks/build/Callout-DaQKbOat.mjs | 222 + .../chunks/build/Callout-DaQKbOat.mjs.map | 1 + .../server/chunks/build/FileTree-BfyS3aPv.mjs | 719 + .../chunks/build/FileTree-BfyS3aPv.mjs.map | 1 + .../chunks/build/PackageManagers-K25fRqGP.mjs | 220 + .../build/PackageManagers-K25fRqGP.mjs.map | 1 + .../chunks/build/PageCards-CPtKV75N.mjs | 176 + .../chunks/build/PageCards-CPtKV75N.mjs.map | 1 + .../server/chunks/build/ProseA-CDrZuaP_.mjs | 74 + .../chunks/build/ProseA-CDrZuaP_.mjs.map | 1 + .../chunks/build/ProseBlockquote-B-7L4Ess.mjs | 52 + .../build/ProseBlockquote-B-7L4Ess.mjs.map | 1 + .../chunks/build/ProseCode-BTRLYwXb.mjs | 52 + .../chunks/build/ProseCode-BTRLYwXb.mjs.map | 1 + .../server/chunks/build/ProseEm-C7TjpwSP.mjs | 52 + .../chunks/build/ProseEm-C7TjpwSP.mjs.map | 1 + .../server/chunks/build/ProseH1-CVLZuK_r.mjs | 66 + .../chunks/build/ProseH1-CVLZuK_r.mjs.map | 1 + .../server/chunks/build/ProseH2-BS4Lvt2Y.mjs | 64 + .../chunks/build/ProseH2-BS4Lvt2Y.mjs.map | 1 + .../server/chunks/build/ProseH3-BRrAJQy3.mjs | 64 + .../chunks/build/ProseH3-BRrAJQy3.mjs.map | 1 + .../server/chunks/build/ProseH5-Grhy0Qj6.mjs | 66 + .../chunks/build/ProseH5-Grhy0Qj6.mjs.map | 1 + .../server/chunks/build/ProseH6-BvRgN4A7.mjs | 66 + .../chunks/build/ProseH6-BvRgN4A7.mjs.map | 1 + .../server/chunks/build/ProseHr-BXAb-vAJ.mjs | 50 + .../chunks/build/ProseHr-BXAb-vAJ.mjs.map | 1 + .../server/chunks/build/ProseImg-7BALMu6t.mjs | 84 + .../chunks/build/ProseImg-7BALMu6t.mjs.map | 1 + .../server/chunks/build/ProseLi-DimT09Rm.mjs | 52 + .../chunks/build/ProseLi-DimT09Rm.mjs.map | 1 + .../server/chunks/build/ProseOl-nfwRkhQK.mjs | 52 + .../chunks/build/ProseOl-nfwRkhQK.mjs.map | 1 + .../server/chunks/build/ProseP-DFaeiiyW.mjs | 52 + .../chunks/build/ProseP-DFaeiiyW.mjs.map | 1 + .../server/chunks/build/ProsePre-C--MREVp.mjs | 176 + .../chunks/build/ProsePre-C--MREVp.mjs.map | 1 + .../chunks/build/ProseScript-c2hEipYr.mjs | 59 + .../chunks/build/ProseScript-c2hEipYr.mjs.map | 1 + .../chunks/build/ProseStrong-BoLnSLEw.mjs | 52 + .../chunks/build/ProseStrong-BoLnSLEw.mjs.map | 1 + .../chunks/build/ProseTable-BUJ138ee.mjs | 52 + .../chunks/build/ProseTable-BUJ138ee.mjs.map | 1 + .../chunks/build/ProseTbody-CWGDEMFi.mjs | 52 + .../chunks/build/ProseTbody-CWGDEMFi.mjs.map | 1 + .../server/chunks/build/ProseTd-B1e-PaZe.mjs | 52 + .../chunks/build/ProseTd-B1e-PaZe.mjs.map | 1 + .../server/chunks/build/ProseTh-BFER_0iV.mjs | 52 + .../chunks/build/ProseTh-BFER_0iV.mjs.map | 1 + .../chunks/build/ProseThead-Cpj4kqru.mjs | 52 + .../chunks/build/ProseThead-Cpj4kqru.mjs.map | 1 + .../server/chunks/build/ProseTr-DY8SujtK.mjs | 52 + .../chunks/build/ProseTr-DY8SujtK.mjs.map | 1 + .../server/chunks/build/ProseUl-BzTb4Y43.mjs | 52 + .../chunks/build/ProseUl-BzTb4Y43.mjs.map | 1 + .../build/RovingFocusGroup-9mfIdZPl.mjs | 527 + .../build/RovingFocusGroup-9mfIdZPl.mjs.map | 1 + .../server/chunks/build/Steps-BB0bEySs.mjs | 52 + .../chunks/build/Steps-BB0bEySs.mjs.map | 1 + .../chunks/build/_...slug_-DwEYBVFG.mjs | 2786 + .../chunks/build/_...slug_-DwEYBVFG.mjs.map | 1 + .../_plugin-vue_export-helper-BOaGB7Aw.mjs | 9 + ..._plugin-vue_export-helper-BOaGB7Aw.mjs.map | 1 + .../server/chunks/build/badge-8_fEuCAp.mjs | 54 + .../chunks/build/badge-8_fEuCAp.mjs.map | 1 + .../server/chunks/build/card-CLGKLW0U.mjs | 190 + .../server/chunks/build/card-CLGKLW0U.mjs.map | 1 + .../chunks/build/database.client-Dp6oEOCa.mjs | 175 + .../build/database.client-Dp6oEOCa.mjs.map | 1 + .../chunks/build/database.compressed.mjs | 6 + .../chunks/build/database.compressed.mjs.map | 1 + .../server/chunks/build/default-DqcdqpPK.mjs | 73 + .../chunks/build/default-DqcdqpPK.mjs.map | 1 + .../server/chunks/build/docs-8hRY4ISO.mjs | 133 + .../server/chunks/build/docs-8hRY4ISO.mjs.map | 1 + .../chunks/build/file-icons-Cw1-FMWv.mjs | 53 + .../chunks/build/file-icons-Cw1-FMWv.mjs.map | 1 + .../chunks/build/i18n.config-BZiWaRAp.mjs | 20 + .../chunks/build/i18n.config-BZiWaRAp.mjs.map | 1 + .../server/chunks/build/lib-Dnm-N0w-.mjs | 1089 + .../server/chunks/build/lib-Dnm-N0w-.mjs.map | 1 + .../server/chunks/build/node-C4VTx5qK.mjs | 13077 +++++ .../server/chunks/build/node-C4VTx5qK.mjs.map | 1 + .../server/chunks/build/pages-qMPUVsYh.mjs | 206 + .../chunks/build/pages-qMPUVsYh.mjs.map | 1 + .../server/chunks/build/sonner-duN5B4PW.mjs | 11257 ++++ .../chunks/build/sonner-duN5B4PW.mjs.map | 1 + .../chunks/build/useDuxtConfig-Cy2__zQL.mjs | 259 + .../build/useDuxtConfig-Cy2__zQL.mjs.map | 1 + .../chunks/build/useDuxtSection-DeDrPvwO.mjs | 747 + .../build/useDuxtSection-DeDrPvwO.mjs.map | 1 + .../chunks/build/useDuxtToast-CcCLDiC4.mjs | 25 + .../build/useDuxtToast-CcCLDiC4.mjs.map | 1 + www/.output/server/chunks/nitro/nitro.mjs | 12415 +++++ www/.output/server/chunks/nitro/nitro.mjs.map | 1 + www/.output/server/chunks/raw/04367822.mjs | 5 + .../server/chunks/raw/04367822.mjs.map | 1 + www/.output/server/chunks/raw/0b32e43e.mjs | 5 + .../server/chunks/raw/0b32e43e.mjs.map | 1 + www/.output/server/chunks/raw/0b4a9867.mjs | 5 + .../server/chunks/raw/0b4a9867.mjs.map | 1 + www/.output/server/chunks/raw/1bf88aba.mjs | 5 + .../server/chunks/raw/1bf88aba.mjs.map | 1 + www/.output/server/chunks/raw/1cc9c2ef.mjs | 5 + .../server/chunks/raw/1cc9c2ef.mjs.map | 1 + www/.output/server/chunks/raw/27c16556.mjs | 5 + .../server/chunks/raw/27c16556.mjs.map | 1 + www/.output/server/chunks/raw/341972ef.mjs | 5 + .../server/chunks/raw/341972ef.mjs.map | 1 + www/.output/server/chunks/raw/3490030b.mjs | 5 + .../server/chunks/raw/3490030b.mjs.map | 1 + www/.output/server/chunks/raw/3c19bf57.mjs | 5 + .../server/chunks/raw/3c19bf57.mjs.map | 1 + www/.output/server/chunks/raw/3f4a84e8.mjs | 5 + .../server/chunks/raw/3f4a84e8.mjs.map | 1 + www/.output/server/chunks/raw/41b41db8.mjs | 5 + .../server/chunks/raw/41b41db8.mjs.map | 1 + www/.output/server/chunks/raw/4e063045.mjs | 5 + .../server/chunks/raw/4e063045.mjs.map | 1 + www/.output/server/chunks/raw/538d5ecc.mjs | 5 + .../server/chunks/raw/538d5ecc.mjs.map | 1 + www/.output/server/chunks/raw/543a10e2.mjs | 5 + .../server/chunks/raw/543a10e2.mjs.map | 1 + www/.output/server/chunks/raw/55212f98.mjs | 5 + .../server/chunks/raw/55212f98.mjs.map | 1 + www/.output/server/chunks/raw/557a3b8a.mjs | 5 + .../server/chunks/raw/557a3b8a.mjs.map | 1 + www/.output/server/chunks/raw/5e7c2339.mjs | 5 + .../server/chunks/raw/5e7c2339.mjs.map | 1 + www/.output/server/chunks/raw/66d884d3.mjs | 5 + .../server/chunks/raw/66d884d3.mjs.map | 1 + www/.output/server/chunks/raw/71354937.mjs | 5 + .../server/chunks/raw/71354937.mjs.map | 1 + www/.output/server/chunks/raw/784641fe.mjs | 5 + .../server/chunks/raw/784641fe.mjs.map | 1 + www/.output/server/chunks/raw/84c1d671.mjs | 5 + .../server/chunks/raw/84c1d671.mjs.map | 1 + www/.output/server/chunks/raw/8604f29b.mjs | 5 + .../server/chunks/raw/8604f29b.mjs.map | 1 + www/.output/server/chunks/raw/8776d6f2.mjs | 5 + .../server/chunks/raw/8776d6f2.mjs.map | 1 + www/.output/server/chunks/raw/88845ae4.mjs | 5 + .../server/chunks/raw/88845ae4.mjs.map | 1 + www/.output/server/chunks/raw/9b7cf1af.mjs | 5 + .../server/chunks/raw/9b7cf1af.mjs.map | 1 + www/.output/server/chunks/raw/a1f3dd56.mjs | 5 + .../server/chunks/raw/a1f3dd56.mjs.map | 1 + www/.output/server/chunks/raw/a89a20d9.mjs | 5 + .../server/chunks/raw/a89a20d9.mjs.map | 1 + www/.output/server/chunks/raw/aa47aaec.mjs | 5 + .../server/chunks/raw/aa47aaec.mjs.map | 1 + www/.output/server/chunks/raw/b6dd698b.mjs | 5 + .../server/chunks/raw/b6dd698b.mjs.map | 1 + www/.output/server/chunks/raw/becdb054.mjs | 5 + .../server/chunks/raw/becdb054.mjs.map | 1 + www/.output/server/chunks/raw/c665ac72.mjs | 5 + .../server/chunks/raw/c665ac72.mjs.map | 1 + www/.output/server/chunks/raw/c8a19e3d.mjs | 5 + .../server/chunks/raw/c8a19e3d.mjs.map | 1 + www/.output/server/chunks/raw/c988819d.mjs | 5 + .../server/chunks/raw/c988819d.mjs.map | 1 + www/.output/server/chunks/raw/d0981e13.mjs | 5 + .../server/chunks/raw/d0981e13.mjs.map | 1 + www/.output/server/chunks/raw/df933674.mjs | 5 + .../server/chunks/raw/df933674.mjs.map | 1 + www/.output/server/chunks/raw/e42a6267.mjs | 5 + .../server/chunks/raw/e42a6267.mjs.map | 1 + www/.output/server/chunks/raw/e4e22c19.mjs | 5 + .../server/chunks/raw/e4e22c19.mjs.map | 1 + www/.output/server/chunks/raw/e6b409a0.mjs | 5 + .../server/chunks/raw/e6b409a0.mjs.map | 1 + www/.output/server/chunks/raw/f1343414.mjs | 5 + .../server/chunks/raw/f1343414.mjs.map | 1 + www/.output/server/chunks/raw/f5068ad8.mjs | 5 + .../server/chunks/raw/f5068ad8.mjs.map | 1 + www/.output/server/chunks/raw/f589c5a6.mjs | 5 + .../server/chunks/raw/f589c5a6.mjs.map | 1 + www/.output/server/chunks/raw/f60e371f.mjs | 5 + .../server/chunks/raw/f60e371f.mjs.map | 1 + www/.output/server/chunks/raw/f8bdfe7a.mjs | 5 + .../server/chunks/raw/f8bdfe7a.mjs.map | 1 + www/.output/server/chunks/raw/fce8bca2.mjs | 5 + .../server/chunks/raw/fce8bca2.mjs.map | 1 + www/.output/server/chunks/routes/renderer.mjs | 390 + .../server/chunks/routes/renderer.mjs.map | 1 + .../chunks/virtual/_virtual_spa-template.mjs | 4 + .../virtual/_virtual_spa-template.mjs.map | 1 + www/.output/server/chunks/virtual/entry.mjs | 42570 ++++++++++++++++ .../server/chunks/virtual/entry.mjs.map | 1 + .../server/chunks/virtual/precomputed.mjs | 4 + .../server/chunks/virtual/precomputed.mjs.map | 1 + www/.output/server/chunks/virtual/styles.mjs | 4 + .../server/chunks/virtual/styles.mjs.map | 1 + www/.output/server/index.mjs | 18 + www/.output/server/index.mjs.map | 1 + www/.output/server/package.json | 198 + 663 files changed, 122904 insertions(+), 44 deletions(-) create mode 100644 www/.data/content/contents.sqlite create mode 160000 www/.data/content/github.com-kirchDev-workflows-main create mode 160000 www/.data/content/github.com-kirchDev-workflows-tag-v0.7.0 create mode 100644 www/.nuxt/app.config.mjs create mode 100644 www/.nuxt/cache/nuxt/icon/lucide_bot_5_gA74R7dhvv2zR_CefjvFBqmJmVETaodqkqNEg2wms_M.json create mode 100644 www/.nuxt/cache/nuxt/icon/lucide_bot_6_uiybHHAmFQcgSVvHl0QymhHErHErbeZbuQYUrxSk7I.json create mode 100644 www/.nuxt/cache/nuxt/icon/lucide_box_4_X0LKERbmQxXNhkRKcEcE9TWTL07PjMVSqlT0wRt1M0E.json create mode 100644 www/.nuxt/cache/nuxt/icon/lucide_circlealert_3_klaqnu5JSkG1HW0hbeketi1pRJnwkyf0U7nFwEqHU8.json create mode 100644 www/.nuxt/cache/nuxt/icon/lucide_github_2_zxJW8meyYMFUjoQZJE6P3yawFXG_HN7SH3KwyQv6Fz8.json create mode 100644 www/.nuxt/cache/nuxt/icon/vscodeicons_filetypemarkdown_2_Xa8f3SQrBSymNSEigs5hFnHB1oHyQtakLRn3H2HerVY.json create mode 100644 www/.nuxt/cache/nuxt/icon/vscodeicons_filetypemarkdown_3_i2_YtZEqyhkorpwd3Yca9NIVi6skvpfJHCce69OQqRk.json create mode 100644 www/.nuxt/cache/nuxt/icon/vscodeicons_filetypeyaml_1_4JvddjiFLmGl3G7wmwdWhy96S1gfz9gJV2rRXKAKEJo.json create mode 100644 www/.nuxt/components.d.ts create mode 100644 www/.nuxt/content/components.ts create mode 100644 www/.nuxt/content/database.compressed.mjs create mode 100644 www/.nuxt/content/manifest.ts create mode 100644 www/.nuxt/content/sql_dump.txt create mode 100644 www/.nuxt/content/types.d.ts create mode 100644 www/.nuxt/dev/index.mjs create mode 100644 www/.nuxt/dev/index.mjs.map create mode 100644 www/.nuxt/fetch.d.ts create mode 100644 www/.nuxt/i18n-route-resources.mjs create mode 100644 www/.nuxt/imports.d.ts create mode 100644 www/.nuxt/manifest/latest.json create mode 100644 www/.nuxt/manifest/meta/5d994bb4-a3a3-43d0-be2a-e7b6aa3dce57.json create mode 100644 www/.nuxt/manifest/meta/dev.json create mode 100644 www/.nuxt/mdc-configs.mjs create mode 100644 www/.nuxt/mdc-highlighter.mjs create mode 100644 www/.nuxt/mdc-image-component.mjs create mode 100644 www/.nuxt/mdc-imports.mjs create mode 100644 www/.nuxt/nitro.json create mode 100644 www/.nuxt/nuxt-icon-client-bundle.mjs create mode 100644 www/.nuxt/nuxt-icon-server-bundle.mjs create mode 100644 www/.nuxt/nuxt.d.ts create mode 100644 www/.nuxt/nuxt.json create mode 100644 www/.nuxt/nuxt.node.d.ts create mode 100644 www/.nuxt/nuxt.shared.d.ts create mode 100644 www/.nuxt/schema/nuxt.schema.d.ts create mode 100644 www/.nuxt/schema/nuxt.schema.json create mode 100644 www/.nuxt/tsconfig.app.json create mode 100644 www/.nuxt/tsconfig.json create mode 100644 www/.nuxt/tsconfig.node.json create mode 100644 www/.nuxt/tsconfig.server.json create mode 100644 www/.nuxt/tsconfig.shared.json create mode 100644 www/.nuxt/types/app.config.d.ts create mode 100644 www/.nuxt/types/build.d.ts create mode 100644 www/.nuxt/types/builder-env.d.ts create mode 100644 www/.nuxt/types/components.d.ts create mode 100644 www/.nuxt/types/i18n-plugin.d.ts create mode 100644 www/.nuxt/types/imports.d.ts create mode 100644 www/.nuxt/types/layouts.d.ts create mode 100644 www/.nuxt/types/middleware.d.ts create mode 100644 www/.nuxt/types/modules.d.ts create mode 100644 www/.nuxt/types/nitro-config.d.ts create mode 100644 www/.nuxt/types/nitro-imports.d.ts create mode 100644 www/.nuxt/types/nitro-layouts.d.ts create mode 100644 www/.nuxt/types/nitro-middleware.d.ts create mode 100644 www/.nuxt/types/nitro-nuxt.d.ts create mode 100644 www/.nuxt/types/nitro-routes.d.ts create mode 100644 www/.nuxt/types/nitro.d.ts create mode 100644 www/.nuxt/types/plugins.d.ts create mode 100644 www/.nuxt/types/runtime-config.d.ts create mode 100644 www/.nuxt/types/shared-app.config.d.ts create mode 100644 www/.nuxt/types/shared-imports.d.ts create mode 100644 www/.nuxt/types/vue-shim.d.ts create mode 100644 www/.output/nitro.json create mode 100644 www/.output/public/__nuxt_content/docs_duxt/sql_dump.txt create mode 100644 www/.output/public/__nuxt_content/docs_workflows/sql_dump.txt create mode 100644 www/.output/public/__nuxt_content/docs_workflows_v0_7_0/sql_dump.txt create mode 100644 www/.output/public/_nuxt/0XqUuWfO.js create mode 100644 www/.output/public/_nuxt/1ar_Pkce.js create mode 100644 www/.output/public/_nuxt/2IIEA8gg.js create mode 100644 www/.output/public/_nuxt/4CJ0cIlV.js create mode 100644 www/.output/public/_nuxt/4ECif3Ni.js create mode 100644 www/.output/public/_nuxt/4G7pJPwS.js create mode 100644 www/.output/public/_nuxt/4Rifxk1h.js create mode 100644 www/.output/public/_nuxt/4ZHwLPI5.js create mode 100644 www/.output/public/_nuxt/5eyTD99u.js create mode 100644 www/.output/public/_nuxt/63DygqXV.js create mode 100644 www/.output/public/_nuxt/7GGW24-e.js create mode 100644 www/.output/public/_nuxt/7_athoDk.js create mode 100644 www/.output/public/_nuxt/8PwUyIlP.js create mode 100644 www/.output/public/_nuxt/9MfHhQsQ.js create mode 100644 www/.output/public/_nuxt/B-GNTpdW.js create mode 100644 www/.output/public/_nuxt/B-ZEM4O_.js create mode 100644 www/.output/public/_nuxt/B0KNNn43.js create mode 100644 www/.output/public/_nuxt/B1ASEJ_x.js create mode 100644 www/.output/public/_nuxt/B1RWQWA5.js create mode 100644 www/.output/public/_nuxt/B2OO5cIa.js create mode 100644 www/.output/public/_nuxt/B2gwz-sJ.js create mode 100644 www/.output/public/_nuxt/B3KkkTXl.js create mode 100644 www/.output/public/_nuxt/B3gFvitq.js create mode 100644 www/.output/public/_nuxt/B5B4dYe2.js create mode 100644 www/.output/public/_nuxt/B5W6OYN7.js create mode 100644 www/.output/public/_nuxt/B5eOa1yu.js create mode 100644 www/.output/public/_nuxt/B68TUdTA.js create mode 100644 www/.output/public/_nuxt/B6D30XZt.js create mode 100644 www/.output/public/_nuxt/B7YBb3Hq.js create mode 100644 www/.output/public/_nuxt/B7ZEbQpA.js create mode 100644 www/.output/public/_nuxt/BAWPOn9u.js create mode 100644 www/.output/public/_nuxt/BAlpcs8r.js create mode 100644 www/.output/public/_nuxt/BApYaJfA.js create mode 100644 www/.output/public/_nuxt/BC2Px7Mm.js create mode 100644 www/.output/public/_nuxt/BCNUyKfg.js create mode 100644 www/.output/public/_nuxt/BCRDcNX_.js create mode 100644 www/.output/public/_nuxt/BC_s9l72.js create mode 100644 www/.output/public/_nuxt/BDNMzG2s.js create mode 100644 www/.output/public/_nuxt/BHWKrbxM.js create mode 100644 www/.output/public/_nuxt/BHpQb5nM.js create mode 100644 www/.output/public/_nuxt/BJ5XuW7r.js create mode 100644 www/.output/public/_nuxt/BJ7z_olH.js create mode 100644 www/.output/public/_nuxt/BJitypiv.js create mode 100644 www/.output/public/_nuxt/BKPPkBW4.js create mode 100644 www/.output/public/_nuxt/BLLp2fMj.js create mode 100644 www/.output/public/_nuxt/BML5mF2J.js create mode 100644 www/.output/public/_nuxt/BMqwQI7S.js create mode 100644 www/.output/public/_nuxt/BNLmms1o.js create mode 100644 www/.output/public/_nuxt/BPWYMyMF.js create mode 100644 www/.output/public/_nuxt/BPjhmG05.js create mode 100644 www/.output/public/_nuxt/BQ8TNH-l.js create mode 100644 www/.output/public/_nuxt/BR5RXkoi.js create mode 100644 www/.output/public/_nuxt/BRdr0IET.js create mode 100644 www/.output/public/_nuxt/BSMLrYjP.js create mode 100644 www/.output/public/_nuxt/BSPImt4y.js create mode 100644 www/.output/public/_nuxt/BSWPekZh.js create mode 100644 www/.output/public/_nuxt/BUDT5pXO.js create mode 100644 www/.output/public/_nuxt/BWXHIvNe.js create mode 100644 www/.output/public/_nuxt/BXViO-2h.js create mode 100644 www/.output/public/_nuxt/BXeXVLqQ.js create mode 100644 www/.output/public/_nuxt/BXorSQgm.js create mode 100644 www/.output/public/_nuxt/BYOwaDjH.js create mode 100644 www/.output/public/_nuxt/BYnGhZoM.js create mode 100644 www/.output/public/_nuxt/BYpltu6W.js create mode 100644 www/.output/public/_nuxt/BZCL-v6S.js create mode 100644 www/.output/public/_nuxt/BZKGQDc2.js create mode 100644 www/.output/public/_nuxt/B_IxL0uk.js create mode 100644 www/.output/public/_nuxt/B_bV9PQ9.js create mode 100644 www/.output/public/_nuxt/B_tTalzw.js create mode 100644 www/.output/public/_nuxt/Bczc5xTa.js create mode 100644 www/.output/public/_nuxt/Bd5PR4J-.js create mode 100644 www/.output/public/_nuxt/Bd__XmdH.js create mode 100644 www/.output/public/_nuxt/BgfXC-Er.js create mode 100644 www/.output/public/_nuxt/BhOFtLLF.js create mode 100644 www/.output/public/_nuxt/BiFt_7mu.js create mode 100644 www/.output/public/_nuxt/BiJDBrnU.js create mode 100644 www/.output/public/_nuxt/Bj61d0ZC.js create mode 100644 www/.output/public/_nuxt/Bj7E1mRn.js create mode 100644 www/.output/public/_nuxt/Bky6fOYQ.js create mode 100644 www/.output/public/_nuxt/BkyTk9wS.js create mode 100644 www/.output/public/_nuxt/Bm3Qr25_.js create mode 100644 www/.output/public/_nuxt/BmoHmdaw.js create mode 100644 www/.output/public/_nuxt/BmuOG9ZW.js create mode 100644 www/.output/public/_nuxt/BnjxR4X6.js create mode 100644 www/.output/public/_nuxt/BnlCZFoB.js create mode 100644 www/.output/public/_nuxt/Bozd7klA.js create mode 100644 www/.output/public/_nuxt/BqSvPtSC.js create mode 100644 www/.output/public/_nuxt/Bqwy1Gya.js create mode 100644 www/.output/public/_nuxt/BrPxG357.js create mode 100644 www/.output/public/_nuxt/BroJfC0k.js create mode 100644 www/.output/public/_nuxt/BsKzXJz4.js create mode 100644 www/.output/public/_nuxt/BsSzOQcm.js create mode 100644 www/.output/public/_nuxt/BtDbiS_P.js create mode 100644 www/.output/public/_nuxt/BuMHcmVP.js create mode 100644 www/.output/public/_nuxt/Bx1FflLF.js create mode 100644 www/.output/public/_nuxt/Bx91Zils.js create mode 100644 www/.output/public/_nuxt/BxMlprV5.js create mode 100644 www/.output/public/_nuxt/BxpfTIzt.js create mode 100644 www/.output/public/_nuxt/ByJddavk.js create mode 100644 www/.output/public/_nuxt/ByWQv1Qj.js create mode 100644 www/.output/public/_nuxt/ByZLo-HZ.js create mode 100644 www/.output/public/_nuxt/BzHyRl2O.js create mode 100644 www/.output/public/_nuxt/C-LZuMrd.js create mode 100644 www/.output/public/_nuxt/C03EYrpw.js create mode 100644 www/.output/public/_nuxt/C0MpOrj4.js create mode 100644 www/.output/public/_nuxt/C1IUL_tW.js create mode 100644 www/.output/public/_nuxt/C2pBCSgt.js create mode 100644 www/.output/public/_nuxt/C3h-C4tm.js create mode 100644 www/.output/public/_nuxt/C4cDjZDF.js create mode 100644 www/.output/public/_nuxt/C4mPaxYk.js create mode 100644 www/.output/public/_nuxt/C5JeTiTv.js create mode 100644 www/.output/public/_nuxt/C5qYipkI.js create mode 100644 www/.output/public/_nuxt/C7UOKdEL.js create mode 100644 www/.output/public/_nuxt/C7mF5XQf.js create mode 100644 www/.output/public/_nuxt/C820rvS2.js create mode 100644 www/.output/public/_nuxt/C8oCnwJJ.js create mode 100644 www/.output/public/_nuxt/C8pVoKbM.js create mode 100644 www/.output/public/_nuxt/C8r90Shi.js create mode 100644 www/.output/public/_nuxt/C8ufuNyb.js create mode 100644 www/.output/public/_nuxt/C9Q5zVZY.js create mode 100644 www/.output/public/_nuxt/C9uZIIAs.js create mode 100644 www/.output/public/_nuxt/C9xNZdZF.js create mode 100644 www/.output/public/_nuxt/CA96_NUW.js create mode 100644 www/.output/public/_nuxt/CA9gdOdF.js create mode 100644 www/.output/public/_nuxt/CAekHB0j.js create mode 100644 www/.output/public/_nuxt/CBce3t8t.js create mode 100644 www/.output/public/_nuxt/CCSX75yM.js create mode 100644 www/.output/public/_nuxt/CCn79oCD.js create mode 100644 www/.output/public/_nuxt/CD0b4qGD.js create mode 100644 www/.output/public/_nuxt/CDI4W71p.js create mode 100644 www/.output/public/_nuxt/CDQGk31u.js create mode 100644 www/.output/public/_nuxt/CDeNXAV0.js create mode 100644 www/.output/public/_nuxt/CDv2pdJW.js create mode 100644 www/.output/public/_nuxt/CE9AQfxI.js create mode 100644 www/.output/public/_nuxt/CE9ld1lL.js create mode 100644 www/.output/public/_nuxt/CEGMly9W.js create mode 100644 www/.output/public/_nuxt/CFho3top.js create mode 100644 www/.output/public/_nuxt/CHQ94UKr.js create mode 100644 www/.output/public/_nuxt/CJTPZ8u_.js create mode 100644 www/.output/public/_nuxt/CJptbzkE.js create mode 100644 www/.output/public/_nuxt/CLvhMVsD.js create mode 100644 www/.output/public/_nuxt/CLwyXe_n.js create mode 100644 www/.output/public/_nuxt/CMLA9XwU.js create mode 100644 www/.output/public/_nuxt/CN-kk2g8.js create mode 100644 www/.output/public/_nuxt/CP7-lDPc.js create mode 100644 www/.output/public/_nuxt/CPBLT8Qm.js create mode 100644 www/.output/public/_nuxt/CQ2zXKGN.js create mode 100644 www/.output/public/_nuxt/CQ30axUk.js create mode 100644 www/.output/public/_nuxt/CRGYupPL.js create mode 100644 www/.output/public/_nuxt/CSRkHgEL.js create mode 100644 www/.output/public/_nuxt/CTte8Vi7.js create mode 100644 www/.output/public/_nuxt/CUHmPFLl.js create mode 100644 www/.output/public/_nuxt/CUNNN1IS.js create mode 100644 www/.output/public/_nuxt/CV2tkWYe.js create mode 100644 www/.output/public/_nuxt/CX3SVN5J.js create mode 100644 www/.output/public/_nuxt/CXuKk5E8.js create mode 100644 www/.output/public/_nuxt/CYIUgYqB.js create mode 100644 www/.output/public/_nuxt/CYNrtFtB.js create mode 100644 www/.output/public/_nuxt/CYpm1nAK.js create mode 100644 www/.output/public/_nuxt/CZbG8q4J.js create mode 100644 www/.output/public/_nuxt/CZd0xW_V.js create mode 100644 www/.output/public/_nuxt/C_8bwKvT.js create mode 100644 www/.output/public/_nuxt/CaODJcyn.js create mode 100644 www/.output/public/_nuxt/CacY0gHj.js create mode 100644 www/.output/public/_nuxt/Cb4Vim4T.js create mode 100644 www/.output/public/_nuxt/CcDslhWf.js create mode 100644 www/.output/public/_nuxt/CcmNWLt0.js create mode 100644 www/.output/public/_nuxt/CdMecpZ7.js create mode 100644 www/.output/public/_nuxt/CewbzKMR.js create mode 100644 www/.output/public/_nuxt/Cfkwpbl8.js create mode 100644 www/.output/public/_nuxt/Cg2SuelU.js create mode 100644 www/.output/public/_nuxt/CgoNMtux.js create mode 100644 www/.output/public/_nuxt/ChRtAoqB.js create mode 100644 www/.output/public/_nuxt/CiLtUuC3.js create mode 100644 www/.output/public/_nuxt/Ci_nEsc7.js create mode 100644 www/.output/public/_nuxt/CjNLYCLg.js create mode 100644 www/.output/public/_nuxt/Ck9IwBE1.js create mode 100644 www/.output/public/_nuxt/CkJuzc1o.js create mode 100644 www/.output/public/_nuxt/Ckw8ddFX.js create mode 100644 www/.output/public/_nuxt/ClFFjSW2.js create mode 100644 www/.output/public/_nuxt/ClKdZ_lG.js create mode 100644 www/.output/public/_nuxt/Cluzi2Zq.js create mode 100644 www/.output/public/_nuxt/CmCQp5Yx.js create mode 100644 www/.output/public/_nuxt/Cmm7eHzH.js create mode 100644 www/.output/public/_nuxt/CnvKMtbv.js create mode 100644 www/.output/public/_nuxt/CoRGU80-.js create mode 100644 www/.output/public/_nuxt/CohzipZa.js create mode 100644 www/.output/public/_nuxt/ConPMQyx.js create mode 100644 www/.output/public/_nuxt/Cp5y-YJe.js create mode 100644 www/.output/public/_nuxt/Cs2F2srj.js create mode 100644 www/.output/public/_nuxt/Cs6JJXT5.js create mode 100644 www/.output/public/_nuxt/CsD5j6eV.js create mode 100644 www/.output/public/_nuxt/CsJ9-EYl.js create mode 100644 www/.output/public/_nuxt/CsvMBhTu.js create mode 100644 www/.output/public/_nuxt/CtfBBspg.js create mode 100644 www/.output/public/_nuxt/CtsyrtPq.js create mode 100644 www/.output/public/_nuxt/Cv5bFMCO.js create mode 100644 www/.output/public/_nuxt/CvHqhWa5.js create mode 100644 www/.output/public/_nuxt/CvII7bbI.js create mode 100644 www/.output/public/_nuxt/Cvrh5tZx.js create mode 100644 www/.output/public/_nuxt/CxM7S82f.js create mode 100644 www/.output/public/_nuxt/CxZEssPk.js create mode 100644 www/.output/public/_nuxt/CyEgAFGc.js create mode 100644 www/.output/public/_nuxt/CzszQKcx.js create mode 100644 www/.output/public/_nuxt/D-usSTwE.js create mode 100644 www/.output/public/_nuxt/D0apG41V.js create mode 100644 www/.output/public/_nuxt/D0iMoLMB.js create mode 100644 www/.output/public/_nuxt/D1A_Heim.js create mode 100644 www/.output/public/_nuxt/D2LTy7AW.js create mode 100644 www/.output/public/_nuxt/D4DZuGyf.js create mode 100644 www/.output/public/_nuxt/D7Lr4KcI.js create mode 100644 www/.output/public/_nuxt/D7qyCx1q.js create mode 100644 www/.output/public/_nuxt/D8IpX4py.js create mode 100644 www/.output/public/_nuxt/D8VeW0ES.js create mode 100644 www/.output/public/_nuxt/DANvH5hh.js create mode 100644 www/.output/public/_nuxt/DB4EqR-F.js create mode 100644 www/.output/public/_nuxt/DBj4K9d_.js create mode 100644 www/.output/public/_nuxt/DCQb3MpD.js create mode 100644 www/.output/public/_nuxt/DCvM94v7.js create mode 100644 www/.output/public/_nuxt/DDDFy-MD.js create mode 100644 www/.output/public/_nuxt/DDpmG2fV.js create mode 100644 www/.output/public/_nuxt/DDqZBno9.js create mode 100644 www/.output/public/_nuxt/DExj1W_8.js create mode 100644 www/.output/public/_nuxt/DGHpHOYJ.js create mode 100644 www/.output/public/_nuxt/DHYfO66s.js create mode 100644 www/.output/public/_nuxt/DJMQeKeT.js create mode 100644 www/.output/public/_nuxt/DK3Fl9T5.js create mode 100644 www/.output/public/_nuxt/DKDWkdEs.js create mode 100644 www/.output/public/_nuxt/DKpUyyne.js create mode 100644 www/.output/public/_nuxt/DKxQjsmF.js create mode 100644 www/.output/public/_nuxt/DLL8P-h_.js create mode 100644 www/.output/public/_nuxt/DMgNhnYS.js create mode 100644 www/.output/public/_nuxt/DMhq2aVH.js create mode 100644 www/.output/public/_nuxt/DMoTqEGO.js create mode 100644 www/.output/public/_nuxt/DNMTfnFr.js create mode 100644 www/.output/public/_nuxt/DO-qXg-I.js create mode 100644 www/.output/public/_nuxt/DOwzaHZ0.js create mode 100644 www/.output/public/_nuxt/DQCgrYNe.js create mode 100644 www/.output/public/_nuxt/DQZ5AkYe.js create mode 100644 www/.output/public/_nuxt/DQwYfKfQ.js create mode 100644 www/.output/public/_nuxt/DQxkIbk2.js create mode 100644 www/.output/public/_nuxt/DRFjx7u4.js create mode 100644 www/.output/public/_nuxt/DRpR5_BG.js create mode 100644 www/.output/public/_nuxt/DSNQnXHK.js create mode 100644 www/.output/public/_nuxt/DUlkwFs2.js create mode 100644 www/.output/public/_nuxt/DV4VLySd.js create mode 100644 www/.output/public/_nuxt/DVQuIRkW.js create mode 100644 www/.output/public/_nuxt/DVTAwKKz.js create mode 100644 www/.output/public/_nuxt/DW3nJb8Q.js create mode 100644 www/.output/public/_nuxt/DWted8aI.js create mode 100644 www/.output/public/_nuxt/DX1BQOs8.js create mode 100644 www/.output/public/_nuxt/DX3OCDL9.js create mode 100644 www/.output/public/_nuxt/DXG-b-1a.js create mode 100644 www/.output/public/_nuxt/DXrisJhu.js create mode 100644 www/.output/public/_nuxt/DXw9l8Rf.js create mode 100644 www/.output/public/_nuxt/DY-B0LvR.js create mode 100644 www/.output/public/_nuxt/DYvRD3hg.js create mode 100644 www/.output/public/_nuxt/DYxiniQT.js create mode 100644 www/.output/public/_nuxt/DZXEPr72.js create mode 100644 www/.output/public/_nuxt/D_oBsfn8.js create mode 100644 www/.output/public/_nuxt/Db8ZRI78.js create mode 100644 www/.output/public/_nuxt/DcIDlBhZ.js create mode 100644 www/.output/public/_nuxt/DcKNpsj9.js create mode 100644 www/.output/public/_nuxt/DdrHHSXu.js create mode 100644 www/.output/public/_nuxt/DdvCle-K.js create mode 100644 www/.output/public/_nuxt/De3T5VzI.js create mode 100644 www/.output/public/_nuxt/DeH7TEqX.js create mode 100644 www/.output/public/_nuxt/Df2xbC6M.js create mode 100644 www/.output/public/_nuxt/DfvsDSvi.js create mode 100644 www/.output/public/_nuxt/DgV8mo85.js create mode 100644 www/.output/public/_nuxt/Dgaz7aur.js create mode 100644 www/.output/public/_nuxt/DgjMoLWr.js create mode 100644 www/.output/public/_nuxt/Dh228itO.js create mode 100644 www/.output/public/_nuxt/Dh5ihWbf.js create mode 100644 www/.output/public/_nuxt/DhhofPvG.js create mode 100644 www/.output/public/_nuxt/DhmEMT88.js create mode 100644 www/.output/public/_nuxt/Dixweg8N.js create mode 100644 www/.output/public/_nuxt/DjWxqDcA.js create mode 100644 www/.output/public/_nuxt/DjuaAJKi.js create mode 100644 www/.output/public/_nuxt/Dlh5hvp9.js create mode 100644 www/.output/public/_nuxt/DluEY0Gj.js create mode 100644 www/.output/public/_nuxt/DmSAzd2n.js create mode 100644 www/.output/public/_nuxt/DnToyrRv.js create mode 100644 www/.output/public/_nuxt/DoanWoRz.js create mode 100644 www/.output/public/_nuxt/DojpP95n.js create mode 100644 www/.output/public/_nuxt/DqHOMS-s.js create mode 100644 www/.output/public/_nuxt/DqKBuwfJ.js create mode 100644 www/.output/public/_nuxt/DqYfTBBL.js create mode 100644 www/.output/public/_nuxt/Ds2j86fC.js create mode 100644 www/.output/public/_nuxt/DsAllRJ7.js create mode 100644 www/.output/public/_nuxt/DsUTQ-LC.js create mode 100644 www/.output/public/_nuxt/DswuEJGm.js create mode 100644 www/.output/public/_nuxt/DuBRPxYg.js create mode 100644 www/.output/public/_nuxt/DuGS1h6M.js create mode 100644 www/.output/public/_nuxt/DvXPmvsu.js create mode 100644 www/.output/public/_nuxt/Dx-8-gkx.js create mode 100644 www/.output/public/_nuxt/EUqPIrTm.js create mode 100644 www/.output/public/_nuxt/Eu7fqxDR.js create mode 100644 www/.output/public/_nuxt/Fd0NR9zb.js create mode 100644 www/.output/public/_nuxt/Fe1Jh2GI.js create mode 100644 www/.output/public/_nuxt/H0vgBklw.js create mode 100644 www/.output/public/_nuxt/HkrtbYu3.js create mode 100644 www/.output/public/_nuxt/ITNYJIBc.js create mode 100644 www/.output/public/_nuxt/IvuFDN5E.js create mode 100644 www/.output/public/_nuxt/IyjqRm3v.js create mode 100644 www/.output/public/_nuxt/JfUyCp_c.js create mode 100644 www/.output/public/_nuxt/KFGFyKwG.js create mode 100644 www/.output/public/_nuxt/KYRAD2b_.js create mode 100644 www/.output/public/_nuxt/LoGZLucS.js create mode 100644 www/.output/public/_nuxt/MqsMv5Is.js create mode 100644 www/.output/public/_nuxt/MrdJrrXF.js create mode 100644 www/.output/public/_nuxt/O90oeIOV.js create mode 100644 www/.output/public/_nuxt/Og0Hsp47.js create mode 100644 www/.output/public/_nuxt/Oin7G6kE.js create mode 100644 www/.output/public/_nuxt/PQzR-riV.js create mode 100644 www/.output/public/_nuxt/PYXmkWQR.js create mode 100644 www/.output/public/_nuxt/R4sQ-3Hc.js create mode 100644 www/.output/public/_nuxt/R8nAf1vR.js create mode 100644 www/.output/public/_nuxt/SCjQUq34.js create mode 100644 www/.output/public/_nuxt/T3cCP3-D.js create mode 100644 www/.output/public/_nuxt/TYx63Zh7.js create mode 100644 www/.output/public/_nuxt/U0d_L8uA.js create mode 100644 www/.output/public/_nuxt/UW2ZBlb9.js create mode 100644 www/.output/public/_nuxt/UdsmMDCL.js create mode 100644 www/.output/public/_nuxt/UpS_fPjk.js create mode 100644 www/.output/public/_nuxt/V2PzDzCX.js create mode 100644 www/.output/public/_nuxt/VE6WKepZ.js create mode 100644 www/.output/public/_nuxt/VUp2lXgN.js create mode 100644 www/.output/public/_nuxt/VbXTXTou.js create mode 100644 www/.output/public/_nuxt/Yf0g_uY-.js create mode 100644 www/.output/public/_nuxt/_5a1GRtc.js create mode 100644 www/.output/public/_nuxt/_6rzW9BS.js create mode 100644 www/.output/public/_nuxt/_X_XdTYD.js create mode 100644 www/.output/public/_nuxt/aMsaMD1D.js create mode 100644 www/.output/public/_nuxt/bTVj8UrX.js create mode 100644 www/.output/public/_nuxt/builds/latest.json create mode 100644 www/.output/public/_nuxt/builds/meta/6d7065f5-cf70-4bcb-929b-8527688103e6.json create mode 100644 www/.output/public/_nuxt/c_oH4hRZ.js create mode 100644 www/.output/public/_nuxt/eJ-hLW7d.js create mode 100644 www/.output/public/_nuxt/entry.CWY55tU6.css create mode 100644 www/.output/public/_nuxt/f061FGWn.js create mode 100644 www/.output/public/_nuxt/fCzbojIh.js create mode 100644 www/.output/public/_nuxt/fg40_ntQ.js create mode 100644 www/.output/public/_nuxt/fwtXNY1n.js create mode 100644 www/.output/public/_nuxt/gaAr2yJe.js create mode 100644 www/.output/public/_nuxt/gvVh-RSc.js create mode 100644 www/.output/public/_nuxt/gzcpVVnB.js create mode 100644 www/.output/public/_nuxt/iXnhIJG7.js create mode 100644 www/.output/public/_nuxt/iXq6mRRF.js create mode 100644 www/.output/public/_nuxt/ilITqXS6.js create mode 100644 www/.output/public/_nuxt/jWbiW1Ev.js create mode 100644 www/.output/public/_nuxt/kpZube0q.js create mode 100644 www/.output/public/_nuxt/nFMaYfgc.js create mode 100644 www/.output/public/_nuxt/oM2G3aXe.js create mode 100644 www/.output/public/_nuxt/oWP401Qp.js create mode 100644 www/.output/public/_nuxt/oeQT6MSM.js create mode 100644 www/.output/public/_nuxt/oqKa8noW.js create mode 100644 www/.output/public/_nuxt/ot-7Btpt.js create mode 100644 www/.output/public/_nuxt/q7bdLbId.js create mode 100644 www/.output/public/_nuxt/qD-0Kul2.js create mode 100644 www/.output/public/_nuxt/qdxAdBWQ.js create mode 100644 www/.output/public/_nuxt/rLFTqkRN.js create mode 100644 www/.output/public/_nuxt/sB-x3p7T.js create mode 100644 www/.output/public/_nuxt/sltzmVWM.js create mode 100644 www/.output/public/_nuxt/sqlite3-opfs-async-proxy.D_xnb1D8.js create mode 100644 www/.output/public/_nuxt/sqlite3-worker1-Dla_zcLf.js create mode 100644 www/.output/public/_nuxt/sqlite3.BVKGSWc-.wasm create mode 100644 www/.output/public/_nuxt/uhdI0v04.js create mode 100644 www/.output/public/_nuxt/uy4dubMv.js create mode 100644 www/.output/public/_nuxt/vGVdxbeo.js create mode 100644 www/.output/public/_nuxt/woXpYk--.js create mode 100644 www/.output/public/_nuxt/x1QpYndt.js create mode 100644 www/.output/public/_nuxt/x7Oz0ub3.js create mode 100644 www/.output/public/_nuxt/yck5y8x3.js create mode 100644 www/.output/public/_nuxt/zf12oZj6.js create mode 100644 www/.output/server/chunks/_/error-500.mjs create mode 100644 www/.output/server/chunks/_/error-500.mjs.map create mode 100644 www/.output/server/chunks/_/executor.mjs create mode 100644 www/.output/server/chunks/_/executor.mjs.map create mode 100644 www/.output/server/chunks/_/icons.mjs create mode 100644 www/.output/server/chunks/_/icons.mjs.map create mode 100644 www/.output/server/chunks/_/icons2.mjs create mode 100644 www/.output/server/chunks/_/icons2.mjs.map create mode 100644 www/.output/server/chunks/_/icons3.mjs create mode 100644 www/.output/server/chunks/_/icons3.mjs.map create mode 100644 www/.output/server/chunks/_/icons4.mjs create mode 100644 www/.output/server/chunks/_/icons4.mjs.map create mode 100644 www/.output/server/chunks/_/index.mjs create mode 100644 www/.output/server/chunks/_/index.mjs.map create mode 100644 www/.output/server/chunks/build/Callout-DaQKbOat.mjs create mode 100644 www/.output/server/chunks/build/Callout-DaQKbOat.mjs.map create mode 100644 www/.output/server/chunks/build/FileTree-BfyS3aPv.mjs create mode 100644 www/.output/server/chunks/build/FileTree-BfyS3aPv.mjs.map create mode 100644 www/.output/server/chunks/build/PackageManagers-K25fRqGP.mjs create mode 100644 www/.output/server/chunks/build/PackageManagers-K25fRqGP.mjs.map create mode 100644 www/.output/server/chunks/build/PageCards-CPtKV75N.mjs create mode 100644 www/.output/server/chunks/build/PageCards-CPtKV75N.mjs.map create mode 100644 www/.output/server/chunks/build/ProseA-CDrZuaP_.mjs create mode 100644 www/.output/server/chunks/build/ProseA-CDrZuaP_.mjs.map create mode 100644 www/.output/server/chunks/build/ProseBlockquote-B-7L4Ess.mjs create mode 100644 www/.output/server/chunks/build/ProseBlockquote-B-7L4Ess.mjs.map create mode 100644 www/.output/server/chunks/build/ProseCode-BTRLYwXb.mjs create mode 100644 www/.output/server/chunks/build/ProseCode-BTRLYwXb.mjs.map create mode 100644 www/.output/server/chunks/build/ProseEm-C7TjpwSP.mjs create mode 100644 www/.output/server/chunks/build/ProseEm-C7TjpwSP.mjs.map create mode 100644 www/.output/server/chunks/build/ProseH1-CVLZuK_r.mjs create mode 100644 www/.output/server/chunks/build/ProseH1-CVLZuK_r.mjs.map create mode 100644 www/.output/server/chunks/build/ProseH2-BS4Lvt2Y.mjs create mode 100644 www/.output/server/chunks/build/ProseH2-BS4Lvt2Y.mjs.map create mode 100644 www/.output/server/chunks/build/ProseH3-BRrAJQy3.mjs create mode 100644 www/.output/server/chunks/build/ProseH3-BRrAJQy3.mjs.map create mode 100644 www/.output/server/chunks/build/ProseH5-Grhy0Qj6.mjs create mode 100644 www/.output/server/chunks/build/ProseH5-Grhy0Qj6.mjs.map create mode 100644 www/.output/server/chunks/build/ProseH6-BvRgN4A7.mjs create mode 100644 www/.output/server/chunks/build/ProseH6-BvRgN4A7.mjs.map create mode 100644 www/.output/server/chunks/build/ProseHr-BXAb-vAJ.mjs create mode 100644 www/.output/server/chunks/build/ProseHr-BXAb-vAJ.mjs.map create mode 100644 www/.output/server/chunks/build/ProseImg-7BALMu6t.mjs create mode 100644 www/.output/server/chunks/build/ProseImg-7BALMu6t.mjs.map create mode 100644 www/.output/server/chunks/build/ProseLi-DimT09Rm.mjs create mode 100644 www/.output/server/chunks/build/ProseLi-DimT09Rm.mjs.map create mode 100644 www/.output/server/chunks/build/ProseOl-nfwRkhQK.mjs create mode 100644 www/.output/server/chunks/build/ProseOl-nfwRkhQK.mjs.map create mode 100644 www/.output/server/chunks/build/ProseP-DFaeiiyW.mjs create mode 100644 www/.output/server/chunks/build/ProseP-DFaeiiyW.mjs.map create mode 100644 www/.output/server/chunks/build/ProsePre-C--MREVp.mjs create mode 100644 www/.output/server/chunks/build/ProsePre-C--MREVp.mjs.map create mode 100644 www/.output/server/chunks/build/ProseScript-c2hEipYr.mjs create mode 100644 www/.output/server/chunks/build/ProseScript-c2hEipYr.mjs.map create mode 100644 www/.output/server/chunks/build/ProseStrong-BoLnSLEw.mjs create mode 100644 www/.output/server/chunks/build/ProseStrong-BoLnSLEw.mjs.map create mode 100644 www/.output/server/chunks/build/ProseTable-BUJ138ee.mjs create mode 100644 www/.output/server/chunks/build/ProseTable-BUJ138ee.mjs.map create mode 100644 www/.output/server/chunks/build/ProseTbody-CWGDEMFi.mjs create mode 100644 www/.output/server/chunks/build/ProseTbody-CWGDEMFi.mjs.map create mode 100644 www/.output/server/chunks/build/ProseTd-B1e-PaZe.mjs create mode 100644 www/.output/server/chunks/build/ProseTd-B1e-PaZe.mjs.map create mode 100644 www/.output/server/chunks/build/ProseTh-BFER_0iV.mjs create mode 100644 www/.output/server/chunks/build/ProseTh-BFER_0iV.mjs.map create mode 100644 www/.output/server/chunks/build/ProseThead-Cpj4kqru.mjs create mode 100644 www/.output/server/chunks/build/ProseThead-Cpj4kqru.mjs.map create mode 100644 www/.output/server/chunks/build/ProseTr-DY8SujtK.mjs create mode 100644 www/.output/server/chunks/build/ProseTr-DY8SujtK.mjs.map create mode 100644 www/.output/server/chunks/build/ProseUl-BzTb4Y43.mjs create mode 100644 www/.output/server/chunks/build/ProseUl-BzTb4Y43.mjs.map create mode 100644 www/.output/server/chunks/build/RovingFocusGroup-9mfIdZPl.mjs create mode 100644 www/.output/server/chunks/build/RovingFocusGroup-9mfIdZPl.mjs.map create mode 100644 www/.output/server/chunks/build/Steps-BB0bEySs.mjs create mode 100644 www/.output/server/chunks/build/Steps-BB0bEySs.mjs.map create mode 100644 www/.output/server/chunks/build/_...slug_-DwEYBVFG.mjs create mode 100644 www/.output/server/chunks/build/_...slug_-DwEYBVFG.mjs.map create mode 100644 www/.output/server/chunks/build/_plugin-vue_export-helper-BOaGB7Aw.mjs create mode 100644 www/.output/server/chunks/build/_plugin-vue_export-helper-BOaGB7Aw.mjs.map create mode 100644 www/.output/server/chunks/build/badge-8_fEuCAp.mjs create mode 100644 www/.output/server/chunks/build/badge-8_fEuCAp.mjs.map create mode 100644 www/.output/server/chunks/build/card-CLGKLW0U.mjs create mode 100644 www/.output/server/chunks/build/card-CLGKLW0U.mjs.map create mode 100644 www/.output/server/chunks/build/database.client-Dp6oEOCa.mjs create mode 100644 www/.output/server/chunks/build/database.client-Dp6oEOCa.mjs.map create mode 100644 www/.output/server/chunks/build/database.compressed.mjs create mode 100644 www/.output/server/chunks/build/database.compressed.mjs.map create mode 100644 www/.output/server/chunks/build/default-DqcdqpPK.mjs create mode 100644 www/.output/server/chunks/build/default-DqcdqpPK.mjs.map create mode 100644 www/.output/server/chunks/build/docs-8hRY4ISO.mjs create mode 100644 www/.output/server/chunks/build/docs-8hRY4ISO.mjs.map create mode 100644 www/.output/server/chunks/build/file-icons-Cw1-FMWv.mjs create mode 100644 www/.output/server/chunks/build/file-icons-Cw1-FMWv.mjs.map create mode 100644 www/.output/server/chunks/build/i18n.config-BZiWaRAp.mjs create mode 100644 www/.output/server/chunks/build/i18n.config-BZiWaRAp.mjs.map create mode 100644 www/.output/server/chunks/build/lib-Dnm-N0w-.mjs create mode 100644 www/.output/server/chunks/build/lib-Dnm-N0w-.mjs.map create mode 100644 www/.output/server/chunks/build/node-C4VTx5qK.mjs create mode 100644 www/.output/server/chunks/build/node-C4VTx5qK.mjs.map create mode 100644 www/.output/server/chunks/build/pages-qMPUVsYh.mjs create mode 100644 www/.output/server/chunks/build/pages-qMPUVsYh.mjs.map create mode 100644 www/.output/server/chunks/build/sonner-duN5B4PW.mjs create mode 100644 www/.output/server/chunks/build/sonner-duN5B4PW.mjs.map create mode 100644 www/.output/server/chunks/build/useDuxtConfig-Cy2__zQL.mjs create mode 100644 www/.output/server/chunks/build/useDuxtConfig-Cy2__zQL.mjs.map create mode 100644 www/.output/server/chunks/build/useDuxtSection-DeDrPvwO.mjs create mode 100644 www/.output/server/chunks/build/useDuxtSection-DeDrPvwO.mjs.map create mode 100644 www/.output/server/chunks/build/useDuxtToast-CcCLDiC4.mjs create mode 100644 www/.output/server/chunks/build/useDuxtToast-CcCLDiC4.mjs.map create mode 100644 www/.output/server/chunks/nitro/nitro.mjs create mode 100644 www/.output/server/chunks/nitro/nitro.mjs.map create mode 100644 www/.output/server/chunks/raw/04367822.mjs create mode 100644 www/.output/server/chunks/raw/04367822.mjs.map create mode 100644 www/.output/server/chunks/raw/0b32e43e.mjs create mode 100644 www/.output/server/chunks/raw/0b32e43e.mjs.map create mode 100644 www/.output/server/chunks/raw/0b4a9867.mjs create mode 100644 www/.output/server/chunks/raw/0b4a9867.mjs.map create mode 100644 www/.output/server/chunks/raw/1bf88aba.mjs create mode 100644 www/.output/server/chunks/raw/1bf88aba.mjs.map create mode 100644 www/.output/server/chunks/raw/1cc9c2ef.mjs create mode 100644 www/.output/server/chunks/raw/1cc9c2ef.mjs.map create mode 100644 www/.output/server/chunks/raw/27c16556.mjs create mode 100644 www/.output/server/chunks/raw/27c16556.mjs.map create mode 100644 www/.output/server/chunks/raw/341972ef.mjs create mode 100644 www/.output/server/chunks/raw/341972ef.mjs.map create mode 100644 www/.output/server/chunks/raw/3490030b.mjs create mode 100644 www/.output/server/chunks/raw/3490030b.mjs.map create mode 100644 www/.output/server/chunks/raw/3c19bf57.mjs create mode 100644 www/.output/server/chunks/raw/3c19bf57.mjs.map create mode 100644 www/.output/server/chunks/raw/3f4a84e8.mjs create mode 100644 www/.output/server/chunks/raw/3f4a84e8.mjs.map create mode 100644 www/.output/server/chunks/raw/41b41db8.mjs create mode 100644 www/.output/server/chunks/raw/41b41db8.mjs.map create mode 100644 www/.output/server/chunks/raw/4e063045.mjs create mode 100644 www/.output/server/chunks/raw/4e063045.mjs.map create mode 100644 www/.output/server/chunks/raw/538d5ecc.mjs create mode 100644 www/.output/server/chunks/raw/538d5ecc.mjs.map create mode 100644 www/.output/server/chunks/raw/543a10e2.mjs create mode 100644 www/.output/server/chunks/raw/543a10e2.mjs.map create mode 100644 www/.output/server/chunks/raw/55212f98.mjs create mode 100644 www/.output/server/chunks/raw/55212f98.mjs.map create mode 100644 www/.output/server/chunks/raw/557a3b8a.mjs create mode 100644 www/.output/server/chunks/raw/557a3b8a.mjs.map create mode 100644 www/.output/server/chunks/raw/5e7c2339.mjs create mode 100644 www/.output/server/chunks/raw/5e7c2339.mjs.map create mode 100644 www/.output/server/chunks/raw/66d884d3.mjs create mode 100644 www/.output/server/chunks/raw/66d884d3.mjs.map create mode 100644 www/.output/server/chunks/raw/71354937.mjs create mode 100644 www/.output/server/chunks/raw/71354937.mjs.map create mode 100644 www/.output/server/chunks/raw/784641fe.mjs create mode 100644 www/.output/server/chunks/raw/784641fe.mjs.map create mode 100644 www/.output/server/chunks/raw/84c1d671.mjs create mode 100644 www/.output/server/chunks/raw/84c1d671.mjs.map create mode 100644 www/.output/server/chunks/raw/8604f29b.mjs create mode 100644 www/.output/server/chunks/raw/8604f29b.mjs.map create mode 100644 www/.output/server/chunks/raw/8776d6f2.mjs create mode 100644 www/.output/server/chunks/raw/8776d6f2.mjs.map create mode 100644 www/.output/server/chunks/raw/88845ae4.mjs create mode 100644 www/.output/server/chunks/raw/88845ae4.mjs.map create mode 100644 www/.output/server/chunks/raw/9b7cf1af.mjs create mode 100644 www/.output/server/chunks/raw/9b7cf1af.mjs.map create mode 100644 www/.output/server/chunks/raw/a1f3dd56.mjs create mode 100644 www/.output/server/chunks/raw/a1f3dd56.mjs.map create mode 100644 www/.output/server/chunks/raw/a89a20d9.mjs create mode 100644 www/.output/server/chunks/raw/a89a20d9.mjs.map create mode 100644 www/.output/server/chunks/raw/aa47aaec.mjs create mode 100644 www/.output/server/chunks/raw/aa47aaec.mjs.map create mode 100644 www/.output/server/chunks/raw/b6dd698b.mjs create mode 100644 www/.output/server/chunks/raw/b6dd698b.mjs.map create mode 100644 www/.output/server/chunks/raw/becdb054.mjs create mode 100644 www/.output/server/chunks/raw/becdb054.mjs.map create mode 100644 www/.output/server/chunks/raw/c665ac72.mjs create mode 100644 www/.output/server/chunks/raw/c665ac72.mjs.map create mode 100644 www/.output/server/chunks/raw/c8a19e3d.mjs create mode 100644 www/.output/server/chunks/raw/c8a19e3d.mjs.map create mode 100644 www/.output/server/chunks/raw/c988819d.mjs create mode 100644 www/.output/server/chunks/raw/c988819d.mjs.map create mode 100644 www/.output/server/chunks/raw/d0981e13.mjs create mode 100644 www/.output/server/chunks/raw/d0981e13.mjs.map create mode 100644 www/.output/server/chunks/raw/df933674.mjs create mode 100644 www/.output/server/chunks/raw/df933674.mjs.map create mode 100644 www/.output/server/chunks/raw/e42a6267.mjs create mode 100644 www/.output/server/chunks/raw/e42a6267.mjs.map create mode 100644 www/.output/server/chunks/raw/e4e22c19.mjs create mode 100644 www/.output/server/chunks/raw/e4e22c19.mjs.map create mode 100644 www/.output/server/chunks/raw/e6b409a0.mjs create mode 100644 www/.output/server/chunks/raw/e6b409a0.mjs.map create mode 100644 www/.output/server/chunks/raw/f1343414.mjs create mode 100644 www/.output/server/chunks/raw/f1343414.mjs.map create mode 100644 www/.output/server/chunks/raw/f5068ad8.mjs create mode 100644 www/.output/server/chunks/raw/f5068ad8.mjs.map create mode 100644 www/.output/server/chunks/raw/f589c5a6.mjs create mode 100644 www/.output/server/chunks/raw/f589c5a6.mjs.map create mode 100644 www/.output/server/chunks/raw/f60e371f.mjs create mode 100644 www/.output/server/chunks/raw/f60e371f.mjs.map create mode 100644 www/.output/server/chunks/raw/f8bdfe7a.mjs create mode 100644 www/.output/server/chunks/raw/f8bdfe7a.mjs.map create mode 100644 www/.output/server/chunks/raw/fce8bca2.mjs create mode 100644 www/.output/server/chunks/raw/fce8bca2.mjs.map create mode 100644 www/.output/server/chunks/routes/renderer.mjs create mode 100644 www/.output/server/chunks/routes/renderer.mjs.map create mode 100644 www/.output/server/chunks/virtual/_virtual_spa-template.mjs create mode 100644 www/.output/server/chunks/virtual/_virtual_spa-template.mjs.map create mode 100644 www/.output/server/chunks/virtual/entry.mjs create mode 100644 www/.output/server/chunks/virtual/entry.mjs.map create mode 100644 www/.output/server/chunks/virtual/precomputed.mjs create mode 100644 www/.output/server/chunks/virtual/precomputed.mjs.map create mode 100644 www/.output/server/chunks/virtual/styles.mjs create mode 100644 www/.output/server/chunks/virtual/styles.mjs.map create mode 100644 www/.output/server/index.mjs create mode 100644 www/.output/server/index.mjs.map create mode 100644 www/.output/server/package.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4a7450b5..2d619ed7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,4 +23,4 @@ permissions: jobs: check: name: CI - uses: kirchDev/workflows/.github/workflows/_ci-check.yml@7fd4eaf529500fcd07c527ae70c839ab9ac7d76f # v0.7.0 + uses: kirchDev/workflows/.github/workflows/_ci-check.yml@94cbcbd676b989ac6c6327055a240132f5cd76a5 # v0.8.0 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 9d363d7b..6022683f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -28,4 +28,4 @@ jobs: packages: read actions: read contents: read - uses: kirchDev/workflows/.github/workflows/_codeql.yml@7fd4eaf529500fcd07c527ae70c839ab9ac7d76f # v0.7.0 + uses: kirchDev/workflows/.github/workflows/_codeql.yml@94cbcbd676b989ac6c6327055a240132f5cd76a5 # v0.8.0 diff --git a/.github/workflows/fast-forward-queue.yml b/.github/workflows/fast-forward-queue.yml index c84db007..8467a90a 100644 --- a/.github/workflows/fast-forward-queue.yml +++ b/.github/workflows/fast-forward-queue.yml @@ -34,7 +34,7 @@ jobs: pull-requests: read checks: read statuses: read - uses: kirchDev/workflows/.github/workflows/_fast-forward-queue.yml@7fd4eaf529500fcd07c527ae70c839ab9ac7d76f # v0.7.0 + uses: kirchDev/workflows/.github/workflows/_fast-forward-queue.yml@94cbcbd676b989ac6c6327055a240132f5cd76a5 # v0.8.0 with: pr: ${{ inputs.pr }} secrets: diff --git a/.github/workflows/promotion-pr.yml b/.github/workflows/promotion-pr.yml index a7bc9f7c..ee23edba 100644 --- a/.github/workflows/promotion-pr.yml +++ b/.github/workflows/promotion-pr.yml @@ -18,4 +18,4 @@ permissions: jobs: promotion-pr: name: Promotion PR - uses: kirchDev/workflows/.github/workflows/_promotion-pr.yml@7fd4eaf529500fcd07c527ae70c839ab9ac7d76f # v0.7.0 + uses: kirchDev/workflows/.github/workflows/_promotion-pr.yml@94cbcbd676b989ac6c6327055a240132f5cd76a5 # v0.8.0 diff --git a/.github/workflows/queue-branch.yml b/.github/workflows/queue-branch.yml index aedbf6a2..17a67919 100644 --- a/.github/workflows/queue-branch.yml +++ b/.github/workflows/queue-branch.yml @@ -20,6 +20,6 @@ jobs: permissions: contents: read pull-requests: write - uses: kirchDev/workflows/.github/workflows/_queue-branch.yml@7fd4eaf529500fcd07c527ae70c839ab9ac7d76f # v0.7.0 + uses: kirchDev/workflows/.github/workflows/_queue-branch.yml@94cbcbd676b989ac6c6327055a240132f5cd76a5 # v0.8.0 secrets: BWS_ACCESS_TOKEN: ${{ secrets.BWS_ACCESS_TOKEN }} diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 5fb6dae4..0ba2f4b7 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -15,6 +15,6 @@ jobs: permissions: contents: write pull-requests: write - uses: kirchDev/workflows/.github/workflows/_release-please.yml@7fd4eaf529500fcd07c527ae70c839ab9ac7d76f # v0.7.0 + uses: kirchDev/workflows/.github/workflows/_release-please.yml@94cbcbd676b989ac6c6327055a240132f5cd76a5 # v0.8.0 secrets: BWS_ACCESS_TOKEN: ${{ secrets.BWS_ACCESS_TOKEN }} diff --git a/package.json b/package.json index 18a81450..479237ab 100644 --- a/package.json +++ b/package.json @@ -58,5 +58,5 @@ "engines": { "node": ">=24" }, - "packageManager": "pnpm@12.2.1" + "packageManager": "pnpm@12.3.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4ff01dff..4b479c1c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,96 +7,96 @@ importers: configDependencies: {} packageManagerDependencies: pnpm: - specifier: 12.2.1 - version: 12.2.1 + specifier: 12.3.4 + version: 12.3.4 packages: - '@pnpm/exe.darwin-arm64@12.2.1': - resolution: {integrity: sha512-efC1yfz2xbyHiMLrQAYtnoo5XP20LeAiYYcyL1962qQagZrMXIB0BoQYeZoPTLggLh0Q4MD7jpZUInU5fWxCgQ==} + '@pnpm/exe.darwin-arm64@12.3.4': + resolution: {integrity: sha512-PAyUol8T1+/+ViOiXAt51ECA+QnfXCqz6foL4bW+LsoX0NcVd5XVEM2mRQu+LV4oc7uRz9zf9U0P+XFfuQeDAw==} cpu: [arm64] os: [darwin] - '@pnpm/exe.darwin-x64@12.2.1': - resolution: {integrity: sha512-0bloFmxrvYY5LYex5V6SZySwg+egBk0pOW+YUeOm9fiG2U1wv+qRVLBOUvIzLAeJE7vBlAzxUwXkQAYtr12n+Q==} + '@pnpm/exe.darwin-x64@12.3.4': + resolution: {integrity: sha512-fxP9JCk0Cdye+ePuj+GJJLMUMTqHGWRdb1dtv4How876uQ2ehxvenpgiYAir/ceO9PsYUZkFTtyZdx+rRu5QOA==} cpu: [x64] os: [darwin] - '@pnpm/exe.linux-arm64-musl@12.2.1': - resolution: {integrity: sha512-AZl7apVZC4TV1/vTp/bS16XUsHeqx9AHsU4V55joiGR+iR6vl+WF0WlGvGCTjqjICS4q/kThpgNrtG8aqQ9seQ==} + '@pnpm/exe.linux-arm64-musl@12.3.4': + resolution: {integrity: sha512-FBOt0/7ye6O6q4AllVV5QMviB6qE6fqkeczV/+MDWQsmo+QJrlfsh6X7CpH/tClVpBZEyIbjpUoT8bNhCYBxEg==} cpu: [arm64] os: [linux] libc: [musl] - '@pnpm/exe.linux-arm64@12.2.1': - resolution: {integrity: sha512-S36+tMEGrPz3nwtfFU9kYxbHoi8sV7WJfMO9njEL4jRaShTNaLRERMAqyI2DUCiA5QCr6/a50lt4+pKCV2mCvw==} + '@pnpm/exe.linux-arm64@12.3.4': + resolution: {integrity: sha512-t71AVA7LRqiKTyZ5xMYaZc2n5DfdpMbfokZuiIOXHBOM03ECnF0t4iYwaBDqJgVjlKYUOwaF/bRQajGNA4cJ4w==} cpu: [arm64] os: [linux] libc: [glibc] - '@pnpm/exe.linux-x64-musl@12.2.1': - resolution: {integrity: sha512-4MQClkAk1em55LFZJpeIqb7j+gEqCgX8yC42j9DFWL42q1uMX1e1tvTy2Dtd4NoWQqgdkLxOStZ+D9CYC+28ow==} + '@pnpm/exe.linux-x64-musl@12.3.4': + resolution: {integrity: sha512-RPmk7Jb/aYaFvL2iyDN/AtMY+hUEsue732WmXpcuQ9tBpMnGyA5py7Z3+e+qmQaJ0zY/4ni9jJiyPBQHujmv6w==} cpu: [x64] os: [linux] libc: [musl] - '@pnpm/exe.linux-x64@12.2.1': - resolution: {integrity: sha512-A/AlR71Leph7qgB3ThSU9yU/vLfre4HmP6nbt3/qt51fzAjQ0xuq7j+cw0f1yDskzOsGzmo5uD6ruefCwLK5uQ==} + '@pnpm/exe.linux-x64@12.3.4': + resolution: {integrity: sha512-2ZqOlSPkfwX1h5cR+FPiWf8+F+2hZT/3TvhUK5sigHqwaQCIiq8R7CGxhndKs63JtcLi2a1Qpo+wX/EoyfjyJQ==} cpu: [x64] os: [linux] libc: [glibc] - '@pnpm/exe.win32-arm64@12.2.1': - resolution: {integrity: sha512-TEGUmroT6NGfo2O2+tHK9Zr1lhP1zLzpwx+QAQV19l8V4ljUoMfz8Os5V9zzNCtIpzyKcK7SuG7fkVbxFgRMzg==} + '@pnpm/exe.win32-arm64@12.3.4': + resolution: {integrity: sha512-ANyrHqyqco6SXBysUTRF74itDyyraea7IbFsKFdNXTjcFnfycTDx37EwuhdpPYFNSIh2JhUG4fByclsRfiHX7w==} cpu: [arm64] os: [win32] - '@pnpm/exe.win32-x64@12.2.1': - resolution: {integrity: sha512-V2Q+AF8fCsw8/CC3bWF8kopOmH0aAjgk9m7H7uAQNulOYIJs9YJBiAlgByswmt+igV9axc4dBI//ZlK2NKpDcw==} + '@pnpm/exe.win32-x64@12.3.4': + resolution: {integrity: sha512-WH/KqBPY/hq2Tb7SgQltEZytimcjgKRaCRL/aM9CI0c67iKc5TVmHUhIiL3Ux9FB4bWn36i6XewUcScQI+zG8w==} cpu: [x64] os: [win32] - pnpm@12.2.1: - resolution: {integrity: sha512-9Vymiqy561q2nGb4KKmK+JoyKGcDrvH42hMcp+q01nfzS/qF4YZGepGcB5nfi29KokD33CkZszsycxkBBBYmFg==} + pnpm@12.3.4: + resolution: {integrity: sha512-lhqkH7B32joEpEHZ+OFevAyW2o73ELLrZ7+e58sGEOq9SPH9hfUc/+c4RnhfoPh8VqOocqHYk/hEZ0G1zORUVw==} engines: {node: '>=18.*'} hasBin: true snapshots: - '@pnpm/exe.darwin-arm64@12.2.1': + '@pnpm/exe.darwin-arm64@12.3.4': optional: true - '@pnpm/exe.darwin-x64@12.2.1': + '@pnpm/exe.darwin-x64@12.3.4': optional: true - '@pnpm/exe.linux-arm64-musl@12.2.1': + '@pnpm/exe.linux-arm64-musl@12.3.4': optional: true - '@pnpm/exe.linux-arm64@12.2.1': + '@pnpm/exe.linux-arm64@12.3.4': optional: true - '@pnpm/exe.linux-x64-musl@12.2.1': + '@pnpm/exe.linux-x64-musl@12.3.4': optional: true - '@pnpm/exe.linux-x64@12.2.1': + '@pnpm/exe.linux-x64@12.3.4': optional: true - '@pnpm/exe.win32-arm64@12.2.1': + '@pnpm/exe.win32-arm64@12.3.4': optional: true - '@pnpm/exe.win32-x64@12.2.1': + '@pnpm/exe.win32-x64@12.3.4': optional: true - pnpm@12.2.1: + pnpm@12.3.4: optionalDependencies: - '@pnpm/exe.darwin-arm64': 12.2.1 - '@pnpm/exe.darwin-x64': 12.2.1 - '@pnpm/exe.linux-arm64': 12.2.1 - '@pnpm/exe.linux-arm64-musl': 12.2.1 - '@pnpm/exe.linux-x64': 12.2.1 - '@pnpm/exe.linux-x64-musl': 12.2.1 - '@pnpm/exe.win32-arm64': 12.2.1 - '@pnpm/exe.win32-x64': 12.2.1 + '@pnpm/exe.darwin-arm64': 12.3.4 + '@pnpm/exe.darwin-x64': 12.3.4 + '@pnpm/exe.linux-arm64': 12.3.4 + '@pnpm/exe.linux-arm64-musl': 12.3.4 + '@pnpm/exe.linux-x64': 12.3.4 + '@pnpm/exe.linux-x64-musl': 12.3.4 + '@pnpm/exe.win32-arm64': 12.3.4 + '@pnpm/exe.win32-x64': 12.3.4 --- lockfileVersion: '9.0' diff --git a/www/.data/content/contents.sqlite b/www/.data/content/contents.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..48981fb93e3082ab7cb582ff20f5e360e9f46979 GIT binary patch literal 688128 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 z≪6O8|^#V{OZ?xwX5dgONbLK)!fRn>%3n2Ca|n2 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 >5`amzRnBqMWD8dhs& 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 ed@v!IN3LhN$-_ { + _replaceAppConfig(newModule.default) + }) +} +/** client-end **/ + + + +export default /*@__PURE__*/ defuFn(inlineConfig) diff --git a/www/.nuxt/cache/nuxt/icon/lucide_bot_5_gA74R7dhvv2zR_CefjvFBqmJmVETaodqkqNEg2wms_M.json b/www/.nuxt/cache/nuxt/icon/lucide_bot_5_gA74R7dhvv2zR_CefjvFBqmJmVETaodqkqNEg2wms_M.json new file mode 100644 index 00000000..165411ff --- /dev/null +++ b/www/.nuxt/cache/nuxt/icon/lucide_bot_5_gA74R7dhvv2zR_CefjvFBqmJmVETaodqkqNEg2wms_M.json @@ -0,0 +1 @@ +{"expires":1789149585134,"value":{"code":200,"headers":{"etag":"W/\"xXXQ7Xpigm\"","last-modified":"Fri, 04 Sep 2026 17:59:45 GMT","cache-control":"s-maxage=604800, stale-while-revalidate"},"body":{"prefix":"lucide","icons":{"bot":{"body":""},"code":{"body":""},"git-merge":{"body":""},"package":{"body":""},"palette":{"body":""}},"lastModified":1787982846,"width":24,"height":24}},"mtime":1788544785140,"integrity":"EhcnHHMtfv"} \ No newline at end of file diff --git a/www/.nuxt/cache/nuxt/icon/lucide_bot_6_uiybHHAmFQcgSVvHl0QymhHErHErbeZbuQYUrxSk7I.json b/www/.nuxt/cache/nuxt/icon/lucide_bot_6_uiybHHAmFQcgSVvHl0QymhHErHErbeZbuQYUrxSk7I.json new file mode 100644 index 00000000..d7346dff --- /dev/null +++ b/www/.nuxt/cache/nuxt/icon/lucide_bot_6_uiybHHAmFQcgSVvHl0QymhHErHErbeZbuQYUrxSk7I.json @@ -0,0 +1 @@ +{"expires":1789224632040,"value":{"code":200,"headers":{"etag":"W/\"xeq0ixRQpS\"","last-modified":"Sat, 05 Sep 2026 14:50:32 GMT","cache-control":"s-maxage=604800, stale-while-revalidate"},"body":{"prefix":"lucide","icons":{"bot":{"body":""},"code":{"body":""},"git-merge":{"body":""},"github":{"body":"","hidden":true},"package":{"body":""},"palette":{"body":""}},"lastModified":1787982846,"width":24,"height":24}},"mtime":1788619832045,"integrity":"EhcnHHMtfv"} \ No newline at end of file diff --git a/www/.nuxt/cache/nuxt/icon/lucide_box_4_X0LKERbmQxXNhkRKcEcE9TWTL07PjMVSqlT0wRt1M0E.json b/www/.nuxt/cache/nuxt/icon/lucide_box_4_X0LKERbmQxXNhkRKcEcE9TWTL07PjMVSqlT0wRt1M0E.json new file mode 100644 index 00000000..f07633ec --- /dev/null +++ b/www/.nuxt/cache/nuxt/icon/lucide_box_4_X0LKERbmQxXNhkRKcEcE9TWTL07PjMVSqlT0wRt1M0E.json @@ -0,0 +1 @@ +{"expires":1789146173613,"value":{"code":200,"headers":{"etag":"W/\"YOTUnQbP8d\"","last-modified":"Fri, 04 Sep 2026 17:02:53 GMT","cache-control":"s-maxage=604800, stale-while-revalidate"},"body":{"prefix":"lucide","icons":{"box":{"body":""},"code":{"body":""},"paintbrush":{"body":""},"palette":{"body":""}},"lastModified":1787982846,"width":24,"height":24}},"mtime":1788541373614,"integrity":"EhcnHHMtfv"} \ No newline at end of file diff --git a/www/.nuxt/cache/nuxt/icon/lucide_circlealert_3_klaqnu5JSkG1HW0hbeketi1pRJnwkyf0U7nFwEqHU8.json b/www/.nuxt/cache/nuxt/icon/lucide_circlealert_3_klaqnu5JSkG1HW0hbeketi1pRJnwkyf0U7nFwEqHU8.json new file mode 100644 index 00000000..fb679b83 --- /dev/null +++ b/www/.nuxt/cache/nuxt/icon/lucide_circlealert_3_klaqnu5JSkG1HW0hbeketi1pRJnwkyf0U7nFwEqHU8.json @@ -0,0 +1 @@ +{"expires":1789146149854,"value":{"code":200,"headers":{"etag":"W/\"pftWn0HJFg\"","last-modified":"Fri, 04 Sep 2026 17:02:29 GMT","cache-control":"s-maxage=604800, stale-while-revalidate"},"body":{"prefix":"lucide","icons":{"circle-alert":{"body":""},"message-circle":{"body":""},"star":{"body":""}},"lastModified":1787982846,"width":24,"height":24}},"mtime":1788541349854,"integrity":"EhcnHHMtfv"} \ No newline at end of file diff --git a/www/.nuxt/cache/nuxt/icon/lucide_github_2_zxJW8meyYMFUjoQZJE6P3yawFXG_HN7SH3KwyQv6Fz8.json b/www/.nuxt/cache/nuxt/icon/lucide_github_2_zxJW8meyYMFUjoQZJE6P3yawFXG_HN7SH3KwyQv6Fz8.json new file mode 100644 index 00000000..f54b4ee1 --- /dev/null +++ b/www/.nuxt/cache/nuxt/icon/lucide_github_2_zxJW8meyYMFUjoQZJE6P3yawFXG_HN7SH3KwyQv6Fz8.json @@ -0,0 +1 @@ +{"expires":1789146149796,"value":{"code":200,"headers":{"etag":"W/\"w1gTDDr4lh\"","last-modified":"Fri, 04 Sep 2026 17:02:29 GMT","cache-control":"s-maxage=604800, stale-while-revalidate"},"body":{"prefix":"lucide","icons":{"github":{"body":"","hidden":true},"workflow":{"body":""}},"lastModified":1787982846,"width":24,"height":24}},"mtime":1788541349806,"integrity":"EhcnHHMtfv"} \ No newline at end of file diff --git a/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypemarkdown_2_Xa8f3SQrBSymNSEigs5hFnHB1oHyQtakLRn3H2HerVY.json b/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypemarkdown_2_Xa8f3SQrBSymNSEigs5hFnHB1oHyQtakLRn3H2HerVY.json new file mode 100644 index 00000000..d905ee12 --- /dev/null +++ b/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypemarkdown_2_Xa8f3SQrBSymNSEigs5hFnHB1oHyQtakLRn3H2HerVY.json @@ -0,0 +1 @@ +{"expires":1789151488775,"value":{"code":200,"headers":{"etag":"W/\"IaA51VcfCG\"","last-modified":"Fri, 04 Sep 2026 18:31:28 GMT","cache-control":"s-maxage=604800, stale-while-revalidate"},"body":{"prefix":"vscode-icons","icons":{"file-type-markdown":{"body":""},"file-type-npm":{"body":""}},"lastModified":1787983126,"width":32,"height":32}},"mtime":1788546688792,"integrity":"EhcnHHMtfv"} \ No newline at end of file diff --git a/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypemarkdown_3_i2_YtZEqyhkorpwd3Yca9NIVi6skvpfJHCce69OQqRk.json b/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypemarkdown_3_i2_YtZEqyhkorpwd3Yca9NIVi6skvpfJHCce69OQqRk.json new file mode 100644 index 00000000..3c07f98e --- /dev/null +++ b/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypemarkdown_3_i2_YtZEqyhkorpwd3Yca9NIVi6skvpfJHCce69OQqRk.json @@ -0,0 +1 @@ +{"expires":1789146599647,"value":{"code":200,"headers":{"etag":"W/\"DR6zzQI9sG\"","last-modified":"Fri, 04 Sep 2026 17:09:59 GMT","cache-control":"s-maxage=604800, stale-while-revalidate"},"body":{"prefix":"vscode-icons","icons":{"file-type-markdown":{"body":""},"file-type-npm":{"body":""},"file-type-nuxt":{"body":""}},"lastModified":1787983126,"width":32,"height":32}},"mtime":1788541799648,"integrity":"EhcnHHMtfv"} \ No newline at end of file diff --git a/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypeyaml_1_4JvddjiFLmGl3G7wmwdWhy96S1gfz9gJV2rRXKAKEJo.json b/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypeyaml_1_4JvddjiFLmGl3G7wmwdWhy96S1gfz9gJV2rRXKAKEJo.json new file mode 100644 index 00000000..6731ee33 --- /dev/null +++ b/www/.nuxt/cache/nuxt/icon/vscodeicons_filetypeyaml_1_4JvddjiFLmGl3G7wmwdWhy96S1gfz9gJV2rRXKAKEJo.json @@ -0,0 +1 @@ +{"expires":1789146165179,"value":{"code":200,"headers":{"etag":"W/\"CIwv5rfR4n\"","last-modified":"Fri, 04 Sep 2026 17:02:45 GMT","cache-control":"s-maxage=604800, stale-while-revalidate"},"body":{"prefix":"vscode-icons","icons":{"file-type-yaml":{"body":""}},"lastModified":1787983126,"width":32,"height":32}},"mtime":1788541365214,"integrity":"EhcnHHMtfv"} \ No newline at end of file diff --git a/www/.nuxt/components.d.ts b/www/.nuxt/components.d.ts new file mode 100644 index 00000000..2bf84e76 --- /dev/null +++ b/www/.nuxt/components.d.ts @@ -0,0 +1,66 @@ + +import type { DefineComponent, SlotsType } from 'vue' +type IslandComponent = DefineComponent<{}, {refresh: () => Promise}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, SlotsType<{ fallback: { error: unknown } }>> & T + +type HydrationStrategies = { + hydrateOnVisible?: IntersectionObserverInit | true + hydrateOnIdle?: number | true + hydrateOnInteraction?: keyof HTMLElementEventMap | Array | true + hydrateOnMediaQuery?: string + hydrateAfter?: number + hydrateWhen?: boolean + hydrateNever?: true +} +type LazyComponent = DefineComponent void }> & T + + +export const NuxtWelcome: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/welcome.vue")['default'] +export const NuxtLayout: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-layout")['default'] +export const NuxtErrorBoundary: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default'] +export const ClientOnly: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/client-only")['default'] +export const DevOnly: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/dev-only")['default'] +export const ServerPlaceholder: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/server-placeholder")['default'] +export const NuxtLink: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-link")['default'] +export const NuxtLoadingIndicator: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-loading-indicator")['default'] +export const NuxtTime: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-time.vue")['default'] +export const NuxtRouteAnnouncer: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-route-announcer")['default'] +export const NuxtAnnouncer: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-announcer")['default'] +export const NuxtImg: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtImg'] +export const NuxtPicture: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtPicture'] +export const NuxtPage: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/pages/runtime/page-placeholder")['default'] +export const NoScript: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['NoScript'] +export const Link: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['Link'] +export const Base: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['Base'] +export const Title: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['Title'] +export const Meta: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['Meta'] +export const Style: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['Style'] +export const Head: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['Head'] +export const Html: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['Html'] +export const Body: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")['Body'] +export const NuxtIsland: typeof import("../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-island")['default'] +export const LazyNuxtWelcome: LazyComponent +export const LazyNuxtLayout: LazyComponent +export const LazyNuxtErrorBoundary: LazyComponent +export const LazyClientOnly: LazyComponent +export const LazyDevOnly: LazyComponent +export const LazyServerPlaceholder: LazyComponent +export const LazyNuxtLink: LazyComponent +export const LazyNuxtLoadingIndicator: LazyComponent +export const LazyNuxtTime: LazyComponent +export const LazyNuxtRouteAnnouncer: LazyComponent +export const LazyNuxtAnnouncer: LazyComponent +export const LazyNuxtImg: LazyComponent +export const LazyNuxtPicture: LazyComponent +export const LazyNuxtPage: LazyComponent +export const LazyNoScript: LazyComponent +export const LazyLink: LazyComponent +export const LazyBase: LazyComponent +export const LazyTitle: LazyComponent +export const LazyMeta: LazyComponent +export const LazyStyle: LazyComponent +export const LazyHead: LazyComponent +export const LazyHtml: LazyComponent +export const LazyBody: LazyComponent +export const LazyNuxtIsland: LazyComponent + +export const componentNames: string[] diff --git a/www/.nuxt/content/components.ts b/www/.nuxt/content/components.ts new file mode 100644 index 00000000..e9becbcc --- /dev/null +++ b/www/.nuxt/content/components.ts @@ -0,0 +1,175 @@ +const pickExport = (mod, exportName, componentName, path) => { + const resolved = exportName === 'default' ? mod?.default : mod?.[exportName] + if (!resolved) { + throw new Error(`[nuxt-content] Missing export "${exportName}" for component "${componentName}" in "${path}".`) + } + return resolved +} +export const localComponentLoaders = { + Callout: () => import("./../../../app/components/content/Callout.vue").then(m => pickExport(m, "default", "Callout", "./../../../app/components/content/Callout.vue")), + FileTree: () => import("./../../../app/components/content/FileTree.vue").then(m => pickExport(m, "default", "FileTree", "./../../../app/components/content/FileTree.vue")), + PackageManagers: () => import("./../../../app/components/content/PackageManagers.vue").then(m => pickExport(m, "default", "PackageManagers", "./../../../app/components/content/PackageManagers.vue")), + PageCards: () => import("./../../../app/components/content/PageCards.vue").then(m => pickExport(m, "default", "PageCards", "./../../../app/components/content/PageCards.vue")), + ProseH2: () => import("./../../../app/components/content/ProseH2.vue").then(m => pickExport(m, "default", "ProseH2", "./../../../app/components/content/ProseH2.vue")), + ProseH3: () => import("./../../../app/components/content/ProseH3.vue").then(m => pickExport(m, "default", "ProseH3", "./../../../app/components/content/ProseH3.vue")), + ProseH4: () => import("./../../../app/components/content/ProseH4.vue").then(m => pickExport(m, "default", "ProseH4", "./../../../app/components/content/ProseH4.vue")), + ProsePre: () => import("./../../../app/components/content/ProsePre.vue").then(m => pickExport(m, "default", "ProsePre", "./../../../app/components/content/ProsePre.vue")), + ProseTable: () => import("./../../../app/components/content/ProseTable.vue").then(m => pickExport(m, "default", "ProseTable", "./../../../app/components/content/ProseTable.vue")), + Steps: () => import("./../../../app/components/content/Steps.vue").then(m => pickExport(m, "default", "Steps", "./../../../app/components/content/Steps.vue")), + DuxtBreadcrumb: () => import("./../../../app/components/DuxtBreadcrumb.vue").then(m => pickExport(m, "default", "DuxtBreadcrumb", "./../../../app/components/DuxtBreadcrumb.vue")), + DuxtCodeBlock: () => import("./../../../app/components/DuxtCodeBlock.vue").then(m => pickExport(m, "default", "DuxtCodeBlock", "./../../../app/components/DuxtCodeBlock.vue")), + DuxtFooter: () => import("./../../../app/components/DuxtFooter.vue").then(m => pickExport(m, "default", "DuxtFooter", "./../../../app/components/DuxtFooter.vue")), + DuxtHeader: () => import("./../../../app/components/DuxtHeader.vue").then(m => pickExport(m, "default", "DuxtHeader", "./../../../app/components/DuxtHeader.vue")), + DuxtLocale: () => import("./../../../app/components/DuxtLocale.vue").then(m => pickExport(m, "default", "DuxtLocale", "./../../../app/components/DuxtLocale.vue")), + DuxtNavigation: () => import("./../../../app/components/DuxtNavigation.vue").then(m => pickExport(m, "default", "DuxtNavigation", "./../../../app/components/DuxtNavigation.vue")), + DuxtNavigationLink: () => import("./../../../app/components/DuxtNavigationLink.vue").then(m => pickExport(m, "default", "DuxtNavigationLink", "./../../../app/components/DuxtNavigationLink.vue")), + DuxtPageNav: () => import("./../../../app/components/DuxtPageNav.vue").then(m => pickExport(m, "default", "DuxtPageNav", "./../../../app/components/DuxtPageNav.vue")), + DuxtSearch: () => import("./../../../app/components/DuxtSearch.vue").then(m => pickExport(m, "default", "DuxtSearch", "./../../../app/components/DuxtSearch.vue")), + DuxtSections: () => import("./../../../app/components/DuxtSections.vue").then(m => pickExport(m, "default", "DuxtSections", "./../../../app/components/DuxtSections.vue")), + DuxtToc: () => import("./../../../app/components/DuxtToc.vue").then(m => pickExport(m, "default", "DuxtToc", "./../../../app/components/DuxtToc.vue")), + DuxtVersion: () => import("./../../../app/components/DuxtVersion.vue").then(m => pickExport(m, "default", "DuxtVersion", "./../../../app/components/DuxtVersion.vue")), + NuxtWelcome: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/welcome.vue").then(m => pickExport(m, "default", "NuxtWelcome", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/welcome.vue")), + NuxtLayout: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-layout").then(m => pickExport(m, "default", "NuxtLayout", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-layout")), + NuxtErrorBoundary: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue").then(m => pickExport(m, "default", "NuxtErrorBoundary", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")), + ClientOnly: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/client-only").then(m => pickExport(m, "default", "ClientOnly", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/client-only")), + DevOnly: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/dev-only").then(m => pickExport(m, "default", "DevOnly", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/dev-only")), + ServerPlaceholder: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/server-placeholder").then(m => pickExport(m, "default", "ServerPlaceholder", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/server-placeholder")), + NuxtLink: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-link").then(m => pickExport(m, "default", "NuxtLink", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-link")), + NuxtLoadingIndicator: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-loading-indicator").then(m => pickExport(m, "default", "NuxtLoadingIndicator", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-loading-indicator")), + NuxtTime: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-time.vue").then(m => pickExport(m, "default", "NuxtTime", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-time.vue")), + NuxtRouteAnnouncer: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-route-announcer").then(m => pickExport(m, "default", "NuxtRouteAnnouncer", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-route-announcer")), + NuxtAnnouncer: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-announcer").then(m => pickExport(m, "default", "NuxtAnnouncer", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-announcer")), + NuxtImg: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-stubs").then(m => pickExport(m, "NuxtImg", "NuxtImg", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-stubs")), + NuxtPicture: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-stubs").then(m => pickExport(m, "NuxtPicture", "NuxtPicture", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-stubs")), + ContentRenderer: () => import("./../../../node_modules/.pnpm/@nuxt+content@3.16.0_@oxc-project+types@0.147.0_esbuild@0.28.2_magic-string@0.30.21_mag_a1b8fcebb62d81318b5eaba6a646e180/node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue").then(m => pickExport(m, "default", "ContentRenderer", "./../../../node_modules/.pnpm/@nuxt+content@3.16.0_@oxc-project+types@0.147.0_esbuild@0.28.2_magic-string@0.30.21_mag_a1b8fcebb62d81318b5eaba6a646e180/node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue")), + ColorScheme: () => import("./../../../node_modules/.pnpm/@nuxtjs+color-mode@4.0.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldow_3bc1c2a09afa5e491ed4c9ef841d05a3/node_modules/@nuxtjs/color-mode/dist/runtime/component.vue").then(m => pickExport(m, "default", "ColorScheme", "./../../../node_modules/.pnpm/@nuxtjs+color-mode@4.0.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldow_3bc1c2a09afa5e491ed4c9ef841d05a3/node_modules/@nuxtjs/color-mode/dist/runtime/component.vue")), + Alert: () => import("./../../../app/components/ui/alert/index").then(m => pickExport(m, "Alert", "Alert", "./../../../app/components/ui/alert/index")), + AlertDescription: () => import("./../../../app/components/ui/alert/index").then(m => pickExport(m, "AlertDescription", "AlertDescription", "./../../../app/components/ui/alert/index")), + AlertTitle: () => import("./../../../app/components/ui/alert/index").then(m => pickExport(m, "AlertTitle", "AlertTitle", "./../../../app/components/ui/alert/index")), + Badge: () => import("./../../../app/components/ui/badge/index").then(m => pickExport(m, "Badge", "Badge", "./../../../app/components/ui/badge/index")), + Breadcrumb: () => import("./../../../app/components/ui/breadcrumb/index").then(m => pickExport(m, "Breadcrumb", "Breadcrumb", "./../../../app/components/ui/breadcrumb/index")), + BreadcrumbEllipsis: () => import("./../../../app/components/ui/breadcrumb/index").then(m => pickExport(m, "BreadcrumbEllipsis", "BreadcrumbEllipsis", "./../../../app/components/ui/breadcrumb/index")), + BreadcrumbItem: () => import("./../../../app/components/ui/breadcrumb/index").then(m => pickExport(m, "BreadcrumbItem", "BreadcrumbItem", "./../../../app/components/ui/breadcrumb/index")), + BreadcrumbLink: () => import("./../../../app/components/ui/breadcrumb/index").then(m => pickExport(m, "BreadcrumbLink", "BreadcrumbLink", "./../../../app/components/ui/breadcrumb/index")), + BreadcrumbList: () => import("./../../../app/components/ui/breadcrumb/index").then(m => pickExport(m, "BreadcrumbList", "BreadcrumbList", "./../../../app/components/ui/breadcrumb/index")), + BreadcrumbPage: () => import("./../../../app/components/ui/breadcrumb/index").then(m => pickExport(m, "BreadcrumbPage", "BreadcrumbPage", "./../../../app/components/ui/breadcrumb/index")), + BreadcrumbSeparator: () => import("./../../../app/components/ui/breadcrumb/index").then(m => pickExport(m, "BreadcrumbSeparator", "BreadcrumbSeparator", "./../../../app/components/ui/breadcrumb/index")), + Button: () => import("./../../../app/components/ui/button/index").then(m => pickExport(m, "Button", "Button", "./../../../app/components/ui/button/index")), + Card: () => import("./../../../app/components/ui/card/index").then(m => pickExport(m, "Card", "Card", "./../../../app/components/ui/card/index")), + CardAction: () => import("./../../../app/components/ui/card/index").then(m => pickExport(m, "CardAction", "CardAction", "./../../../app/components/ui/card/index")), + CardContent: () => import("./../../../app/components/ui/card/index").then(m => pickExport(m, "CardContent", "CardContent", "./../../../app/components/ui/card/index")), + CardDescription: () => import("./../../../app/components/ui/card/index").then(m => pickExport(m, "CardDescription", "CardDescription", "./../../../app/components/ui/card/index")), + CardFooter: () => import("./../../../app/components/ui/card/index").then(m => pickExport(m, "CardFooter", "CardFooter", "./../../../app/components/ui/card/index")), + CardHeader: () => import("./../../../app/components/ui/card/index").then(m => pickExport(m, "CardHeader", "CardHeader", "./../../../app/components/ui/card/index")), + CardTitle: () => import("./../../../app/components/ui/card/index").then(m => pickExport(m, "CardTitle", "CardTitle", "./../../../app/components/ui/card/index")), + Collapsible: () => import("./../../../app/components/ui/collapsible/index").then(m => pickExport(m, "Collapsible", "Collapsible", "./../../../app/components/ui/collapsible/index")), + CollapsibleContent: () => import("./../../../app/components/ui/collapsible/index").then(m => pickExport(m, "CollapsibleContent", "CollapsibleContent", "./../../../app/components/ui/collapsible/index")), + CollapsibleTrigger: () => import("./../../../app/components/ui/collapsible/index").then(m => pickExport(m, "CollapsibleTrigger", "CollapsibleTrigger", "./../../../app/components/ui/collapsible/index")), + Command: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "Command", "Command", "./../../../app/components/ui/command/index")), + CommandDialog: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "CommandDialog", "CommandDialog", "./../../../app/components/ui/command/index")), + CommandEmpty: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "CommandEmpty", "CommandEmpty", "./../../../app/components/ui/command/index")), + CommandGroup: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "CommandGroup", "CommandGroup", "./../../../app/components/ui/command/index")), + CommandInput: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "CommandInput", "CommandInput", "./../../../app/components/ui/command/index")), + CommandItem: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "CommandItem", "CommandItem", "./../../../app/components/ui/command/index")), + CommandList: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "CommandList", "CommandList", "./../../../app/components/ui/command/index")), + CommandSeparator: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "CommandSeparator", "CommandSeparator", "./../../../app/components/ui/command/index")), + CommandShortcut: () => import("./../../../app/components/ui/command/index").then(m => pickExport(m, "CommandShortcut", "CommandShortcut", "./../../../app/components/ui/command/index")), + Dialog: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "Dialog", "Dialog", "./../../../app/components/ui/dialog/index")), + DialogClose: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogClose", "DialogClose", "./../../../app/components/ui/dialog/index")), + DialogContent: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogContent", "DialogContent", "./../../../app/components/ui/dialog/index")), + DialogDescription: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogDescription", "DialogDescription", "./../../../app/components/ui/dialog/index")), + DialogFooter: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogFooter", "DialogFooter", "./../../../app/components/ui/dialog/index")), + DialogHeader: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogHeader", "DialogHeader", "./../../../app/components/ui/dialog/index")), + DialogOverlay: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogOverlay", "DialogOverlay", "./../../../app/components/ui/dialog/index")), + DialogScrollContent: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogScrollContent", "DialogScrollContent", "./../../../app/components/ui/dialog/index")), + DialogTitle: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogTitle", "DialogTitle", "./../../../app/components/ui/dialog/index")), + DialogTrigger: () => import("./../../../app/components/ui/dialog/index").then(m => pickExport(m, "DialogTrigger", "DialogTrigger", "./../../../app/components/ui/dialog/index")), + DropdownMenu: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenu", "DropdownMenu", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuCheckboxItem: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuCheckboxItem", "DropdownMenuCheckboxItem", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuContent: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuContent", "DropdownMenuContent", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuGroup: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuGroup", "DropdownMenuGroup", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuItem: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuItem", "DropdownMenuItem", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuLabel: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuLabel", "DropdownMenuLabel", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuRadioGroup: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuRadioGroup", "DropdownMenuRadioGroup", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuRadioItem: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuRadioItem", "DropdownMenuRadioItem", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuSeparator: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuSeparator", "DropdownMenuSeparator", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuShortcut: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuShortcut", "DropdownMenuShortcut", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuSub: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuSub", "DropdownMenuSub", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuSubContent: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuSubContent", "DropdownMenuSubContent", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuSubTrigger: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuSubTrigger", "DropdownMenuSubTrigger", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuTrigger: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuTrigger", "DropdownMenuTrigger", "./../../../app/components/ui/dropdown-menu/index")), + DropdownMenuPortal: () => import("./../../../app/components/ui/dropdown-menu/index").then(m => pickExport(m, "DropdownMenuPortal", "DropdownMenuPortal", "./../../../app/components/ui/dropdown-menu/index")), + Input: () => import("./../../../app/components/ui/input/index").then(m => pickExport(m, "Input", "Input", "./../../../app/components/ui/input/index")), + NavigationMenu: () => import("./../../../app/components/ui/navigation-menu/index").then(m => pickExport(m, "NavigationMenu", "NavigationMenu", "./../../../app/components/ui/navigation-menu/index")), + NavigationMenuContent: () => import("./../../../app/components/ui/navigation-menu/index").then(m => pickExport(m, "NavigationMenuContent", "NavigationMenuContent", "./../../../app/components/ui/navigation-menu/index")), + NavigationMenuIndicator: () => import("./../../../app/components/ui/navigation-menu/index").then(m => pickExport(m, "NavigationMenuIndicator", "NavigationMenuIndicator", "./../../../app/components/ui/navigation-menu/index")), + NavigationMenuItem: () => import("./../../../app/components/ui/navigation-menu/index").then(m => pickExport(m, "NavigationMenuItem", "NavigationMenuItem", "./../../../app/components/ui/navigation-menu/index")), + NavigationMenuLink: () => import("./../../../app/components/ui/navigation-menu/index").then(m => pickExport(m, "NavigationMenuLink", "NavigationMenuLink", "./../../../app/components/ui/navigation-menu/index")), + NavigationMenuList: () => import("./../../../app/components/ui/navigation-menu/index").then(m => pickExport(m, "NavigationMenuList", "NavigationMenuList", "./../../../app/components/ui/navigation-menu/index")), + NavigationMenuTrigger: () => import("./../../../app/components/ui/navigation-menu/index").then(m => pickExport(m, "NavigationMenuTrigger", "NavigationMenuTrigger", "./../../../app/components/ui/navigation-menu/index")), + NavigationMenuViewport: () => import("./../../../app/components/ui/navigation-menu/index").then(m => pickExport(m, "NavigationMenuViewport", "NavigationMenuViewport", "./../../../app/components/ui/navigation-menu/index")), + ScrollArea: () => import("./../../../app/components/ui/scroll-area/index").then(m => pickExport(m, "ScrollArea", "ScrollArea", "./../../../app/components/ui/scroll-area/index")), + ScrollBar: () => import("./../../../app/components/ui/scroll-area/index").then(m => pickExport(m, "ScrollBar", "ScrollBar", "./../../../app/components/ui/scroll-area/index")), + Separator: () => import("./../../../app/components/ui/separator/index").then(m => pickExport(m, "Separator", "Separator", "./../../../app/components/ui/separator/index")), + Sheet: () => import("./../../../app/components/ui/sheet/index").then(m => pickExport(m, "Sheet", "Sheet", "./../../../app/components/ui/sheet/index")), + SheetClose: () => import("./../../../app/components/ui/sheet/index").then(m => pickExport(m, "SheetClose", "SheetClose", "./../../../app/components/ui/sheet/index")), + SheetContent: () => import("./../../../app/components/ui/sheet/index").then(m => pickExport(m, "SheetContent", "SheetContent", "./../../../app/components/ui/sheet/index")), + SheetDescription: () => import("./../../../app/components/ui/sheet/index").then(m => pickExport(m, "SheetDescription", "SheetDescription", "./../../../app/components/ui/sheet/index")), + SheetFooter: () => import("./../../../app/components/ui/sheet/index").then(m => pickExport(m, "SheetFooter", "SheetFooter", "./../../../app/components/ui/sheet/index")), + SheetHeader: () => import("./../../../app/components/ui/sheet/index").then(m => pickExport(m, "SheetHeader", "SheetHeader", "./../../../app/components/ui/sheet/index")), + SheetTitle: () => import("./../../../app/components/ui/sheet/index").then(m => pickExport(m, "SheetTitle", "SheetTitle", "./../../../app/components/ui/sheet/index")), + SheetTrigger: () => import("./../../../app/components/ui/sheet/index").then(m => pickExport(m, "SheetTrigger", "SheetTrigger", "./../../../app/components/ui/sheet/index")), + Sidebar: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "Sidebar", "Sidebar", "./../../../app/components/ui/sidebar/index")), + SidebarContent: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarContent", "SidebarContent", "./../../../app/components/ui/sidebar/index")), + SidebarFooter: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarFooter", "SidebarFooter", "./../../../app/components/ui/sidebar/index")), + SidebarGroup: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarGroup", "SidebarGroup", "./../../../app/components/ui/sidebar/index")), + SidebarGroupAction: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarGroupAction", "SidebarGroupAction", "./../../../app/components/ui/sidebar/index")), + SidebarGroupContent: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarGroupContent", "SidebarGroupContent", "./../../../app/components/ui/sidebar/index")), + SidebarGroupLabel: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarGroupLabel", "SidebarGroupLabel", "./../../../app/components/ui/sidebar/index")), + SidebarHeader: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarHeader", "SidebarHeader", "./../../../app/components/ui/sidebar/index")), + SidebarInput: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarInput", "SidebarInput", "./../../../app/components/ui/sidebar/index")), + SidebarInset: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarInset", "SidebarInset", "./../../../app/components/ui/sidebar/index")), + SidebarMenu: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenu", "SidebarMenu", "./../../../app/components/ui/sidebar/index")), + SidebarMenuAction: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenuAction", "SidebarMenuAction", "./../../../app/components/ui/sidebar/index")), + SidebarMenuBadge: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenuBadge", "SidebarMenuBadge", "./../../../app/components/ui/sidebar/index")), + SidebarMenuButton: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenuButton", "SidebarMenuButton", "./../../../app/components/ui/sidebar/index")), + SidebarMenuItem: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenuItem", "SidebarMenuItem", "./../../../app/components/ui/sidebar/index")), + SidebarMenuSkeleton: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenuSkeleton", "SidebarMenuSkeleton", "./../../../app/components/ui/sidebar/index")), + SidebarMenuSub: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenuSub", "SidebarMenuSub", "./../../../app/components/ui/sidebar/index")), + SidebarMenuSubButton: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenuSubButton", "SidebarMenuSubButton", "./../../../app/components/ui/sidebar/index")), + SidebarMenuSubItem: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarMenuSubItem", "SidebarMenuSubItem", "./../../../app/components/ui/sidebar/index")), + SidebarProvider: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarProvider", "SidebarProvider", "./../../../app/components/ui/sidebar/index")), + SidebarRail: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarRail", "SidebarRail", "./../../../app/components/ui/sidebar/index")), + SidebarSeparator: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarSeparator", "SidebarSeparator", "./../../../app/components/ui/sidebar/index")), + SidebarTrigger: () => import("./../../../app/components/ui/sidebar/index").then(m => pickExport(m, "SidebarTrigger", "SidebarTrigger", "./../../../app/components/ui/sidebar/index")), + Skeleton: () => import("./../../../app/components/ui/skeleton/index").then(m => pickExport(m, "Skeleton", "Skeleton", "./../../../app/components/ui/skeleton/index")), + Toaster: () => import("./../../../app/components/ui/sonner/index").then(m => pickExport(m, "Toaster", "Toaster", "./../../../app/components/ui/sonner/index")), + Tabs: () => import("./../../../app/components/ui/tabs/index").then(m => pickExport(m, "Tabs", "Tabs", "./../../../app/components/ui/tabs/index")), + TabsContent: () => import("./../../../app/components/ui/tabs/index").then(m => pickExport(m, "TabsContent", "TabsContent", "./../../../app/components/ui/tabs/index")), + TabsList: () => import("./../../../app/components/ui/tabs/index").then(m => pickExport(m, "TabsList", "TabsList", "./../../../app/components/ui/tabs/index")), + TabsTrigger: () => import("./../../../app/components/ui/tabs/index").then(m => pickExport(m, "TabsTrigger", "TabsTrigger", "./../../../app/components/ui/tabs/index")), + Tooltip: () => import("./../../../app/components/ui/tooltip/index").then(m => pickExport(m, "Tooltip", "Tooltip", "./../../../app/components/ui/tooltip/index")), + TooltipContent: () => import("./../../../app/components/ui/tooltip/index").then(m => pickExport(m, "TooltipContent", "TooltipContent", "./../../../app/components/ui/tooltip/index")), + TooltipProvider: () => import("./../../../app/components/ui/tooltip/index").then(m => pickExport(m, "TooltipProvider", "TooltipProvider", "./../../../app/components/ui/tooltip/index")), + TooltipTrigger: () => import("./../../../app/components/ui/tooltip/index").then(m => pickExport(m, "TooltipTrigger", "TooltipTrigger", "./../../../app/components/ui/tooltip/index")), + InstallButton: () => import("./../../../node_modules/.pnpm/@nuxtjs+mcp-toolkit@0.19.0_@vue+compiler-sfc@3.5.42_h3@1.15.11_magic-string@0.30.21_mag_467f1d813e724e89e024de7c60e319b0/node_modules/@nuxtjs/mcp-toolkit/dist/runtime/components/InstallButton.vue").then(m => pickExport(m, "default", "InstallButton", "./../../../node_modules/.pnpm/@nuxtjs+mcp-toolkit@0.19.0_@vue+compiler-sfc@3.5.42_h3@1.15.11_magic-string@0.30.21_mag_467f1d813e724e89e024de7c60e319b0/node_modules/@nuxtjs/mcp-toolkit/dist/runtime/components/InstallButton.vue")), + NuxtLinkLocale: () => import("./../../../node_modules/.pnpm/@nuxtjs+i18n@10.6.0_@vue+compiler-dom@3.5.42_db0@0.3.4_esbuild@0.28.2_eslint@10.9.1_jit_882b05db15702ae219b02326b98e2631/node_modules/@nuxtjs/i18n/dist/runtime/components/NuxtLinkLocale").then(m => pickExport(m, "default", "NuxtLinkLocale", "./../../../node_modules/.pnpm/@nuxtjs+i18n@10.6.0_@vue+compiler-dom@3.5.42_db0@0.3.4_esbuild@0.28.2_eslint@10.9.1_jit_882b05db15702ae219b02326b98e2631/node_modules/@nuxtjs/i18n/dist/runtime/components/NuxtLinkLocale")), + SwitchLocalePathLink: () => import("./../../../node_modules/.pnpm/@nuxtjs+i18n@10.6.0_@vue+compiler-dom@3.5.42_db0@0.3.4_esbuild@0.28.2_eslint@10.9.1_jit_882b05db15702ae219b02326b98e2631/node_modules/@nuxtjs/i18n/dist/runtime/components/SwitchLocalePathLink").then(m => pickExport(m, "default", "SwitchLocalePathLink", "./../../../node_modules/.pnpm/@nuxtjs+i18n@10.6.0_@vue+compiler-dom@3.5.42_db0@0.3.4_esbuild@0.28.2_eslint@10.9.1_jit_882b05db15702ae219b02326b98e2631/node_modules/@nuxtjs/i18n/dist/runtime/components/SwitchLocalePathLink")), + NuxtPage: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/pages/runtime/page").then(m => pickExport(m, "default", "NuxtPage", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/pages/runtime/page")), + NoScript: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "NoScript", "NoScript", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + Link: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "Link", "Link", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + Base: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "Base", "Base", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + Title: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "Title", "Title", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + Meta: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "Meta", "Meta", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + Style: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "Style", "Style", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + Head: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "Head", "Head", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + Html: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "Html", "Html", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + Body: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components").then(m => pickExport(m, "Body", "Body", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/head/runtime/components")), + MDC: () => import("./../../../node_modules/.pnpm/@nuxtjs+mdc@0.23.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldown@1.2._82edceced79f34753b5a516fdfd94d58/node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue").then(m => pickExport(m, "default", "MDC", "./../../../node_modules/.pnpm/@nuxtjs+mdc@0.23.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldown@1.2._82edceced79f34753b5a516fdfd94d58/node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue")), + MDCCached: () => import("./../../../node_modules/.pnpm/@nuxtjs+mdc@0.23.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldown@1.2._82edceced79f34753b5a516fdfd94d58/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue").then(m => pickExport(m, "default", "MDCCached", "./../../../node_modules/.pnpm/@nuxtjs+mdc@0.23.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldown@1.2._82edceced79f34753b5a516fdfd94d58/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue")), + MDCRenderer: () => import("./../../../node_modules/.pnpm/@nuxtjs+mdc@0.23.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldown@1.2._82edceced79f34753b5a516fdfd94d58/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue").then(m => pickExport(m, "default", "MDCRenderer", "./../../../node_modules/.pnpm/@nuxtjs+mdc@0.23.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldown@1.2._82edceced79f34753b5a516fdfd94d58/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue")), + MDCSlot: () => import("./../../../node_modules/.pnpm/@nuxtjs+mdc@0.23.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldown@1.2._82edceced79f34753b5a516fdfd94d58/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue").then(m => pickExport(m, "default", "MDCSlot", "./../../../node_modules/.pnpm/@nuxtjs+mdc@0.23.1_magic-string@0.30.21_magicast@0.5.4_oxc-parser@0.141.0_rolldown@1.2._82edceced79f34753b5a516fdfd94d58/node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue")), + NuxtIsland: () => import("./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-island").then(m => pickExport(m, "default", "NuxtIsland", "./../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7_supports-color@10.2.2___@_6a8ec549e9d470ce05bfc037ea662c04/node_modules/nuxt/dist/app/components/nuxt-island")), +} +export const globalComponents: string[] = ["ProseA","ProseBlockquote","ProseCode","ProseEm","ProseH1","ProseH5","ProseH6","ProseHr","ProseImg","ProseLi","ProseOl","ProseP","ProseScript","ProseStrong","ProseTbody","ProseTd","ProseTh","ProseThead","ProseTr","ProseUl","Icon"] +export const localComponents: string[] = ["Callout","FileTree","PackageManagers","PageCards","ProseH2","ProseH3","ProseH4","ProsePre","ProseTable","Steps","DuxtBreadcrumb","DuxtCodeBlock","DuxtFooter","DuxtHeader","DuxtLocale","DuxtNavigation","DuxtNavigationLink","DuxtPageNav","DuxtSearch","DuxtSections","DuxtToc","DuxtVersion","NuxtWelcome","NuxtLayout","NuxtErrorBoundary","ClientOnly","DevOnly","ServerPlaceholder","NuxtLink","NuxtLoadingIndicator","NuxtTime","NuxtRouteAnnouncer","NuxtAnnouncer","NuxtImg","NuxtPicture","ContentRenderer","ColorScheme","Alert","AlertDescription","AlertTitle","Badge","Breadcrumb","BreadcrumbEllipsis","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Button","Card","CardAction","CardContent","CardDescription","CardFooter","CardHeader","CardTitle","Collapsible","CollapsibleContent","CollapsibleTrigger","Command","CommandDialog","CommandEmpty","CommandGroup","CommandInput","CommandItem","CommandList","CommandSeparator","CommandShortcut","Dialog","DialogClose","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogOverlay","DialogScrollContent","DialogTitle","DialogTrigger","DropdownMenu","DropdownMenuCheckboxItem","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuLabel","DropdownMenuRadioGroup","DropdownMenuRadioItem","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","DropdownMenuSubContent","DropdownMenuSubTrigger","DropdownMenuTrigger","DropdownMenuPortal","Input","NavigationMenu","NavigationMenuContent","NavigationMenuIndicator","NavigationMenuItem","NavigationMenuLink","NavigationMenuList","NavigationMenuTrigger","NavigationMenuViewport","ScrollArea","ScrollBar","Separator","Sheet","SheetClose","SheetContent","SheetDescription","SheetFooter","SheetHeader","SheetTitle","SheetTrigger","Sidebar","SidebarContent","SidebarFooter","SidebarGroup","SidebarGroupAction","SidebarGroupContent","SidebarGroupLabel","SidebarHeader","SidebarInput","SidebarInset","SidebarMenu","SidebarMenuAction","SidebarMenuBadge","SidebarMenuButton","SidebarMenuItem","SidebarMenuSkeleton","SidebarMenuSub","SidebarMenuSubButton","SidebarMenuSubItem","SidebarProvider","SidebarRail","SidebarSeparator","SidebarTrigger","Skeleton","Toaster","Tabs","TabsContent","TabsList","TabsTrigger","Tooltip","TooltipContent","TooltipProvider","TooltipTrigger","InstallButton","NuxtLinkLocale","SwitchLocalePathLink","NuxtPage","NoScript","Link","Base","Title","Meta","Style","Head","Html","Body","MDC","MDCCached","MDCRenderer","MDCSlot","NuxtIsland"] \ No newline at end of file diff --git a/www/.nuxt/content/database.compressed.mjs b/www/.nuxt/content/database.compressed.mjs new file mode 100644 index 00000000..aa7aee2d --- /dev/null +++ b/www/.nuxt/content/database.compressed.mjs @@ -0,0 +1,3 @@ +export const docs_duxt = "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" +export const docs_workflows = "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" +export const docs_workflows_v0_7_0 = "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" \ No newline at end of file diff --git a/www/.nuxt/content/manifest.ts b/www/.nuxt/content/manifest.ts new file mode 100644 index 00000000..d5d4ab5a --- /dev/null +++ b/www/.nuxt/content/manifest.ts @@ -0,0 +1,75 @@ +export const checksums = { + "docs_duxt": "v3.5.0--Z5sCT9gGa-RAe6nnMqlaoWtD_9oNnR7HOERNc81MTWA", + "docs_workflows": "v3.5.0--TQ9_dTvO8Uv4LqgMQLAay8DXVPhEp9ahKul3KNGtDQ4", + "docs_workflows_v0_7_0": "v3.5.0--gyTLYQ0MVuqj_MoAN7sY-gvt61s3lKmNU2w7azTxNdA" +} +export const checksumsStructure = { + "docs_duxt": "cY12jdAnkQwUxmGB3I0V0TTXMveP9ssYvCz5VOrpPfY", + "docs_workflows": "cshF33POG6AtTmLe-IjziL3JiGGPCJgs5avQ1OmFtj4", + "docs_workflows_v0_7_0": "Pt9fhgX_otrmnFQYPHSGuqExdlY7qwABOOtjCErIPtg" +} + +export const tables = { + "docs_duxt": "_content_docs_duxt", + "docs_workflows": "_content_docs_workflows", + "docs_workflows_v0_7_0": "_content_docs_workflows_v0_7_0", + "info": "_content_info" +} + +export default { + "docs_duxt": { + "type": "page", + "fields": { + "id": "string", + "title": "string", + "body": "json", + "description": "string", + "extension": "string", + "icon": "string", + "layout": "string", + "meta": "json", + "navigation": "boolean", + "path": "string", + "seo": "json", + "stem": "string" + } + }, + "docs_workflows": { + "type": "page", + "fields": { + "id": "string", + "title": "string", + "body": "json", + "description": "string", + "extension": "string", + "icon": "string", + "layout": "string", + "meta": "json", + "navigation": "boolean", + "path": "string", + "seo": "json", + "stem": "string" + } + }, + "docs_workflows_v0_7_0": { + "type": "page", + "fields": { + "id": "string", + "title": "string", + "body": "json", + "description": "string", + "extension": "string", + "icon": "string", + "layout": "string", + "meta": "json", + "navigation": "boolean", + "path": "string", + "seo": "json", + "stem": "string" + } + }, + "info": { + "type": "data", + "fields": {} + } +} \ No newline at end of file diff --git a/www/.nuxt/content/sql_dump.txt b/www/.nuxt/content/sql_dump.txt new file mode 100644 index 00000000..82897988 --- /dev/null +++ b/www/.nuxt/content/sql_dump.txt @@ -0,0 +1,61 @@ +CREATE TABLE IF NOT EXISTS _content_info (id TEXT PRIMARY KEY, "ready" BOOLEAN, "structureVersion" VARCHAR, "version" VARCHAR, "__hash__" TEXT UNIQUE); -- structure +INSERT INTO _content_info VALUES ('checksum_docs_duxt', false, 'cY12jdAnkQwUxmGB3I0V0TTXMveP9ssYvCz5VOrpPfY', 'v3.5.0--Z5sCT9gGa-RAe6nnMqlaoWtD_9oNnR7HOERNc81MTWA', 'zj7H9RSslE9BC8ascPh0RHRCXQUxrRYvhF1_2aZZeBc'); -- meta +DROP TABLE IF EXISTS _content_docs_duxt; -- structure +CREATE TABLE IF NOT EXISTS _content_docs_duxt (id TEXT PRIMARY KEY, "title" VARCHAR, "body" TEXT, "description" VARCHAR, "extension" VARCHAR, "icon" VARCHAR NULL, "layout" VARCHAR NULL, "meta" TEXT, "navigation" BOOLEAN NULL, "path" VARCHAR, "seo" TEXT DEFAULT '{}', "stem" VARCHAR, "__hash__" TEXT UNIQUE); -- structure +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/getting-started/configuration.md', 'Configuration', '{"type":"minimark","value":[["p",{},"Everything the theme shows is data. Your own ",["code",{},"app/app.config.ts"]," is merged over\nthe layer''s, so overriding one key leaves the rest alone."],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"export default defineAppConfig({\n duxt: {\n title: ''my project'',\n version: ''v1.4.0'',\n sections: [{ label: ''Guide'', to: ''/guide'', icon: ''lucide:book-open'' }]\n }\n});\n","filename":"app/app.config.ts","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"export"],["span",{"class":"szBVR"}," default"],["span",{"class":"sScJk"}," defineAppConfig"],["span",{"class":"sVt8B"},"({\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"}," duxt: {\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"}," title: "],["span",{"class":"sZZnC"},"''my project''"],["span",{"class":"sVt8B"},",\n"]],["span",{"class":"line","line":4},["span",{"class":"sVt8B"}," version: "],["span",{"class":"sZZnC"},"''v1.4.0''"],["span",{"class":"sVt8B"},",\n"]],["span",{"class":"line","line":5},["span",{"class":"sVt8B"}," sections: [{ label: "],["span",{"class":"sZZnC"},"''Guide''"],["span",{"class":"sVt8B"},", to: "],["span",{"class":"sZZnC"},"''/guide''"],["span",{"class":"sVt8B"},", icon: "],["span",{"class":"sZZnC"},"''lucide:book-open''"],["span",{"class":"sVt8B"}," }]\n"]],["span",{"class":"line","line":6},["span",{"class":"sVt8B"}," }\n"]],["span",{"class":"line","line":7},["span",{"class":"sVt8B"},"});\n"]]]],["h2",{"id":"keys"},"Keys"],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Key"],["th",{"align":"left"},"What it controls"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"title"]],["td",{"align":"left"},"The name in the navbar and the SEO title"]],["tr",{},["td",{"align":"left"},["code",{},"version"]],["td",{"align":"left"},"The badge beside it"]],["tr",{},["td",{"align":"left"},["code",{},"sections"]],["td",{"align":"left"},"The second navbar row"]],["tr",{},["td",{"align":"left"},["code",{},"navigation"]],["td",{"align":"left"},"Navbar links; an entry with ",["code",{},"children"]," becomes a dropdown"]],["tr",{},["td",{"align":"left"},["code",{},"links"]],["td",{"align":"left"},"Icon links on the right of the navbar"]],["tr",{},["td",{"align":"left"},["code",{},"landing"]],["td",{"align":"left"},"The hero and feature cards at ",["code",{},"/"]]],["tr",{},["td",{"align":"left"},["code",{},"aside"]],["td",{"align":"left"},"Fixed links under the table of contents"]],["tr",{},["td",{"align":"left"},["code",{},"footer"]],["td",{"align":"left"},"The note and links at the bottom"]]]],["style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"keys","depth":2,"text":"Keys"}]}}', 'What lives in app.config.ts, and what you can override.', 'md', 'lucide:settings', NULL, '{}', NULL, '/duxt/getting-started/configuration', '{"title":"Configuration","description":"What lives in app.config.ts, and what you can override."}', 'duxt/getting-started/configuration', 'lj0jO29J9MsCdEBCwfApw-yl4w5FowDZv-2pdSCjtDg'); -- lj0jO29J9MsCdEBCwfApw-yl4w5FowDZv-2pdSCjtDg +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/getting-started/deployment.md', 'Deployment', '{"type":"minimark","value":[["p",{},"A duxt site is a Nuxt application. Anything that runs Nuxt runs it."],["h2",{"id":"static"},"Static"],["p",{},["code",{},"nuxt generate"]," produces a folder of HTML. This is the right default for\ndocumentation: no server, no runtime cost, and every page is cached at the\nedge."],["package-managers",{"command":"run generate"}],["callout",{"title":"Remote sources are read at build time","type":"warning"},["p",{},"A site reading another repository''s ",["code",{},"docs/"]," picks up changes when it builds,\nnot when they are pushed. Rebuild on a schedule, or trigger it from the source\nrepository."]],["h2",{"id":"server"},"Server"],["p",{},["code",{},"nuxt build"]," produces a Node server, which you need if pages must react to a\nrequest — a private repository behind an auth check, for instance."],["h2",{"id":"what-the-build-needs"},"What the build needs"],["ul",{},["li",{},["strong",{},"Node 24."]," The layer uses ",["code",{},"node:sqlite"]," rather than a native driver."],["li",{},["strong",{},"Network access to your sources"],", if any of them are remote repositories."],["li",{},["strong",{},"A token"],", for private ones. Content reads it from the collection''s ",["code",{},"auth"],"."]],["h2",{"id":"what-the-site-serves-besides-pages"},"What the site serves besides pages"],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Path"],["th",{"align":"left"},"What it is"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"/llms.txt"]],["td",{"align":"left"},"The documentation as a Markdown index, per llmstxt.org"]],["tr",{},["td",{"align":"left"},["code",{},"/mcp"]],["td",{"align":"left"},"An MCP server over the same content — ",["code",{},"list_pages"],", ",["code",{},"search_docs"],", ",["code",{},"read_page"]]]]],["p",{},"Both are generated from the collection the pages render from, so neither can\ndrift from what is published."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"static","depth":2,"text":"Static"},{"id":"server","depth":2,"text":"Server"},{"id":"what-the-build-needs","depth":2,"text":"What the build needs"},{"id":"what-the-site-serves-besides-pages","depth":2,"text":"What the site serves besides pages"}]}}', 'Where a duxt site can run, and what it needs there.', 'md', 'lucide:cloud-upload', NULL, '{}', NULL, '/duxt/getting-started/deployment', '{"title":"Deployment","description":"Where a duxt site can run, and what it needs there."}', 'duxt/getting-started/deployment', 'ue7UqIRBoSAXRNCVm8hrcSF0DiwSNMRqX8B3dHBG78w'); -- ue7UqIRBoSAXRNCVm8hrcSF0DiwSNMRqX8B3dHBG78w +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/getting-started/index.md', 'Introduction', '{"type":"minimark","value":[["p",{},"duxt is a Nuxt layer. You extend it, put Markdown in ",["code",{},"docs/"],", and you have a\ndocumentation site — navigation, table of contents, theme and search included."],["p",{},"Where it differs from a template is what happens next: the same layer reads\n",["code",{},"docs/"]," from ",["strong",{},"other repositories"],", and from ",["strong",{},"tags"]," of them, so one site can\nserve many projects at several versions without a collection declared by hand\nfor each."],["page-cards",{}],["callout",{"title":"Early days","type":"warning"},["p",{},"Nothing here is decided. The layer works, the theme is being built, and whether\nthis carries a public project is still an open question."]]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'A Nuxt layer that turns a repository''s docs folder into a documentation site.', 'md', 'lucide:rocket', NULL, '{}', NULL, '/duxt/getting-started', '{"title":"Introduction","description":"A Nuxt layer that turns a repository''s docs folder into a documentation site."}', 'duxt/getting-started/index', '0KI_eIwrQyXQabXAFSm-pd-BXNxsXXMZV9Ec8HRt7T4'); -- 0KI_eIwrQyXQabXAFSm-pd-BXNxsXXMZV9Ec8HRt7T4 +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/getting-started/installation.md', 'Installation', '{"type":"minimark","value":[["h2",{"id":"add-the-dependency"},"Add the dependency"],["package-managers",{"command":"add -D @kirchdev/duxt"}],["h2",{"id":"extend-the-layer"},"Extend the layer"],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"export default defineNuxtConfig({\n extends: [''@kirchdev/duxt'']\n});\n","filename":"nuxt.config.ts","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"export"],["span",{"class":"szBVR"}," default"],["span",{"class":"sScJk"}," defineNuxtConfig"],["span",{"class":"sVt8B"},"({\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"}," extends: ["],["span",{"class":"sZZnC"},"''@kirchdev/duxt''"],["span",{"class":"sVt8B"},"]\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"},"});\n"]]]],["h2",{"id":"write-your-docs"},"Write your docs"],["p",{},"Markdown goes in ",["code",{},"docs/"]," at the root of your repository. A file becomes a page,\na folder becomes a section, and frontmatter carries the title, description and\nicon:"],["pre",{"className":"language-md shiki shiki-themes github-light github-dark","code":"---\ntitle: Introduction\ndescription: What this project is.\nicon: lucide:rocket\n---\n\nYour first page.\n","filename":"docs/getting-started/index.md","language":"md","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sq-ep"},"---\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"},"title: Introduction\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"},"description: What this project is.\n"]],["span",{"class":"line","line":4},["span",{"class":"sVt8B"},"icon: lucide:rocket\n"]],["span",{"class":"line","line":5},["span",{"class":"sq-ep"},"---\n"]],["span",{"class":"line","line":6},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":7},["span",{"class":"sVt8B"},"Your first page.\n"]]]],["callout",{"title":"Nothing else is required","type":"tip"},["p",{},"The navbar, the sidebar, the table of contents and the landing page all come\nfrom the layer''s ",["code",{},"app.config.ts"]," — override the parts you disagree with."]],["style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sq-ep, html code.shiki .sq-ep{--shiki-default:#005CC5;--shiki-default-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"add-the-dependency","depth":2,"text":"Add the dependency"},{"id":"extend-the-layer","depth":2,"text":"Extend the layer"},{"id":"write-your-docs","depth":2,"text":"Write your docs"}]}}', 'Add the layer, extend it, write Markdown.', 'md', 'lucide:download', NULL, '{}', NULL, '/duxt/getting-started/installation', '{"title":"Installation","description":"Add the layer, extend it, write Markdown."}', 'duxt/getting-started/installation', '0K6rpImAZ78CE2bCu95dhpCN6zKErHM9U140XDKOc8o'); -- 0K6rpImAZ78CE2bCu95dhpCN6zKErHM9U140XDKOc8o +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/guide/concepts/collections.md', 'Collections', '{"type":"minimark","value":[["p",{},"A collection is Content''s unit of sourcing: a glob, a place to read it from, and\na schema. The layer declares one for your ",["code",{},"docs/"]," folder, so the common case\nneeds no configuration."],["h2",{"id":"what-the-layer-declares"},"What the layer declares"],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"docs: defineCollection({\n type: ''page'',\n source: {\n include: ''**/*.md'',\n cwd: join(repositoryRoot(), ''docs''),\n prefix: '''',\n },\n})\n","filename":"content.config.ts","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sScJk"},"docs"],["span",{"class":"sVt8B"},": "],["span",{"class":"sScJk"},"defineCollection"],["span",{"class":"sVt8B"},"({\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"}," type: "],["span",{"class":"sZZnC"},"''page''"],["span",{"class":"sVt8B"},",\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"}," source: {\n"]],["span",{"class":"line","line":4},["span",{"class":"sVt8B"}," include: "],["span",{"class":"sZZnC"},"''**/*.md''"],["span",{"class":"sVt8B"},",\n"]],["span",{"class":"line","line":5},["span",{"class":"sVt8B"}," cwd: "],["span",{"class":"sScJk"},"join"],["span",{"class":"sVt8B"},"("],["span",{"class":"sScJk"},"repositoryRoot"],["span",{"class":"sVt8B"},"(), "],["span",{"class":"sZZnC"},"''docs''"],["span",{"class":"sVt8B"},"),\n"]],["span",{"class":"line","line":6},["span",{"class":"sVt8B"}," prefix: "],["span",{"class":"sZZnC"},"''''"],["span",{"class":"sVt8B"},",\n"]],["span",{"class":"line","line":7},["span",{"class":"sVt8B"}," },\n"]],["span",{"class":"line","line":8},["span",{"class":"sVt8B"},"})\n"]]]],["h2",{"id":"why-the-path-is-absolute"},"Why the path is absolute"],["p",{},"Content resolves a collection against the rootDir of the ",["strong",{},"layer"]," that declared\nit, not the project extending it. A relative path in the layer points into the\nlayer. The absolute path is computed at load time, which works because the\nconfig is executed rather than read."],["callout",{"title":"Do not make this relative","type":"danger"},["p",{},"It will appear to work in the layer''s own site and break in every consumer."]],["style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"what-the-layer-declares","depth":2,"text":"What the layer declares"},{"id":"why-the-path-is-absolute","depth":2,"text":"Why the path is absolute"}]}}', 'What Content builds, and what the layer declares for you.', 'md', 'lucide:database', NULL, '{}', NULL, '/duxt/guide/concepts/collections', '{"title":"Collections","description":"What Content builds, and what the layer declares for you."}', 'duxt/guide/concepts/collections', '5QGpKCYqb9vAmehmBmrQTEqXOzjbkllbyj-ygFbZ41s'); -- 5QGpKCYqb9vAmehmBmrQTEqXOzjbkllbyj-ygFbZ41s +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/guide/concepts/layers.md', 'Layers', '{"type":"minimark","value":[["p",{},"duxt is a layer, not a template. You extend it and every file it ships becomes\noverridable by putting a file of the same name in your own project."],["h2",{"id":"overriding-a-component"},"Overriding a component"],["p",{},"Drop ",["code",{},"app/components/DuxtHeader.vue"]," into your project and yours wins. No\nconfiguration, no slot to thread a value through."],["h2",{"id":"overriding-a-token"},"Overriding a token"],["p",{},"The palette is CSS variables. Redefine one in your own stylesheet:"],["pre",{"className":"language-css shiki shiki-themes github-light github-dark","code":":root {\n --primary: oklch(0.55 0.2 260);\n}\n","language":"css","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sScJk"},":root"],["span",{"class":"sVt8B"}," {\n"]],["span",{"class":"line","line":2},["span",{"class":"s4XuR"}," --primary"],["span",{"class":"sVt8B"},": "],["span",{"class":"sj4cs"},"oklch"],["span",{"class":"sVt8B"},"("],["span",{"class":"sj4cs"},"0.55"],["span",{"class":"sj4cs"}," 0.2"],["span",{"class":"sj4cs"}," 260"],["span",{"class":"sVt8B"},");\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"},"}\n"]]]],["h2",{"id":"what-layers-make-harder"},"What layers make harder"],["p",{},"Every path inside the layer resolves against the ",["strong",{},"consumer"]," unless it is made\nabsolute. Stylesheet entries, component directories and collection paths have\nall needed that treatment."],["style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"overriding-a-component","depth":2,"text":"Overriding a component"},{"id":"overriding-a-token","depth":2,"text":"Overriding a token"},{"id":"what-layers-make-harder","depth":2,"text":"What layers make harder"}]}}', 'What a Nuxt layer gives you, and what it takes away.', 'md', 'lucide:layers', NULL, '{}', NULL, '/duxt/guide/concepts/layers', '{"title":"Layers","description":"What a Nuxt layer gives you, and what it takes away."}', 'duxt/guide/concepts/layers', 'GXRw98kFh1EUpyZshhW9lQECtmkxY-izr2bbiIIf-nc'); -- GXRw98kFh1EUpyZshhW9lQECtmkxY-izr2bbiIIf-nc +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/guide/concepts/sources.md', 'Sources', '{"type":"minimark","value":[["p",{},"Content can already read a collection from a git repository, at a branch or at a\ntag, with auth for private ones and hash-based caching. duxt does not reimplement\nthat — it removes the boilerplate of declaring one collection per version and\nrepository."],["h2",{"id":"today"},"Today"],["p",{},"The mechanism, used directly:"],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"defineCollection({\n type: ''page'',\n source: {\n repository: { url: ''https://github.com/kirchDev/workflows'', tag: ''v0.7.0'' },\n include: ''docs/**/*.md'',\n prefix: ''/v0.7.0'',\n },\n})\n","filename":"content.config.ts","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sScJk"},"defineCollection"],["span",{"class":"sVt8B"},"({\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"}," type: "],["span",{"class":"sZZnC"},"''page''"],["span",{"class":"sVt8B"},",\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"}," source: {\n"]],["span",{"class":"line","line":4},["span",{"class":"sVt8B"}," repository: { url: "],["span",{"class":"sZZnC"},"''https://github.com/kirchDev/workflows''"],["span",{"class":"sVt8B"},", tag: "],["span",{"class":"sZZnC"},"''v0.7.0''"],["span",{"class":"sVt8B"}," },\n"]],["span",{"class":"line","line":5},["span",{"class":"sVt8B"}," include: "],["span",{"class":"sZZnC"},"''docs/**/*.md''"],["span",{"class":"sVt8B"},",\n"]],["span",{"class":"line","line":6},["span",{"class":"sVt8B"}," prefix: "],["span",{"class":"sZZnC"},"''/v0.7.0''"],["span",{"class":"sVt8B"},",\n"]],["span",{"class":"line","line":7},["span",{"class":"sVt8B"}," },\n"]],["span",{"class":"line","line":8},["span",{"class":"sVt8B"},"})\n"]]]],["h2",{"id":"the-shorthand"},"The shorthand"],["p",{},"Not built yet. The shape being aimed at:"],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"sources: [\n { path: ''docs'' },\n { path: ''docs'', refs: [''v1.x'', ''v2.x'', ''main''] },\n { repo: ''kirchDev/app'', path: ''docs'' },\n]\n","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sScJk"},"sources"],["span",{"class":"sVt8B"},": [\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"}," { path: "],["span",{"class":"sZZnC"},"''docs''"],["span",{"class":"sVt8B"}," },\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"}," { path: "],["span",{"class":"sZZnC"},"''docs''"],["span",{"class":"sVt8B"},", refs: ["],["span",{"class":"sZZnC"},"''v1.x''"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"''v2.x''"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"''main''"],["span",{"class":"sVt8B"},"] },\n"]],["span",{"class":"line","line":4},["span",{"class":"sVt8B"}," { repo: "],["span",{"class":"sZZnC"},"''kirchDev/app''"],["span",{"class":"sVt8B"},", path: "],["span",{"class":"sZZnC"},"''docs''"],["span",{"class":"sVt8B"}," },\n"]],["span",{"class":"line","line":5},["span",{"class":"sVt8B"},"]\n"]]]],["p",{},"Three versions across fourteen repositories is 42 collections by hand. That\nnumber is the whole argument for the shorthand."],["style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"today","depth":2,"text":"Today"},{"id":"the-shorthand","depth":2,"text":"The shorthand"}]}}', 'One repository, several repositories, several versions.', 'md', 'lucide:git-branch', NULL, '{}', NULL, '/duxt/guide/concepts/sources', '{"title":"Sources","description":"One repository, several repositories, several versions."}', 'duxt/guide/concepts/sources', 'XeHUNrfRmfv-106EZXWbI-FjZ0JjUDdNP1i43neCpEw'); -- XeHUNrfRmfv-106EZXWbI-FjZ0JjUDdNP1i43neCpEw +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/guide/index.md', 'Guide', '{"type":"minimark","value":[["p",{},"The getting-started pages take you from nothing to a running site. These go\ninto what the pieces are and where the seams sit."],["page-cards",{}],["callout",{"title":"Read the concepts first","type":"tip"},["p",{},"Sources and collections explain most of what the rest of the guide assumes."]]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'How the layer works, and how to bend it.', 'md', 'lucide:book-open', NULL, '{}', NULL, '/duxt/guide', '{"title":"Guide","description":"How the layer works, and how to bend it."}', 'duxt/guide/index', '-_gi4P75jGz7er_OgoCjvr4kCc5o1g0V6OesQtJ5xy4'); -- -_gi4P75jGz7er_OgoCjvr4kCc5o1g0V6OesQtJ5xy4 +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/guide/recipes/multi-repo.md', 'Documentation across repositories', '{"type":"minimark","value":[["p",{},"Each source repository holds nothing but Markdown. The site declares one\ncollection per repository and gives each its own prefix:"],["file-tree",{":tree":"[{\"name\":\"content.config.ts\"},{\"name\":\"nuxt.config.ts\"},{\"name\":\"package.json\"}]","title":"the site"}],["p",{},"The source repositories stay free of Nuxt entirely — which is what makes this\nwork for a Go or PHP project."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'One site, many projects.', 'md', 'lucide:folder-git', NULL, '{}', NULL, '/duxt/guide/recipes/multi-repo', '{"title":"Documentation across repositories","description":"One site, many projects."}', 'duxt/guide/recipes/multi-repo', 'ZKzc63Zqdezhif8iPc03p1bwlr5_emURNNAhBZZc83Y'); -- ZKzc63Zqdezhif8iPc03p1bwlr5_emURNNAhBZZc83Y +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/guide/recipes/versioned-docs.md', 'Versioned docs', '{"type":"minimark","value":[["p",{},"Point a collection at a tag and it becomes a version. The URL prefix keeps them\napart:"],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"const versions = [''v1.x'', ''v2.x'', ''main'']\n","filename":"content.config.ts","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"const"],["span",{"class":"sj4cs"}," versions"],["span",{"class":"szBVR"}," ="],["span",{"class":"sVt8B"}," ["],["span",{"class":"sZZnC"},"''v1.x''"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"''v2.x''"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"''main''"],["span",{"class":"sVt8B"},"]\n"]]]],["callout",{"title":"A page can be missing from a version","type":"warning"},["p",{},"Linking between versions needs a fallback rule for a page that only exists in\none of them. That rule is not designed yet."]],["style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'Serving several versions of the same documentation.', 'md', 'lucide:git-compare', NULL, '{}', NULL, '/duxt/guide/recipes/versioned-docs', '{"title":"Versioned docs","description":"Serving several versions of the same documentation."}', 'duxt/guide/recipes/versioned-docs', 'VvWdy9uqeZP67FXh-CJBaB-lrK33bhnZAjPXsBH-Qo4'); -- VvWdy9uqeZP67FXh-CJBaB-lrK33bhnZAjPXsBH-Qo4 +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/index.md', 'Documentation', '{"type":"minimark","value":[["p",{},"Everything duxt can do, in four parts. Start on the left, or pick the part you\ncame for."],["page-cards",{}],["callout",{"title":"Early days","type":"warning"},["p",{},"Nothing here is decided. The layer works, the theme is being built, and whether\nthis carries a public project is still an open question."]]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'A Nuxt layer that turns a repository''s docs folder into a documentation site.', 'md', 'lucide:book-open-text', NULL, '{}', false, '/duxt', '{"title":"Documentation","description":"A Nuxt layer that turns a repository''s docs folder into a documentation site."}', 'duxt/index', 'Z_ZWdWAlFBTJU3btgafK2K8rGYj6XNMG70h3fPzIa9E'); -- Z_ZWdWAlFBTJU3btgafK2K8rGYj6XNMG70h3fPzIa9E +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/reference/components.md', 'Layer components', '{"type":"minimark","value":[["p",{},"Every component below lives in the layer''s ",["code",{},"app/components/"],". Nuxt resolves a\nconsumer''s own file of the same name first, so replacing one is creating it —\nno configuration, no slot to thread a value through."],["callout",{"title":"Configure before you replace","type":"tip"},["p",{},"Most of what these render comes from ",["code",{},"app.config.ts"],". Replacing a component to\nchange a label is more than the job needs."]],["h2",{"id":"duxtheader"},"DuxtHeader"],["p",{},"The navbar: title, version badge, navigation with dropdowns, search, version\nswitcher, icon links, theme toggle, and the mobile sheet holding all of it."],["p",{},"Reads ",["code",{},"title"],", ",["code",{},"version"],", ",["code",{},"navigation"],", ",["code",{},"links"]," from the config."],["h2",{"id":"duxtsections"},"DuxtSections"],["p",{},"The second navbar row — one entry per ",["code",{},"sections"]," item. Hidden below ",["code",{},"lg"],",\nwhere the mobile sheet lists the same entries."],["h2",{"id":"duxtnavigation"},"DuxtNavigation"],["p",{},"The docs tree in the sidebar. Groups collapse; the group holding the current\npage opens on every navigation."],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"items"]],["td",{"align":"left"},["code",{},"ContentNavigationItem[]"]],["td",{"align":"left"},"The branch to render"]]]],["h2",{"id":"duxtnavigationlink"},"DuxtNavigationLink"],["p",{},"One entry in that tree. Recurses back into ",["code",{},"DuxtNavigation"]," for a nested group."],["h2",{"id":"duxttoc"},"DuxtToc"],["p",{},"The right column: the page''s own headings, with the current one marked, and\nthe fixed ",["code",{},"aside"]," links below them."],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"links"]],["td",{"align":"left"},["code",{},"{ id, text, depth, children? }[]"]],["td",{"align":"left"},"Page headings"]]]],["h2",{"id":"duxtbreadcrumb"},"DuxtBreadcrumb"],["p",{},"The trail from section to page. Switched off with ",["code",{},"breadcrumb: false"],"."],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"path"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"The page to build a trail for"]]]],["h2",{"id":"duxtpagenav"},"DuxtPageNav"],["p",{},"Previous and next, bounded to the current section."],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"path"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"The current page"]]]],["h2",{"id":"duxtsearch"},"DuxtSearch"],["p",{},"The ⌘K dialog. Fetches the index on first open."],["h2",{"id":"duxtversionswitcher"},"DuxtVersionSwitcher"],["p",{},"Shown when ",["code",{},"versions"]," holds more than one entry. Keeps the current page and\nswaps its version prefix."],["h2",{"id":"duxtcodeblock"},"DuxtCodeBlock"],["p",{},"The card around a code fence: filename bar, language icon, copy button."],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"code"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"Raw source, for the copy button and as a fallback"]],["tr",{},["td",{"align":"left"},["code",{},"language"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"Picks the icon when there is no filename"]],["tr",{},["td",{"align":"left"},["code",{},"filename"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"Shown in the header, picks the icon"]]]],["h2",{"id":"duxtfooter"},"DuxtFooter"],["p",{},"Columns, the note, and the legal row a consumer fills. The layer ships the row\nempty on purpose: an imprint belongs to whoever runs the site."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"duxtheader","depth":2,"text":"DuxtHeader"},{"id":"duxtsections","depth":2,"text":"DuxtSections"},{"id":"duxtnavigation","depth":2,"text":"DuxtNavigation"},{"id":"duxtnavigationlink","depth":2,"text":"DuxtNavigationLink"},{"id":"duxttoc","depth":2,"text":"DuxtToc"},{"id":"duxtbreadcrumb","depth":2,"text":"DuxtBreadcrumb"},{"id":"duxtpagenav","depth":2,"text":"DuxtPageNav"},{"id":"duxtsearch","depth":2,"text":"DuxtSearch"},{"id":"duxtversionswitcher","depth":2,"text":"DuxtVersionSwitcher"},{"id":"duxtcodeblock","depth":2,"text":"DuxtCodeBlock"},{"id":"duxtfooter","depth":2,"text":"DuxtFooter"}]}}', 'The chrome you can replace by dropping a file of the same name.', 'md', 'lucide:layout-panel-left', NULL, '{}', NULL, '/duxt/reference/components', '{"title":"Layer components","description":"The chrome you can replace by dropping a file of the same name."}', 'duxt/reference/components', 'z9QtARwt1gAXQGx8ETZeV_HWFjNHIio51lIbuQuklbU'); -- z9QtARwt1gAXQGx8ETZeV_HWFjNHIio51lIbuQuklbU +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/reference/composables.md', 'Composables', '{"type":"minimark","value":[["p",{},"Auto-imported, like every composable in a Nuxt layer."],["h2",{"id":"useduxtconfig"},"useDuxtConfig()"],["p",{},"The layer''s defaults with the consumer''s ",["code",{},"app.config.ts"]," merged over them."],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"const duxt = useDuxtConfig()\nduxt.title // ''duxt''\n","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"const"],["span",{"class":"sj4cs"}," duxt"],["span",{"class":"szBVR"}," ="],["span",{"class":"sScJk"}," useDuxtConfig"],["span",{"class":"sVt8B"},"()\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"},"duxt.title "],["span",{"class":"sJ8bj"},"// ''duxt''\n"]]]],["p",{},"Read this rather than ",["code",{},"useAppConfig().duxt"],". Nuxt merges app.config with defu,\nwhich ",["strong",{},"concatenates arrays"]," — a consumer setting ",["code",{},"navigation"]," would get the\nlayer''s entries appended to its own. This merge replaces arrays and merges\nobjects key by key."],["h2",{"id":"useduxtsectionnavigation"},"useDuxtSection(navigation)"],["p",{},"The section the current route belongs to, and the branch of the tree it owns."],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"const { data: navigation } = await useAsyncData(''nav'', () =>\n queryCollectionNavigation(''docs''))\n\nconst { section, items } = useDuxtSection(navigation)\n","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"const"],["span",{"class":"sVt8B"}," { "],["span",{"class":"s4XuR"},"data"],["span",{"class":"sVt8B"},": "],["span",{"class":"sj4cs"},"navigation"],["span",{"class":"sVt8B"}," } "],["span",{"class":"szBVR"},"="],["span",{"class":"szBVR"}," await"],["span",{"class":"sScJk"}," useAsyncData"],["span",{"class":"sVt8B"},"("],["span",{"class":"sZZnC"},"''nav''"],["span",{"class":"sVt8B"},", () "],["span",{"class":"szBVR"},"=>\n"]],["span",{"class":"line","line":2},["span",{"class":"sScJk"}," queryCollectionNavigation"],["span",{"class":"sVt8B"},"("],["span",{"class":"sZZnC"},"''docs''"],["span",{"class":"sVt8B"},"))\n"]],["span",{"class":"line","line":3},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":4},["span",{"class":"szBVR"},"const"],["span",{"class":"sVt8B"}," { "],["span",{"class":"sj4cs"},"section"],["span",{"class":"sVt8B"},", "],["span",{"class":"sj4cs"},"items"],["span",{"class":"sVt8B"}," } "],["span",{"class":"szBVR"},"="],["span",{"class":"sScJk"}," useDuxtSection"],["span",{"class":"sVt8B"},"(navigation)\n"]]]],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Returns"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"What it is"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"section"]],["td",{"align":"left"},["code",{},"DuxtLink | undefined"]],["td",{"align":"left"},"The matching ",["code",{},"sections"]," entry"]],["tr",{},["td",{"align":"left"},["code",{},"items"]],["td",{"align":"left"},["code",{},"ContentNavigationItem[]"]],["td",{"align":"left"},"That section''s pages, or everything"]]]],["h2",{"id":"useduxttoast"},"useDuxtToast()"],["p",{},"Toasts, without importing the toast library."],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"const toast = useDuxtToast()\ntoast.success(''Copied to clipboard'')\ntoast.error(''Could not copy'', ''The clipboard is unavailable here.'')\n","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"const"],["span",{"class":"sj4cs"}," toast"],["span",{"class":"szBVR"}," ="],["span",{"class":"sScJk"}," useDuxtToast"],["span",{"class":"sVt8B"},"()\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"},"toast."],["span",{"class":"sScJk"},"success"],["span",{"class":"sVt8B"},"("],["span",{"class":"sZZnC"},"''Copied to clipboard''"],["span",{"class":"sVt8B"},")\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"},"toast."],["span",{"class":"sScJk"},"error"],["span",{"class":"sVt8B"},"("],["span",{"class":"sZZnC"},"''Could not copy''"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"''The clipboard is unavailable here.''"],["span",{"class":"sVt8B"},")\n"]]]],["p",{},["code",{},"success"],", ",["code",{},"info"],", ",["code",{},"warning"],", ",["code",{},"error"],", ",["code",{},"loading"]," and ",["code",{},"dismiss"],". Each level has\nits own icon and status colour. Replace this one composable to swap the\nnotification system for the whole layer."],["h2",{"id":"usepackagemanager"},"usePackageManager()"],["p",{},"The reader''s chosen package manager, as a cookie."],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"const manager = usePackageManager() // Ref\n","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"const"],["span",{"class":"sj4cs"}," manager"],["span",{"class":"szBVR"}," ="],["span",{"class":"sScJk"}," usePackageManager"],["span",{"class":"sVt8B"},"() "],["span",{"class":"sJ8bj"},"// Ref\n"]]]],["p",{},"A cookie rather than localStorage so the server renders the right tab — see\n",["a",{"href":"/getting-started/installation"},"Installation"],". First-party, no identifier, no\nconsent banner needed."],["h2",{"id":"useactiveheadingids"},"useActiveHeading(ids)"],["p",{},"The heading currently in view, for marking a table of contents."],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"const active = useActiveHeading(computed(() => [''intro'', ''usage'']))\n","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"const"],["span",{"class":"sj4cs"}," active"],["span",{"class":"szBVR"}," ="],["span",{"class":"sScJk"}," useActiveHeading"],["span",{"class":"sVt8B"},"("],["span",{"class":"sScJk"},"computed"],["span",{"class":"sVt8B"},"(() "],["span",{"class":"szBVR"},"=>"],["span",{"class":"sVt8B"}," ["],["span",{"class":"sZZnC"},"''intro''"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"''usage''"],["span",{"class":"sVt8B"},"]))\n"]]]],["h2",{"id":"highlightshellcode"},"highlightShell(code)"],["p",{},"Highlights a shell command with the same themes as the Markdown fences. Runs on\nthe server through ",["code",{},"useAsyncData"],", so the highlighter stays out of the client\nbundle."],["h2",{"id":"fileiconname-foldericonopen"},"fileIcon(name) / folderIcon(open)"],["p",{},"The icon for a filename, language id or folder. Used by the code block header\nand the file tree, so the same file looks the same in both."],["style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"useduxtconfig","depth":2,"text":"useDuxtConfig()"},{"id":"useduxtsectionnavigation","depth":2,"text":"useDuxtSection(navigation)"},{"id":"useduxttoast","depth":2,"text":"useDuxtToast()"},{"id":"usepackagemanager","depth":2,"text":"usePackageManager()"},{"id":"useactiveheadingids","depth":2,"text":"useActiveHeading(ids)"},{"id":"highlightshellcode","depth":2,"text":"highlightShell(code)"},{"id":"fileiconname-foldericonopen","depth":2,"text":"fileIcon(name) / folderIcon(open)"}]}}', 'The functions the layer exposes to a consumer''s own components.', 'md', 'lucide:function-square', NULL, '{}', NULL, '/duxt/reference/composables', '{"title":"Composables","description":"The functions the layer exposes to a consumer''s own components."}', 'duxt/reference/composables', 'Y0RweLEoa20QQXQ7bVjMiH3Wdz18cyF0oF7YXqCX0qo'); -- Y0RweLEoa20QQXQ7bVjMiH3Wdz18cyF0oF7YXqCX0qo +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/reference/index.md', 'Reference', '{"type":"minimark","value":[["p",{},"What a consumer can call, override or configure. A name documented here is\npart of the public surface: renaming it is a breaking change."],["page-cards",{}]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'Every part of the layer''s public surface — components, MDC blocks and composables.', 'md', 'lucide:list', NULL, '{}', NULL, '/duxt/reference', '{"title":"Reference","description":"Every part of the layer''s public surface — components, MDC blocks and composables."}', 'duxt/reference/index', '1lmypga1r8AWLpQXXiMuEo7bP8gYkCpGQ31SaZbfxC0'); -- 1lmypga1r8AWLpQXXiMuEo7bP8gYkCpGQ31SaZbfxC0 +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/reference/mdc-components.md', 'MDC components', '{"type":"minimark","value":[["p",{},"Anything in ",["code",{},"app/components/content/"]," is callable from Markdown. These ship\nwith the layer."],["h2",{"id":"callout"},"Callout"],["callout",{"title":"A callout","type":"tip"},["p",{},"Body text, rendered as Markdown."]],["pre",{"className":"language-md shiki shiki-themes github-light github-dark","code":"::callout{type=\"warning\" title=\"Careful\"}\nBody text.\n::\n","language":"md","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sVt8B"},"::callout{type=\"warning\" title=\"Careful\"}\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"},"Body text.\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"},"::\n"]]]],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"Default"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"type"]],["td",{"align":"left"},["code",{},"info"]," | ",["code",{},"tip"]," | ",["code",{},"warning"]," | ",["code",{},"danger"]],["td",{"align":"left"},["code",{},"info"]],["td",{"align":"left"},"Icon and accent colour"]],["tr",{},["td",{"align":"left"},["code",{},"title"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"—"],["td",{"align":"left"},"Bold line above the body"]],["tr",{},["td",{"align":"left"},["code",{},"icon"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"by type"],["td",{"align":"left"},"Overrides the icon"]]]],["p",{},"The body is the default slot: any Markdown, including nested components."],["h2",{"id":"packagemanagers"},"PackageManagers"],["package-managers",{"command":"add -D @kirchdev/duxt"}],["pre",{"className":"language-md shiki shiki-themes github-light github-dark","code":"::package-managers{command=\"add -D @kirchdev/duxt\"}\n::\n","language":"md","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sVt8B"},"::package-managers{command=\"add -D @kirchdev/duxt\"}\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"},"::\n"]]]],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"Default"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"command"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"required"],["td",{"align":"left"},"Written once, rendered per manager"]],["tr",{},["td",{"align":"left"},["code",{},"managers"]],["td",{"align":"left"},["code",{},"string[]"]],["td",{"align":"left"},["code",{},"packageManagers"]],["td",{"align":"left"},"Overrides the site-wide list for this block only"]]]],["p",{},["code",{},"npm"],"''s ",["code",{},"install"],", ",["code",{},"npx"],", ",["code",{},"yarn dlx"]," and ",["code",{},"bunx"]," are substituted for you. The\nreader''s choice is remembered in a cookie, so the server renders the right tab."],["h2",{"id":"filetree"},"FileTree"],["file-tree",{":tree":"[{\"name\":\"docs/\",\"children\":[{\"name\":\"index.md\"}]},{\"name\":\"nuxt.config.ts\"}]","title":"example/"}],["pre",{"className":"language-md shiki shiki-themes github-light github-dark","code":"::file-tree{title=\"example/\"}\n---\ntree:\n - name: docs/\n children:\n - name: index.md\n - name: nuxt.config.ts\n---\n::\n","language":"md","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sVt8B"},"::file-tree{title=\"example/\"}\n"]],["span",{"class":"line","line":2},["span",{"class":"sq-ep"},"---\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"},"tree:\n"]],["span",{"class":"line","line":4},["span",{"class":"s4XuR"}," -"],["span",{"class":"sVt8B"}," name: docs/\n"]],["span",{"class":"line","line":5},["span",{"class":"sVt8B"}," children:\n"]],["span",{"class":"line","line":6},["span",{"class":"s4XuR"}," -"],["span",{"class":"sVt8B"}," name: index.md\n"]],["span",{"class":"line","line":7},["span",{"class":"s4XuR"}," -"],["span",{"class":"sVt8B"}," name: nuxt.config.ts\n"]],["span",{"class":"line","line":8},["span",{"class":"sq-ep"},"---\n"]],["span",{"class":"line","line":9},["span",{"class":"sVt8B"},"::\n"]]]],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"Default"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"tree"]],["td",{"align":"left"},["code",{},"{ name, children? }[]"]],["td",{"align":"left"},["code",{},"[]"]],["td",{"align":"left"},"The structure"]],["tr",{},["td",{"align":"left"},["code",{},"title"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"—"],["td",{"align":"left"},"Header above the tree"]]]],["p",{},"A name ending in ",["code",{},"/"],", or one with children, is a directory. File icons follow\nthe extension."],["h2",{"id":"steps"},"Steps"],["steps",{},["ol",{},["li",{},"Write an ordered list."],["li",{},"Wrap it."]]],["pre",{"className":"language-md shiki shiki-themes github-light github-dark","code":"::steps\n1. Write an ordered list.\n2. Wrap it.\n::\n","language":"md","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sVt8B"},"::steps\n"]],["span",{"class":"line","line":2},["span",{"class":"s4XuR"},"1."],["span",{"class":"sVt8B"}," Write an ordered list.\n"]],["span",{"class":"line","line":3},["span",{"class":"s4XuR"},"2."],["span",{"class":"sVt8B"}," Wrap it.\n"]],["span",{"class":"line","line":4},["span",{"class":"sVt8B"},"::\n"]]]],["p",{},"No props — it numbers whatever list it wraps."],["h2",{"id":"pagecards"},"PageCards"],["p",{},"Renders one card per child of the current section, from the navigation. Used on\na section''s index page."],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Prop"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"Default"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"path"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"current route"],["td",{"align":"left"},"Which section''s children to show"]]]],["h2",{"id":"prose-overrides"},"Prose overrides"],["p",{},["code",{},"ProseH2"],", ",["code",{},"ProseH3"],", ",["code",{},"ProseH4"]," add anchor links; ",["code",{},"ProsePre"]," adds the filename\nbar and copy button. Replace any of them by putting a file of the same name in\nyour own ",["code",{},"components/content/"],"."],["style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sq-ep, html code.shiki .sq-ep{--shiki-default:#005CC5;--shiki-default-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"callout","depth":2,"text":"Callout"},{"id":"packagemanagers","depth":2,"text":"PackageManagers"},{"id":"filetree","depth":2,"text":"FileTree"},{"id":"steps","depth":2,"text":"Steps"},{"id":"pagecards","depth":2,"text":"PageCards"},{"id":"prose-overrides","depth":2,"text":"Prose overrides"}]}}', 'The blocks a Markdown page can call, with their props.', 'md', 'lucide:blocks', NULL, '{}', NULL, '/duxt/reference/mdc-components', '{"title":"MDC components","description":"The blocks a Markdown page can call, with their props."}', 'duxt/reference/mdc-components', '6KsWDuRlcJegvGkpb--VoeSFQUYJ4LD_7UoyFRbltzk'); -- 6KsWDuRlcJegvGkpb--VoeSFQUYJ4LD_7UoyFRbltzk +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/reference/sources.md', 'duxtSources()', '{"type":"minimark","value":[["p",{},"Declaring one collection per version and repository by hand does not scale —\nthree versions across fourteen repositories is 42 declarations. ",["code",{},"duxtSources"],"\ngenerates them from a list."],["pre",{"className":"language-ts shiki shiki-themes github-light github-dark","code":"import { defineContentConfig } from ''@nuxt/content''\nimport { duxtSources } from ''@kirchdev/duxt/sources''\n\nexport default defineContentConfig({\n collections: duxtSources([\n { path: ''docs'' },\n { path: ''docs'', refs: [''v1.x'', ''v2.x'', ''main''] },\n { repo: ''kirchDev/app'', path: ''docs'' },\n ]),\n})\n","filename":"content.config.ts","language":"ts","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"szBVR"},"import"],["span",{"class":"sVt8B"}," { defineContentConfig } "],["span",{"class":"szBVR"},"from"],["span",{"class":"sZZnC"}," ''@nuxt/content''\n"]],["span",{"class":"line","line":2},["span",{"class":"szBVR"},"import"],["span",{"class":"sVt8B"}," { duxtSources } "],["span",{"class":"szBVR"},"from"],["span",{"class":"sZZnC"}," ''@kirchdev/duxt/sources''\n"]],["span",{"class":"line","line":3},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":4},["span",{"class":"szBVR"},"export"],["span",{"class":"szBVR"}," default"],["span",{"class":"sScJk"}," defineContentConfig"],["span",{"class":"sVt8B"},"({\n"]],["span",{"class":"line","line":5},["span",{"class":"sVt8B"}," collections: "],["span",{"class":"sScJk"},"duxtSources"],["span",{"class":"sVt8B"},"([\n"]],["span",{"class":"line","line":6},["span",{"class":"sVt8B"}," { path: "],["span",{"class":"sZZnC"},"''docs''"],["span",{"class":"sVt8B"}," },\n"]],["span",{"class":"line","line":7},["span",{"class":"sVt8B"}," { path: "],["span",{"class":"sZZnC"},"''docs''"],["span",{"class":"sVt8B"},", refs: ["],["span",{"class":"sZZnC"},"''v1.x''"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"''v2.x''"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"''main''"],["span",{"class":"sVt8B"},"] },\n"]],["span",{"class":"line","line":8},["span",{"class":"sVt8B"}," { repo: "],["span",{"class":"sZZnC"},"''kirchDev/app''"],["span",{"class":"sVt8B"},", path: "],["span",{"class":"sZZnC"},"''docs''"],["span",{"class":"sVt8B"}," },\n"]],["span",{"class":"line","line":9},["span",{"class":"sVt8B"}," ]),\n"]],["span",{"class":"line","line":10},["span",{"class":"sVt8B"},"})\n"]]]],["h2",{"id":"a-source"},"A source"],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Key"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"Default"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"path"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},["code",{},"docs"]],["td",{"align":"left"},"Folder holding the Markdown"]],["tr",{},["td",{"align":"left"},["code",{},"repo"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"this repository"],["td",{"align":"left"},["code",{},"owner/name"]," or a full git URL"]],["tr",{},["td",{"align":"left"},["code",{},"refs"]],["td",{"align":"left"},["code",{},"string[]"]],["td",{"align":"left"},"the checkout"],["td",{"align":"left"},"Branches or tags published as versions"]],["tr",{},["td",{"align":"left"},["code",{},"label"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"the ref"],["td",{"align":"left"},"Shown in the switcher and used in the URL"]],["tr",{},["td",{"align":"left"},["code",{},"slug"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"the repo name"],["td",{"align":"left"},"Segment used in the URL for this repository"]]]],["h2",{"id":"options"},"Options"],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Key"],["th",{"align":"left"},"Type"],["th",{"align":"left"},"Default"],["th",{"align":"left"},"What it does"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"showRepo"]],["td",{"align":"left"},["code",{},"boolean"]],["td",{"align":"left"},"more than one repo"],["td",{"align":"left"},"Forces a repository segment"]],["tr",{},["td",{"align":"left"},["code",{},"showVersion"]],["td",{"align":"left"},["code",{},"boolean"]],["td",{"align":"left"},"more than one ref"],["td",{"align":"left"},"Forces a version segment"]],["tr",{},["td",{"align":"left"},["code",{},"defaultRef"]],["td",{"align":"left"},["code",{},"string"]],["td",{"align":"left"},"the first ref"],["td",{"align":"left"},"The ref served without a version prefix"]]]],["h2",{"id":"the-url-scheme"},"The URL scheme"],["pre",{"className":["language-text"],"code":"domain.tld////…/\n","language":"text"},["code",{"__ignoreMap":""},"domain.tld////…/\n"]],["p",{},"Both prefixes are switched on by the ",["strong",{},"shape of the list"],", not per request: a\nrepository segment appears once there is more than one repository, a version\nsegment once there is more than one version. A single unversioned source\ntherefore serves ",["code",{},"/guide/deploying"],", and nothing in the URL says that\nrepositories or versions exist at all."],["p",{},"Deciding at build time is what keeps the scheme routable. Were both prefixes\noptional per request, ",["code",{},"/guide/…"]," could be a folder, a repository or a version."],["callout",{"title":"Name collisions are rejected, not resolved","type":"warning"},["p",{},"With a prefix active, a docs folder named like a repository or a version would\nbe ambiguous. ",["code",{},"duxtSources"]," throws at build rather than picking one silently —\ngive the source a ",["code",{},"slug"]," or a ",["code",{},"label"],"."]],["h2",{"id":"a-missing-page"},"A missing page"],["p",{},"A page absent from the version being read is a ",["strong",{},"404"],", not a redirect. The\nerror page names the versions that do have it and links them. Sending the\nreader to another version''s copy would leave them reading something they did\nnot ask for, believing they did."],["style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"a-source","depth":2,"text":"A source"},{"id":"options","depth":2,"text":"Options"},{"id":"the-url-scheme","depth":2,"text":"The URL scheme"},{"id":"a-missing-page","depth":2,"text":"A missing page"}]}}', 'Turn a compact source list into Content collections.', 'md', 'lucide:git-branch', NULL, '{}', NULL, '/duxt/reference/sources', '{"title":"duxtSources()","description":"Turn a compact source list into Content collections."}', 'duxt/reference/sources', 'PWm2EQrhrbIwpYfCHJTVY2gYPipmk8eSlZd6lTVjFks'); -- PWm2EQrhrbIwpYfCHJTVY2gYPipmk8eSlZd6lTVjFks +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/structure/components.md', 'Components in Markdown', '{"type":"minimark","value":[["p",{},"Content ships MDC, so a page calls a component with block syntax:"],["pre",{"className":"language-md shiki shiki-themes github-light github-dark","code":"::callout{type=\"tip\" title=\"A callout\"}\nMarkdown inside a Vue component.\n::\n","language":"md","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sVt8B"},"::callout{type=\"tip\" title=\"A callout\"}\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"},"Markdown inside a Vue component.\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"},"::\n"]]]],["callout",{"title":"A callout","type":"tip"},["p",{},"Markdown inside a Vue component."]],["h2",{"id":"what-ships-with-the-layer"},"What ships with the layer"],["h3",{"id":"callout"},"Callout"],["p",{},"Four intents — ",["code",{},"info"],", ",["code",{},"tip"],", ",["code",{},"warning"],", ",["code",{},"danger"],"."],["callout",{"title":"Danger","type":"danger"},["p",{},"For the things that lose data."]],["h3",{"id":"package-managers"},"Package managers"],["p",{},"One command, every manager — and the reader''s choice is remembered across\npages, in localStorage rather than a cookie: it never leaves the browser and\nidentifies nobody."],["package-managers",{"command":"dlx nuxi@latest init my-docs"}],["h3",{"id":"file-tree"},"File tree"],["p",{},"Icons follow the extension, so a ",["code",{},".ts"]," file looks like a ",["code",{},".ts"]," file:"],["file-tree",{":tree":"[{\"name\":\"app/\",\"children\":[{\"name\":\"components/\",\"children\":[{\"name\":\"DuxtHeader.vue\"}]},{\"name\":\"pages/\",\"children\":[{\"name\":\"index.vue\"}]}]},{\"name\":\"docs/\",\"children\":[{\"name\":\"index.md\"}]},{\"name\":\"nuxt.config.ts\"},{\"name\":\"package.json\"}]"}],["h3",{"id":"steps"},"Steps"],["steps",{},["ol",{},["li",{},"Write the list."],["li",{},"Wrap it in ",["code",{},"::steps"],"."],["li",{},"It numbers itself."]]],["h3",{"id":"toasts"},"Toasts"],["p",{},"Copying a code block raises one. Four levels, each with its own icon and\nstatus colour: ",["code",{},"success"],", ",["code",{},"info"],", ",["code",{},"warning"],", ",["code",{},"error"],". Components call\n",["code",{},"useDuxtToast()"]," rather than importing the toast library, so replacing the\nnotification system means replacing one composable."],["h2",{"id":"your-own-components"},"Your own components"],["p",{},"Anything in ",["code",{},"components/content/"]," is available the same way, including\ncomponents your project adds on top of the layer."],["callout",{"title":"Keep oxfmt away from docs/","type":"warning"},["p",{},"A Markdown formatter rewrites a component block''s YAML props into a list and\nindents its closing ",["code",{},"::"],", which turns the component back into literal text.\nThis repo excludes ",["code",{},"docs/"]," in ",["code",{},".oxfmtrc.json"]," and in ",["code",{},"lint-staged.config.ts"],"."]],["style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"what-ships-with-the-layer","depth":2,"text":"What ships with the layer","children":[{"id":"callout","depth":3,"text":"Callout"},{"id":"package-managers","depth":3,"text":"Package managers"},{"id":"file-tree","depth":3,"text":"File tree"},{"id":"steps","depth":3,"text":"Steps"},{"id":"toasts","depth":3,"text":"Toasts"}]},{"id":"your-own-components","depth":2,"text":"Your own components"}]}}', 'MDC lets a Markdown page call a Vue component. No MDX, no module.', 'md', 'lucide:blocks', NULL, '{}', NULL, '/duxt/structure/components', '{"title":"Components in Markdown","description":"MDC lets a Markdown page call a Vue component. No MDX, no module."}', 'duxt/structure/components', 'EkrdaUu4ntwbxVSGWJXUH-bAxqGJ4gxTuFqxov2jx7o'); -- EkrdaUu4ntwbxVSGWJXUH-bAxqGJ4gxTuFqxov2jx7o +INSERT INTO _content_docs_duxt VALUES ('docs_duxt/duxt/structure/index.md', 'Where your docs live', '{"type":"minimark","value":[["p",{},"Your Markdown stays in ",["code",{},"docs/"]," at the root of your repository. Where the ",["em",{},"site"],"\nlives is a separate question, and there are two answers."],["h2",{"id":"the-site-lives-elsewhere"},"The site lives elsewhere"],["p",{},"Your repository holds nothing but Markdown — no Nuxt, no ",["code",{},"package.json"],", no npm\ndependencies. A separate site reads ",["code",{},"docs/"]," straight from git, at a branch or at\na tag. This is the only sane option for a Go, PHP or Rust repository, and it is\nwhat lets one site serve many projects."],["h2",{"id":"the-site-lives-beside-your-docs"},"The site lives beside your docs"],["p",{},"A folder in the same repository holds the site, and ",["code",{},"docs/"]," stays at the root\nwhere a reader on GitHub expects it. Sensible when the repository is JavaScript\nanyway and the docs deploy together with the code. That is the arrangement this\nrepository itself uses: ",["code",{},"docs/"]," here, ",["code",{},"www/"]," beside it."],["file-tree",{":tree":"[{\"name\":\"docs/\",\"children\":[{\"name\":\"index.md\"},{\"name\":\"guides/\",\"children\":[{\"name\":\"deploying.md\"}]}]},{\"name\":\"nuxt.config.ts\"},{\"name\":\"package.json\"}]","title":"your-project/"}],["p",{},"In both cases the layer resolves ",["code",{},"docs/"]," against the ",["strong",{},"repository"]," root, not\nagainst the directory the site happens to run in."],["h2",{"id":"in-this-section"},"In this section"],["page-cards",{}]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"the-site-lives-elsewhere","depth":2,"text":"The site lives elsewhere"},{"id":"the-site-lives-beside-your-docs","depth":2,"text":"The site lives beside your docs"},{"id":"in-this-section","depth":2,"text":"In this section"}]}}', 'The two ways a project can carry a documentation site.', 'md', 'lucide:folder-tree', NULL, '{}', NULL, '/duxt/structure', '{"title":"Where your docs live","description":"The two ways a project can carry a documentation site."}', 'duxt/structure/index', '2VN8wZouSzFEkTyb8g2vMNlFY5Srsnf00atv_GVpbJI'); -- 2VN8wZouSzFEkTyb8g2vMNlFY5Srsnf00atv_GVpbJI +UPDATE _content_info SET ready = true WHERE id = 'checksum_docs_duxt'; -- meta +CREATE TABLE IF NOT EXISTS _content_info (id TEXT PRIMARY KEY, "ready" BOOLEAN, "structureVersion" VARCHAR, "version" VARCHAR, "__hash__" TEXT UNIQUE); -- structure +INSERT INTO _content_info VALUES ('checksum_docs_workflows', false, 'cshF33POG6AtTmLe-IjziL3JiGGPCJgs5avQ1OmFtj4', 'v3.5.0--TQ9_dTvO8Uv4LqgMQLAay8DXVPhEp9ahKul3KNGtDQ4', 'vy7797xRZw1pIuD0cIKa_JCzoGf4HdFgZThl-oJugN4'); -- meta +DROP TABLE IF EXISTS _content_docs_workflows; -- structure +CREATE TABLE IF NOT EXISTS _content_docs_workflows (id TEXT PRIMARY KEY, "title" VARCHAR, "body" TEXT, "description" VARCHAR, "extension" VARCHAR, "icon" VARCHAR NULL, "layout" VARCHAR NULL, "meta" TEXT, "navigation" BOOLEAN NULL, "path" VARCHAR, "seo" TEXT DEFAULT '{}', "stem" VARCHAR, "__hash__" TEXT UNIQUE); -- structure +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/1.guides/1.migrate-a-repo-to-a-stub.md', 'Migrate a repo to a stub', '{"type":"minimark","value":[["h1",{"id":"migrate-a-repo-to-a-stub"},"Migrate a repo to a stub"],["p",{},"One repo, one workflow at a time. The file shrinks to a trigger and a ",["code",{},"uses:"],", and the checks the repo reports change name in the same run — which is the part that breaks something if it is left for later."],["h2",{"id":"steps"},"Steps"],["ol",{},["li",{},["strong",{},"Replace the body with a stub."]," Keep the trigger, delete everything under ",["code",{},"jobs:"]," except the call. A caller job may only carry ",["code",{},"name"],", ",["code",{},"uses"],", ",["code",{},"with"],", ",["code",{},"secrets"],", ",["code",{},"needs"],", ",["code",{},"if"],", ",["code",{},"strategy"],", ",["code",{},"concurrency"]," and ",["code",{},"permissions"]," — ",["code",{},"runs-on"]," is not allowed there and belongs to the body.",["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"# .github/workflows/promotion-pr.yml, complete\nname: Promotion PR\non:\n push:\n branches: [dev, stage]\njobs:\n promotion-pr:\n name: Promotion PR\n uses: kirchDev/workflows/.github/workflows/_promotion-pr.yml@ # v0.1.0\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sJ8bj"},"# .github/workflows/promotion-pr.yml, complete\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"},"name"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"Promotion PR\n"]],["span",{"class":"line","line":3},["span",{"class":"sj4cs"},"on"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":4},["span",{"class":"s9eBZ"}," push"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":5},["span",{"class":"s9eBZ"}," branches"],["span",{"class":"sVt8B"},": ["],["span",{"class":"sZZnC"},"dev"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"stage"],["span",{"class":"sVt8B"},"]\n"]],["span",{"class":"line","line":6},["span",{"class":"s9eBZ"},"jobs"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":7},["span",{"class":"s9eBZ"}," promotion-pr"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":8},["span",{"class":"s9eBZ"}," name"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"Promotion PR\n"]],["span",{"class":"line","line":9},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"kirchDev/workflows/.github/workflows/_promotion-pr.yml@"],["span",{"class":"sJ8bj"}," # v0.1.0\n"]]]],["br",{}],"List ",["code",{},"stage"]," even where no ",["code",{},"stage"]," branch exists: a filter naming a branch that is absent is a no-op, and it keeps the stub identical in every repo."],["li",{},["strong",{},"Pin the SHA, and put the version in a trailing comment."]," The tag is what a human reads; the SHA is what runs. Dependabot raises the bumps from there."],["li",{},["strong",{},"Pass the secrets the body needs, by name."]," Never ",["code",{},"secrets: inherit"],".",["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Body"],["th",{"align":"left"},"Secret"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"_queue-branch.yml"],", ",["code",{},"_fast-forward-queue.yml"],", ",["code",{},"_release-please.yml"],", ",["code",{},"_publish-goreleaser.yml"]],["td",{"align":"left"},["code",{},"BWS_ACCESS_TOKEN"]]],["tr",{},["td",{"align":"left"},["code",{},"_publish-npm.yml"]],["td",{"align":"left"},["code",{},"NPM_TOKEN"]]]]],["br",{}],"The remaining bodies take no secrets."],["li",{},["strong",{},"Move the branch-protection rule to the new check names."]," A called job reports as ",["code",{}," / "],", so every required check the repo declares changes string. A rule left on the old name waits for a check that will never arrive, and the PR never becomes mergeable.",["br",{}],"Read the body''s job names out of the body itself and the caller name out of the stub you just wrote. Two that catch people out:",["ul",{},["li",{},["code",{},"_fast-forward-queue.yml"]," reports ",["strong",{},"four"]," jobs where the old copies reported three — ",["code",{},"Resolve the integration branch"]," is where the ",["code",{},"INTEGRATION_BRANCH"]," literal went."],["li",{},["code",{},"_ci-lighthouse.yml"]," reports one job per shard plus a merge job, where a hand-written audit reported one."]]],["li",{},["strong",{},"Take the fix that comes with the body."]," Some repos are behind rather than different, and the migration is what carries the correction. Check ",["code",{},"CLAUDE.md"]," in this repository for the measured list before opening the PR — a repo on the short queue workflow gains the App-token path it never had, and an npm repo without the prerelease-version fix stops publishing a ",["code",{},"dev"]," version that semver ranks below its own latest release."],["li",{},["strong",{},"Delete the old file''s body, not the file."]," The stub keeps the filename every other repo uses, which is what makes the estate greppable."]],["h2",{"id":"three-triggers-worth-fixing-while-you-are-here"},"Three triggers worth fixing while you are here"],["p",{},"A migration is the moment the trigger block gets read anyway. Three things in the copied ones cost runner time for nothing, and each is a line:"],["p",{},["strong",{},"Scan on the release branch only."]," A push to an integration branch always has a pull request open on it, and that PR run examines the same tree — so ",["code",{},"push: branches: [main, dev]"]," runs the analysis twice for one result. Drop ",["code",{},"dev"],":"],["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"on:\n push:\n branches: [main]\n pull_request:\n branches: [main, dev]\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sj4cs"},"on"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"}," push"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":3},["span",{"class":"s9eBZ"}," branches"],["span",{"class":"sVt8B"},": ["],["span",{"class":"sZZnC"},"main"],["span",{"class":"sVt8B"},"]\n"]],["span",{"class":"line","line":4},["span",{"class":"s9eBZ"}," pull_request"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":5},["span",{"class":"s9eBZ"}," branches"],["span",{"class":"sVt8B"},": ["],["span",{"class":"sZZnC"},"main"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"dev"],["span",{"class":"sVt8B"},"]\n"]]]],["p",{},["strong",{},"Skip what prose cannot break."]," A change touching only Markdown cannot fail a lint or a typecheck:"],["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"paths-ignore:\n - ''**.md''\n - ''docs/**''\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"s9eBZ"},"paths-ignore"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"}," - "],["span",{"class":"sZZnC"},"''**.md''\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"}," - "],["span",{"class":"sZZnC"},"''docs/**''\n"]]]],["p",{},"Never exclude ",["code",{},".github/workflows/**"]," from a CodeQL trigger — the ",["code",{},"actions"]," language is what scans them."],["p",{},["strong",{},"Gate the expensive jobs on the tree marker."]," Where a repo runs a suite worth minutes, put ",["code",{},"_verified.yml"]," in front of it and record the result at the end. A tree that already passed is then skipped whichever trigger brings it back:"],["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"jobs:\n verified:\n uses: kirchDev/workflows/.github/workflows/_verified.yml@\n\n test:\n needs: verified\n if: needs.verified.outputs.skip != ''true''\n uses: kirchDev/workflows/.github/workflows/_ci-node.yml@\n\n record-verified:\n needs: [verified, test]\n if: needs.test.result == ''success''\n uses: kirchDev/workflows/.github/workflows/_record-verified.yml@\n with:\n tree: ${{ needs.verified.outputs.tree }}\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"s9eBZ"},"jobs"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"}," verified"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":3},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"kirchDev/workflows/.github/workflows/_verified.yml@\n"]],["span",{"class":"line","line":4},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":5},["span",{"class":"s9eBZ"}," test"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":6},["span",{"class":"s9eBZ"}," needs"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"verified\n"]],["span",{"class":"line","line":7},["span",{"class":"s9eBZ"}," if"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"needs.verified.outputs.skip != ''true''\n"]],["span",{"class":"line","line":8},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"kirchDev/workflows/.github/workflows/_ci-node.yml@\n"]],["span",{"class":"line","line":9},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":10},["span",{"class":"s9eBZ"}," record-verified"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":11},["span",{"class":"s9eBZ"}," needs"],["span",{"class":"sVt8B"},": ["],["span",{"class":"sZZnC"},"verified"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"test"],["span",{"class":"sVt8B"},"]\n"]],["span",{"class":"line","line":12},["span",{"class":"s9eBZ"}," if"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"needs.test.result == ''success''\n"]],["span",{"class":"line","line":13},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"kirchDev/workflows/.github/workflows/_record-verified.yml@\n"]],["span",{"class":"line","line":14},["span",{"class":"s9eBZ"}," with"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":15},["span",{"class":"s9eBZ"}," tree"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"${{ needs.verified.outputs.tree }}\n"]]]],["blockquote",{},["p",{},["span",{},"!IMPORTANT"],"\nA gated job reports as ",["strong",{},"skipped"],", not as passed. Whether a skipped job satisfies a required check is not verified for this estate — confirm it on one repo before making the marker a rule, or a green run will look blocked."]],["h2",{"id":"checklist"},"Checklist"],["ul",{"className":["contains-task-list"]},["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The workflow file contains a trigger and a ",["code",{},"uses:"],", and nothing else."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The ",["code",{},"uses:"]," names a commit SHA with the version as a trailing comment."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Every secret the body declares is passed by name; ",["code",{},"secrets: inherit"]," appears nowhere."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Every required check in the repo''s branch protection matches a ",["code",{}," / "]," name that the new run actually reports."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," A run has completed green on the branch, and the check names in it match the rule."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Any fix the body carries for this repo is named in the PR description, so the change is reviewed as a fix rather than a port."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The ",["code",{},"push"]," trigger of any analysis workflow names the release branch only, so one change is not scanned twice."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," A ",["code",{},"paths-ignore"]," covers prose where the workflow cannot be affected by it."]],["style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"steps","depth":2,"text":"Steps"},{"id":"three-triggers-worth-fixing-while-you-are-here","depth":2,"text":"Three triggers worth fixing while you are here"},{"id":"checklist","depth":2,"text":"Checklist"}]}}', 'Replace a repo copy of a workflow with a call to the central body, and move its branch-protection rule to the check names the call produces.', 'md', NULL, NULL, '{}', NULL, '/workflows/guides/migrate-a-repo-to-a-stub', '{"title":"Migrate a repo to a stub","description":"Replace a repo copy of a workflow with a call to the central body, and move its branch-protection rule to the check names the call produces."}', 'workflows/1.guides/1.migrate-a-repo-to-a-stub', '4l2AFobHONzmXJA62L0dZQC1zrax6h-Ll2Ac4nHPhD0'); -- 4l2AFobHONzmXJA62L0dZQC1zrax6h-Ll2Ac4nHPhD0 +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/1.guides/2.add-a-body.md', 'Add a body', '{"type":"minimark","value":[["h1",{"id":"add-a-body"},"Add a body"],["p",{},"A body runs in every repo that calls it, so the question to hold throughout is what a repo on a different branch topology, a different runner or a different stack does with it."],["h2",{"id":"steps"},"Steps"],["ol",{},["li",{},["strong",{},"Name the file ",["code",{},"_.yml"],"."]," The underscore marks a file that never runs on its own, keeps the bodies together in the Actions sidebar, and leaves the unprefixed name free for this repository''s own stub."],["li",{},["strong",{},"Give it ",["code",{},"on: workflow_call"]," and nothing else."]," A body has no trigger of its own. Anything that has to be dispatched, scheduled or fired by a push stays in the stub — a reusable workflow cannot be the target of a ",["code",{},"workflow_dispatch"],"."],["li",{},["strong",{},"Hardcode ",["code",{},"runs-on: ubuntu-latest"],"."]," A caller cannot set it, and making it an input has not been needed."],["li",{},["strong",{},"Derive what the repo can answer; take an input only for what it cannot."]," The branch topology, the owner and the check list are properties of the calling repo — read them. A version matrix or a language set is not, so those are inputs. See ",["a",{"href":"../adr/0001-derive-a-bodys-configuration-from-the-repo"},"ADR-0001"],"."],["li",{},["strong",{},"Declare each secret the body needs under ",["code",{},"secrets:"],"."]," Named, never inherited — see ",["a",{"href":"../adr/0003-name-every-secret-a-stub-passes"},"ADR-0003"],"."],["li",{},["strong",{},"Choose the job names deliberately."]," They are the second half of every caller''s check names, so a rename breaks required checks in every calling repo at once. Treat them as a public interface from the first commit, and prefer a name that survives the body growing a job."],["li",{},["strong",{},"Write this repository''s own stub for it."]," Same filename other repos use, with a local path:",["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"jobs:\n promotion-pr:\n uses: ./.github/workflows/_promotion-pr.yml\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"s9eBZ"},"jobs"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"}," promotion-pr"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":3},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"./.github/workflows/_promotion-pr.yml\n"]]]],["br",{}],"The body then runs here on every change, so a broken one fails at home before it reaches a caller."],["li",{},["strong",{},"Pass every command input through ",["code",{},"env:"],", never into the ",["code",{},"run:"]," block."]," An interpolated ",["code",{},"${{ inputs.x }}"]," becomes part of the script text before the shell parses it, so a value can break out of the command it was meant to be:",["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"# wrong — the value is interpolated into the script\n- run: ${{ inputs.build-command }}\n\n# right — the value stays a value\n- env:\n BUILD_COMMAND: ${{ inputs.build-command }}\n run: bash -c \"$BUILD_COMMAND\"\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sJ8bj"},"# wrong — the value is interpolated into the script\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"},"- "],["span",{"class":"s9eBZ"},"run"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"${{ inputs.build-command }}\n"]],["span",{"class":"line","line":3},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":4},["span",{"class":"sJ8bj"},"# right — the value stays a value\n"]],["span",{"class":"line","line":5},["span",{"class":"sVt8B"},"- "],["span",{"class":"s9eBZ"},"env"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":6},["span",{"class":"s9eBZ"}," BUILD_COMMAND"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"${{ inputs.build-command }}\n"]],["span",{"class":"line","line":7},["span",{"class":"s9eBZ"}," run"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"bash -c \"$BUILD_COMMAND\"\n"]]]],["br",{}],"This holds for anything the caller supplies and for the mutable parts of the ",["code",{},"github"]," context — ",["code",{},"ref_name"]," and ",["code",{},"run_number"]," among them. CodeQL flags the interpolated form as code injection, and it is right to."],["li",{},["strong",{},"Do not call the repository''s composite action from the body."]," A relative ",["code",{},"uses:"]," resolves against the caller''s workspace — see ",["a",{"href":"../adr/0006-keep-the-composite-action-out-of-the-bodies"},"ADR-0006"],". Duplicate the setup steps instead."],["li",{},["strong",{},"Give the concurrency group this body''s own name."]," In a called workflow ",["code",{},"github.workflow"]," is the ",["em",{},"caller''s"]," name, so two bodies the same caller invokes share one group and cancel each other — the second to start kills the first, and the run reports a job that never ran:",["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"concurrency:\n group: ${{ github.workflow }}-ci-laravel-${{ github.event.pull_request.number || github.ref }}\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"s9eBZ"},"concurrency"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"}," group"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"${{ github.workflow }}-ci-laravel-${{ github.event.pull_request.number || github.ref }}\n"]]]]],["li",{},["strong",{},"Run the linters."]," ",["code",{},"pnpm lint:actions"]," runs actionlint over every workflow and needs Docker; ",["code",{},"pnpm check"]," runs it as part of the gate."]],["h2",{"id":"checklist"},"Checklist"],["ul",{"className":["contains-task-list"]},["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The file is named ",["code",{},"_.yml"]," and its only trigger is ",["code",{},"workflow_call"],"."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," ",["code",{},"runs-on"]," is fixed in the body, and no caller is asked to supply it."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Every input is something the body genuinely cannot read from the repo it runs in."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Every secret is declared by name in the body and passed by name in the stub."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," No ",["code",{},"run:"]," block interpolates an input or a mutable ",["code",{},"github"]," value; each travels through ",["code",{},"env:"],"."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The concurrency group names this body, so it cannot cancel a sibling the same caller invoked."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Job names are ones you are willing to keep, because renaming one is an estate-wide branch-protection change."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," This repository carries a stub calling the body by local path, and it has run green."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," ",["code",{},"pnpm check"]," passes."]],["style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"steps","depth":2,"text":"Steps"},{"id":"checklist","depth":2,"text":"Checklist"}]}}', 'Write a new reusable workflow that other repos call, without giving callers a value they have to keep correct.', 'md', NULL, NULL, '{}', NULL, '/workflows/guides/add-a-body', '{"title":"Add a body","description":"Write a new reusable workflow that other repos call, without giving callers a value they have to keep correct."}', 'workflows/1.guides/2.add-a-body', 'mVkh4fiumClCxdFtHnbUjTSYqk1TvbVM1C8jqA_Vb8U'); -- mVkh4fiumClCxdFtHnbUjTSYqk1TvbVM1C8jqA_Vb8U +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/1.guides/index.md', 'Guides', '{"type":"minimark","value":[["h1",{"id":"guides"},"Guides"],["p",{},"Both tasks change something outside this repository — the first changes another repo''s checks, the second changes what every caller runs. Each page ends with a checklist for that reason."],["ul",{},["li",{},["a",{"href":"migrate-a-repo-to-a-stub"},"Migrate a repo to a stub"]," — replace a copied workflow with a call, without stranding a branch-protection rule."],["li",{},["a",{"href":"add-a-body"},"Add a body"]," — write a new reusable workflow that other repos can call."]]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'The two tasks this repository asks of a person: moving a repo onto a body, and writing a new one.', 'md', NULL, NULL, '{}', NULL, '/workflows/guides', '{"title":"Guides","description":"The two tasks this repository asks of a person: moving a repo onto a body, and writing a new one."}', 'workflows/1.guides/index', 'vzl2SCq8UtnjQ4iPO7sypYIu_TUB8lGT1anQogyiifQ'); -- vzl2SCq8UtnjQ4iPO7sypYIu_TUB8lGT1anQogyiifQ +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0001-derive-a-bodys-configuration-from-the-repo.md', 'Derive a body''s configuration from the repo', '{"type":"minimark","value":[["h1",{"id":"adr-0001-derive-a-bodys-configuration-from-the-repo"},"ADR-0001 — Derive a body''s configuration from the repo"],["h2",{"id":"context"},"Context"],["p",{},"The bodies replace workflow files that had been copied into every repo and had drifted apart. Counting the copies made them look irreconcilable — the fast-forward queue workflow existed in eight versions — but the differences between them were not eight problems. They were the integration branch name, a per-owner secret identifier, a runner label, and a group of repos that had never received a fix."],["p",{},"Each of those first values is something the repo already answers. The branch name is decided by the trigger that let the run start; the owner is on every event payload. Carried as a literal, the owner-specific identifier was wrong in several repos at once — a mismatch that resolves for nobody, silently, and surfaces only when someone dispatches the workflow."],["p",{},"A value that a caller supplies is a value the caller maintains, and a maintained value in every repo is the copy this repository exists to remove, one file smaller."],["h2",{"id":"decision"},"Decision"],["p",{},"A body reads what the repo it runs in can tell it. An input exists only for what a body genuinely cannot know — the languages an analysis should cover, the versions a matrix should span."],["p",{},"Where a body cannot read a value from the event it is triggered by, it resolves it in a job of its own and hands it to the rest through ",["code",{},"needs"],", rather than accepting it from the caller."],["h2",{"id":"consequences"},"Consequences"],["p",{},"Every calling repo carries the same stub for the same workflow, so two stubs that differ mark a real difference rather than an accident of when they were copied."],["p",{},"A repo changes its behaviour by changing itself. Creating an integration branch moves it to another branch topology and no workflow file changes anywhere — which is the property being bought, and also the surprise: nothing in the stub says the topology is a decision."],["p",{},"A whole class of error stops being possible instead of being fixed in each place it occurred."],["p",{},"The cost is paid at the body: deriving a value takes a job or a step that an input would not have needed, that job''s name becomes part of every caller''s check names, and a body is harder to exercise in isolation because it now depends on the shape of the repo around it. A repo that wants to deviate from what its own state implies cannot do so from the call site at all."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"An input per value."]," Correct, conventional, and the way most reusable workflows are written. It hands each caller a value to keep in step with its own trigger — which is what the copies were doing, expressed in fewer lines."],["p",{},["strong",{},"A configuration file in the calling repo."]," The same objection, one level up, plus a second file to keep in step with the first."],["p",{},["strong",{},"One body per topology."]," This is where the eight variants came from."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A body reads the values that differ per repo out of the repo it runs in, and accepts an input only for what it cannot know.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0001-derive-a-bodys-configuration-from-the-repo', '{"title":"Derive a body''s configuration from the repo","description":"A body reads the values that differ per repo out of the repo it runs in, and accepts an input only for what it cannot know."}', 'workflows/99.adr/0001-derive-a-bodys-configuration-from-the-repo', 'rg-w-4nPVvx2hi5yjLYHNinKpgdxf7m_kJip23oXoVU'); -- rg-w-4nPVvx2hi5yjLYHNinKpgdxf7m_kJip23oXoVU +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0002-pin-callers-to-a-commit-sha.md', 'Pin callers to a commit SHA', '{"type":"minimark","value":[["h1",{"id":"adr-0002-pin-callers-to-a-commit-sha"},"ADR-0002 — Pin callers to a commit SHA"],["h2",{"id":"context"},"Context"],["p",{},"A caller has to name a ref. A moving major tag is the conventional choice and the one the marketplace actions themselves offer, and this repository can move such a tag: release-please cuts exact tags, and the release workflow can force-push ",["code",{},"v"]," onto each one."],["p",{},"What makes the choice not obvious is what some of these bodies do. The queue workflows read a private key out of the secret vault and mint a GitHub App token whose entire purpose is to bypass a merge gate on an integration branch. On a moving ref, anyone able to push a commit here would be able to change what that token is used for in every repo that calls it, with no review in any of them."],["h2",{"id":"decision"},"Decision"],["p",{},"Caller stubs pin a full commit SHA, with the version as a trailing comment. Bumps arrive as dependency-bot pull requests, and reviewing one of those is the gate."],["p",{},"The moving ",["code",{},"v"]," alias is published for callers who want the other trade, but it is opt-in per repository and off by default."],["h2",{"id":"consequences"},"Consequences"],["p",{},"Write access to this repository is not, by itself, write access to every repository in the estate. A change reaches a caller only when someone merges the bump."],["p",{},"Every repo is therefore behind by however long its bump PR sits, including for a fix, and a security fix reaches the estate at the speed of review rather than at the speed of a push."],["p",{},"The trailing comment is the only thing that tells a human which version a stub is on, and nothing enforces that it stays truthful."],["p",{},"The alias defaults to off because moving a tag is a hazard where something else reads the tag list as a version list — for a published package the registry version is what resolves, and for a Terraform provider an extra unversioned tag is not valid semver at all."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"A moving major tag as the default."]," One less thing for every repo to bump, at the price of the review gate above. It stays available to any repo that opts in."],["p",{},["strong",{},"A branch as the ref."]," The same exposure with no version information at all."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'Caller stubs reference a body by commit SHA with the version as a trailing comment; the moving major alias is published but opt-in and off by default.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0002-pin-callers-to-a-commit-sha', '{"title":"Pin callers to a commit SHA","description":"Caller stubs reference a body by commit SHA with the version as a trailing comment; the moving major alias is published but opt-in and off by default."}', 'workflows/99.adr/0002-pin-callers-to-a-commit-sha', 'qoX_2T8G_xQCIozdItIRh-lOYWy1g5DqDrQNxvWJ02c'); -- qoX_2T8G_xQCIozdItIRh-lOYWy1g5DqDrQNxvWJ02c +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0003-name-every-secret-a-stub-passes.md', 'Name every secret a stub passes', '{"type":"minimark","value":[["h1",{"id":"adr-0003-name-every-secret-a-stub-passes"},"ADR-0003 — Name every secret a stub passes"],["h2",{"id":"context"},"Context"],["p",{},"A caller can hand a reusable workflow everything it holds in one word. That word is shorter than a block naming each secret, and it never needs touching again when a body grows a new requirement."],["p",{},"It also decides, once, that every secret the repository acquires from then on is visible to every body it calls — including secrets added long after anyone last read the stub, and including bodies added to the call after that."],["h2",{"id":"decision"},"Decision"],["p",{},"A stub passes exactly the secrets its body declares, one key at a time. ",["code",{},"secrets: inherit"]," is not used."],["h2",{"id":"consequences"},"Consequences"],["p",{},"What a body can reach is stated in the file that grants it, so the answer to what a workflow can read is the stub itself rather than the repository''s whole secret list."],["p",{},"A body that starts needing another secret cannot get it silently: every caller has to be edited, which is a visible change and a reviewed one."],["p",{},"That is also the cost — such a change is a pull request per calling repo, and until each lands the body fails there rather than degrading."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},["code",{},"secrets: inherit"],"."]," One line per stub instead of two or three, and no edit when a body''s needs change. Rejected for exactly the second property."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A caller passes each secret a body needs explicitly; secrets: inherit is not used.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0003-name-every-secret-a-stub-passes', '{"title":"Name every secret a stub passes","description":"A caller passes each secret a body needs explicitly; secrets: inherit is not used."}', 'workflows/99.adr/0003-name-every-secret-a-stub-passes', 'WJlw227fLg_N6t37AIl5DN3V4hSomZkRaH6un4rd4io'); -- WJlw227fLg_N6t37AIl5DN3V4hSomZkRaH6un4rd4io +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0004-compose-ci-from-bodies-that-are-jobs.md', 'Compose CI from bodies that are jobs', '{"type":"minimark","value":[["h1",{"id":"adr-0004-compose-ci-from-bodies-that-are-jobs"},"ADR-0004 — Compose CI from bodies that are jobs"],["h2",{"id":"context"},"Context"],["p",{},"CI was the workflow that had drifted furthest: measured across the estate, nearly every repo''s copy was unique. Behind that were a handful of families — repos running a single gate, libraries running a typecheck-test-build set, packages running a version matrix against a database, providers running a language toolchain — and a few repos with pipelines that genuinely belong to them, carrying deploy stages and their own short-circuits."],["p",{},"Unlike the queue workflows, the differences here are not values a body can look up. Whether a repo needs a database, which toolchain it installs and what \"tested\" means for it are properties of its stack, not of its state."],["h2",{"id":"decision"},"Decision"],["p",{},"A CI body is a ",["strong",{},"job"]," that a caller composes into a pipeline it still owns, and there is one body per family rather than one body for CI."],["p",{},"Inputs on such a body say what the body cannot know — which versions a matrix spans, which paths a filter watches. They never say which parts of the body to skip."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A repo keeps its own pipeline and its own graph: it decides what runs, in which order, and what a short-circuit is allowed to stand for. The bodies it calls do not need to know about each other."],["p",{},"Repos with pipelines of their own are not special cases to be worked around — they compose from the same pieces as everyone else, which is why the pieces were cut at job boundaries in the first place."],["p",{},"Adding a family means adding a body. Writing one before a second caller exists is a cost taken deliberately, and only where a named repo would otherwise start by copying the first one."],["p",{},"A caller''s pipeline is longer than a single ",["code",{},"uses:"]," line, and the composition itself — which job needs which, what gates on what — is the one thing that can still drift between repos."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"One CI body with feature switches"]," — flags for running tests, for needing a database, for a coverage step. It works. It also turns every stub into a configuration file of a dozen keys, which is the drift this repository removes, reappearing one level up. It would still have left the repos with their own pipelines as special cases, and those carry the most logic."],["p",{},["strong",{},"One body per repo."]," The starting point, and what was being replaced."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A CI body is a job the caller composes into its own pipeline, never one body with switches for the parts a repo does not run.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0004-compose-ci-from-bodies-that-are-jobs', '{"title":"Compose CI from bodies that are jobs","description":"A CI body is a job the caller composes into its own pipeline, never one body with switches for the parts a repo does not run."}', 'workflows/99.adr/0004-compose-ci-from-bodies-that-are-jobs', 'BYTUKGhoE40NFWDLcgZFJKEnazE5uV65NLhbKpz95mc'); -- BYTUKGhoE40NFWDLcgZFJKEnazE5uV65NLhbKpz95mc +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0005-publish-with-one-body-per-target.md', 'Publish with one body per target', '{"type":"minimark","value":[["h1",{"id":"adr-0005-publish-with-one-body-per-target"},"ADR-0005 — Publish with one body per target"],["h2",{"id":"context"},"Context"],["p",{},"The release workflow and the publish step arrived as one file in every repo that had them. Most repos that cut releases publish nothing at all — they exist to be depended on by their own tags, or they deploy instead. The ones that do publish split by target, and the targets need different credentials: a registry token for one, a signing key out of the vault for another."],["p",{},"A single body serving all of them would have to make every credential optional, which erases the signal of which one a repo actually needs, and would ask the repos that publish nothing to carry inputs they have no use for."],["h2",{"id":"decision"},"Decision"],["p",{},"Releasing is one body. Publishing is a separate body per target, and the caller composes the one it needs, gated on whether a release was actually created."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A repo that publishes nothing calls one body and passes one secret. A repo that publishes states which target it publishes to by which body it calls — the stub says what the repo is."],["p",{},"Adding a target means adding a body, not adding a branch to an existing one, and the repos that do not use it are unaffected by its existence."],["p",{},"The caller now writes the wiring between the two jobs, so the gate on \"a release was created\" is stated once per repo rather than once in a body. That wiring is duplicated across the repos publishing to the same target, and it is the piece that could drift."],["p",{},"Repos that deploy rather than publish keep their own jobs. Those touch environments rather than artifacts, and centralising them was never in question."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"One body with a ",["code",{},"target"]," input."]," Every secret optional, every publishing repo passing a flag, and the repos that publish nothing carrying the surface anyway."],["p",{},["strong",{},"Publishing folded into the release body."]," The same problem with fewer files, and it would have made the release body untouchable for the majority of callers that only want a tag."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'Releasing and publishing are separate bodies, and a caller composes the publish body its target needs.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0005-publish-with-one-body-per-target', '{"title":"Publish with one body per target","description":"Releasing and publishing are separate bodies, and a caller composes the publish body its target needs."}', 'workflows/99.adr/0005-publish-with-one-body-per-target', 'kXluGJNfjk4_8zgc0mGXxcYna3Lk_Hje5NdZnNMcgRQ'); -- kXluGJNfjk4_8zgc0mGXxcYna3Lk_Hje5NdZnNMcgRQ +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0006-keep-the-composite-action-out-of-the-bodies.md', 'Keep the composite action out of the bodies', '{"type":"minimark","value":[["h1",{"id":"adr-0006-keep-the-composite-action-out-of-the-bodies"},"ADR-0006 — Keep the composite action out of the bodies"],["h2",{"id":"context"},"Context"],["p",{},"A reusable workflow is taken whole. A caller cannot replace one of its steps or insert another, so a repo needing \"that body plus one thing\" has to write its own job — which is why the setup those bodies open with also exists as a composite action it can call."],["p",{},"Using that same action inside the bodies looks like the obvious next step, and it is a trap. A relative ",["code",{},"uses:"]," inside a reusable workflow resolves against the ",["strong",{},"caller''s"]," workspace, not against the repository the body lives in, so a body cannot say ",["code",{},"./"],". It would have to name this repository and a ref in full — and ",["code",{},"uses:"]," accepts no expression, so that ref could not be the one the caller pinned. It would be a literal, fixed at the time the body was written."],["p",{},"A caller pinning a body to one commit would then run a body from that commit and a setup action from a different one, with nothing anywhere saying so."],["h2",{"id":"decision"},"Decision"],["p",{},"The bodies do not call the composite action. They repeat the few setup steps inline. The action exists for callers writing their own jobs."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A pinned SHA means what it appears to mean: everything the run executes out of this repository comes from that commit."],["p",{},"The setup steps exist in both places, so a change to how the toolchain is set up has to be made in the bodies and in the action, and nothing checks that the two agree."],["p",{},"A repo that needs a body plus one step writes its own job around the action instead of forking the body, which keeps the fork pressure off the bodies."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"Calling the action with a hardcoded ref."]," Removes the duplication and introduces a pin that lies. The duplication is a handful of lines; the pin would be a silent inconsistency at every caller."],["p",{},["strong",{},"Making the setup its own reusable workflow."]," A workflow cannot be a step inside a job, so this does not address the case at all."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'The shared setup exists as a composite action for callers, but the bodies duplicate the steps rather than calling it.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0006-keep-the-composite-action-out-of-the-bodies', '{"title":"Keep the composite action out of the bodies","description":"The shared setup exists as a composite action for callers, but the bodies duplicate the steps rather than calling it."}', 'workflows/99.adr/0006-keep-the-composite-action-out-of-the-bodies', '1wycsSf9VqQKwvR-GpXpFjvjDpWmOmXWuVOIC9Vkv9o'); -- 1wycsSf9VqQKwvR-GpXpFjvjDpWmOmXWuVOIC9Vkv9o +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0007-run-the-gate-as-one-job-with-a-step-per-check.md', 'Run the gate as one job with a step per check', '{"type":"minimark","value":[["h1",{"id":"adr-0007-run-the-gate-as-one-job-with-a-step-per-check"},"ADR-0007 — Run the gate as one job with a step per check"],["h2",{"id":"context"},"Context"],["p",{},"For the repos whose CI is a set of independent checks, the copied workflows listed those checks a second time as steps — the same commands the package manifest''s gate script already chained, kept in step by hand."],["p",{},"Deriving the list from the gate script removes that second copy, and it also decides nothing about how the tasks then run. Two shapes were available: fan them out over a matrix so each reports as its own job, or run them as steps of one job."],["p",{},"The tasks in question are short. A run for these repos is dominated by checkout and dependency install, not by the checks themselves."],["h2",{"id":"decision"},"Decision"],["p",{},"The gate body splits the repo''s gate script into its task calls, expanding a task that chains another aggregate, and runs the result as ",["strong",{},"steps of a single job"],". Each task gets its own log group and its own error line, so a failed run names the check that failed."],["h2",{"id":"consequences"},"Consequences"],["p",{},"The check list follows the repo. A repo adds a check by editing its gate script, and CI picks it up with no workflow change — which is what carries the checks that exist in only one repo, without any of them being named here."],["p",{},"A run costs one checkout and one install rather than one per task."],["p",{},"What is given up is granularity at the job level: the whole gate is one check name, so a single aspect of it cannot be required on its own, and the tasks do not run in parallel. The first task to fail ends the job, so a run reports one failure rather than all of them."],["p",{},"A task that takes arguments is left unexpanded, because running it on its own would not be the same command."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"A matrix, one job per task."]," It gives each check its own name and lets any one of them be required alone. Jobs share nothing — separate runner, separate filesystem, separate dependency tree — so n tasks cost n checkouts and n installs. For a gate of short tasks that makes the run slower while occupying several runners instead of one. The trade reverses where a single task runs for minutes, which is why the bodies for the heavier stacks do use a matrix."],["p",{},["strong",{},"Running the gate script as one command."]," One step, no derivation, and a red build that does not say which check failed."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'The gate body derives its task list from the repo package manifest and runs the tasks as steps of a single job rather than fanning them over a matrix.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0007-run-the-gate-as-one-job-with-a-step-per-check', '{"title":"Run the gate as one job with a step per check","description":"The gate body derives its task list from the repo package manifest and runs the tasks as steps of a single job rather than fanning them over a matrix."}', 'workflows/99.adr/0007-run-the-gate-as-one-job-with-a-step-per-check', 'XM4JBXHiGAFpE0wgeL8fOfeI5QrfuA_vEMTemyaY_u0'); -- XM4JBXHiGAFpE0wgeL8fOfeI5QrfuA_vEMTemyaY_u0 +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0008-give-each-reporter-its-own-comment-thread.md', 'Give each reporter its own comment thread', '{"type":"minimark","value":[["h1",{"id":"adr-0008-give-each-reporter-its-own-comment-thread"},"ADR-0008 — Give each reporter its own comment thread"],["h2",{"id":"context"},"Context"],["p",{},"Two of the bodies write results back to a pull request: coverage, and the performance audit. The repository they were derived from had collected both into a single comment, and said why — a second reporting job beside it would open a second thread, and a pull request carrying a thread per metric is one nobody reads."],["p",{},"That reasoning holds for a pipeline written in one file. It does not survive being split into bodies that repos compose independently. A repo calling the coverage body alongside the combined job would get the second thread anyway, because the two know nothing about each other; and coupling them so they do not would mean one body reading another''s output, which is the shape the split was meant to avoid. Either the reporters share a marker and are no longer independent, or they are independent and there is more than one thread."],["h2",{"id":"decision"},"Decision"],["p",{},"Each reporting body owns its own sticky marker and posts under it alone. Coverage keeps the marker its action already writes; the audit posts under its own. Neither body knows the other exists."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A pull request in a repo that runs both carries two comment threads instead of one. That is the cost, and it is paid on every such pull request."],["p",{},"What it buys is that either body can be adopted without the other, dropped without touching the other, and changed without a second body''s output shifting. It also removes the last reason the combined job could not be replaced: it was blocked by this coupling rather than by a missing second caller."],["p",{},"The markers now have to stay distinct by convention, since nothing enforces it — a body colliding with another''s marker would silently overwrite its report."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"One shared marker, written by whichever body runs last."]," Keeps a single thread, and makes the last writer responsible for content it did not produce — a body would have to read another''s artifact to avoid erasing it. The coupling that was being removed, reintroduced at the comment level."],["p",{},["strong",{},"One reporting body aggregating the others."]," A single thread again, at the price of a body that must know every reporter that exists, and must be extended before any new one can report anything."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A body that reports to a pull request owns its own sticky marker, rather than several reporters sharing one comment.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0008-give-each-reporter-its-own-comment-thread', '{"title":"Give each reporter its own comment thread","description":"A body that reports to a pull request owns its own sticky marker, rather than several reporters sharing one comment."}', 'workflows/99.adr/0008-give-each-reporter-its-own-comment-thread', 'ziw535s2BtFPR8nyG8cB_M6x6x8OFR3Y5zIfaZdgaz8'); -- ziw535s2BtFPR8nyG8cB_M6x6x8OFR3Y5zIfaZdgaz8 +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/0009-write-a-body-before-its-second-caller.md', 'Write a body before its second caller', '{"type":"minimark","value":[["h1",{"id":"adr-0009-write-a-body-before-its-second-caller"},"ADR-0009 — Write a body before its second caller"],["h2",{"id":"context"},"Context"],["p",{},"The case for centralising a workflow is that several repos carry the same one. Where only a single repo has it, that case is absent: a body written for one caller generalises a shape nobody has met twice, and the input it takes may be the wrong seam."],["p",{},"Refusing every such body has its own cost, and it falls on a repo that does not exist yet. The next repo of a given kind starts from the only version available — a copy, taken whole, from whichever repo happened to have one. A long pipeline copied once is a second variant from its first commit, and the estate''s own history is the argument: every workflow being centralised here reached its variant count exactly that way."],["p",{},"Both failure modes are real, so the question is which repo pays: a body generalised too early, or a copy made too late."],["h2",{"id":"decision"},"Decision"],["p",{},"A body may be written for a single caller when a ",["strong",{},"named"]," repo is known to need it next — one that exists, or one a template is expected to produce. The reasoning goes in the body''s own header, naming that repo, so a later reader can tell a considered exception from an oversight."],["p",{},"Where no such repo can be named, one instance is not a pattern and no body is written."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A body written this way has had its interface guessed once rather than observed twice. The second caller is likely to need an input that is not there, and adding it is cheap; discovering that the seam itself is wrong is not."],["p",{},"Migrating the first caller onto such a body may rename its checks, which is a branch-protection change in that repo. Accepted deliberately: it happens once, and it happens anyway during the migration."],["p",{},"The rule can be argued into anything, since any repo might one day need any workflow. The requirement that the next caller be ",["em",{},"named"]," is what keeps it a decision rather than a preference — an unnamed one is a hunch, and a hunch does not clear the bar."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"Wait for the second caller, always."]," The rule as it would read without this record. It is right in the common case and wrong exactly where the second caller is a large repo whose copy would be made before anyone noticed."],["p",{},["strong",{},"Write every body speculatively."]," Removes the judgement, and fills the repository with interfaces shaped by a single example, each of which has to be broken when a real second caller arrives."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A body may be written for a single caller when a specific repo is known to need it next, and the reasoning is recorded with the body.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/adr/0009-write-a-body-before-its-second-caller', '{"title":"Write a body before its second caller","description":"A body may be written for a single caller when a specific repo is known to need it next, and the reasoning is recorded with the body."}', 'workflows/99.adr/0009-write-a-body-before-its-second-caller', 'S8vRgfxmlypC7P2UONNLFtNvQ_FRMk60zQZlKLU5Qwc'); -- S8vRgfxmlypC7P2UONNLFtNvQ_FRMk60zQZlKLU5Qwc +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/99.adr/index.md', 'Architecture decisions', '{"type":"minimark","value":[["h1",{"id":"architecture-decisions"},"Architecture decisions"],["p",{},"A decision earns an ADR when it constrains work that comes later and its reasoning would otherwise be lost: a choice between real alternatives, a convention every part of the project has to follow, a trade-off that looks like a mistake until the reason is known. Records are append-only — a reversed decision is written as a new ADR that supersedes the old one, never as an edit to it."],["p",{},"This log holds decisions about ",["strong",{},"this repository"],": what a body may assume, what a caller must state, and where the boundary between the two runs. Decisions about the estate''s provisioned state — branch protection, the queue App, the secret mirror — belong to ",["code",{},"kirchDev/infrastructure"]," and are recorded there; the bodies here implement them and cite them by id."],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"ADR"],["th",{"align":"left"},"Decision"],["th",{"align":"left"},"Status"],["th",{"align":"left"},"Date"]]],["tbody",{},["tr",{},["td",{"align":"left"},["a",{"href":"0001-derive-a-bodys-configuration-from-the-repo"},"ADR-0001"]],["td",{"align":"left"},"Derive a body''s configuration from the repo"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0002-pin-callers-to-a-commit-sha"},"ADR-0002"]],["td",{"align":"left"},"Pin callers to a commit SHA"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0003-name-every-secret-a-stub-passes"},"ADR-0003"]],["td",{"align":"left"},"Name every secret a stub passes"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0004-compose-ci-from-bodies-that-are-jobs"},"ADR-0004"]],["td",{"align":"left"},"Compose CI from bodies that are jobs"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0005-publish-with-one-body-per-target"},"ADR-0005"]],["td",{"align":"left"},"Publish with one body per target"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0006-keep-the-composite-action-out-of-the-bodies"},"ADR-0006"]],["td",{"align":"left"},"Keep the composite action out of the bodies"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0007-run-the-gate-as-one-job-with-a-step-per-check"},"ADR-0007"]],["td",{"align":"left"},"Run the gate as one job with a step per check"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0008-give-each-reporter-its-own-comment-thread"},"ADR-0008"]],["td",{"align":"left"},"Give each reporter its own comment thread"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0009-write-a-body-before-its-second-caller"},"ADR-0009"]],["td",{"align":"left"},"Write a body before its second caller"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]]]]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'The decision log — every architecture decision recorded for this repository.', 'md', NULL, NULL, '{}', NULL, '/workflows/adr', '{"title":"Architecture decisions","description":"The decision log — every architecture decision recorded for this repository."}', 'workflows/99.adr/index', '9DjjHnYdLrzkurso8t8tRJQUyC5-9nN5WvDMKNPm41Y'); -- 9DjjHnYdLrzkurso8t8tRJQUyC5-9nN5WvDMKNPm41Y +INSERT INTO _content_docs_workflows VALUES ('docs_workflows/workflows/index.md', 'workflows documentation', '{"type":"minimark","value":[["h1",{"id":"workflows"},"workflows"],["p",{},"This repository holds the estate''s reusable GitHub Actions workflow bodies. Every other repo carries a thin caller stub instead of its own copy, so a fix lands once and reaches each repo on its next bump."],["p",{},"These pages cover the two tasks the repository asks of a person — moving a repo onto a body, and writing a new one — and the decision log behind them."],["h2",{"id":"sections"},"Sections"],["ul",{},["li",{},["a",{"href":"1.guides/"},"Guides"]," — migrating a repo onto a stub, and adding a body."],["li",{},["a",{"href":"99.adr/"},"Architecture decisions"]," — the decision log."]],["p",{},"What the bodies do, how a stub looks and what each one needs is in the ",["a",{"href":"../README"},"README"],"; how to set the repo up and get a PR landed is in ",["a",{"href":"../CONTRIBUTING"},"CONTRIBUTING.md"],". Decisions about the estate''s provisioned state — branch protection, the queue App, the Bitwarden mirror — are recorded in ",["code",{},"kirchDev/infrastructure"],", not here."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"sections","depth":2,"text":"Sections"}]}}', 'How a repo moves onto the central reusable workflow bodies, how a new body is written, and the decisions that govern both.', 'md', NULL, NULL, '{}', NULL, '/workflows', '{"title":"workflows documentation","description":"How a repo moves onto the central reusable workflow bodies, how a new body is written, and the decisions that govern both."}', 'workflows/index', '2F4Y87gP8kLQW0fz5eaLeL9APZztdqv_1Nf6kU7CTw0'); -- 2F4Y87gP8kLQW0fz5eaLeL9APZztdqv_1Nf6kU7CTw0 +UPDATE _content_info SET ready = true WHERE id = 'checksum_docs_workflows'; -- meta +CREATE TABLE IF NOT EXISTS _content_info (id TEXT PRIMARY KEY, "ready" BOOLEAN, "structureVersion" VARCHAR, "version" VARCHAR, "__hash__" TEXT UNIQUE); -- structure +INSERT INTO _content_info VALUES ('checksum_docs_workflows_v0_7_0', false, 'Pt9fhgX_otrmnFQYPHSGuqExdlY7qwABOOtjCErIPtg', 'v3.5.0--gyTLYQ0MVuqj_MoAN7sY-gvt61s3lKmNU2w7azTxNdA', 'HE4XlPSr6RzKJBntIQPxUilkCRn3S1y54KPuERG9cxY'); -- meta +DROP TABLE IF EXISTS _content_docs_workflows_v0_7_0; -- structure +CREATE TABLE IF NOT EXISTS _content_docs_workflows_v0_7_0 (id TEXT PRIMARY KEY, "title" VARCHAR, "body" TEXT, "description" VARCHAR, "extension" VARCHAR, "icon" VARCHAR NULL, "layout" VARCHAR NULL, "meta" TEXT, "navigation" BOOLEAN NULL, "path" VARCHAR, "seo" TEXT DEFAULT '{}', "stem" VARCHAR, "__hash__" TEXT UNIQUE); -- structure +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/1.guides/1.migrate-a-repo-to-a-stub.md', 'Migrate a repo to a stub', '{"type":"minimark","value":[["h1",{"id":"migrate-a-repo-to-a-stub"},"Migrate a repo to a stub"],["p",{},"One repo, one workflow at a time. The file shrinks to a trigger and a ",["code",{},"uses:"],", and the checks the repo reports change name in the same run — which is the part that breaks something if it is left for later."],["h2",{"id":"steps"},"Steps"],["ol",{},["li",{},["strong",{},"Replace the body with a stub."]," Keep the trigger, delete everything under ",["code",{},"jobs:"]," except the call. A caller job may only carry ",["code",{},"name"],", ",["code",{},"uses"],", ",["code",{},"with"],", ",["code",{},"secrets"],", ",["code",{},"needs"],", ",["code",{},"if"],", ",["code",{},"strategy"],", ",["code",{},"concurrency"]," and ",["code",{},"permissions"]," — ",["code",{},"runs-on"]," is not allowed there and belongs to the body.",["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"# .github/workflows/promotion-pr.yml, complete\nname: Promotion PR\non:\n push:\n branches: [dev, stage]\njobs:\n promotion-pr:\n name: Promotion PR\n uses: kirchDev/workflows/.github/workflows/_promotion-pr.yml@ # v0.1.0\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sJ8bj"},"# .github/workflows/promotion-pr.yml, complete\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"},"name"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"Promotion PR\n"]],["span",{"class":"line","line":3},["span",{"class":"sj4cs"},"on"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":4},["span",{"class":"s9eBZ"}," push"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":5},["span",{"class":"s9eBZ"}," branches"],["span",{"class":"sVt8B"},": ["],["span",{"class":"sZZnC"},"dev"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"stage"],["span",{"class":"sVt8B"},"]\n"]],["span",{"class":"line","line":6},["span",{"class":"s9eBZ"},"jobs"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":7},["span",{"class":"s9eBZ"}," promotion-pr"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":8},["span",{"class":"s9eBZ"}," name"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"Promotion PR\n"]],["span",{"class":"line","line":9},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"kirchDev/workflows/.github/workflows/_promotion-pr.yml@"],["span",{"class":"sJ8bj"}," # v0.1.0\n"]]]],["br",{}],"List ",["code",{},"stage"]," even where no ",["code",{},"stage"]," branch exists: a filter naming a branch that is absent is a no-op, and it keeps the stub identical in every repo."],["li",{},["strong",{},"Pin the SHA, and put the version in a trailing comment."]," The tag is what a human reads; the SHA is what runs. Dependabot raises the bumps from there."],["li",{},["strong",{},"Pass the secrets the body needs, by name."]," Never ",["code",{},"secrets: inherit"],".",["table",{},["thead",{},["tr",{},["th",{"align":"left"},"Body"],["th",{"align":"left"},"Secret"]]],["tbody",{},["tr",{},["td",{"align":"left"},["code",{},"_queue-branch.yml"],", ",["code",{},"_fast-forward-queue.yml"],", ",["code",{},"_release-please.yml"],", ",["code",{},"_publish-goreleaser.yml"]],["td",{"align":"left"},["code",{},"BWS_ACCESS_TOKEN"]]],["tr",{},["td",{"align":"left"},["code",{},"_publish-npm.yml"]],["td",{"align":"left"},["code",{},"NPM_TOKEN"]]]]],["br",{}],"The remaining bodies take no secrets."],["li",{},["strong",{},"Move the branch-protection rule to the new check names."]," A called job reports as ",["code",{}," / "],", so every required check the repo declares changes string. A rule left on the old name waits for a check that will never arrive, and the PR never becomes mergeable.",["br",{}],"Read the body''s job names out of the body itself and the caller name out of the stub you just wrote. Two that catch people out:",["ul",{},["li",{},["code",{},"_fast-forward-queue.yml"]," reports ",["strong",{},"four"]," jobs where the old copies reported three — ",["code",{},"Resolve the integration branch"]," is where the ",["code",{},"INTEGRATION_BRANCH"]," literal went."],["li",{},["code",{},"_ci-lighthouse.yml"]," reports one job per shard plus a merge job, where a hand-written audit reported one."]]],["li",{},["strong",{},"Take the fix that comes with the body."]," Some repos are behind rather than different, and the migration is what carries the correction. Check ",["code",{},"CLAUDE.md"]," in this repository for the measured list before opening the PR — a repo on the short queue workflow gains the App-token path it never had, and an npm repo without the prerelease-version fix stops publishing a ",["code",{},"dev"]," version that semver ranks below its own latest release."],["li",{},["strong",{},"Delete the old file''s body, not the file."]," The stub keeps the filename every other repo uses, which is what makes the estate greppable."]],["h2",{"id":"three-triggers-worth-fixing-while-you-are-here"},"Three triggers worth fixing while you are here"],["p",{},"A migration is the moment the trigger block gets read anyway. Three things in the copied ones cost runner time for nothing, and each is a line:"],["p",{},["strong",{},"Scan on the release branch only."]," A push to an integration branch always has a pull request open on it, and that PR run examines the same tree — so ",["code",{},"push: branches: [main, dev]"]," runs the analysis twice for one result. Drop ",["code",{},"dev"],":"],["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"on:\n push:\n branches: [main]\n pull_request:\n branches: [main, dev]\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sj4cs"},"on"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"}," push"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":3},["span",{"class":"s9eBZ"}," branches"],["span",{"class":"sVt8B"},": ["],["span",{"class":"sZZnC"},"main"],["span",{"class":"sVt8B"},"]\n"]],["span",{"class":"line","line":4},["span",{"class":"s9eBZ"}," pull_request"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":5},["span",{"class":"s9eBZ"}," branches"],["span",{"class":"sVt8B"},": ["],["span",{"class":"sZZnC"},"main"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"dev"],["span",{"class":"sVt8B"},"]\n"]]]],["p",{},["strong",{},"Skip what prose cannot break."]," A change touching only Markdown cannot fail a lint or a typecheck:"],["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"paths-ignore:\n - ''**.md''\n - ''docs/**''\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"s9eBZ"},"paths-ignore"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"}," - "],["span",{"class":"sZZnC"},"''**.md''\n"]],["span",{"class":"line","line":3},["span",{"class":"sVt8B"}," - "],["span",{"class":"sZZnC"},"''docs/**''\n"]]]],["p",{},"Never exclude ",["code",{},".github/workflows/**"]," from a CodeQL trigger — the ",["code",{},"actions"]," language is what scans them."],["p",{},["strong",{},"Gate the expensive jobs on the tree marker."]," Where a repo runs a suite worth minutes, put ",["code",{},"_verified.yml"]," in front of it and record the result at the end. A tree that already passed is then skipped whichever trigger brings it back:"],["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"jobs:\n verified:\n uses: kirchDev/workflows/.github/workflows/_verified.yml@\n\n test:\n needs: verified\n if: needs.verified.outputs.skip != ''true''\n uses: kirchDev/workflows/.github/workflows/_ci-node.yml@\n\n record-verified:\n needs: [verified, test]\n if: needs.test.result == ''success''\n uses: kirchDev/workflows/.github/workflows/_record-verified.yml@\n with:\n tree: ${{ needs.verified.outputs.tree }}\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"s9eBZ"},"jobs"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"}," verified"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":3},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"kirchDev/workflows/.github/workflows/_verified.yml@\n"]],["span",{"class":"line","line":4},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":5},["span",{"class":"s9eBZ"}," test"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":6},["span",{"class":"s9eBZ"}," needs"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"verified\n"]],["span",{"class":"line","line":7},["span",{"class":"s9eBZ"}," if"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"needs.verified.outputs.skip != ''true''\n"]],["span",{"class":"line","line":8},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"kirchDev/workflows/.github/workflows/_ci-node.yml@\n"]],["span",{"class":"line","line":9},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":10},["span",{"class":"s9eBZ"}," record-verified"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":11},["span",{"class":"s9eBZ"}," needs"],["span",{"class":"sVt8B"},": ["],["span",{"class":"sZZnC"},"verified"],["span",{"class":"sVt8B"},", "],["span",{"class":"sZZnC"},"test"],["span",{"class":"sVt8B"},"]\n"]],["span",{"class":"line","line":12},["span",{"class":"s9eBZ"}," if"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"needs.test.result == ''success''\n"]],["span",{"class":"line","line":13},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"kirchDev/workflows/.github/workflows/_record-verified.yml@\n"]],["span",{"class":"line","line":14},["span",{"class":"s9eBZ"}," with"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":15},["span",{"class":"s9eBZ"}," tree"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"${{ needs.verified.outputs.tree }}\n"]]]],["blockquote",{},["p",{},["span",{},"!IMPORTANT"],"\nA gated job reports as ",["strong",{},"skipped"],", not as passed. Whether a skipped job satisfies a required check is not verified for this estate — confirm it on one repo before making the marker a rule, or a green run will look blocked."]],["h2",{"id":"checklist"},"Checklist"],["ul",{"className":["contains-task-list"]},["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The workflow file contains a trigger and a ",["code",{},"uses:"],", and nothing else."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The ",["code",{},"uses:"]," names a commit SHA with the version as a trailing comment."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Every secret the body declares is passed by name; ",["code",{},"secrets: inherit"]," appears nowhere."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Every required check in the repo''s branch protection matches a ",["code",{}," / "]," name that the new run actually reports."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," A run has completed green on the branch, and the check names in it match the rule."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Any fix the body carries for this repo is named in the PR description, so the change is reviewed as a fix rather than a port."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The ",["code",{},"push"]," trigger of any analysis workflow names the release branch only, so one change is not scanned twice."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," A ",["code",{},"paths-ignore"]," covers prose where the workflow cannot be affected by it."]],["style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"steps","depth":2,"text":"Steps"},{"id":"three-triggers-worth-fixing-while-you-are-here","depth":2,"text":"Three triggers worth fixing while you are here"},{"id":"checklist","depth":2,"text":"Checklist"}]}}', 'Replace a repo copy of a workflow with a call to the central body, and move its branch-protection rule to the check names the call produces.', 'md', NULL, NULL, '{}', NULL, '/workflows/v0.7.0/guides/migrate-a-repo-to-a-stub', '{"title":"Migrate a repo to a stub","description":"Replace a repo copy of a workflow with a call to the central body, and move its branch-protection rule to the check names the call produces."}', 'workflows/v0.7.0/1.guides/1.migrate-a-repo-to-a-stub', 'rDhIWCGPPStIEV6doo8ofrrLXeLbOegPhc7WbGi6LBo'); -- rDhIWCGPPStIEV6doo8ofrrLXeLbOegPhc7WbGi6LBo +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/1.guides/2.add-a-body.md', 'Add a body', '{"type":"minimark","value":[["h1",{"id":"add-a-body"},"Add a body"],["p",{},"A body runs in every repo that calls it, so the question to hold throughout is what a repo on a different branch topology, a different runner or a different stack does with it."],["h2",{"id":"steps"},"Steps"],["ol",{},["li",{},["strong",{},"Name the file ",["code",{},"_.yml"],"."]," The underscore marks a file that never runs on its own, keeps the bodies together in the Actions sidebar, and leaves the unprefixed name free for this repository''s own stub."],["li",{},["strong",{},"Give it ",["code",{},"on: workflow_call"]," and nothing else."]," A body has no trigger of its own. Anything that has to be dispatched, scheduled or fired by a push stays in the stub — a reusable workflow cannot be the target of a ",["code",{},"workflow_dispatch"],"."],["li",{},["strong",{},"Hardcode ",["code",{},"runs-on: ubuntu-latest"],"."]," A caller cannot set it, and making it an input has not been needed."],["li",{},["strong",{},"Derive what the repo can answer; take an input only for what it cannot."]," The branch topology, the owner and the check list are properties of the calling repo — read them. A version matrix or a language set is not, so those are inputs. See ",["a",{"href":"../adr/0001-derive-a-bodys-configuration-from-the-repo"},"ADR-0001"],"."],["li",{},["strong",{},"Declare each secret the body needs under ",["code",{},"secrets:"],"."]," Named, never inherited — see ",["a",{"href":"../adr/0003-name-every-secret-a-stub-passes"},"ADR-0003"],"."],["li",{},["strong",{},"Choose the job names deliberately."]," They are the second half of every caller''s check names, so a rename breaks required checks in every calling repo at once. Treat them as a public interface from the first commit, and prefer a name that survives the body growing a job."],["li",{},["strong",{},"Write this repository''s own stub for it."]," Same filename other repos use, with a local path:",["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"jobs:\n promotion-pr:\n uses: ./.github/workflows/_promotion-pr.yml\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"s9eBZ"},"jobs"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"}," promotion-pr"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":3},["span",{"class":"s9eBZ"}," uses"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"./.github/workflows/_promotion-pr.yml\n"]]]],["br",{}],"The body then runs here on every change, so a broken one fails at home before it reaches a caller."],["li",{},["strong",{},"Pass every command input through ",["code",{},"env:"],", never into the ",["code",{},"run:"]," block."]," An interpolated ",["code",{},"${{ inputs.x }}"]," becomes part of the script text before the shell parses it, so a value can break out of the command it was meant to be:",["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"# wrong — the value is interpolated into the script\n- run: ${{ inputs.build-command }}\n\n# right — the value stays a value\n- env:\n BUILD_COMMAND: ${{ inputs.build-command }}\n run: bash -c \"$BUILD_COMMAND\"\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"sJ8bj"},"# wrong — the value is interpolated into the script\n"]],["span",{"class":"line","line":2},["span",{"class":"sVt8B"},"- "],["span",{"class":"s9eBZ"},"run"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"${{ inputs.build-command }}\n"]],["span",{"class":"line","line":3},["span",{"emptyLinePlaceholder":true},"\n"]],["span",{"class":"line","line":4},["span",{"class":"sJ8bj"},"# right — the value stays a value\n"]],["span",{"class":"line","line":5},["span",{"class":"sVt8B"},"- "],["span",{"class":"s9eBZ"},"env"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":6},["span",{"class":"s9eBZ"}," BUILD_COMMAND"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"${{ inputs.build-command }}\n"]],["span",{"class":"line","line":7},["span",{"class":"s9eBZ"}," run"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"bash -c \"$BUILD_COMMAND\"\n"]]]],["br",{}],"This holds for anything the caller supplies and for the mutable parts of the ",["code",{},"github"]," context — ",["code",{},"ref_name"]," and ",["code",{},"run_number"]," among them. CodeQL flags the interpolated form as code injection, and it is right to."],["li",{},["strong",{},"Do not call the repository''s composite action from the body."]," A relative ",["code",{},"uses:"]," resolves against the caller''s workspace — see ",["a",{"href":"../adr/0006-keep-the-composite-action-out-of-the-bodies"},"ADR-0006"],". Duplicate the setup steps instead."],["li",{},["strong",{},"Give the concurrency group this body''s own name."]," In a called workflow ",["code",{},"github.workflow"]," is the ",["em",{},"caller''s"]," name, so two bodies the same caller invokes share one group and cancel each other — the second to start kills the first, and the run reports a job that never ran:",["pre",{"className":"language-yaml shiki shiki-themes github-light github-dark","code":"concurrency:\n group: ${{ github.workflow }}-ci-laravel-${{ github.event.pull_request.number || github.ref }}\n","language":"yaml","meta":"","style":""},["code",{"__ignoreMap":""},["span",{"class":"line","line":1},["span",{"class":"s9eBZ"},"concurrency"],["span",{"class":"sVt8B"},":\n"]],["span",{"class":"line","line":2},["span",{"class":"s9eBZ"}," group"],["span",{"class":"sVt8B"},": "],["span",{"class":"sZZnC"},"${{ github.workflow }}-ci-laravel-${{ github.event.pull_request.number || github.ref }}\n"]]]]],["li",{},["strong",{},"Run the linters."]," ",["code",{},"pnpm lint:actions"]," runs actionlint over every workflow and needs Docker; ",["code",{},"pnpm check"]," runs it as part of the gate."]],["h2",{"id":"checklist"},"Checklist"],["ul",{"className":["contains-task-list"]},["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The file is named ",["code",{},"_.yml"]," and its only trigger is ",["code",{},"workflow_call"],"."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," ",["code",{},"runs-on"]," is fixed in the body, and no caller is asked to supply it."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Every input is something the body genuinely cannot read from the repo it runs in."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Every secret is declared by name in the body and passed by name in the stub."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," No ",["code",{},"run:"]," block interpolates an input or a mutable ",["code",{},"github"]," value; each travels through ",["code",{},"env:"],"."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," The concurrency group names this body, so it cannot cancel a sibling the same caller invoked."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," Job names are ones you are willing to keep, because renaming one is an estate-wide branch-protection change."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," This repository carries a stub calling the body by local path, and it has run green."],["li",{"className":["task-list-item"]},["input",{"disabled":true,"type":"checkbox"}]," ",["code",{},"pnpm check"]," passes."]],["style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}"]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"steps","depth":2,"text":"Steps"},{"id":"checklist","depth":2,"text":"Checklist"}]}}', 'Write a new reusable workflow that other repos call, without giving callers a value they have to keep correct.', 'md', NULL, NULL, '{}', NULL, '/workflows/v0.7.0/guides/add-a-body', '{"title":"Add a body","description":"Write a new reusable workflow that other repos call, without giving callers a value they have to keep correct."}', 'workflows/v0.7.0/1.guides/2.add-a-body', 'kCYRYdpXNPdRmcYNAZ4xJIUsv91KKFlTJ-ND-CZrQuc'); -- kCYRYdpXNPdRmcYNAZ4xJIUsv91KKFlTJ-ND-CZrQuc +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/1.guides/index.md', 'Guides', '{"type":"minimark","value":[["h1",{"id":"guides"},"Guides"],["p",{},"Both tasks change something outside this repository — the first changes another repo''s checks, the second changes what every caller runs. Each page ends with a checklist for that reason."],["ul",{},["li",{},["a",{"href":"migrate-a-repo-to-a-stub"},"Migrate a repo to a stub"]," — replace a copied workflow with a call, without stranding a branch-protection rule."],["li",{},["a",{"href":"add-a-body"},"Add a body"]," — write a new reusable workflow that other repos can call."]]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'The two tasks this repository asks of a person: moving a repo onto a body, and writing a new one.', 'md', NULL, NULL, '{}', NULL, '/workflows/v0.7.0/guides', '{"title":"Guides","description":"The two tasks this repository asks of a person: moving a repo onto a body, and writing a new one."}', 'workflows/v0.7.0/1.guides/index', '59g1Dv6IWtzEd8uOYP_CP9W5yctr_R6lNetn3qA1aWo'); -- 59g1Dv6IWtzEd8uOYP_CP9W5yctr_R6lNetn3qA1aWo +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0001-derive-a-bodys-configuration-from-the-repo.md', 'Derive a body''s configuration from the repo', '{"type":"minimark","value":[["h1",{"id":"adr-0001-derive-a-bodys-configuration-from-the-repo"},"ADR-0001 — Derive a body''s configuration from the repo"],["h2",{"id":"context"},"Context"],["p",{},"The bodies replace workflow files that had been copied into every repo and had drifted apart. Counting the copies made them look irreconcilable — the fast-forward queue workflow existed in eight versions — but the differences between them were not eight problems. They were the integration branch name, a per-owner secret identifier, a runner label, and a group of repos that had never received a fix."],["p",{},"Each of those first values is something the repo already answers. The branch name is decided by the trigger that let the run start; the owner is on every event payload. Carried as a literal, the owner-specific identifier was wrong in several repos at once — a mismatch that resolves for nobody, silently, and surfaces only when someone dispatches the workflow."],["p",{},"A value that a caller supplies is a value the caller maintains, and a maintained value in every repo is the copy this repository exists to remove, one file smaller."],["h2",{"id":"decision"},"Decision"],["p",{},"A body reads what the repo it runs in can tell it. An input exists only for what a body genuinely cannot know — the languages an analysis should cover, the versions a matrix should span."],["p",{},"Where a body cannot read a value from the event it is triggered by, it resolves it in a job of its own and hands it to the rest through ",["code",{},"needs"],", rather than accepting it from the caller."],["h2",{"id":"consequences"},"Consequences"],["p",{},"Every calling repo carries the same stub for the same workflow, so two stubs that differ mark a real difference rather than an accident of when they were copied."],["p",{},"A repo changes its behaviour by changing itself. Creating an integration branch moves it to another branch topology and no workflow file changes anywhere — which is the property being bought, and also the surprise: nothing in the stub says the topology is a decision."],["p",{},"A whole class of error stops being possible instead of being fixed in each place it occurred."],["p",{},"The cost is paid at the body: deriving a value takes a job or a step that an input would not have needed, that job''s name becomes part of every caller''s check names, and a body is harder to exercise in isolation because it now depends on the shape of the repo around it. A repo that wants to deviate from what its own state implies cannot do so from the call site at all."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"An input per value."]," Correct, conventional, and the way most reusable workflows are written. It hands each caller a value to keep in step with its own trigger — which is what the copies were doing, expressed in fewer lines."],["p",{},["strong",{},"A configuration file in the calling repo."]," The same objection, one level up, plus a second file to keep in step with the first."],["p",{},["strong",{},"One body per topology."]," This is where the eight variants came from."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A body reads the values that differ per repo out of the repo it runs in, and accepts an input only for what it cannot know.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0001-derive-a-bodys-configuration-from-the-repo', '{"title":"Derive a body''s configuration from the repo","description":"A body reads the values that differ per repo out of the repo it runs in, and accepts an input only for what it cannot know."}', 'workflows/v0.7.0/99.adr/0001-derive-a-bodys-configuration-from-the-repo', 'rOMf7dyOWZjfMKIU7tdRW2o87PX7VokBRX_psbwOf38'); -- rOMf7dyOWZjfMKIU7tdRW2o87PX7VokBRX_psbwOf38 +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0002-pin-callers-to-a-commit-sha.md', 'Pin callers to a commit SHA', '{"type":"minimark","value":[["h1",{"id":"adr-0002-pin-callers-to-a-commit-sha"},"ADR-0002 — Pin callers to a commit SHA"],["h2",{"id":"context"},"Context"],["p",{},"A caller has to name a ref. A moving major tag is the conventional choice and the one the marketplace actions themselves offer, and this repository can move such a tag: release-please cuts exact tags, and the release workflow can force-push ",["code",{},"v"]," onto each one."],["p",{},"What makes the choice not obvious is what some of these bodies do. The queue workflows read a private key out of the secret vault and mint a GitHub App token whose entire purpose is to bypass a merge gate on an integration branch. On a moving ref, anyone able to push a commit here would be able to change what that token is used for in every repo that calls it, with no review in any of them."],["h2",{"id":"decision"},"Decision"],["p",{},"Caller stubs pin a full commit SHA, with the version as a trailing comment. Bumps arrive as dependency-bot pull requests, and reviewing one of those is the gate."],["p",{},"The moving ",["code",{},"v"]," alias is published for callers who want the other trade, but it is opt-in per repository and off by default."],["h2",{"id":"consequences"},"Consequences"],["p",{},"Write access to this repository is not, by itself, write access to every repository in the estate. A change reaches a caller only when someone merges the bump."],["p",{},"Every repo is therefore behind by however long its bump PR sits, including for a fix, and a security fix reaches the estate at the speed of review rather than at the speed of a push."],["p",{},"The trailing comment is the only thing that tells a human which version a stub is on, and nothing enforces that it stays truthful."],["p",{},"The alias defaults to off because moving a tag is a hazard where something else reads the tag list as a version list — for a published package the registry version is what resolves, and for a Terraform provider an extra unversioned tag is not valid semver at all."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"A moving major tag as the default."]," One less thing for every repo to bump, at the price of the review gate above. It stays available to any repo that opts in."],["p",{},["strong",{},"A branch as the ref."]," The same exposure with no version information at all."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'Caller stubs reference a body by commit SHA with the version as a trailing comment; the moving major alias is published but opt-in and off by default.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0002-pin-callers-to-a-commit-sha', '{"title":"Pin callers to a commit SHA","description":"Caller stubs reference a body by commit SHA with the version as a trailing comment; the moving major alias is published but opt-in and off by default."}', 'workflows/v0.7.0/99.adr/0002-pin-callers-to-a-commit-sha', '9ZaTazX0AwVUrtV5oTOnHij0B-5x_dVNM72ufVaPjlA'); -- 9ZaTazX0AwVUrtV5oTOnHij0B-5x_dVNM72ufVaPjlA +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0003-name-every-secret-a-stub-passes.md', 'Name every secret a stub passes', '{"type":"minimark","value":[["h1",{"id":"adr-0003-name-every-secret-a-stub-passes"},"ADR-0003 — Name every secret a stub passes"],["h2",{"id":"context"},"Context"],["p",{},"A caller can hand a reusable workflow everything it holds in one word. That word is shorter than a block naming each secret, and it never needs touching again when a body grows a new requirement."],["p",{},"It also decides, once, that every secret the repository acquires from then on is visible to every body it calls — including secrets added long after anyone last read the stub, and including bodies added to the call after that."],["h2",{"id":"decision"},"Decision"],["p",{},"A stub passes exactly the secrets its body declares, one key at a time. ",["code",{},"secrets: inherit"]," is not used."],["h2",{"id":"consequences"},"Consequences"],["p",{},"What a body can reach is stated in the file that grants it, so the answer to what a workflow can read is the stub itself rather than the repository''s whole secret list."],["p",{},"A body that starts needing another secret cannot get it silently: every caller has to be edited, which is a visible change and a reviewed one."],["p",{},"That is also the cost — such a change is a pull request per calling repo, and until each lands the body fails there rather than degrading."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},["code",{},"secrets: inherit"],"."]," One line per stub instead of two or three, and no edit when a body''s needs change. Rejected for exactly the second property."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A caller passes each secret a body needs explicitly; secrets: inherit is not used.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0003-name-every-secret-a-stub-passes', '{"title":"Name every secret a stub passes","description":"A caller passes each secret a body needs explicitly; secrets: inherit is not used."}', 'workflows/v0.7.0/99.adr/0003-name-every-secret-a-stub-passes', 'H2RfBPLUEf31H4U9HdKysJ-1TOrNcbgOgPPFfcq0tPo'); -- H2RfBPLUEf31H4U9HdKysJ-1TOrNcbgOgPPFfcq0tPo +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0004-compose-ci-from-bodies-that-are-jobs.md', 'Compose CI from bodies that are jobs', '{"type":"minimark","value":[["h1",{"id":"adr-0004-compose-ci-from-bodies-that-are-jobs"},"ADR-0004 — Compose CI from bodies that are jobs"],["h2",{"id":"context"},"Context"],["p",{},"CI was the workflow that had drifted furthest: measured across the estate, nearly every repo''s copy was unique. Behind that were a handful of families — repos running a single gate, libraries running a typecheck-test-build set, packages running a version matrix against a database, providers running a language toolchain — and a few repos with pipelines that genuinely belong to them, carrying deploy stages and their own short-circuits."],["p",{},"Unlike the queue workflows, the differences here are not values a body can look up. Whether a repo needs a database, which toolchain it installs and what \"tested\" means for it are properties of its stack, not of its state."],["h2",{"id":"decision"},"Decision"],["p",{},"A CI body is a ",["strong",{},"job"]," that a caller composes into a pipeline it still owns, and there is one body per family rather than one body for CI."],["p",{},"Inputs on such a body say what the body cannot know — which versions a matrix spans, which paths a filter watches. They never say which parts of the body to skip."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A repo keeps its own pipeline and its own graph: it decides what runs, in which order, and what a short-circuit is allowed to stand for. The bodies it calls do not need to know about each other."],["p",{},"Repos with pipelines of their own are not special cases to be worked around — they compose from the same pieces as everyone else, which is why the pieces were cut at job boundaries in the first place."],["p",{},"Adding a family means adding a body. Writing one before a second caller exists is a cost taken deliberately, and only where a named repo would otherwise start by copying the first one."],["p",{},"A caller''s pipeline is longer than a single ",["code",{},"uses:"]," line, and the composition itself — which job needs which, what gates on what — is the one thing that can still drift between repos."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"One CI body with feature switches"]," — flags for running tests, for needing a database, for a coverage step. It works. It also turns every stub into a configuration file of a dozen keys, which is the drift this repository removes, reappearing one level up. It would still have left the repos with their own pipelines as special cases, and those carry the most logic."],["p",{},["strong",{},"One body per repo."]," The starting point, and what was being replaced."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A CI body is a job the caller composes into its own pipeline, never one body with switches for the parts a repo does not run.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0004-compose-ci-from-bodies-that-are-jobs', '{"title":"Compose CI from bodies that are jobs","description":"A CI body is a job the caller composes into its own pipeline, never one body with switches for the parts a repo does not run."}', 'workflows/v0.7.0/99.adr/0004-compose-ci-from-bodies-that-are-jobs', '4zVtwFXq7kOd1qLPHRUGmOFXdeOjIrnRfHF-N0tQlm8'); -- 4zVtwFXq7kOd1qLPHRUGmOFXdeOjIrnRfHF-N0tQlm8 +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0005-publish-with-one-body-per-target.md', 'Publish with one body per target', '{"type":"minimark","value":[["h1",{"id":"adr-0005-publish-with-one-body-per-target"},"ADR-0005 — Publish with one body per target"],["h2",{"id":"context"},"Context"],["p",{},"The release workflow and the publish step arrived as one file in every repo that had them. Most repos that cut releases publish nothing at all — they exist to be depended on by their own tags, or they deploy instead. The ones that do publish split by target, and the targets need different credentials: a registry token for one, a signing key out of the vault for another."],["p",{},"A single body serving all of them would have to make every credential optional, which erases the signal of which one a repo actually needs, and would ask the repos that publish nothing to carry inputs they have no use for."],["h2",{"id":"decision"},"Decision"],["p",{},"Releasing is one body. Publishing is a separate body per target, and the caller composes the one it needs, gated on whether a release was actually created."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A repo that publishes nothing calls one body and passes one secret. A repo that publishes states which target it publishes to by which body it calls — the stub says what the repo is."],["p",{},"Adding a target means adding a body, not adding a branch to an existing one, and the repos that do not use it are unaffected by its existence."],["p",{},"The caller now writes the wiring between the two jobs, so the gate on \"a release was created\" is stated once per repo rather than once in a body. That wiring is duplicated across the repos publishing to the same target, and it is the piece that could drift."],["p",{},"Repos that deploy rather than publish keep their own jobs. Those touch environments rather than artifacts, and centralising them was never in question."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"One body with a ",["code",{},"target"]," input."]," Every secret optional, every publishing repo passing a flag, and the repos that publish nothing carrying the surface anyway."],["p",{},["strong",{},"Publishing folded into the release body."]," The same problem with fewer files, and it would have made the release body untouchable for the majority of callers that only want a tag."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'Releasing and publishing are separate bodies, and a caller composes the publish body its target needs.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0005-publish-with-one-body-per-target', '{"title":"Publish with one body per target","description":"Releasing and publishing are separate bodies, and a caller composes the publish body its target needs."}', 'workflows/v0.7.0/99.adr/0005-publish-with-one-body-per-target', 'j3Gy3NqCFZfDvnb-Y0mbItrt1YGje4YEipZz_QcYlZc'); -- j3Gy3NqCFZfDvnb-Y0mbItrt1YGje4YEipZz_QcYlZc +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0006-keep-the-composite-action-out-of-the-bodies.md', 'Keep the composite action out of the bodies', '{"type":"minimark","value":[["h1",{"id":"adr-0006-keep-the-composite-action-out-of-the-bodies"},"ADR-0006 — Keep the composite action out of the bodies"],["h2",{"id":"context"},"Context"],["p",{},"A reusable workflow is taken whole. A caller cannot replace one of its steps or insert another, so a repo needing \"that body plus one thing\" has to write its own job — which is why the setup those bodies open with also exists as a composite action it can call."],["p",{},"Using that same action inside the bodies looks like the obvious next step, and it is a trap. A relative ",["code",{},"uses:"]," inside a reusable workflow resolves against the ",["strong",{},"caller''s"]," workspace, not against the repository the body lives in, so a body cannot say ",["code",{},"./"],". It would have to name this repository and a ref in full — and ",["code",{},"uses:"]," accepts no expression, so that ref could not be the one the caller pinned. It would be a literal, fixed at the time the body was written."],["p",{},"A caller pinning a body to one commit would then run a body from that commit and a setup action from a different one, with nothing anywhere saying so."],["h2",{"id":"decision"},"Decision"],["p",{},"The bodies do not call the composite action. They repeat the few setup steps inline. The action exists for callers writing their own jobs."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A pinned SHA means what it appears to mean: everything the run executes out of this repository comes from that commit."],["p",{},"The setup steps exist in both places, so a change to how the toolchain is set up has to be made in the bodies and in the action, and nothing checks that the two agree."],["p",{},"A repo that needs a body plus one step writes its own job around the action instead of forking the body, which keeps the fork pressure off the bodies."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"Calling the action with a hardcoded ref."]," Removes the duplication and introduces a pin that lies. The duplication is a handful of lines; the pin would be a silent inconsistency at every caller."],["p",{},["strong",{},"Making the setup its own reusable workflow."]," A workflow cannot be a step inside a job, so this does not address the case at all."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'The shared setup exists as a composite action for callers, but the bodies duplicate the steps rather than calling it.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0006-keep-the-composite-action-out-of-the-bodies', '{"title":"Keep the composite action out of the bodies","description":"The shared setup exists as a composite action for callers, but the bodies duplicate the steps rather than calling it."}', 'workflows/v0.7.0/99.adr/0006-keep-the-composite-action-out-of-the-bodies', 'SNEp9WTcxyi_EUjZY0jXm0HEvZtBMUtUVeoCGrpoe5g'); -- SNEp9WTcxyi_EUjZY0jXm0HEvZtBMUtUVeoCGrpoe5g +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0007-run-the-gate-as-one-job-with-a-step-per-check.md', 'Run the gate as one job with a step per check', '{"type":"minimark","value":[["h1",{"id":"adr-0007-run-the-gate-as-one-job-with-a-step-per-check"},"ADR-0007 — Run the gate as one job with a step per check"],["h2",{"id":"context"},"Context"],["p",{},"For the repos whose CI is a set of independent checks, the copied workflows listed those checks a second time as steps — the same commands the package manifest''s gate script already chained, kept in step by hand."],["p",{},"Deriving the list from the gate script removes that second copy, and it also decides nothing about how the tasks then run. Two shapes were available: fan them out over a matrix so each reports as its own job, or run them as steps of one job."],["p",{},"The tasks in question are short. A run for these repos is dominated by checkout and dependency install, not by the checks themselves."],["h2",{"id":"decision"},"Decision"],["p",{},"The gate body splits the repo''s gate script into its task calls, expanding a task that chains another aggregate, and runs the result as ",["strong",{},"steps of a single job"],". Each task gets its own log group and its own error line, so a failed run names the check that failed."],["h2",{"id":"consequences"},"Consequences"],["p",{},"The check list follows the repo. A repo adds a check by editing its gate script, and CI picks it up with no workflow change — which is what carries the checks that exist in only one repo, without any of them being named here."],["p",{},"A run costs one checkout and one install rather than one per task."],["p",{},"What is given up is granularity at the job level: the whole gate is one check name, so a single aspect of it cannot be required on its own, and the tasks do not run in parallel. The first task to fail ends the job, so a run reports one failure rather than all of them."],["p",{},"A task that takes arguments is left unexpanded, because running it on its own would not be the same command."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"A matrix, one job per task."]," It gives each check its own name and lets any one of them be required alone. Jobs share nothing — separate runner, separate filesystem, separate dependency tree — so n tasks cost n checkouts and n installs. For a gate of short tasks that makes the run slower while occupying several runners instead of one. The trade reverses where a single task runs for minutes, which is why the bodies for the heavier stacks do use a matrix."],["p",{},["strong",{},"Running the gate script as one command."]," One step, no derivation, and a red build that does not say which check failed."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'The gate body derives its task list from the repo package manifest and runs the tasks as steps of a single job rather than fanning them over a matrix.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0007-run-the-gate-as-one-job-with-a-step-per-check', '{"title":"Run the gate as one job with a step per check","description":"The gate body derives its task list from the repo package manifest and runs the tasks as steps of a single job rather than fanning them over a matrix."}', 'workflows/v0.7.0/99.adr/0007-run-the-gate-as-one-job-with-a-step-per-check', 't-09cWvwua-z-Wc03uksue16mi1-9JVkjzchvL0gLQE'); -- t-09cWvwua-z-Wc03uksue16mi1-9JVkjzchvL0gLQE +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0008-give-each-reporter-its-own-comment-thread.md', 'Give each reporter its own comment thread', '{"type":"minimark","value":[["h1",{"id":"adr-0008-give-each-reporter-its-own-comment-thread"},"ADR-0008 — Give each reporter its own comment thread"],["h2",{"id":"context"},"Context"],["p",{},"Two of the bodies write results back to a pull request: coverage, and the performance audit. The repository they were derived from had collected both into a single comment, and said why — a second reporting job beside it would open a second thread, and a pull request carrying a thread per metric is one nobody reads."],["p",{},"That reasoning holds for a pipeline written in one file. It does not survive being split into bodies that repos compose independently. A repo calling the coverage body alongside the combined job would get the second thread anyway, because the two know nothing about each other; and coupling them so they do not would mean one body reading another''s output, which is the shape the split was meant to avoid. Either the reporters share a marker and are no longer independent, or they are independent and there is more than one thread."],["h2",{"id":"decision"},"Decision"],["p",{},"Each reporting body owns its own sticky marker and posts under it alone. Coverage keeps the marker its action already writes; the audit posts under its own. Neither body knows the other exists."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A pull request in a repo that runs both carries two comment threads instead of one. That is the cost, and it is paid on every such pull request."],["p",{},"What it buys is that either body can be adopted without the other, dropped without touching the other, and changed without a second body''s output shifting. It also removes the last reason the combined job could not be replaced: it was blocked by this coupling rather than by a missing second caller."],["p",{},"The markers now have to stay distinct by convention, since nothing enforces it — a body colliding with another''s marker would silently overwrite its report."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"One shared marker, written by whichever body runs last."]," Keeps a single thread, and makes the last writer responsible for content it did not produce — a body would have to read another''s artifact to avoid erasing it. The coupling that was being removed, reintroduced at the comment level."],["p",{},["strong",{},"One reporting body aggregating the others."]," A single thread again, at the price of a body that must know every reporter that exists, and must be extended before any new one can report anything."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A body that reports to a pull request owns its own sticky marker, rather than several reporters sharing one comment.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0008-give-each-reporter-its-own-comment-thread', '{"title":"Give each reporter its own comment thread","description":"A body that reports to a pull request owns its own sticky marker, rather than several reporters sharing one comment."}', 'workflows/v0.7.0/99.adr/0008-give-each-reporter-its-own-comment-thread', 'YGJZIajkVGSblpQyl4Kt3jOJ9dgt1qj21S6e_OdJsmY'); -- YGJZIajkVGSblpQyl4Kt3jOJ9dgt1qj21S6e_OdJsmY +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/0009-write-a-body-before-its-second-caller.md', 'Write a body before its second caller', '{"type":"minimark","value":[["h1",{"id":"adr-0009-write-a-body-before-its-second-caller"},"ADR-0009 — Write a body before its second caller"],["h2",{"id":"context"},"Context"],["p",{},"The case for centralising a workflow is that several repos carry the same one. Where only a single repo has it, that case is absent: a body written for one caller generalises a shape nobody has met twice, and the input it takes may be the wrong seam."],["p",{},"Refusing every such body has its own cost, and it falls on a repo that does not exist yet. The next repo of a given kind starts from the only version available — a copy, taken whole, from whichever repo happened to have one. A long pipeline copied once is a second variant from its first commit, and the estate''s own history is the argument: every workflow being centralised here reached its variant count exactly that way."],["p",{},"Both failure modes are real, so the question is which repo pays: a body generalised too early, or a copy made too late."],["h2",{"id":"decision"},"Decision"],["p",{},"A body may be written for a single caller when a ",["strong",{},"named"]," repo is known to need it next — one that exists, or one a template is expected to produce. The reasoning goes in the body''s own header, naming that repo, so a later reader can tell a considered exception from an oversight."],["p",{},"Where no such repo can be named, one instance is not a pattern and no body is written."],["h2",{"id":"consequences"},"Consequences"],["p",{},"A body written this way has had its interface guessed once rather than observed twice. The second caller is likely to need an input that is not there, and adding it is cheap; discovering that the seam itself is wrong is not."],["p",{},"Migrating the first caller onto such a body may rename its checks, which is a branch-protection change in that repo. Accepted deliberately: it happens once, and it happens anyway during the migration."],["p",{},"The rule can be argued into anything, since any repo might one day need any workflow. The requirement that the next caller be ",["em",{},"named"]," is what keeps it a decision rather than a preference — an unnamed one is a hunch, and a hunch does not clear the bar."],["h2",{"id":"alternatives-considered"},"Alternatives considered"],["p",{},["strong",{},"Wait for the second caller, always."]," The rule as it would read without this record. It is right in the common case and wrong exactly where the second caller is a large repo whose copy would be made before anyone noticed."],["p",{},["strong",{},"Write every body speculatively."]," Removes the judgement, and fills the repository with interfaces shaped by a single example, each of which has to be broken when a real second caller arrives."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"context","depth":2,"text":"Context"},{"id":"decision","depth":2,"text":"Decision"},{"id":"consequences","depth":2,"text":"Consequences"},{"id":"alternatives-considered","depth":2,"text":"Alternatives considered"}]}}', 'A body may be written for a single caller when a specific repo is known to need it next, and the reasoning is recorded with the body.', 'md', NULL, NULL, '{"status":"accepted","date":"2026-09-01"}', NULL, '/workflows/v0.7.0/adr/0009-write-a-body-before-its-second-caller', '{"title":"Write a body before its second caller","description":"A body may be written for a single caller when a specific repo is known to need it next, and the reasoning is recorded with the body."}', 'workflows/v0.7.0/99.adr/0009-write-a-body-before-its-second-caller', 'yK0uKfsrv0aTWuGVByNVx1YUSy8_DbuEd6V2kcrPmiY'); -- yK0uKfsrv0aTWuGVByNVx1YUSy8_DbuEd6V2kcrPmiY +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/99.adr/index.md', 'Architecture decisions', '{"type":"minimark","value":[["h1",{"id":"architecture-decisions"},"Architecture decisions"],["p",{},"A decision earns an ADR when it constrains work that comes later and its reasoning would otherwise be lost: a choice between real alternatives, a convention every part of the project has to follow, a trade-off that looks like a mistake until the reason is known. Records are append-only — a reversed decision is written as a new ADR that supersedes the old one, never as an edit to it."],["p",{},"This log holds decisions about ",["strong",{},"this repository"],": what a body may assume, what a caller must state, and where the boundary between the two runs. Decisions about the estate''s provisioned state — branch protection, the queue App, the secret mirror — belong to ",["code",{},"kirchDev/infrastructure"]," and are recorded there; the bodies here implement them and cite them by id."],["table",{},["thead",{},["tr",{},["th",{"align":"left"},"ADR"],["th",{"align":"left"},"Decision"],["th",{"align":"left"},"Status"],["th",{"align":"left"},"Date"]]],["tbody",{},["tr",{},["td",{"align":"left"},["a",{"href":"0001-derive-a-bodys-configuration-from-the-repo"},"ADR-0001"]],["td",{"align":"left"},"Derive a body''s configuration from the repo"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0002-pin-callers-to-a-commit-sha"},"ADR-0002"]],["td",{"align":"left"},"Pin callers to a commit SHA"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0003-name-every-secret-a-stub-passes"},"ADR-0003"]],["td",{"align":"left"},"Name every secret a stub passes"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0004-compose-ci-from-bodies-that-are-jobs"},"ADR-0004"]],["td",{"align":"left"},"Compose CI from bodies that are jobs"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0005-publish-with-one-body-per-target"},"ADR-0005"]],["td",{"align":"left"},"Publish with one body per target"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0006-keep-the-composite-action-out-of-the-bodies"},"ADR-0006"]],["td",{"align":"left"},"Keep the composite action out of the bodies"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0007-run-the-gate-as-one-job-with-a-step-per-check"},"ADR-0007"]],["td",{"align":"left"},"Run the gate as one job with a step per check"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0008-give-each-reporter-its-own-comment-thread"},"ADR-0008"]],["td",{"align":"left"},"Give each reporter its own comment thread"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]],["tr",{},["td",{"align":"left"},["a",{"href":"0009-write-a-body-before-its-second-caller"},"ADR-0009"]],["td",{"align":"left"},"Write a body before its second caller"],["td",{"align":"left"},"Accepted"],["td",{"align":"left"},"2026-09-01"]]]]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}}', 'The decision log — every architecture decision recorded for this repository.', 'md', NULL, NULL, '{}', NULL, '/workflows/v0.7.0/adr', '{"title":"Architecture decisions","description":"The decision log — every architecture decision recorded for this repository."}', 'workflows/v0.7.0/99.adr/index', 'wP2eswbSPrAcIcxSgLg9crUBFouN-kvSVk9AbwpeVPQ'); -- wP2eswbSPrAcIcxSgLg9crUBFouN-kvSVk9AbwpeVPQ +INSERT INTO _content_docs_workflows_v0_7_0 VALUES ('docs_workflows_v0_7_0/workflows/v0.7.0/index.md', 'workflows documentation', '{"type":"minimark","value":[["h1",{"id":"workflows"},"workflows"],["p",{},"This repository holds the estate''s reusable GitHub Actions workflow bodies. Every other repo carries a thin caller stub instead of its own copy, so a fix lands once and reaches each repo on its next bump."],["p",{},"These pages cover the two tasks the repository asks of a person — moving a repo onto a body, and writing a new one — and the decision log behind them."],["h2",{"id":"sections"},"Sections"],["ul",{},["li",{},["a",{"href":"1.guides/"},"Guides"]," — migrating a repo onto a stub, and adding a body."],["li",{},["a",{"href":"99.adr/"},"Architecture decisions"]," — the decision log."]],["p",{},"What the bodies do, how a stub looks and what each one needs is in the ",["a",{"href":"../README"},"README"],"; how to set the repo up and get a PR landed is in ",["a",{"href":"../CONTRIBUTING"},"CONTRIBUTING.md"],". Decisions about the estate''s provisioned state — branch protection, the queue App, the Bitwarden mirror — are recorded in ",["code",{},"kirchDev/infrastructure"],", not here."]],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"sections","depth":2,"text":"Sections"}]}}', 'How a repo moves onto the central reusable workflow bodies, how a new body is written, and the decisions that govern both.', 'md', NULL, NULL, '{}', NULL, '/workflows/v0.7.0', '{"title":"workflows documentation","description":"How a repo moves onto the central reusable workflow bodies, how a new body is written, and the decisions that govern both."}', 'workflows/v0.7.0/index', '45LCPrWqc2j05N2kvCKlXSqiBQy4l2OThzGrH7UoCa4'); -- 45LCPrWqc2j05N2kvCKlXSqiBQy4l2OThzGrH7UoCa4 +UPDATE _content_info SET ready = true WHERE id = 'checksum_docs_workflows_v0_7_0'; -- meta \ No newline at end of file diff --git a/www/.nuxt/content/types.d.ts b/www/.nuxt/content/types.d.ts new file mode 100644 index 00000000..14e63bad --- /dev/null +++ b/www/.nuxt/content/types.d.ts @@ -0,0 +1,34 @@ +import type { PageCollectionItemBase, DataCollectionItemBase } from '@nuxt/content' + +declare module '@nuxt/content' { + interface DocsDuxtCollectionItem extends PageCollectionItemBase { + icon?: string + layout?: string + navigation?: boolean + } + + interface DocsWorkflowsCollectionItem extends PageCollectionItemBase { + icon?: string + layout?: string + navigation?: boolean + } + + interface DocsWorkflowsV070CollectionItem extends PageCollectionItemBase { + icon?: string + layout?: string + navigation?: boolean + } + + + interface PageCollections { + docs_duxt: DocsDuxtCollectionItem + docs_workflows: DocsWorkflowsCollectionItem + docs_workflows_v0_7_0: DocsWorkflowsV070CollectionItem + } + + interface Collections { + docs_duxt: DocsDuxtCollectionItem + docs_workflows: DocsWorkflowsCollectionItem + docs_workflows_v0_7_0: DocsWorkflowsV070CollectionItem + } +} diff --git a/www/.nuxt/dev/index.mjs b/www/.nuxt/dev/index.mjs new file mode 100644 index 00000000..c3cd82d4 --- /dev/null +++ b/www/.nuxt/dev/index.mjs @@ -0,0 +1,3351 @@ +import process from 'node:process';globalThis._importMeta_={url:import.meta.url,env:process.env};import { tmpdir } from 'node:os'; +import { defineEventHandler, handleCacheHeaders, splitCookiesString, createEvent, fetchWithEvent, isEvent, eventHandler, setHeaders, createError, sendRedirect, proxyRequest, getRequestHeader, setResponseHeaders, setResponseStatus, send, getRequestHeaders, setResponseHeader, appendResponseHeader, getRequestURL, getResponseHeader, removeResponseHeader, getQuery as getQuery$1, getRequestWebStream, createApp, createRouter as createRouter$1, toNodeListener, lazyEventHandler, getResponseStatus, getRouterParam, readBody, getResponseStatusText } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/h3@1.15.11/node_modules/h3/dist/index.mjs'; +import { Server } from 'node:http'; +import { resolve, dirname, join } from 'node:path'; +import nodeCrypto from 'node:crypto'; +import { parentPort, threadId } from 'node:worker_threads'; +import { escapeHtml } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/@vue+shared@3.5.42/node_modules/@vue/shared/dist/shared.cjs.js'; +import viteNodeEntry_mjs from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/@nuxt+vite-builder@4.5.2_a55ba682e03276483786c88b5142260c/node_modules/@nuxt/vite-builder/dist/vite-node-entry.mjs'; +import { viteNodeFetch } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/@nuxt+vite-builder@4.5.2_a55ba682e03276483786c88b5142260c/node_modules/@nuxt/vite-builder/dist/vite-node.mjs'; +import { parseURL, withoutBase, joinURL, getQuery, withQuery, withTrailingSlash, decodePath, withLeadingSlash, withoutTrailingSlash, encodePath, joinRelativeURL } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/ufo@1.6.4/node_modules/ufo/dist/index.mjs'; +import destr, { destr as destr$1 } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs'; +import { createHooks } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs'; +import { createFetch, Headers as Headers$1 } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/node.mjs'; +import { fetchNodeRequestHandler, callNodeRequestHandler } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/node-mock-http@1.0.5/node_modules/node-mock-http/dist/index.mjs'; +import { createStorage, prefixStorage } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1_supports-color@10.2.2_/node_modules/unstorage/dist/index.mjs'; +import unstorage_47drivers_47fs from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1_supports-color@10.2.2_/node_modules/unstorage/drivers/fs.mjs'; +import { digest, hash as hash$1 } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/ohash@2.0.12/node_modules/ohash/dist/index.mjs'; +import { klona } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs'; +import defu, { defuFn } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/defu@6.1.7/node_modules/defu/dist/defu.mjs'; +import { snakeCase } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs'; +import { getContext } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/unctx@2.5.0/node_modules/unctx/dist/index.mjs'; +import { toRouteMatcher, createRouter } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs'; +import { readFile } from 'node:fs/promises'; +import consola, { consola as consola$1 } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/index.mjs'; +import { ErrorParser } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/youch-core@0.3.3/node_modules/youch-core/build/index.js'; +import { Youch } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/youch@4.1.1/node_modules/youch/build/index.js'; +import { SourceMapConsumer } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/source-map@0.7.6/node_modules/source-map/source-map.js'; +import { defineDiagnostics, createConsoleReporter } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/nostics@1.2.0/node_modules/nostics/dist/index.mjs'; +import { ansiFormatter } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/nostics@1.2.0/node_modules/nostics/dist/formatters/ansi.mjs'; +import { AsyncLocalStorage } from 'node:async_hooks'; +import { stringify, uneval } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/devalue@5.9.2/node_modules/devalue/index.js'; +import { getContext as getContext$1 } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/unctx@3.0.1_magic-string@1.2.3_oxc-parser@0.141.0_rolldown@1.2.6_unplugin@3.3.0_esbuild_3dedeae4c4d2333b554e071fe7839713/node_modules/unctx/dist/index.mjs'; +import { captureRawStackTrace, parseRawStackTrace } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/errx@0.1.2/node_modules/errx/dist/index.mjs'; +import { isVNode, isRef, toValue } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/vue@3.5.42_typescript@6.0.3/node_modules/vue/index.mjs'; +import _wH6JrtIxmaSoA8lCPWFnE9z4lQeXW6H5z3l5aymEQw from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/@nuxt+vite-builder@4.5.2_a55ba682e03276483786c88b5142260c/node_modules/@nuxt/vite-builder/dist/fix-stacktrace.mjs'; +import { promises } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { dirname as dirname$1, resolve as resolve$1 } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.mjs'; +import { createRenderer, getRequestDependencies, getPreloadLinks, getPrefetchLinks } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/vue-bundle-renderer@2.3.2/node_modules/vue-bundle-renderer/dist/runtime.mjs'; +import { renderToString } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/vue@3.5.42_typescript@6.0.3/node_modules/vue/server-renderer/index.mjs'; +import { createHead as createHead$1, propsToString, renderSSRHead } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/unhead@3.4.0_esbuild@0.28.2_rolldown@1.2.6_rollup@4.63.1_vite@8.2.2_@types+node@26.4.0__dc5f77df5e9445d1ad9c8f2cfb2ecd4b/node_modules/unhead/dist/server.mjs'; +import { walkResolver } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/unhead@3.4.0_esbuild@0.28.2_rolldown@1.2.6_rollup@4.63.1_vite@8.2.2_@types+node@26.4.0__dc5f77df5e9445d1ad9c8f2cfb2ecd4b/node_modules/unhead/dist/utils.mjs'; +import { DeprecationsPlugin } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/unhead@3.4.0_esbuild@0.28.2_rolldown@1.2.6_rollup@4.63.1_vite@8.2.2_@types+node@26.4.0__dc5f77df5e9445d1ad9c8f2cfb2ecd4b/node_modules/unhead/dist/legacy.mjs'; +import { PromisesPlugin, TemplateParamsPlugin, AliasSortingPlugin } from 'file:///root/projects/comGithub/kirchDev/duxt/node_modules/.pnpm/unhead@3.4.0_esbuild@0.28.2_rolldown@1.2.6_rollup@4.63.1_vite@8.2.2_@types+node@26.4.0__dc5f77df5e9445d1ad9c8f2cfb2ecd4b/node_modules/unhead/dist/plugins.mjs'; + +const serverAssets = [{"baseName":"server","dir":"/root/projects/comGithub/kirchDev/duxt/www/server/assets"}]; + +const assets$1 = createStorage(); + +for (const asset of serverAssets) { + assets$1.mount(asset.baseName, unstorage_47drivers_47fs({ base: asset.dir, ignore: (asset?.ignore || []) })); +} + +const storage = createStorage({}); + +storage.mount('/assets', assets$1); + +storage.mount('root', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/root/projects/comGithub/kirchDev/duxt/www","watchOptions":{"ignored":[null]}})); +storage.mount('src', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/root/projects/comGithub/kirchDev/duxt/www/server","watchOptions":{"ignored":[null]}})); +storage.mount('build', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/root/projects/comGithub/kirchDev/duxt/www/.nuxt"})); +storage.mount('cache', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/root/projects/comGithub/kirchDev/duxt/www/.nuxt/cache"})); +storage.mount('data', unstorage_47drivers_47fs({"driver":"fs","base":"/root/projects/comGithub/kirchDev/duxt/www/.data/kv"})); + +function useStorage(base = "") { + return base ? prefixStorage(storage, base) : storage; +} + +const Hasher = /* @__PURE__ */ (() => { + class Hasher2 { + buff = ""; + #context = /* @__PURE__ */ new Map(); + write(str) { + this.buff += str; + } + dispatch(value) { + const type = value === null ? "null" : typeof value; + return this[type](value); + } + object(object) { + if (object && typeof object.toJSON === "function") { + return this.object(object.toJSON()); + } + const objString = Object.prototype.toString.call(object); + let objType = ""; + const objectLength = objString.length; + objType = objectLength < 10 ? "unknown:[" + objString + "]" : objString.slice(8, objectLength - 1); + objType = objType.toLowerCase(); + let objectNumber = null; + if ((objectNumber = this.#context.get(object)) === void 0) { + this.#context.set(object, this.#context.size); + } else { + return this.dispatch("[CIRCULAR:" + objectNumber + "]"); + } + if (typeof Buffer !== "undefined" && Buffer.isBuffer && Buffer.isBuffer(object)) { + this.write("buffer:"); + return this.write(object.toString("utf8")); + } + if (objType !== "object" && objType !== "function" && objType !== "asyncfunction") { + if (this[objType]) { + this[objType](object); + } else { + this.unknown(object, objType); + } + } else { + const keys = Object.keys(object).sort(); + const extraKeys = []; + this.write("object:" + (keys.length + extraKeys.length) + ":"); + const dispatchForKey = (key) => { + this.dispatch(key); + this.write(":"); + this.dispatch(object[key]); + this.write(","); + }; + for (const key of keys) { + dispatchForKey(key); + } + for (const key of extraKeys) { + dispatchForKey(key); + } + } + } + array(arr, unordered) { + unordered = unordered === void 0 ? false : unordered; + this.write("array:" + arr.length + ":"); + if (!unordered || arr.length <= 1) { + for (const entry of arr) { + this.dispatch(entry); + } + return; + } + const contextAdditions = /* @__PURE__ */ new Map(); + const entries = arr.map((entry) => { + const hasher = new Hasher2(); + hasher.dispatch(entry); + for (const [key, value] of hasher.#context) { + contextAdditions.set(key, value); + } + return hasher.toString(); + }); + this.#context = contextAdditions; + entries.sort(); + return this.array(entries, false); + } + date(date) { + return this.write("date:" + date.toJSON()); + } + symbol(sym) { + return this.write("symbol:" + sym.toString()); + } + unknown(value, type) { + this.write(type); + if (!value) { + return; + } + this.write(":"); + if (value && typeof value.entries === "function") { + return this.array( + [...value.entries()], + true + /* ordered */ + ); + } + } + error(err) { + return this.write("error:" + err.toString()); + } + boolean(bool) { + return this.write("bool:" + bool); + } + string(string) { + this.write("string:" + string.length + ":"); + this.write(string); + } + function(fn) { + this.write("fn:"); + if (isNativeFunction(fn)) { + this.dispatch("[native]"); + } else { + this.dispatch(fn.toString()); + } + } + number(number) { + return this.write("number:" + number); + } + null() { + return this.write("Null"); + } + undefined() { + return this.write("Undefined"); + } + regexp(regex) { + return this.write("regex:" + regex.toString()); + } + arraybuffer(arr) { + this.write("arraybuffer:"); + return this.dispatch(new Uint8Array(arr)); + } + url(url) { + return this.write("url:" + url.toString()); + } + map(map) { + this.write("map:"); + const arr = [...map]; + return this.array(arr, false); + } + set(set) { + this.write("set:"); + const arr = [...set]; + return this.array(arr, false); + } + bigint(number) { + return this.write("bigint:" + number.toString()); + } + } + for (const type of [ + "uint8array", + "uint8clampedarray", + "unt8array", + "uint16array", + "unt16array", + "uint32array", + "unt32array", + "float32array", + "float64array" + ]) { + Hasher2.prototype[type] = function(arr) { + this.write(type + ":"); + return this.array([...arr], false); + }; + } + function isNativeFunction(f) { + if (typeof f !== "function") { + return false; + } + return Function.prototype.toString.call(f).slice( + -15 + /* "[native code] }".length */ + ) === "[native code] }"; + } + return Hasher2; +})(); +function serialize(object) { + const hasher = new Hasher(); + hasher.dispatch(object); + return hasher.buff; +} +function hash(value) { + return digest(typeof value === "string" ? value : serialize(value)).replace(/[-_]/g, "").slice(0, 10); +} + +function defaultCacheOptions() { + return { + name: "_", + base: "/cache", + swr: true, + maxAge: 1 + }; +} +function defineCachedFunction(fn, opts = {}) { + opts = { ...defaultCacheOptions(), ...opts }; + const pending = {}; + const group = opts.group || "nitro/functions"; + const name = opts.name || fn.name || "_"; + const integrity = opts.integrity || hash([fn, opts]); + const validate = opts.validate || ((entry) => entry.value !== void 0); + async function get(key, resolver, shouldInvalidateCache, event) { + const cacheKey = [opts.base, group, name, key + ".json"].filter(Boolean).join(":").replace(/:\/$/, ":index"); + let entry = await useStorage().getItem(cacheKey).catch((error) => { + console.error(`[cache] Cache read error.`, error); + useNitroApp().captureError(error, { event, tags: ["cache"] }); + }) || {}; + if (typeof entry !== "object") { + entry = {}; + const error = new Error("Malformed data read from cache."); + console.error("[cache]", error); + useNitroApp().captureError(error, { event, tags: ["cache"] }); + } + const ttl = (opts.maxAge ?? 0) * 1e3; + if (ttl) { + entry.expires = Date.now() + ttl; + } + const expired = shouldInvalidateCache || entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl || validate(entry) === false; + const _resolve = async () => { + const isPending = pending[key]; + if (!isPending) { + if (entry.value !== void 0 && (opts.staleMaxAge || 0) >= 0 && opts.swr === false) { + entry.value = void 0; + entry.integrity = void 0; + entry.mtime = void 0; + entry.expires = void 0; + } + pending[key] = Promise.resolve(resolver()); + } + try { + entry.value = await pending[key]; + } catch (error) { + if (!isPending) { + delete pending[key]; + } + throw error; + } + if (!isPending) { + entry.mtime = Date.now(); + entry.integrity = integrity; + delete pending[key]; + if (validate(entry) !== false) { + let setOpts; + if (opts.maxAge && !opts.swr) { + setOpts = { ttl: opts.maxAge }; + } + const promise = useStorage().setItem(cacheKey, entry, setOpts).catch((error) => { + console.error(`[cache] Cache write error.`, error); + useNitroApp().captureError(error, { event, tags: ["cache"] }); + }); + if (event?.waitUntil) { + event.waitUntil(promise); + } + } + } + }; + const _resolvePromise = expired ? _resolve() : Promise.resolve(); + if (entry.value === void 0) { + await _resolvePromise; + } else if (expired && event && event.waitUntil) { + event.waitUntil(_resolvePromise); + } + if (opts.swr && validate(entry) !== false) { + _resolvePromise.catch((error) => { + console.error(`[cache] SWR handler error.`, error); + useNitroApp().captureError(error, { event, tags: ["cache"] }); + }); + return entry; + } + return _resolvePromise.then(() => entry); + } + return async (...args) => { + const shouldBypassCache = await opts.shouldBypassCache?.(...args); + if (shouldBypassCache) { + return fn(...args); + } + const key = await (opts.getKey || getKey)(...args); + const shouldInvalidateCache = await opts.shouldInvalidateCache?.(...args); + const entry = await get( + key, + () => fn(...args), + shouldInvalidateCache, + args[0] && isEvent(args[0]) ? args[0] : void 0 + ); + let value = entry.value; + if (opts.transform) { + value = await opts.transform(entry, ...args) || value; + } + return value; + }; +} +function cachedFunction(fn, opts = {}) { + return defineCachedFunction(fn, opts); +} +function getKey(...args) { + return args.length > 0 ? hash(args) : ""; +} +function escapeKey(key) { + return String(key).replace(/\W/g, ""); +} +function defineCachedEventHandler(handler, opts = defaultCacheOptions()) { + const variableHeaderNames = (opts.varies || []).filter(Boolean).map((h) => h.toLowerCase()).sort(); + const _opts = { + ...opts, + getKey: async (event) => { + const customKey = await opts.getKey?.(event); + if (customKey) { + return escapeKey(customKey); + } + const _path = event.node.req.originalUrl || event.node.req.url || event.path; + let _pathname; + try { + _pathname = escapeKey(decodeURI(parseURL(_path).pathname)).slice(0, 16) || "index"; + } catch { + _pathname = "-"; + } + const _hashedPath = `${_pathname}.${hash(_path)}`; + const _headers = variableHeaderNames.map((header) => [header, event.node.req.headers[header]]).map(([name, value]) => `${escapeKey(name)}.${hash(value)}`); + return [_hashedPath, ..._headers].join(":"); + }, + validate: (entry) => { + if (!entry.value) { + return false; + } + if (entry.value.code >= 400) { + return false; + } + if (entry.value.body === void 0) { + return false; + } + if (entry.value.headers.etag === "undefined" || entry.value.headers["last-modified"] === "undefined") { + return false; + } + return true; + }, + group: opts.group || "nitro/handlers", + integrity: opts.integrity || hash([handler, opts]) + }; + const _cachedHandler = cachedFunction( + async (incomingEvent) => { + const variableHeaders = {}; + for (const header of variableHeaderNames) { + const value = incomingEvent.node.req.headers[header]; + if (value !== void 0) { + variableHeaders[header] = value; + } + } + const reqProxy = cloneWithProxy(incomingEvent.node.req, { + headers: variableHeaders + }); + const resHeaders = {}; + let _resSendBody; + const resProxy = cloneWithProxy(incomingEvent.node.res, { + statusCode: 200, + writableEnded: false, + writableFinished: false, + headersSent: false, + closed: false, + getHeader(name) { + return resHeaders[name]; + }, + setHeader(name, value) { + resHeaders[name] = value; + return this; + }, + getHeaderNames() { + return Object.keys(resHeaders); + }, + hasHeader(name) { + return name in resHeaders; + }, + removeHeader(name) { + delete resHeaders[name]; + }, + getHeaders() { + return resHeaders; + }, + end(chunk, arg2, arg3) { + if (typeof chunk === "string") { + _resSendBody = chunk; + } + if (typeof arg2 === "function") { + arg2(); + } + if (typeof arg3 === "function") { + arg3(); + } + return this; + }, + write(chunk, arg2, arg3) { + if (typeof chunk === "string") { + _resSendBody = chunk; + } + if (typeof arg2 === "function") { + arg2(void 0); + } + if (typeof arg3 === "function") { + arg3(); + } + return true; + }, + writeHead(statusCode, headers2) { + this.statusCode = statusCode; + if (headers2) { + if (Array.isArray(headers2) || typeof headers2 === "string") { + throw new TypeError("Raw headers is not supported."); + } + for (const header in headers2) { + const value = headers2[header]; + if (value !== void 0) { + this.setHeader( + header, + value + ); + } + } + } + return this; + } + }); + const event = createEvent(reqProxy, resProxy); + event.fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, { + fetch: useNitroApp().localFetch + }); + event.$fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, { + fetch: globalThis.$fetch + }); + event.waitUntil = incomingEvent.waitUntil; + event.context = incomingEvent.context; + event.context.cache = { + options: _opts + }; + const body = await handler(event) || _resSendBody; + const headers = event.node.res.getHeaders(); + headers.etag = String( + headers.Etag || headers.etag || `W/"${hash(body)}"` + ); + headers["last-modified"] = String( + headers["Last-Modified"] || headers["last-modified"] || (/* @__PURE__ */ new Date()).toUTCString() + ); + const cacheControl = []; + if (opts.swr) { + if (opts.maxAge) { + cacheControl.push(`s-maxage=${opts.maxAge}`); + } + if (opts.staleMaxAge) { + cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`); + } else { + cacheControl.push("stale-while-revalidate"); + } + } else if (opts.maxAge) { + cacheControl.push(`max-age=${opts.maxAge}`); + } + if (cacheControl.length > 0) { + headers["cache-control"] = cacheControl.join(", "); + } + const cacheEntry = { + code: event.node.res.statusCode, + headers, + body + }; + return cacheEntry; + }, + _opts + ); + return defineEventHandler(async (event) => { + if (opts.headersOnly) { + if (handleCacheHeaders(event, { maxAge: opts.maxAge })) { + return; + } + return handler(event); + } + const response = await _cachedHandler( + event + ); + if (event.node.res.headersSent || event.node.res.writableEnded) { + return response.body; + } + if (handleCacheHeaders(event, { + modifiedTime: new Date(response.headers["last-modified"]), + etag: response.headers.etag, + maxAge: opts.maxAge + })) { + return; + } + event.node.res.statusCode = response.code; + for (const name in response.headers) { + const value = response.headers[name]; + if (name === "set-cookie") { + event.node.res.appendHeader( + name, + splitCookiesString(value) + ); + } else { + if (value !== void 0) { + event.node.res.setHeader(name, value); + } + } + } + return response.body; + }); +} +function cloneWithProxy(obj, overrides) { + return new Proxy(obj, { + get(target, property, receiver) { + if (property in overrides) { + return overrides[property]; + } + return Reflect.get(target, property, receiver); + }, + set(target, property, value, receiver) { + if (property in overrides) { + overrides[property] = value; + return true; + } + return Reflect.set(target, property, value, receiver); + } + }); +} +const cachedEventHandler = defineCachedEventHandler; + +const inlineAppConfig = {}; + + + +const appConfig = defuFn(inlineAppConfig); + +function getEnv(key, opts) { + const envKey = snakeCase(key).toUpperCase(); + return destr( + process.env[opts.prefix + envKey] ?? process.env[opts.altPrefix + envKey] + ); +} +function _isObject(input) { + return typeof input === "object" && !Array.isArray(input); +} +function applyEnv(obj, opts, parentKey = "") { + for (const key in obj) { + const subKey = parentKey ? `${parentKey}_${key}` : key; + const envValue = getEnv(subKey, opts); + if (_isObject(obj[key])) { + if (_isObject(envValue)) { + obj[key] = { ...obj[key], ...envValue }; + applyEnv(obj[key], opts, subKey); + } else if (envValue === void 0) { + applyEnv(obj[key], opts, subKey); + } else { + obj[key] = envValue ?? obj[key]; + } + } else { + obj[key] = envValue ?? obj[key]; + } + if (opts.envExpansion && typeof obj[key] === "string") { + obj[key] = _expandFromEnv(obj[key]); + } + } + return obj; +} +const envExpandRx = /\{\{([^{}]*)\}\}/g; +function _expandFromEnv(value) { + return value.replace(envExpandRx, (match, key) => { + return process.env[key] || match; + }); +} + +const _inlineRuntimeConfig = { + "app": { + "baseURL": "/", + "buildId": "dev", + "buildAssetsDir": "/_nuxt/", + "cdnURL": "" + }, + "nitro": { + "envPrefix": "NUXT_", + "routeRules": { + "/__nuxt_error": { + "cache": false + }, + "/_nuxt/builds/meta/**": { + "headers": { + "cache-control": "public, max-age=31536000, immutable" + } + }, + "/_nuxt/builds/**": { + "headers": { + "cache-control": "public, max-age=1, immutable" + } + } + } + }, + "public": {} +}; +const envOptions = { + prefix: "NITRO_", + altPrefix: _inlineRuntimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_", + envExpansion: _inlineRuntimeConfig.nitro.envExpansion ?? process.env.NITRO_ENV_EXPANSION ?? false +}; +const _sharedRuntimeConfig = _deepFreeze( + applyEnv(klona(_inlineRuntimeConfig), envOptions) +); +function useRuntimeConfig(event) { + if (!event) { + return _sharedRuntimeConfig; + } + if (event.context.nitro.runtimeConfig) { + return event.context.nitro.runtimeConfig; + } + const runtimeConfig = klona(_inlineRuntimeConfig); + applyEnv(runtimeConfig, envOptions); + event.context.nitro.runtimeConfig = runtimeConfig; + return runtimeConfig; +} +_deepFreeze(klona(appConfig)); +function _deepFreeze(object) { + const propNames = Object.getOwnPropertyNames(object); + for (const name of propNames) { + const value = object[name]; + if (value && typeof value === "object") { + _deepFreeze(value); + } + } + return Object.freeze(object); +} +new Proxy(/* @__PURE__ */ Object.create(null), { + get: (_, prop) => { + console.warn( + "Please use `useRuntimeConfig()` instead of accessing config directly." + ); + const runtimeConfig = useRuntimeConfig(); + if (prop in runtimeConfig) { + return runtimeConfig[prop]; + } + return void 0; + } +}); + +getContext("nitro-app", { + asyncContext: false, + AsyncLocalStorage: void 0 +}); + +function isPathInScope(pathname, base) { + let canonical; + try { + const pre = pathname.replace(/%2f/gi, "/").replace(/%5c/gi, "\\"); + canonical = new URL(pre, "http://_").pathname; + } catch { + return false; + } + return !base || canonical === base || canonical.startsWith(base + "/"); +} + +const config = useRuntimeConfig(); +const _routeRulesMatcher = toRouteMatcher( + createRouter({ routes: config.nitro.routeRules }) +); +function createRouteRulesHandler(ctx) { + return eventHandler((event) => { + const routeRules = getRouteRules(event); + if (routeRules.headers) { + setHeaders(event, routeRules.headers); + } + if (routeRules.redirect) { + let target = routeRules.redirect.to; + if (target.endsWith("/**")) { + let targetPath = event.path; + const strpBase = routeRules.redirect._redirectStripBase; + if (strpBase) { + if (!isPathInScope(event.path.split("?")[0], strpBase)) { + throw createError({ statusCode: 400 }); + } + targetPath = withoutBase(targetPath, strpBase); + } else if (targetPath.startsWith("//")) { + targetPath = targetPath.replace(/^\/+/, "/"); + } + target = joinURL(target.slice(0, -3), targetPath); + } else if (event.path.includes("?")) { + const query = getQuery(event.path); + target = withQuery(target, query); + } + return sendRedirect(event, target, routeRules.redirect.statusCode); + } + if (routeRules.proxy) { + let target = routeRules.proxy.to; + if (target.endsWith("/**")) { + let targetPath = event.path; + const strpBase = routeRules.proxy._proxyStripBase; + if (strpBase) { + if (!isPathInScope(event.path.split("?")[0], strpBase)) { + throw createError({ statusCode: 400 }); + } + targetPath = withoutBase(targetPath, strpBase); + } else if (targetPath.startsWith("//")) { + targetPath = targetPath.replace(/^\/+/, "/"); + } + target = joinURL(target.slice(0, -3), targetPath); + } else if (event.path.includes("?")) { + const query = getQuery(event.path); + target = withQuery(target, query); + } + return proxyRequest(event, target, { + fetch: ctx.localFetch, + ...routeRules.proxy + }); + } + }); +} +function getRouteRules(event) { + event.context._nitro = event.context._nitro || {}; + if (!event.context._nitro.routeRules) { + event.context._nitro.routeRules = getRouteRulesForPath( + withoutBase(event.path.split("?")[0], useRuntimeConfig().app.baseURL) + ); + } + return event.context._nitro.routeRules; +} +function getRouteRulesForPath(path) { + return defu({}, ..._routeRulesMatcher.matchAll(path).reverse()); +} + +function _captureError(error, type) { + console.error(`[${type}]`, error); + useNitroApp().captureError(error, { tags: [type] }); +} +function trapUnhandledNodeErrors() { + process.on( + "unhandledRejection", + (error) => _captureError(error, "unhandledRejection") + ); + process.on( + "uncaughtException", + (error) => _captureError(error, "uncaughtException") + ); +} +function joinHeaders(value) { + return Array.isArray(value) ? value.join(", ") : String(value); +} +function normalizeFetchResponse(response) { + if (!response.headers.has("set-cookie")) { + return response; + } + return new Response(response.body, { + status: response.status, + statusText: response.statusText, + headers: normalizeCookieHeaders(response.headers) + }); +} +function normalizeCookieHeader(header = "") { + return splitCookiesString(joinHeaders(header)); +} +function normalizeCookieHeaders(headers) { + const outgoingHeaders = new Headers(); + for (const [name, header] of headers) { + if (name === "set-cookie") { + for (const cookie of normalizeCookieHeader(header)) { + outgoingHeaders.append("set-cookie", cookie); + } + } else { + outgoingHeaders.set(name, joinHeaders(header)); + } + } + return outgoingHeaders; +} + +//#region src/runtime/utils/error.ts +/** +* Nitro internal functions extracted from https://github.com/nitrojs/nitro/blob/v2/src/runtime/internal/utils.ts +*/ +function isJsonRequest(event) { + if (hasReqHeader(event, "accept", "text/html")) return false; + return hasReqHeader(event, "accept", "application/json") || hasReqHeader(event, "user-agent", "curl/") || hasReqHeader(event, "user-agent", "httpie/") || hasReqHeader(event, "sec-fetch-mode", "cors") || event.path.startsWith("/api/") || event.path.endsWith(".json"); +} +function hasReqHeader(event, name, includes) { + const value = getRequestHeader(event, name); + return !!(value && typeof value === "string" && value.toLowerCase().includes(includes)); +} + +//#region src/runtime/utils/dev.ts +const iframeStorageBridge = (nonce) => ` +(function () { + const NONCE = ${JSON.stringify(nonce)}; + const memoryStore = Object.create(null); + + const post = (type, payload) => { + window.parent.postMessage({ type, nonce: NONCE, ...payload }, '*'); + }; + + const isValid = (data) => data && data.nonce === NONCE; + + const mockStorage = { + getItem(key) { + return Object.hasOwn(memoryStore, key) + ? memoryStore[key] + : null; + }, + setItem(key, value) { + const v = String(value); + memoryStore[key] = v; + post('storage-set', { key, value: v }); + }, + removeItem(key) { + delete memoryStore[key]; + post('storage-remove', { key }); + }, + clear() { + for (const key of Object.keys(memoryStore)) + delete memoryStore[key]; + post('storage-clear', {}); + }, + key(index) { + const keys = Object.keys(memoryStore); + return keys[index] ?? null; + }, + get length() { + return Object.keys(memoryStore).length; + } + }; + + const defineLocalStorage = () => { + try { + Object.defineProperty(window, 'localStorage', { + value: mockStorage, + writable: false, + configurable: true + }); + } catch { + window.localStorage = mockStorage; + } + }; + + defineLocalStorage(); + + window.addEventListener('message', (event) => { + const data = event.data; + if (!isValid(data) || data.type !== 'storage-sync-data') return; + + const incoming = data.data || {}; + for (const key of Object.keys(incoming)) + memoryStore[key] = incoming[key]; + + if (typeof window.initTheme === 'function') + window.initTheme(); + window.dispatchEvent(new Event('storage-ready')); + }); + + // Clipboard API is unavailable in data: URL iframe, so we use postMessage + document.addEventListener('DOMContentLoaded', function() { + window.copyErrorMessage = function(button) { + post('clipboard-copy', { text: button.dataset.errorText }); + button.classList.add('copied'); + setTimeout(function() { button.classList.remove('copied'); }, 2000); + }; + }); + + post('storage-sync-request', {}); +})(); +`; +const parentStorageBridge = (nonce) => ` +(function () { + const host = document.querySelector('nuxt-error-overlay'); + if (!host) return; + + const NONCE = ${JSON.stringify(nonce)}; + const isValid = (data) => data && data.nonce === NONCE; + + // Handle clipboard copy from iframe + window.addEventListener('message', function(e) { + if (isValid(e.data) && e.data.type === 'clipboard-copy') { + navigator.clipboard.writeText(e.data.text).catch(function() {}); + } + }); + + const collectLocalStorage = () => { + const all = {}; + for (let i = 0; i < localStorage.length; i++) { + const k = localStorage.key(i); + if (k != null) all[k] = localStorage.getItem(k); + } + return all; + }; + + const attachWhenReady = () => { + const root = host.shadowRoot; + if (!root) + return false; + const iframe = root.getElementById('frame'); + if (!iframe || !iframe.contentWindow) + return false; + + const handlers = { + 'storage-set': (d) => localStorage.setItem(d.key, d.value), + 'storage-remove': (d) => localStorage.removeItem(d.key), + 'storage-clear': () => localStorage.clear(), + 'storage-sync-request': () => { + iframe.contentWindow.postMessage({ + type: 'storage-sync-data', + data: collectLocalStorage(), + nonce: NONCE + }, '*'); + } + }; + + window.addEventListener('message', (event) => { + const data = event.data; + if (!isValid(data)) return; + const fn = handlers[data.type]; + if (fn) fn(data); + }); + + return true; + }; + + if (attachWhenReady()) + return; + + const obs = new MutationObserver(() => { + if (attachWhenReady()) + obs.disconnect(); + }); + + obs.observe(host, { childList: true, subtree: true }); +})(); +`; +const errorCSS = ` +:host { + --preview-width: 240px; + --preview-height: 180px; + --base-width: 1200px; + --base-height: 900px; + --z-base: 999999998; + --error-pip-left: auto; + --error-pip-top: auto; + --error-pip-right: 5px; + --error-pip-bottom: 5px; + --error-pip-origin: bottom right; + --app-preview-left: auto; + --app-preview-top: auto; + --app-preview-right: 5px; + --app-preview-bottom: 5px; + all: initial; + display: contents; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} +#frame { + position: fixed; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + border: none; + z-index: var(--z-base); +} +#frame[inert] { + left: var(--error-pip-left); + top: var(--error-pip-top); + right: var(--error-pip-right); + bottom: var(--error-pip-bottom); + width: var(--base-width); + height: var(--base-height); + transform: scale(calc(240 / 1200)); + transform-origin: var(--error-pip-origin); + overflow: hidden; + border-radius: calc(1200 * 8px / 240); +} +#preview { + position: fixed; + left: var(--app-preview-left); + top: var(--app-preview-top); + right: var(--app-preview-right); + bottom: var(--app-preview-bottom); + width: var(--preview-width); + height: var(--preview-height); + overflow: hidden; + border-radius: 6px; + pointer-events: none; + z-index: var(--z-base); + background: white; + display: none; +} +#preview iframe { + transform-origin: var(--error-pip-origin); +} +#frame:not([inert]) + #preview { + display: block; +} +#toggle { + position: fixed; + left: var(--app-preview-left); + top: var(--app-preview-top); + right: calc(var(--app-preview-right) - 3px); + bottom: calc(var(--app-preview-bottom) - 3px); + width: var(--preview-width); + height: var(--preview-height); + background: none; + border: 3px solid #00DC82; + border-radius: 8px; + cursor: pointer; + opacity: 0.8; + transition: opacity 0.2s, box-shadow 0.2s; + z-index: calc(var(--z-base) + 1); + display: flex; + align-items: center; + justify-content: center; +} +#toggle:hover, +#toggle:focus { + opacity: 1; + box-shadow: 0 0 20px rgba(0, 220, 130, 0.6); +} +#toggle:focus-visible { + outline: 3px solid #00DC82; + outline-offset: 0; + box-shadow: 0 0 24px rgba(0, 220, 130, 0.8); +} +#frame[inert] ~ #toggle { + left: var(--error-pip-left); + top: var(--error-pip-top); + right: calc(var(--error-pip-right) - 3px); + bottom: calc(var(--error-pip-bottom) - 3px); + cursor: grab; +} +:host(.dragging) #frame[inert] ~ #toggle { + cursor: grabbing; +} +#frame:not([inert]) ~ #toggle, +#frame:not([inert]) + #preview { + cursor: grab; +} +:host(.dragging-preview) #frame:not([inert]) ~ #toggle, +:host(.dragging-preview) #frame:not([inert]) + #preview { + cursor: grabbing; +} + +#pip-close { + position: absolute; + top: 6px; + right: 6px; + width: 24px; + height: 24px; + border-radius: 50%; + border: none; + background: rgba(0, 0, 0, 0.75); + color: #fff; + font-size: 16px; + line-height: 1; + display: inline-flex; + align-items: center; + justify-content: center; + cursor: pointer; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + pointer-events: auto; +} +#pip-close:focus-visible { + outline: 2px solid #00DC82; + outline-offset: 2px; +} + +#pip-restore { + position: fixed; + right: 16px; + bottom: 16px; + padding: 8px 14px; + border-radius: 999px; + border: 2px solid #00DC82; + background: #111; + color: #fff; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif; + font-size: 14px; + display: inline-flex; + align-items: center; + gap: 6px; + z-index: calc(var(--z-base) + 2); + cursor: grab; +} +#pip-restore:focus-visible { + outline: 2px solid #00DC82; + outline-offset: 2px; +} +:host(.dragging-restore) #pip-restore { + cursor: grabbing; +} + +#frame[hidden], +#toggle[hidden], +#preview[hidden], +#pip-restore[hidden], +#pip-close[hidden] { + display: none !important; +} + +@media (prefers-reduced-motion: reduce) { + #toggle { + transition: none; + } +} +`; +function webComponentScript(base64HTML, startMinimized) { + return ` +(function () { + try { + // ========================= + // Host + Shadow + // ========================= + const host = document.querySelector('nuxt-error-overlay'); + if (!host) + return; + const shadow = host.attachShadow({ mode: 'open' }); + + // ========================= + // DOM helpers + // ========================= + const el = (tag) => document.createElement(tag); + const on = (node, type, fn, opts) => node.addEventListener(type, fn, opts); + const hide = (node, v) => node.toggleAttribute('hidden', !!v); + const setVar = (name, value) => host.style.setProperty(name, value); + const unsetVar = (name) => host.style.removeProperty(name); + + // ========================= + // Create DOM + // ========================= + const style = el('style'); + style.textContent = ${JSON.stringify(errorCSS)}; + + const iframe = el('iframe'); + iframe.id = 'frame'; + iframe.src = 'data:text/html;base64,${base64HTML}'; + iframe.title = 'Detailed error stack trace'; + iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-top-navigation-by-user-activation'); + + const preview = el('div'); + preview.id = 'preview'; + + const toggle = el('div'); + toggle.id = 'toggle'; + toggle.setAttribute('aria-expanded', 'true'); + toggle.setAttribute('role', 'button'); + toggle.setAttribute('tabindex', '0'); + toggle.innerHTML = 'Toggle detailed error view'; + + const liveRegion = el('div'); + liveRegion.setAttribute('role', 'status'); + liveRegion.setAttribute('aria-live', 'polite'); + liveRegion.className = 'sr-only'; + + const pipCloseButton = el('button'); + pipCloseButton.id = 'pip-close'; + pipCloseButton.setAttribute('type', 'button'); + pipCloseButton.setAttribute('aria-label', 'Hide error preview overlay'); + pipCloseButton.innerHTML = '×'; + pipCloseButton.hidden = true; + toggle.appendChild(pipCloseButton); + + const pipRestoreButton = el('button'); + pipRestoreButton.id = 'pip-restore'; + pipRestoreButton.setAttribute('type', 'button'); + pipRestoreButton.setAttribute('aria-label', 'Show error overlay'); + pipRestoreButton.innerHTML = 'Show error overlay'; + pipRestoreButton.hidden = true; + + // Order matters: #frame + #preview adjacency + shadow.appendChild(style); + shadow.appendChild(liveRegion); + shadow.appendChild(iframe); + shadow.appendChild(preview); + shadow.appendChild(toggle); + shadow.appendChild(pipRestoreButton); + + // ========================= + // Constants / keys + // ========================= + const POS_KEYS = { + position: 'nuxt-error-overlay:position', + hiddenPretty: 'nuxt-error-overlay:error-pip:hidden', + hiddenPreview: 'nuxt-error-overlay:app-preview:hidden' + }; + + const CSS_VARS = { + pip: { + left: '--error-pip-left', + top: '--error-pip-top', + right: '--error-pip-right', + bottom: '--error-pip-bottom' + }, + preview: { + left: '--app-preview-left', + top: '--app-preview-top', + right: '--app-preview-right', + bottom: '--app-preview-bottom' + } + }; + + const MIN_GAP = 5; + const DRAG_THRESHOLD = 2; + + // ========================= + // Local storage safe access + state + // ========================= + let storageReady = true; + let isPrettyHidden = false; + let isPreviewHidden = false; + + const safeGet = (k) => { + try { + return localStorage.getItem(k); + } catch { + return null; + } + }; + + const safeSet = (k, v) => { + if (!storageReady) + return; + try { + localStorage.setItem(k, v); + } catch {} + }; + + // ========================= + // Sizing helpers + // ========================= + const vvSize = () => { + const v = window.visualViewport; + return v ? { w: v.width, h: v.height } : { w: window.innerWidth, h: window.innerHeight }; + }; + + const previewSize = () => { + const styles = getComputedStyle(host); + const w = parseFloat(styles.getPropertyValue('--preview-width')) || 240; + const h = parseFloat(styles.getPropertyValue('--preview-height')) || 180; + return { w, h }; + }; + + const sizeForTarget = (target) => { + if (!target) + return previewSize(); + const rect = target.getBoundingClientRect(); + if (rect.width && rect.height) + return { w: rect.width, h: rect.height }; + return previewSize(); + }; + + // ========================= + // Dock model + offset/alignment calculations + // ========================= + const dock = { edge: null, offset: null, align: null, gap: null }; + + const maxOffsetFor = (edge, size) => { + const vv = vvSize(); + if (edge === 'left' || edge === 'right') + return Math.max(MIN_GAP, vv.h - size.h - MIN_GAP); + return Math.max(MIN_GAP, vv.w - size.w - MIN_GAP); + }; + + const clampOffset = (edge, value, size) => { + const max = maxOffsetFor(edge, size); + return Math.min(Math.max(value, MIN_GAP), max); + }; + + const updateDockAlignment = (size) => { + if (!dock.edge || dock.offset == null) + return; + const max = maxOffsetFor(dock.edge, size); + if (dock.offset <= max / 2) { + dock.align = 'start'; + dock.gap = dock.offset; + } else { + dock.align = 'end'; + dock.gap = Math.max(0, max - dock.offset); + } + }; + + const appliedOffsetFor = (size) => { + if (!dock.edge || dock.offset == null) + return null; + const max = maxOffsetFor(dock.edge, size); + + if (dock.align === 'end' && typeof dock.gap === 'number') { + return clampOffset(dock.edge, max - dock.gap, size); + } + if (dock.align === 'start' && typeof dock.gap === 'number') { + return clampOffset(dock.edge, dock.gap, size); + } + return clampOffset(dock.edge, dock.offset, size); + }; + + const nearestEdgeAt = (x, y) => { + const { w, h } = vvSize(); + const d = { left: x, right: w - x, top: y, bottom: h - y }; + return Object.keys(d).reduce((a, b) => (d[a] < d[b] ? a : b)); + }; + + const cornerDefaultDock = () => { + const vv = vvSize(); + const size = previewSize(); + const offset = Math.max(MIN_GAP, vv.w - size.w - MIN_GAP); + return { edge: 'bottom', offset }; + }; + + const currentTransformOrigin = () => { + if (!dock.edge) return null; + if (dock.edge === 'left' || dock.edge === 'top') + return 'top left'; + if (dock.edge === 'right') + return 'top right'; + return 'bottom left'; + }; + + // ========================= + // Persist / load dock + // ========================= + const loadDock = () => { + const raw = safeGet(POS_KEYS.position); + if (!raw) + return; + try { + const parsed = JSON.parse(raw); + const { edge, offset, align, gap } = parsed || {}; + if (!['left', 'right', 'top', 'bottom'].includes(edge)) + return; + if (typeof offset !== 'number') + return; + + dock.edge = edge; + dock.offset = clampOffset(edge, offset, previewSize()); + dock.align = align === 'start' || align === 'end' ? align : null; + dock.gap = typeof gap === 'number' ? gap : null; + + if (!dock.align || dock.gap == null) + updateDockAlignment(previewSize()); + } catch {} + }; + + const persistDock = () => { + if (!dock.edge || dock.offset == null) + return; + safeSet(POS_KEYS.position, JSON.stringify({ + edge: dock.edge, + offset: dock.offset, + align: dock.align, + gap: dock.gap + })); + }; + + // ========================= + // Apply dock + // ========================= + const dockToVars = (vars) => ({ + set: (side, v) => host.style.setProperty(vars[side], v), + clear: (side) => host.style.removeProperty(vars[side]) + }); + + const dockToEl = (node) => ({ + set: (side, v) => { node.style[side] = v; }, + clear: (side) => { node.style[side] = ''; } + }); + + const applyDock = (target, size, opts) => { + if (!dock.edge || dock.offset == null) { + target.clear('left'); + target.clear('top'); + target.clear('right'); + target.clear('bottom'); + return; + } + + target.set('left', 'auto'); + target.set('top', 'auto'); + target.set('right', 'auto'); + target.set('bottom', 'auto'); + + const applied = appliedOffsetFor(size); + + if (dock.edge === 'left') { + target.set('left', MIN_GAP + 'px'); + target.set('top', applied + 'px'); + } else if (dock.edge === 'right') { + target.set('right', MIN_GAP + 'px'); + target.set('top', applied + 'px'); + } else if (dock.edge === 'top') { + target.set('top', MIN_GAP + 'px'); + target.set('left', applied + 'px'); + } else { + target.set('bottom', MIN_GAP + 'px'); + target.set('left', applied + 'px'); + } + + if (!opts || opts.persist !== false) + persistDock(); + }; + + const applyDockAll = (opts) => { + applyDock(dockToVars(CSS_VARS.pip), previewSize(), opts); + applyDock(dockToVars(CSS_VARS.preview), previewSize(), opts); + applyDock(dockToEl(pipRestoreButton), sizeForTarget(pipRestoreButton), opts); + }; + + const repaintToDock = () => { + if (!dock.edge || dock.offset == null) + return; + const origin = currentTransformOrigin(); + if (origin) + setVar('--error-pip-origin', origin); + else + unsetVar('--error-pip-origin'); + applyDockAll({ persist: false }); + }; + + // ========================= + // Hidden state + UI + // ========================= + const loadHidden = () => { + const rawPretty = safeGet(POS_KEYS.hiddenPretty); + if (rawPretty != null) + isPrettyHidden = rawPretty === '1' || rawPretty === 'true'; + const rawPreview = safeGet(POS_KEYS.hiddenPreview); + if (rawPreview != null) + isPreviewHidden = rawPreview === '1' || rawPreview === 'true'; + }; + + const setPrettyHidden = (v) => { + isPrettyHidden = !!v; + safeSet(POS_KEYS.hiddenPretty, isPrettyHidden ? '1' : '0'); + updateUI(); + }; + + const setPreviewHidden = (v) => { + isPreviewHidden = !!v; + safeSet(POS_KEYS.hiddenPreview, isPreviewHidden ? '1' : '0'); + updateUI(); + }; + + const isMinimized = () => iframe.hasAttribute('inert'); + + const setMinimized = (v) => { + if (v) { + iframe.setAttribute('inert', ''); + toggle.setAttribute('aria-expanded', 'false'); + } else { + iframe.removeAttribute('inert'); + toggle.setAttribute('aria-expanded', 'true'); + } + }; + + const setRestoreLabel = (kind) => { + if (kind === 'pretty') { + pipRestoreButton.innerHTML = 'Show error overlay'; + pipRestoreButton.setAttribute('aria-label', 'Show error overlay'); + } else { + pipRestoreButton.innerHTML = 'Show error page'; + pipRestoreButton.setAttribute('aria-label', 'Show error page'); + } + }; + + const updateUI = () => { + const minimized = isMinimized(); + const showPiP = minimized && !isPrettyHidden; + const showPreview = !minimized && !isPreviewHidden; + const pipHiddenByUser = minimized && isPrettyHidden; + const previewHiddenByUser = !minimized && isPreviewHidden; + const showToggle = minimized ? showPiP : showPreview; + const showRestore = pipHiddenByUser || previewHiddenByUser; + + hide(iframe, pipHiddenByUser); + hide(preview, !showPreview); + hide(toggle, !showToggle); + hide(pipCloseButton, !showToggle); + hide(pipRestoreButton, !showRestore); + + pipCloseButton.setAttribute('aria-label', minimized ? 'Hide error overlay' : 'Hide error page preview'); + + if (pipHiddenByUser) + setRestoreLabel('pretty'); + else if (previewHiddenByUser) + setRestoreLabel('preview'); + + host.classList.toggle('pip-hidden', isPrettyHidden); + host.classList.toggle('preview-hidden', isPreviewHidden); + }; + + // ========================= + // Preview snapshot + // ========================= + const updatePreview = () => { + try { + let previewIframe = preview.querySelector('iframe'); + if (!previewIframe) { + previewIframe = el('iframe'); + previewIframe.style.cssText = 'width: 1200px; height: 900px; transform: scale(0.2); transform-origin: top left; border: none;'; + previewIframe.setAttribute('sandbox', 'allow-scripts allow-same-origin'); + preview.appendChild(previewIframe); + } + + const doctype = document.doctype ? '' : ''; + const cleanedHTML = document.documentElement.outerHTML + .replace(/]*>.*?<\\/nuxt-error-overlay>/gs, '') + .replace(/]*>.*?<\\/script>/gs, ''); + + const iframeDoc = previewIframe.contentDocument || previewIframe.contentWindow.document; + iframeDoc.open(); + iframeDoc.write(doctype + cleanedHTML); + iframeDoc.close(); + } catch (err) { + console.error('Failed to update preview:', err); + } + }; + + // ========================= + // View toggling + // ========================= + const toggleView = () => { + if (isMinimized()) { + updatePreview(); + setMinimized(false); + liveRegion.textContent = 'Showing detailed error view'; + setTimeout(() => { + try { + iframe.contentWindow.focus(); + } catch {} + }, 100); + } else { + setMinimized(true); + liveRegion.textContent = 'Showing error page'; + repaintToDock(); + void iframe.offsetWidth; + } + updateUI(); + }; + + // ========================= + // Dragging (unified, rAF throttled) + // ========================= + let drag = null; + let rafId = null; + let suppressToggleClick = false; + let suppressRestoreClick = false; + + const beginDrag = (e) => { + if (drag) + return; + + if (!dock.edge || dock.offset == null) { + const def = cornerDefaultDock(); + dock.edge = def.edge; + dock.offset = def.offset; + updateDockAlignment(previewSize()); + } + + const isRestoreTarget = e.currentTarget === pipRestoreButton; + + drag = { + kind: isRestoreTarget ? 'restore' : (isMinimized() ? 'pip' : 'preview'), + pointerId: e.pointerId, + startX: e.clientX, + startY: e.clientY, + lastX: e.clientX, + lastY: e.clientY, + moved: false, + target: e.currentTarget + }; + + drag.target.setPointerCapture(e.pointerId); + + if (drag.kind === 'restore') + host.classList.add('dragging-restore'); + else + host.classList.add(drag.kind === 'pip' ? 'dragging' : 'dragging-preview'); + + e.preventDefault(); + }; + + const moveDrag = (e) => { + if (!drag || drag.pointerId !== e.pointerId) + return; + + drag.lastX = e.clientX; + drag.lastY = e.clientY; + + const dx = drag.lastX - drag.startX; + const dy = drag.lastY - drag.startY; + + if (!drag.moved && (Math.abs(dx) > DRAG_THRESHOLD || Math.abs(dy) > DRAG_THRESHOLD)) { + drag.moved = true; + } + + if (!drag.moved) + return; + if (rafId) + return; + + rafId = requestAnimationFrame(() => { + rafId = null; + + const edge = nearestEdgeAt(drag.lastX, drag.lastY); + const size = sizeForTarget(drag.target); + + let offset; + if (edge === 'left' || edge === 'right') { + const top = drag.lastY - (size.h / 2); + offset = clampOffset(edge, Math.round(top), size); + } else { + const left = drag.lastX - (size.w / 2); + offset = clampOffset(edge, Math.round(left), size); + } + + dock.edge = edge; + dock.offset = offset; + updateDockAlignment(size); + + const origin = currentTransformOrigin(); + setVar('--error-pip-origin', origin || 'bottom right'); + + applyDockAll({ persist: false }); + }); + }; + + const endDrag = (e) => { + if (!drag || drag.pointerId !== e.pointerId) + return; + + const endedKind = drag.kind; + drag.target.releasePointerCapture(e.pointerId); + + if (endedKind === 'restore') + host.classList.remove('dragging-restore'); + else + host.classList.remove(endedKind === 'pip' ? 'dragging' : 'dragging-preview'); + + const didMove = drag.moved; + drag = null; + + if (didMove) { + persistDock(); + if (endedKind === 'restore') + suppressRestoreClick = true; + else + suppressToggleClick = true; + e.preventDefault(); + e.stopPropagation(); + } + }; + + const bindDragTarget = (node) => { + on(node, 'pointerdown', beginDrag); + on(node, 'pointermove', moveDrag); + on(node, 'pointerup', endDrag); + on(node, 'pointercancel', endDrag); + }; + + bindDragTarget(toggle); + bindDragTarget(pipRestoreButton); + + // ========================= + // Events (toggle / close / restore) + // ========================= + on(toggle, 'click', (e) => { + if (suppressToggleClick) { + e.preventDefault(); + suppressToggleClick = false; + return; + } + toggleView(); + }); + + on(toggle, 'keydown', (e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + toggleView(); + } + }); + + on(pipCloseButton, 'click', (e) => { + e.preventDefault(); + e.stopPropagation(); + if (isMinimized()) + setPrettyHidden(true); + else + setPreviewHidden(true); + }); + + on(pipCloseButton, 'pointerdown', (e) => { + e.stopPropagation(); + }); + + on(pipRestoreButton, 'click', (e) => { + if (suppressRestoreClick) { + e.preventDefault(); + suppressRestoreClick = false; + return; + } + e.preventDefault(); + e.stopPropagation(); + if (isMinimized()) + setPrettyHidden(false); + else + setPreviewHidden(false); + }); + + // ========================= + // Lifecycle: load / sync / repaint + // ========================= + const loadState = () => { + loadDock(); + loadHidden(); + + if (isPrettyHidden && !isMinimized()) + setMinimized(true); + + updateUI(); + repaintToDock(); + }; + + loadState(); + + on(window, 'storage-ready', () => { + storageReady = true; + loadState(); + }); + + const onViewportChange = () => repaintToDock(); + + on(window, 'resize', onViewportChange); + + if (window.visualViewport) { + on(window.visualViewport, 'resize', onViewportChange); + on(window.visualViewport, 'scroll', onViewportChange); + } + + // initial preview + setTimeout(updatePreview, 100); + + // initial minimized option + if (${startMinimized}) { + setMinimized(true); + repaintToDock(); + void iframe.offsetWidth; + updateUI(); + } + } catch (err) { + console.error('Failed to initialize Nuxt error overlay:', err); + } +})(); +`; +} +function generateErrorOverlayHTML(html, options) { + const nonce = Array.from(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)), (b) => b.toString(16).padStart(2, "0")).join(""); + const errorPage = html.replace("", `