Checklists are worth memorising for an interview because they compress five sections of this guide into questions you can ask about any pull request. Both lists below are ordered by how often the item actually catches something.
src/runtime/** imports @nuxt/kit or reads nuxt.options; imports are explicit from #imports, #app, vue, h3.import.meta.client, generated ids use useId() (hydration).nuxt/schema augmented; nuxt typecheck passes on the playground.compatibility declared, CHANGELOG entry, README updated, deprecation path for anything renamed.nuxt.config is resolved from import.meta.url; no ~ or @ aliases in layer config or layer CSS (paths).app.config keys, runtimeConfig keys and server routes are all prefixed; nothing collides with a plausible app name.app.config or a module option.app.config keys typed through AppConfigInput; runtimeConfig defaults present for every key an app may override, and non-secret.nuxt typecheck, and at least one fixture that lives outside the layer's folder.Two review comments that catch the most common defects, with the diff a reviewer wants to see:
- css: ['~/assets/css/main.css'],
+ css: [join(currentDir, './app/assets/css/main.css')],
Aliases resolve against the consuming project, so this finds the app's file or nothing at all. It works in the playground because the playground lives inside the layer.
-const cache = new Map<string, Result>()
-
export function useToolkit() {
+ // Per-request on the server, per-session on the client; a module-scope Map is shared
+ // by every SSR request and leaks between users.
+ const cache = useState<Record<string, Result>>('toolkit:cache', () => ({}))
...
}
Most of the layer list exists because the playground cannot catch those defects: aliases, .env, Tailwind sources, npm packaging. A reviewer should ask "which fixture proves this?" and be satisfied only by one that lives outside the package folder.
nuxt-team-toolkit against the module list and fix every failure, one commit each."For a module: the build-versus-runtime boundary, so nothing in runtime/ imports kit or reads options; SSR safety and determinism; no module-scope mutable state and every cache bounded; typed, validated, documented options; and tests including a fixture E2E and a version matrix. For a layer: paths resolved from import.meta.url, everything prefixed, no unswitchable global side effects, typed app.config, namespaced and validated server routes, and a fixture that lives outside the layer's folder — because the playground cannot catch the alias, .env and packaging mistakes that consumers hit first. In both cases I also ask what this change costs every consuming app in bundle size and build time."
Team process, security and operations
Monorepo layout, release discipline, the security posture expected of someone who ships code into every app, and how support actually works.
Rollout and breaking changes
What counts as breaking for a layer and for a module, the deprecate-warn-codemod-remove sequence, and how to roll a change out to twenty apps without an incident.