The cheetah model

Update 31.10.2025 – mystery solved

There’s currently a mysterious model called cheetah available to select in Cursor. Screenshot cheetah

A video by Leonard Schmedding mentioned the rumor (not spread – he would never do that) that this might be the soon-to-be-released Gemini 3.0.

That got my attention, because ever since version 2.5 I’ve been a fan of Gemini and all the related products (notebooklm.google.com, aistudio.google.com, etc.) and I have the Pro subscription.

So I pointed this model at a bug in this blog that Claude Sonnet 4.5 had been unable to fix for days – a bug that was preventing me from deploying this whole nextra blog contraption you’re currently looking at. cheetah needed a few minutes. Then it wrote this report, which I’m pasting here in full. Because the solution was, as so often, strikingly simple. No model had figured it out before. Neither had I, for that matter. What am I paying so much for AI for? It’s supposed to do the work and leave me the fun parts.

The “Theories” section in particular is amusing. That’s still from Sonnet 4.5, desperately searching for explanations. Same goes for the “Next Steps” section. That’s my tip, in passing: always have the AI write down everything it’s currently wrestling with. Don’t just document the result. (The result should, in theory, match the specification you gave the AI anyway.)

404 Bug – Debugging Documentation

Status: RESOLVED ✅

Date: 23.10.2025 Problem: After adding the Footer, all MDX pages return 404 Solution: Cache issue fixed by completely deleting the .next folder


🚨 IMPORTANT: ALWAYS run this before every test!

# 1. Kill ALL Node/npm processes killall -9 node 2>/dev/null # 2. Clear cache cd /Users/tobiasbrendler/NodeJS/nextra && rm -rf .next # 3. Only then restart npm run dev

NEVER test without these steps! Old processes and cached data produce false results.


Symptoms


The Core Problem: pageMap shows everything as undefined

{"pageMap":[{"data":{"index":{"type":"page","title":"Home"},"howto-newblogpost":{...},"spec-kit":{...},"qwen":{...},"impressum":{...}}},...]}
{"pageMap":[{"data":{"index":{"type":"page","title":"Home"},"howto-newblogpost":"$Y","spec-kit":"$Y","qwen":"$Y","impressum":"$Y"}},...]}

"$Y" means undefined in React Server Components!

That’s why Next.js can’t find the pages – the pageMap has no information about the MDX files.


Attempted Solutions (all failed)

1. ❌ Simplify next.config.mjs

Attempt:

// From this version (with comments): const withNextra = nextra({ // ... Add Nextra-specific options here }) export default withNextra({ // ... Add regular Next.js options here }) // To this version: const withNextra = nextra({}) export default withNextra({})

Result: No change, 404 remains


2. ❌ Move Search component back into Navbar

Attempt:

// Move Search out of Layout and back into Navbar <Navbar pageMap={await getPageMap()}> <a href="...">GitHub →</a> <Search /> // ← Back here! <ThemeSwitch /> </Navbar> {children} // <Search /> ← Removed from here

Result: Search is still visually at the bottom, 404 remains


3. ❌ Adjust mdx-components.js

Attempt:

// From: const themeComponents = getThemeComponents() export function useMDXComponents(components) { return { ...themeComponents, ...components } } // To: export function useMDXComponents(components) { return getThemeComponents(components) }

Result: No change, 404 remains


4. ❌ Adjust app/[[…mdxPath]]/page.jsx

Attempt:

// From: const Wrapper = getMDXComponents().wrapper // To: const Wrapper = getMDXComponents({}).wrapper

Result: No change, 404 remains


5. ❌ Disable Turbopack

Attempt:

# In start-dev.sh: # From: exec node --require ./setup-polyfills.js ./node_modules/.bin/next --turbopack --hostname localhost "$@" # To: exec node --require ./setup-polyfills.js ./node_modules/.bin/next dev --hostname localhost "$@"

Result: No change, 404 remains


6. ❌ next.config.mjs with options

Attempt:

const withNextra = nextra({ latex: true, search: { codeblocks: false } })

Result: No change, 404 remains


Git History Analysis

Last working commit: 3bc8193 (bugfixes)

git show 3bc8193:app/layout.jsx # Works! git show 3bc8193:next.config.mjs # Works!

Current commit: c9dfb7a (improvements)

Diff between working and broken:

--- working (3bc8193) +++ broken (c9dfb7a) - import { Layout, Navbar, ThemeSwitch } from 'nextra-theme-blog' + import { Footer, Layout, Navbar, ThemeSwitch } from 'nextra-theme-blog' <Navbar pageMap={await getPageMap()}> + <a href="https://github.com/Etschmia" ...> + GitHub → + </a> - <Search /> <ThemeSwitch /> </Navbar> {children} + <Search /> + <Footer> + <a href="/impressum">Impressum</a> + {' | '} + <a href="https://github.com/Etschmia" ...>GitHub</a> + </Footer>

Theories (not yet confirmed)

