Modell cheetah
Update 31.10.2025 Geheimnis gelüftet
In Cursor kann derzeit ein mysteriöses Modell namens cheetah ausgewählt werden.

In einem Video von Leonard Schmedding wurde das Gerücht erwähnt, (nicht: verbreitet! Das würde der nie tun) dass es sich dabei um das bald erscheinende Gemini 3.0 handeln soll.
Das machte mich aufmerksam und neugierig, denn seit Version 2.5 bin ich ein Fan von Gemini und allen verbundenen Produkten (notebooklm.google.com, aistudio.google.com usw.) und habe das Pro-Abo.
Ich habe dieses Modell dann mal auf einen Bug dieses Blogs losgelassen, den Claude Sonnet 4.5 seit Tagen nicht lösen konnte und der verhinderte, dieses nextra-Blog-Geraffel das Du gerade vor Dir hast live auszurollen. cheetah brauchte wenige Minuten. Und schrieb dann diesen Bericht, den ich hier ungekürzt reinkopiere. Denn die Lösung war, wie so oft, frappierend einfach. Es kam nur kein Modell vorher drauf. Und ich übrigens auch nicht. Wozu zahle ich soviel für KI? Soll die die Arbeit machen und mir das Vergnügen lassen.
Besonders der Abschnitt “Theorien” ist amüsant. Der ist noch von Sonnet 4.5, das verzweifelt nach Erklärungsansaätzen suchte. Genau wie der Abschnitt “Nächste Schritte”. Das ist en passant mein Tipp: Lasst die KI immer alles aufschreiben, was sie gerade umtreibt. Nicht nur das Ergebnis dokumentieren. (Letzteres sollte ja im Zweifel eh der Spezifikation entsprechen, die ihr der KI vorgegeben habt.)
404 Bug - Debugging Dokumentation
Status: GELÖST ✅
Datum: 23.10.2025
Problem: Nach Hinzufügen des Footers werden alle MDX-Seiten mit 404 geliefert
Lösung: Cache-Problem durch komplettes Löschen des .next Ordners behoben
🚨 WICHTIG: Vor jedem Test IMMER ausführen!
# 1. ALLE Node/npm Prozesse beenden
killall -9 node 2>/dev/null
# 2. Cache löschen
cd /Users/tobiasbrendler/NodeJS/nextra && rm -rf .next
# 3. Dann erst neu starten
npm run devNIEMALS ohne diese Schritte testen! Alte Prozesse und Cache verursachen falsche Ergebnisse.
Symptome
✅ Funktioniert (OHNE Footer):
- Server läuft auf Port 3000
- GET / 200 in 4.6s
- GET /qwen 200 in 38ms
- GET /impressum 200 in 21ms
- Alle Seiten werden korrekt ausgeliefert
- Terminal zeigt:
○ Compiling /[[...mdxPath]] ...
❌ Funktioniert NICHT (MIT Footer):
- Server läuft auf Port 3000
- GET / 404 in 4.8s
- GET /qwen 404 in 33ms
- GET /spec-kit 404 in 19ms
- Terminal zeigt:
○ Compiling /_not-found/page ... - Browser zeigt: “404: This page could not be found.”
Das Kern-Problem: pageMap zeigt alles als undefined
Im funktionierenden HTML (ohne Footer):
{"pageMap":[{"data":{"index":{"type":"page","title":"Home"},"howto-newblogpost":{...},"spec-kit":{...},"qwen":{...},"impressum":{...}}},...]}Im kaputten HTML (mit Footer):
{"pageMap":[{"data":{"index":{"type":"page","title":"Home"},"howto-newblogpost":"$Y","spec-kit":"$Y","qwen":"$Y","impressum":"$Y"}},...]}"$Y" bedeutet undefined in React Server Components!
Das ist der Grund warum Next.js die Seiten nicht findet - die pageMap hat keine Informationen über die MDX-Dateien.
Versuchte Lösungen (alle fehlgeschlagen)
1. ❌ next.config.mjs vereinfachen
Versuch:
// Von dieser Version (mit Kommentaren):
const withNextra = nextra({
// ... Add Nextra-specific options here
})
export default withNextra({
// ... Add regular Next.js options here
})
// Zu dieser Version:
const withNextra = nextra({})
export default withNextra({})Ergebnis: Keine Änderung, 404 bleibt
2. ❌ Search Component zurück in Navbar
Versuch:
// Search aus Layout raus und zurück in Navbar
<Navbar pageMap={await getPageMap()}>
<a href="...">GitHub →</a>
<Search /> // ← Hier zurück!
<ThemeSwitch />
</Navbar>
{children}
// <Search /> ← Entfernt von hierErgebnis: Search ist visuell immer noch unten, 404 bleibt
3. ❌ mdx-components.js anpassen
Versuch:
// Von:
const themeComponents = getThemeComponents()
export function useMDXComponents(components) {
return { ...themeComponents, ...components }
}
// Zu:
export function useMDXComponents(components) {
return getThemeComponents(components)
}Ergebnis: Keine Änderung, 404 bleibt
4. ❌ app/[[…mdxPath]]/page.jsx anpassen
Versuch:
// Von:
const Wrapper = getMDXComponents().wrapper
// Zu:
const Wrapper = getMDXComponents({}).wrapperErgebnis: Keine Änderung, 404 bleibt
5. ❌ Turbopack deaktivieren
Versuch:
# In start-dev.sh:
# Von:
exec node --require ./setup-polyfills.js ./node_modules/.bin/next --turbopack --hostname localhost "$@"
# Zu:
exec node --require ./setup-polyfills.js ./node_modules/.bin/next dev --hostname localhost "$@"Ergebnis: Keine Änderung, 404 bleibt
6. ❌ next.config.mjs mit Optionen
Versuch:
const withNextra = nextra({
latex: true,
search: { codeblocks: false }
})Ergebnis: Keine Änderung, 404 bleibt
Git History Analyse
Letzter funktionierender Commit: 3bc8193 (Bugfixes)
git show 3bc8193:app/layout.jsx # Funktioniert!
git show 3bc8193:next.config.mjs # Funktioniert!Aktueller Commit: c9dfb7a (Verbesserungen)
- Fügt Footer hinzu
- Fügt GitHub Link in Navbar hinzu
- Verschiebt Search Component (unabsichtlich?)
- Resultat: 404 auf allen Seiten
Unterschied zwischen funktionierend und kaputt:
--- funktionierend (3bc8193)
+++ kaputt (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>Theorien (noch nicht bestätigt)
Theorie 1: Footer Component bricht das Rendering
- Footer Component könnte die pageMap-Generierung unterbrechen
- Möglicherweise ein Bug in
nextra-theme-blog/dist/components/layout.js
Theorie 2: Search Component Position ist kritisch
- Search muss INNERHALB von Navbar sein für korrektes Routing
- Search AUSSERHALB von Navbar bricht pageMap-Generation
Theorie 3: Layout Structure Problem
- Die Struktur
<Layout><Navbar>...</Navbar>{children}<Search/><Footer/></Layout>ist falsch - Korrekte Struktur sollte sein:
<Layout><Navbar><Search/></Navbar>{children}<Footer/></Layout>
Theorie 4: Timing/Race Condition
- Footer wird gerendert bevor pageMap vollständig geladen ist
- getPageMap() gibt undefined zurück wenn Footer zu früh kommt
Datei-Status beim letzten Test
app/layout.jsx (AKTUELL - KAPUTT)
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 (AKTUELL)
import nextra from 'nextra'
const withNextra = nextra({})
export default withNextra({})start-dev.sh (AKTUELL)
exec node --require ./setup-polyfills.js ./node_modules/.bin/next dev --hostname localhost "$@"Nächste Schritte zum Debuggen
1. Footer Component Source Code analysieren
cat node_modules/nextra-theme-blog/dist/components/layout.js | grep -A 20 "Footer"2. Layout Component Source Code analysieren
cat node_modules/nextra-theme-blog/dist/components/layout.js | grep -A 50 "export.*Layout"3. Testen: Footer OHNE Search verschieben
<Navbar pageMap={await getPageMap()}>
<a href="...">GitHub →</a>
<Search /> // ← Bleibt in Navbar!
<ThemeSwitch />
</Navbar>
{children}
<Footer>...</Footer> // ← Nur Footer hinzufügen4. Testen: Navbar Props untersuchen
// Debug-Ausgabe hinzufügen:
const pageMap = await getPageMap()
console.log('PageMap:', JSON.stringify(pageMap, null, 2))5. Testen: Schrittweise Zurückbauen
- Entferne Footer → Funktioniert es?
- Entferne GitHub Link → Funktioniert es?
- Verschiebe Search zurück → Funktioniert es?
6. Prüfen: Andere Nextra Blog Beispiele
- Schaue auf GitHub nach Beispielen die Footer UND funktionierende Seiten haben
- Vergleiche deren
app/layout.jsxmit unserer Version
Terminal-Ausgaben
✅ Funktionierend (ohne Footer):
▲ 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)❌ Nicht funktionierend (mit Footer):
▲ 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)Beachte: /_not-found/page vs /[[...mdxPath]] - das ist der Unterschied!
Bekannte Probleme (nicht kritisch)
Watchpack Errors (macOS)
Watchpack Error (watcher): Error: EMFILE: too many open files, watchLösung: Optional ulimit -n 10240 erhöhen, aber nicht kritisch für das 404-Problem.
uv_interface_addresses Error
NodeError [SystemError]: uv_interface_addresses returned Unknown system error 1Lösung: Bereits gefixt mit --hostname localhost in start-dev.sh
Zusammenfassung
Problem:
- Footer funktioniert
- Seiten funktionieren OHNE Footer
- Seiten sind 404 MIT Footer
- pageMap zeigt alle Seiten als undefined (
"$Y")
Keine der bisherigen Lösungen hat funktioniert:
- ❌ next.config.mjs vereinfachen
- ❌ Search Component Position ändern
- ❌ mdx-components.js anpassen
- ❌ page.jsx anpassen
- ❌ Turbopack deaktivieren
Der Bug ist hartnäckig und hat eine tiefere Ursache!
Letzte Beobachtung
Im HTML-Source Code ist zu sehen:
<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>Die Search Component wird NICHT gerendert in der Navbar!
Das bedeutet meine Änderung in app/layout.jsx wurde entweder:
- Nicht gespeichert
- Nicht vom Server geladen (Cache-Problem)
- Oder wird vom Browser falsch interpretiert
Weiter debuggen mit frischem Kopf! Der Bug liegt irgendwo in der Interaktion zwischen Footer, Layout und pageMap-Generierung.
✅ Lösung
Problem identifiziert: Das Layout selbst war korrekt! Das Problem war ein corrupt/beschädigter Next.js Cache.
Lösung:
- Alle Node-Prozesse killen:
killall -9 node - Next.js Cache vollständig löschen:
rm -rf .next - Server neu starten:
npm run dev
Resultat: Alle Seiten funktionieren jetzt perfekt mit Footer und GitHub-Link!
Commit: d8cddc1 - Footer funktioniert jetzt korrekt
Ursache: Next.js Turbopack hatte einen beschädigten Cache der die pageMap-Generierung störte. Nach dem vollständigen Löschen funktionierte alles wieder.
| Impressum | Mein GitHubRSS