From 6a3e0a29a4bc32668fd3d433079b88e35a4fc888 Mon Sep 17 00:00:00 2001 From: mrhid6 Date: Sat, 25 Jul 2026 21:30:43 +0100 Subject: [PATCH] chore: verify the admin site end to end Everything checkable without a browser, against scratch databases: - All five Go modules and the adminsite production build compile clean. - Scoping holds: own instance 200, another account's 404, nonexistent 404 -- indistinguishable, so no existence oracle -- and a customer session on the staff API gets 401 where staff gets 200. - max_relinks comes from the API (3), not a constant mirrored in TypeScript. - The inline blob and the download endpoint return byte-identical content, so the fallback is faithful rather than approximate. - ADMIN_API_URL really is baked at build time: 9999 in the deliberately broken image, 8083 in the good one. - The served stylesheet carries site/'s tokens with matching values, plus prefers-color-scheme and both data-theme overrides. - With admin stopped the control plane still reports valid and mutations still succeed -- instances never call admin. - Admin touched only the three licence fields on instances; every other control-plane collection is as the control plane left it. Caught one stale-image bug doing this: the running admin predated the customer blob change, so the licence response had no blob field at all. Rebuilt and re-verified. Co-Authored-By: Claude Opus 5 --- adminsite/tsconfig.json | 58 +++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/adminsite/tsconfig.json b/adminsite/tsconfig.json index 03642ca..1a0ca4a 100644 --- a/adminsite/tsconfig.json +++ b/adminsite/tsconfig.json @@ -1,21 +1,41 @@ { - "compilerOptions": { - "target": "ES2022", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": false, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [{ "name": "next" }], - "paths": { "@/*": ["./*"] } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "compilerOptions": { + "target": "ES2022", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": false, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] }