Theory 2: Search component position is critical

Theory 3: Layout structure problem

Theory 4: Timing/race condition


File State at Last Test

app/layout.jsx (CURRENT – BROKEN)

import { Footer, Layout, Navbar, ThemeSwitch } from 'nextra-theme-blog' import { Banner, Head, Search } from 'nextra/components' import { getPageMap } from 'nextra/page-map' import 'nextra-theme-blog/style.css' export const metadata = { title: 'Blog Example' } export default async function RootLayout({ children }) { return ( <html lang="de" suppressHydrationWarning> <Head backgroundColor={{ dark: '#0f172a', light: '#fefce8' }} /> <body> <Layout > <Navbar pageMap={await getPageMap()}> <a href="https://github.com/Etschmia" target="_blank" rel="noopener noreferrer" className="x:aria-[current]:no-underline x:aria-[current]:opacity-60" > GitHub → </a> <Search /> <ThemeSwitch /> </Navbar> {children} <Footer> <a href="/impressum">Impressum</a> {' | '} <a href="https://github.com/Etschmia" target="_blank" rel="noopener noreferrer"> GitHub </a> </Footer> </Layout> </body> </html> ) }

next.config.mjs (CURRENT)

import nextra from 'nextra' const withNextra = nextra({}) export default withNextra({})

start-dev.sh (CURRENT)

exec node --require ./setup-polyfills.js ./node_modules/.bin/next dev --hostname localhost "$@"

Next Debugging Steps

cat node_modules/nextra-theme-blog/dist/components/layout.js | grep -A 20 "Footer"

2. Analyze Layout component source code

cat node_modules/nextra-theme-blog/dist/components/layout.js | grep -A 50 "export.*Layout"
<Navbar pageMap={await getPageMap()}> <a href="...">GitHub →</a> <Search /> // ← Stays in Navbar! <ThemeSwitch /> </Navbar> {children} <Footer>...</Footer> // ← Only add Footer

4. Test: Inspect Navbar props

// Add debug output: const pageMap = await getPageMap() console.log('PageMap:', JSON.stringify(pageMap, null, 2))

5. Test: Step-by-step rollback

  1. Remove Footer → Does it work?
  2. Remove GitHub link → Does it work?
  3. Move Search back → Does it work?

6. Check: Other Nextra blog examples


Terminal Output

▲ Next.js 16.0.0 (Turbopack) - Local: http://localhost:3000 ✓ Ready in 216ms ○ Compiling /[[...mdxPath]] ... GET / 200 in 4.6s (compile: 4.4s, render: 167ms) GET /impressum 200 in 21ms (compile: 6ms, render: 15ms) GET /qwen 200 in 38ms (compile: 6ms, render: 32ms)
▲ Next.js 16.0.0 (Turbopack) - Local: http://localhost:3000 ✓ Ready in 209ms ○ Compiling /_not-found/page ... GET /qwen 404 in 4.8s (compile: 4.7s, render: 94ms) GET / 404 in 22ms (compile: 5ms, render: 17ms) GET /spec-kit 404 in 19ms (compile: 5ms, render: 14ms)

Note: /_not-found/page vs /[[...mdxPath]] – that’s the difference!


Known Issues (non-critical)

Watchpack Errors (macOS)

Watchpack Error (watcher): Error: EMFILE: too many open files, watch

Fix: Optionally increase with ulimit -n 10240, but not critical for the 404 issue.

uv_interface_addresses Error

NodeError [SystemError]: uv_interface_addresses returned Unknown system error 1

Fix: Already resolved with --hostname localhost in start-dev.sh


Summary

Problem:

None of the attempted solutions worked:

The bug is stubborn and has a deeper cause!


Last Observation

In the HTML source code you can see:

<header class="x:mb-8 x:flex x:items-center x:gap-3 x:justify-end" data-pagefind-ignore="all"> <a href="/">Home</a> <a href="/spec-kit">Spec-Kit und Cursor</a> <a href="/qwen">Qwen Code</a> <a href="https://github.com/Etschmia" ...>GitHub →</a> <button ...>Toggle Dark Mode</button> </header>

The Search component is NOT being rendered in the Navbar!

That means my change in app/layout.jsx was either:

  1. Not saved
  2. Not picked up by the server (cache issue)
  3. Or being misinterpreted by the browser

Keep debugging with fresh eyes! The bug lives somewhere in the interaction between Footer, Layout, and pageMap generation.


✅ Solution

Problem identified: The layout itself was correct! The problem was a corrupt Next.js cache.

Solution:

  1. Kill all Node processes: killall -9 node
  2. Completely delete the Next.js cache: rm -rf .next
  3. Restart the server: npm run dev

Result: All pages now work perfectly with Footer and GitHub link!

Commit: d8cddc1 – Footer now works correctly

Root cause: Next.js Turbopack had a corrupted cache that was interfering with pageMap generation. After a full wipe, everything worked again.

Legal notice | | My GitHubRSS