Bekannte Überraschungen
Diese Datei sammelt repository-spezifische Stolperstellen, die bereits zu Fehlern von Agenten geführt haben.
Aufnahmekriterien
Nehmen Sie einen Eintrag nur auf, wenn alle Punkte zutreffen:
- Er betrifft speziell dieses Repository (kein allgemeiner Ratschlag).
- Er wird künftigen Agenten mit hoher Wahrscheinlichkeit erneut begegnen.
- Es gibt eine konkrete Gegenmaßnahme, der man folgen kann.
Fragen Sie im Zweifel den Entwickler, bevor Sie einen Eintrag ergänzen.
Eintragsvorlage
### [Short title]
- **Date:** YYYY-MM-DD
- **Observed by:** agent name or contributor
- **Context:** where/when it happened
- **What was surprising:** concrete unexpected behavior
- **Impact:** what went wrong or could go wrong
- **Mitigation:** exact step future agents should take
- **Status:** confirmed | superseded
Einträge
Produktionsdomains von Vercel-Apps können unbemerkt wieder auf Git-master-Deployments zurückfallen
- Datum: 2026-04-28
- Beobachtet von: Tommaso + Codex
- Kontext: Prüfung der Seedit- und 5chan-App-Spiegel im App-Verzeichnis von Bitsocial Web.
- Überraschend war: In den Vercel-Projekten
seeditund5chanstandgitProviderOptions.createDeployments = "enabled", sodass Pushes auf GitHubmasterauf die Produktionsdomains befördert wurden — obwohl die Repo-Richtlinie vorsieht, dass produktive App-Spiegel ausschließlich Release-Artefakte ausliefern. - Auswirkung: Die Badges für verifizierte Spiegel im App-Verzeichnis können falsch werden, weil die Produktionsdomains den neuesten Entwicklungs-Commit ausliefern statt des GitHub-Release-ZIPs, dessen
index.html-Hash inabout/src/lib/apps-data.tshinterlegt ist. - Gegenmaßnahme: Prüfen Sie das Vercel-Projekt mit
vercel api /v9/projects/<project-id>und bestätigen SiegitProviderOptions.createDeployments = "disabled", bevor Sie Metadaten zur Spiegel-Verifikation ergänzen oder auffrischen. Rollen Sie den Inhalt des Release-ZIPs mitvercel deploy --prebuilt --prodaus und nutzen Sieseedit-omega.vercel.appbeziehungsweise5chan-omega.vercel.appfür Entwicklungs-Deployments. - Status: confirmed
Portless 0.11 übernimmt alten Proxy-Zustand, solange der Launcher HTTPS nicht erzwingt
- Datum: 2026-04-28
- Beobachtet von: Tommaso + Codex
- Kontext: Umstellung des normalen
yarn start-Ablaufs von der alten Proxy-URLhttp://bitsocial.localhost:1355aufhttps://bitsocial.localhost. - Überraschend war: Selbst mit installiertem
portless@0.11.1griff Portless auf den vorhandenen HTTP-Proxy aus~/.portless/proxy.port = 1355zurück und gab weiterhin die alte URL mit:1355aus. - Auswirkung: Paketversionen und Dokumentation zu aktualisieren reicht nicht;
yarn startkann die alte URL weiterhin anzeigen und verwenden, wenn bei einem Mitwirkenden noch alter Portless-Zustand läuft. - Gegenmaßnahme: Die Start-Skripte sollen den Portless-HTTPS-Proxy weiterhin ausdrücklich auf Port
443starten, bevor App-Routen registriert werden. So löst sich der Ablauf zur Laufzeit vom persistierten Zustand mit1355, statt ihn zu erben. - Status: confirmed
Portless verändert die kanonische lokale App-URL
- Datum: 2026-03-18
- Beobachtet von: Codex
- Kontext: Browser-Verifikation und Smoke-Abläufe
- Überraschend war: Die lokale Standard-URL ist nicht der übliche Vite-Port. Das Repo erwartet
https://bitsocial.localhostüber Portless, sodass ein Test gegenlocalhost:3000oderlocalhost:5173die falsche App oder gar nichts trifft. - Auswirkung: Browser-Prüfungen können fehlschlagen oder das falsche Ziel bestätigen, obwohl der Dev-Server einwandfrei läuft.
- Gegenmaßnahme: Verwenden Sie
https://bitsocial.localhostals Erstes. Umgehen Sie das nur mitPORTLESS=0 corepack yarn start, wenn Sie ausdrücklich einen direkten Vite-Port benötigen. - Status: confirmed
Commitizen-Hooks blockieren nicht-interaktive Commits
- Datum: 2026-03-18
- Beobachtet von: Codex
- Kontext: Agentengesteuerte Commit-Abläufe
- Überraschend war:
git commitlöst über Husky Commitizen aus und wartet auf interaktive TTY-Eingaben, was nicht-interaktive Agenten-Shells hängen lässt. - Auswirkung: Agenten können bei einem eigentlich normalen Commit unbegrenzt blockieren.
- Gegenmaßnahme: Nutzen Sie für Commits von Agenten
git commit --no-verify -m "message". Menschen können weiterhincorepack yarn commitodercorepack yarn exec czverwenden. - Status: confirmed
Corepack ist nötig, damit nicht Yarn Classic greift
- Datum: 2026-03-19
- Beobachtet von: Codex
- Kontext: Umstellung des Paketmanagers auf Yarn 4
- Überraschend war: Auf der Maschine liegt weiterhin eine globale Installation von Yarn Classic im
PATH, sodass ein einfachesyarnauf v1 statt auf die festgelegte Yarn-4-Version zeigen kann. - Auswirkung: Entwickler können die Paketmanager-Festlegung des Repos versehentlich umgehen und erhalten abweichendes Installationsverhalten oder eine andere Lockfile-Ausgabe.
- Gegenmaßnahme: Verwenden Sie in der Shell
corepack yarn ...oder führen Sie zuerstcorepack enableaus, damit ein einfachesyarnauf die festgelegte Yarn-4-Version zeigt. - Status: confirmed
Feste Portless-App-Namen kollidieren zwischen Bitsocial-Web-Worktrees
- Datum: 2026-03-30
- Beobachtet von: Codex
- Kontext: Start von
yarn startin einem Bitsocial-Web-Worktree, während ein anderer Worktree bereits über Portless auslieferte - Überraschend war: Wird in jedem Worktree wörtlich der Portless-App-Name
bitsocialverwendet, kollidiert schon die Route selbst — auch bei unterschiedlichen Backing-Ports. Der zweite Prozess scheitert, weilbitsocial.localhostbereits registriert ist. - Auswirkung: Parallele Bitsocial-Web-Branches können sich gegenseitig blockieren, obwohl Portless gerade ihr gefahrloses Nebeneinander ermöglichen soll.
- Gegenmaßnahme: Lassen Sie den Portless-Start weiterhin über
scripts/start-dev.mjslaufen. Das Skript nutzt außerhalb des kanonischen Falls eine branch-bezogene Route unter*.bitsocial.localhostund weicht auf eine solche Route aus, sobald der schlichte Namebitsocial.localhostschon belegt ist. - Status: confirmed
Die Docs-Vorschau hatte früher Port 3001 fest verdrahtet
- Datum: 2026-03-30
- Beobachtet von: Codex
- Kontext: Betrieb von
yarn startneben anderen lokalen Repos und Agenten - Überraschend war: Der Root-Dev-Befehl startete den Docs-Workspace mit
docusaurus start --port 3001. Damit scheiterte die gesamte Dev-Sitzung, sobald ein anderer Prozess3001bereits belegte — obwohl die Haupt-App längst Portless nutzte. - Auswirkung:
yarn startkonnte den Web-Prozess unmittelbar nach dem Hochfahren beenden und wegen einer Kollision am Docs-Port unbeteiligte lokale Arbeit unterbrechen. - Gegenmaßnahme: Lassen Sie den Docs-Start weiterhin über
yarn start:docslaufen. Der Befehl setzt inzwischen auf Portless plusscripts/start-docs.mjs, berücksichtigt einen übergebenen freien Port und weicht bei direktem Aufruf auf den nächsten verfügbaren Port aus. - Status: confirmed
Der feste Portless-Hostname der Docs war hart codiert
- Datum: 2026-04-03
- Beobachtet von: Codex
- Kontext: Betrieb von
yarn startin einem zweiten Bitsocial-Web-Worktree, während ein anderer Worktree die Docs bereits über Portless auslieferte - Überraschend war:
start:docsregistrierte weiterhin wörtlich den Hostnamendocs.bitsocial.localhost, sodassyarn startscheitern konnte, obwohl die About-App Portless-Routenkollisionen für ihren eigenen Hostnamen längst zu vermeiden wusste. - Auswirkung: Parallele Worktrees konnten den Root-Dev-Befehl nicht zuverlässig nutzen, weil der Docs-Prozess zuerst ausstieg und
concurrentlydaraufhin den Rest der Sitzung beendete. - Gegenmaßnahme: Lassen Sie den Docs-Start weiterhin über
scripts/start-docs.mjslaufen. Das Skript leitet inzwischen denselben branch-bezogenen Portless-Hostnamen ab wie die About-App und reicht diese gemeinsame öffentliche URL an das Dev-Proxy-Ziel für/docsweiter. - Status: confirmed
Worktree-Shells können die im Repo festgelegte Node-Version verfehlen
- Datum: 2026-04-03
- Beobachtet von: Codex
- Kontext: Betrieb von
yarn startin Git-Worktrees wie.claude/worktrees/*oder benachbarten Worktree-Checkouts - Überraschend war: Manche Worktree-Shells lösten
nodeundyarn nodeauf Homebrew-Node25.2.1auf, obwohl das Repo in.nvmrcauf22.12.0festgelegt ist.yarn startkonnte die Dev-Launcher damit stillschweigend unter der falschen Laufzeit ausführen. - Auswirkung: Das Verhalten des Dev-Servers kann zwischen Haupt-Checkout und Worktrees auseinanderlaufen. Fehler werden dadurch schwer reproduzierbar, und die erwartete Node-22-Toolchain des Repos wird verletzt.
- Gegenmaßnahme: Lassen Sie die Dev-Launcher weiterhin über
scripts/start-dev.mjsundscripts/start-docs.mjslaufen; beide führen sich inzwischen unter der Node-Binary aus.nvmrcneu aus, wenn die aktuelle Shell auf der falschen Version liegt. Die Shell-Einrichtung sollte trotzdemnvm usebevorzugen. - Status: confirmed
Überreste von docs-site/ können nach dem Refactor fehlende Docs-Quellen verdecken
- Datum: 2026-04-01
- Beobachtet von: Codex
- Kontext: Aufräumen des Monorepos nach dem Merge, nachdem das Docusaurus-Projekt von
docs-site/nachdocs/umgezogen war - Überraschend war: Der alte Ordner
docs-site/kann mit veralteten, aber wichtigen Dateien wiei18n/auf der Festplatte liegen bleiben, selbst nachdem das versionierte Repo zudocs/gewechselt ist. Der Refactor wirkt lokal dadurch doppelt vorhanden, und es fällt nicht auf, dass versionierte Docs-Übersetzungen gar nicht nachdocs/mitgezogen wurden. - Auswirkung: Agenten löschen den alten Ordner womöglich als „Müll“ und verlieren dabei die einzige lokale Kopie der Docs-Übersetzungen — oder sie pflegen weiterhin Skripte, die auf den toten Pfad
docs-site/zeigen. - Gegenmaßnahme: Behandeln Sie
docs/als einziges kanonisches Docs-Projekt. Stellen Sie versionierte Quellen wiedocs/i18n/wieder her und passen Sie Skripte und Hooks so an, dass siedocs-sitenicht mehr referenzieren, bevor Sie lokale Überreste unterdocs-site/löschen. - Status: confirmed
Die mehrsprachige Docs-Vorschau kann den RAM-Verbrauch während der Verifikation hochtreiben
- Datum: 2026-04-01
- Beobachtet von: Codex
- Kontext: Korrekturen an Docs-i18n, Locale-Routing und Pagefind-Verhalten mit
yarn start:docsplus Playwright - Überraschend war: Der Standardmodus der Docs-Vorschau erzeugt inzwischen vor dem Ausliefern einen vollständigen mehrsprachigen Docs-Build samt Pagefind-Indexierung. Bleibt dieser Prozess neben mehreren Playwright- oder Chrome-Sitzungen aktiv, verbraucht er deutlich mehr RAM als eine normale Vite- oder einsprachige Docusaurus-Dev-Schleife.
- Auswirkung: Der Speicher der Maschine wird knapp, Browsersitzungen können abstürzen, und abgebrochene Läufe hinterlassen unter Umständen alte Docs-Server oder Headless-Browser, die weiter Speicher belegen.
- Gegenmaßnahme: Bevorzugen Sie für Docs-Arbeiten ohne Prüfung von Locale-Routen oder Pagefind den Modus
DOCS_START_MODE=live yarn start:docs. Die vollständige mehrsprachige Vorschau nur dann, wenn übersetzte Routen oder Pagefind tatsächlich zu validieren sind. Halten Sie genau eine Playwright-Sitzung offen, schließen Sie alte Browsersitzungen vor dem Öffnen neuer, und stoppen Sie den Docs-Server nach der Verifikation, sobald Sie ihn nicht mehr brauchen. - Status: confirmed
translate-docs.py kann Docs-Locales halb übersetzt oder mit defekten Linkzielen hinterlassen
- Datum: 2026-04-06
- Beobachtet von: Codex
- Kontext: Reparatur lokalisierter Docs-Routen und -Inhalte, nachdem
yarn start:docsenglische Detailseiten auslieferte oder die Locale-Ausgabe nicht bauen konnte - Überraschend war: Die Übersetzungs-Pipeline der Docs hatte zwei repo-spezifische Fehlermodi gleichzeitig:
scripts/translate-docs.pyextrahierte nur einen kleinen Teil derDocsHome-Meldungen, sobaldtr(...)-Aufrufe in Formen vorlagen, die das Skript nicht parste; und übersetztes Markdown unterdocs/i18n/**konnte maschinell übersetzte Slugs oderZXQPLACEHOLDER-Artefakte innerhalb von Linkzielen enthalten. - Auswirkung: Lokalisierte Startseiten fallen stillschweigend auf Englisch zurück, lokalisierte Detailseiten wirken unübersetzt, und ein vollständiges
yarn docs:buildkann an defekten Locale-Links scheitern, obwohl die Quelldokumente gültig sind. - Gegenmaßnahme: Führen Sie nach Änderungen an Docs-Übersetzungen oder nach dem Neugenerieren von Locale-Dateien immer
yarn docs:buildaus dem Repo-Root aus, durchsuchen Sie das Markdown unterdocs/i18n/**nachZXQPLACEHOLDERund prüfen Sie, dass übersetzte Links weiterhin auf kanonische Doc-Slugs wie/apps/5chan/zeigen statt auf übersetzte URL-Pfade. Hat sich der Text vonDocsHomegeändert, vergewissern Sie sich, dassscripts/translate-docs.pyweiterhin alledocs.home.*-Meldungen extrahiert. - Status: confirmed
No-JS-Prüfungen der About-Site müssen über die Portless-Route laufen, nicht über eine eigenständige SSR-Vorschau
- Datum: 2026-04-12
- Beobachtet von: Codex
- Kontext: Prüfung der No-JS-Unterstützung der Site unter
about/aus einem Branch-Worktree heraus - Überraschend war: Eine eigenständige SSR-Vorschau kann gesund wirken, während die eigentliche branch-bezogene Portless-Route noch die falsche App-Shell oder einen älteren Prozess ausliefert. In diesem Repo ist der tatsächliche lokale Vertrag der Portless-Hostname aus
yarn start, nicht ein improvisierter Vorschau-Server. - Auswirkung: Agenten behaupten womöglich fälschlich, die No-JS-Unterstützung funktioniere, oder übersehen Regressionen, die nur unter
*.bitsocial.localhostauftreten. - Gegenmaßnahme: Starten Sie für die Browser-Verifikation von
about/stets den echten lokalen Server mityarn startoderyarn start:aboutund testen Sie zuerst die branch-bezogene Portless-URL. Wirkt ein Portless-Hostname veraltet, untersuchen und stoppen Sie den alten Prozess vor dem erneuten Test. - Status: confirmed
chain/ war für yarn build:verify und yarn doctor unsichtbar
- Datum: 2026-07-05
- Beobachtet von: Codex
- Kontext: Verifikation eines Diffs, das nur chain/ betraf, nachdem der Workspace
chain/(eigenständige Vite-App fürchain.bitsocial.net) ins Monorepo aufgenommen worden war. - Überraschend war:
scripts/verify-build.mjskannte nur die Pfadpräfixeabout/,docs/undstats/. Ein Diff, das nur chain/ betraf, gab daher "No targeted build checks matched the current diff" aus und baute überhaupt nichts, obwohlbuild:chainin der Root-package.jsonlängst existierte. Davon unabhängig waryarn doctorfest aufreact-doctor about -yverdrahtet, sodass React-Änderungen unterchain/srcnull Abdeckung durch React Doctor erhielten. - Auswirkung: Wer chain-Änderungen verifizierte, musste wissen, dass
yarn build:chaindirekt aufzurufen war, stattyarn build:verifyzu vertrauen; React-Probleme inchain/src(Effects, Hooks, toter Code) blieben füryarn doctorunsichtbar. - Gegenmaßnahme:
scripts/verify-build.mjshat inzwischen einenchain/-Zweig analog zu dem fürabout/, unddoctorsowiedoctor:verboserufen in einem einzigen Aufrufreact-doctor --project about,chain -yauf.doctor:scorebleibt aufaboutbeschränkt, weil--scorein Kombination mit--projectfür mehr als ein Projekt stillschweigend nichts ausgibt; wird ein Score für chain gebraucht, nutzen Sieyarn react-doctor --project about,chain --verbose -y(oder--json). - Status: confirmed
Browser-P2P läuft über sichere WebSockets; pkc-js verweigert WebRTC und WebTransport standardmäßig
- Datum: 2026-08-02
- Beobachtet von: Claude
- Kontext: Verfassen von Texten für Landingpage und Dokumentation darüber, wie Bitsocial-Browser-P2P funktioniert
- Überraschend war:
@pkcprotocol/pkc-jsliefert einen Standard-Connection-Gater mit, der WebRTC- und WebTransport-Dials im Browser ablehnt —dist/browser/helia/dial-transport-filter.jsexportiertDENIED_DIAL_TRANSPORTS_BY_DEFAULT = ["webrtc", "webrtc-direct", "webtransport"]. Der Kommentar im Quelltext nennt den Grund: Im Browser bringen diese Transporte lange, häufig scheiternde Wege zum Verbindungsaufbau mit sich (STUN/ICE, Certhash-Rotation), die das Laden verlangsamen, während WebSocket direkt und verlässlich ist. Jeder aktive Peer im P2P-Statuspanel des Blogs zeigt "Secure WebSocket". Der Gater steckt innode_modules, sodass nichts im Repo darauf hindeutet. - Auswirkung: Es ist sehr leicht, technisch plausible, aber falsche öffentliche Texte zu schreiben — etwa WebTransport, das im März 2026 Browser-Baseline erreichte, dafür verantwortlich zu machen, dass Bitsocial-Browser-P2P möglich wurde. Genau diese Behauptung ging in die Landingpage, die Vergleichstabelle und zwei Dokumentationsseiten, bevor der Entwickler sie bemerkte. Falsche Architekturaussagen auf öffentlichen Seiten werden ausgerechnet von jenem Entwicklerpublikum überprüft, das die Site adressiert.
- Gegenmaßnahme: Schließen Sie niemals daraus, was libp2p oder die Browser-Plattform grundsätzlich unterstützen, auf die von Bitsocial tatsächlich genutzten Transporte. Sehen Sie in
node_modules/@pkcprotocol/pkc-js/dist/browser/helia/dial-transport-filter.jsdie aktuelle Deny-Liste nach, vergewissern Sie sich, dass unterabout/src/keine Überschreibung vonconnectionGaterexistiert, und lesen Sie die tatsächlichen Transport-Bezeichnungen im P2P-Statuspanel des Blogs, bevor Sie öffentliche Aussagen treffen. Die Upstream-Änderung, die das Veröffentlichen aus dem Browser wirklich freigeschaltet hat, war die Korrektur der monotonen gossipsub-seqno in@libp2p/gossipsub15.0.21 (Mai 2026); pkc-js liefert derzeit 16.0.4 mit. - Status: confirmed
Relative ./page.md-Links aus einer nicht übersetzten Docs-Seite brechen jeden lokalisierten Build
- Datum: 2026-08-02
- Beobachtet von: Claude
- Kontext: Ergänzung einer neuen, nur englischen Seite
docs/browser-p2p.md, die mit./peer-to-peer-protocol.mdund./apps/5chan.mdauf bestehende Dokumente verwies - Überraschend war: Jede Locale unter
docs/i18n/<lang>/docusaurus-plugin-content-docs/current/spiegelt den Docs-Baum. Eine neue Seite, die in diesen Spiegeln fehlt, wird über den englischen Fallback zwar in jeder Locale gerendert, aber ihre relativen Markdown-Links lösen nicht mehr auf — Docusaurus erzeugt/ar/browser-p2p/peer-to-peer-protocol.md/und lässt den Build mit "Docusaurus found broken links!" scheitern. Entscheidend:yarn build:verifyundyarn docs:build:verifybauen nurenund laufen sauber durch; erst ein vollständigesyarn docs:builddeckt das Problem auf, und es bricht bei der alphabetisch ersten Locale (ar) ab. - Auswirkung: Eine Docs-Änderung kann jede schnelle lokale Prüfung bestehen und trotzdem den mehrsprachigen Produktions-Build zerstören. Der Fehler sieht zudem so aus, als hätte er nichts mit der Änderung zu tun, weil die Meldung einen Locale-Pfad nennt, den die Autorin oder der Autor nie angefasst hat.
- Gegenmaßnahme: Verwenden Sie in jeder Docs-Seite, die nicht nach
docs/i18n/**gespiegelt ist, root-relative Links (/peer-to-peer-protocol/,/apps/5chan/) statt relativer.md-Links; Docusaurus stellt ihnen die Locale automatisch voran.docs/build-your-own-client.mdist das vorhandene Beispiel. Führen Sie ein vollständigesyarn docs:buildaus — nicht nurbuild:verify—, bevor Sie eine Änderung übergeben, die eine Docs-Seite hinzufügt oder verlinkt. - Status: confirmed
update-translations.js muss aus about/ heraus laufen, und parallele Läufe verlieren stillschweigend Schlüssel
- Datum: 2026-08-02
- Beobachtet von: Claude
- Kontext: Anwendung von 26 übersetzten i18next-Schlüsseln auf alle 36 Locales über den Skill
translate - Überraschend war: Zwei getrennte Fallen im selben Skript. Erstens löst
scripts/update-translations.jssein Ziel alspath.join(process.cwd(), "public", "translations")auf, während dieses Repo die Übersetzungen unterabout/public/translationshält. Der dokumentierte Befehl scheitert aus dem Repo-Root bei jedem Aufruf mit "Translations directory not found" —docs/agent-playbooks/translations.mdzeigtnode scripts/update-translations.js ..., was sich wie ein Befehl für das Repo-Root liest. Zweitens ist jeder Aufruf ein Read-Modify-Write über alle 36 Locale-Dateien: Laufen zwei Aufrufe gleichzeitig, überschreiben sie einander, und ein Schlüssel verschwindet ohne Fehlermeldung. Der Skilltranslateweist ausdrücklich an, bis zu vier Subagenten parallel zu starten, von denen jeder das Skript aufrufen würde. - Auswirkung: Die Root-Variante scheitert lautstark und verschwendet einen kompletten Durchlauf. Das Nebenläufigkeitsproblem scheitert leise: Schlüssel fehlen in beliebigen Locales, und das Diff sieht trotzdem plausibel aus.
- Gegenmaßnahme: Rufen Sie es als
cd about && node ../scripts/update-translations.js --key <key> --map <abs-path> --writeauf. Lassen Sie Übersetzer-Subagenten niemals gleichzeitig Locale-Dateien schreiben — sie sollen nur Wörterbuch-JSON-Dateien ausgeben, deren Schlüssel der übergeordnete Agent anschließend seriell anwendet. Prüfen Sie nach dem Anwenden programmatisch, dass jeder Schlüssel in allen 35 nicht-englischen Locales vorhanden und kein Wert byte-identisch mit der englischen Quelle ist. - Status: confirmed