Sorpreses conegudes
Aquest fitxer fa el seguiment dels punts de confusió específics d'aquest repositori que han provocat errors dels agents.
Criteris d'entrada
Afegiu una entrada només si es compleix tot això:
- És específic d'aquest repositori (no és un consell genèric).
- És probable que es repeteixi per a futurs agents.
- Té una mitigació concreta que es pot seguir.
Si teniu dubtes, pregunteu-ho al desenvolupador abans d'afegir una entrada.
Plantilla d'entrada
### [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
Entrades
Els dominis de producció de les aplicacions a Vercel poden tornar a desplegaments de master de Git
- Data: 2026-04-28
- Observat per: Tommaso + Codex
- Context: verificació dels miralls de les aplicacions Seedit i 5chan al directori d'aplicacions de Bitsocial Web.
- Què va sorprendre: els projectes
seediti5chande Vercel teniengitProviderOptions.createDeployments = "enabled", de manera que les pujades amasterde GitHub es promocionaven als dominis de producció encara que la política del repositori espera que els miralls de producció serveixin només artefactes de versió. - Impacte: les insígnies de mirall verificat del directori d'aplicacions poden esdevenir falses perquè els dominis de producció serveixen el darrer commit de desenvolupament en lloc del ZIP de la versió publicada a GitHub, el hash de l'
index.htmlde la qual queda registrat aabout/src/lib/apps-data.ts. - Mitigació: abans d'afegir o actualitzar metadades de verificació de miralls, comproveu el projecte de Vercel amb
vercel api /v9/projects/<project-id>i confirmeu quegitProviderOptions.createDeployments = "disabled". Desplegueu el contingut del ZIP de la versió ambvercel deploy --prebuilt --prodi feu servirseedit-omega.vercel.appo5chan-omega.vercel.appper als desplegaments de desenvolupament. - Estat: confirmat
Portless 0.11 reutilitza l'estat de proxy antic tret que el llançador forci HTTPS
- Data: 2026-04-28
- Observat per: Tommaso + Codex
- Context: migració del flux habitual de
yarn startdes de l'antic URL de proxyhttp://bitsocial.localhost:1355cap ahttps://bitsocial.localhost. - Què va sorprendre: fins i tot amb
portless@0.11.1instal·lat, Portless reutilitzava el proxy HTTP existent~/.portless/proxy.port = 1355i imprimia l'URL antic amb:1355. - Impacte: actualitzar les versions dels paquets i la documentació no n'hi ha prou;
yarn startencara pot anunciar i utilitzar l'URL antic quan un col·laborador té estat antic de Portless en execució. - Mitigació: feu que els scripts d'inici arrenquin explícitament el proxy HTTPS de Portless al port
443abans de registrar les rutes de l'aplicació, perquè el flux d'execució s'allunyi de l'estat1355persistit en lloc d'heretar-lo. - Estat: confirmat
Portless canvia l'URL canònic de l'aplicació local
- Data: 2026-03-18
- Observat per: Codex
- Context: verificació al navegador i fluxos de comprovació ràpida
- Què va sorprendre: l'URL local per defecte no és el port habitual de Vite. El repositori espera
https://bitsocial.localhosta través de Portless, de manera que comprovarlocalhost:3000olocalhost:5173pot apuntar a l'aplicació equivocada o directament a res. - Impacte: les comprovacions al navegador poden fallar o validar l'objectiu equivocat encara que el servidor de desenvolupament funcioni bé.
- Mitigació: proveu
https://bitsocial.localhosten primer lloc. Ometeu-lo ambPORTLESS=0 corepack yarn startnomés quan necessiteu explícitament un port de Vite directe. - Estat: confirmat
Els hooks de Commitizen bloquegen els commits no interactius
- Data: 2026-03-18
- Observat per: Codex
- Context: fluxos de treball de commits impulsats per agents
- Què va sorprendre:
git commitactiva Commitizen a través de Husky i espera entrada interactiva de TTY, cosa que penja els shells no interactius dels agents. - Impacte: els agents es poden encallar indefinidament durant el que hauria de ser un commit normal.
- Mitigació: feu servir
git commit --no-verify -m "message"per als commits creats per agents. Les persones encara poden fer servircorepack yarn commitocorepack yarn exec cz. - Estat: confirmat
Cal Corepack per evitar Yarn classic
- Data: 2026-03-19
- Observat per: Codex
- Context: migració del gestor de paquets a Yarn 4
- Què va sorprendre: la màquina encara té una instal·lació global de Yarn classic al
PATH, de manera que executaryarna seques es pot resoldre a la v1 en lloc de la versió fixada de Yarn 4. - Impacte: els desenvolupadors es poden saltar accidentalment la fixació del gestor de paquets del repositori i obtenir un comportament d'instal·lació o un lockfile diferents.
- Mitigació: feu servir
corepack yarn ...per a les ordres de shell, o executeu abanscorepack enableperquèyarna seques es resolgui a la versió fixada de Yarn 4. - Estat: confirmat
Els noms fixos d'aplicació de Portless xoquen entre worktrees de Bitsocial Web
- Data: 2026-03-30
- Observat per: Codex
- Context: execució de
yarn starten un worktree de Bitsocial Web mentre un altre worktree ja servia a través de Portless - Què va sorprendre: fer servir el nom literal d'aplicació de Portless
bitsociala tots els worktrees fa que la ruta mateixa xoqui, encara que els ports subjacents siguin diferents, de manera que el segon procés falla perquèbitsocial.localhostja està registrat. - Impacte: les branques paral·leles de Bitsocial Web es poden bloquejar entre elles tot i que Portless està pensat perquè puguin coexistir sense problemes.
- Mitigació: mantingueu l'arrencada de Portless darrere de
scripts/start-dev.mjs, que ara fa servir una ruta*.bitsocial.localhostamb àmbit de branca fora del cas canònic i recorre a una ruta amb àmbit de branca quan el nombitsocial.localhostsense prefix ja està ocupat. - Estat: confirmat
La previsualització de la documentació codificava el port 3001 de manera fixa
- Data: 2026-03-30
- Observat per: Codex
- Context: execució de
yarn startjuntament amb altres repositoris i agents locals - Què va sorprendre: l'ordre de desenvolupament de l'arrel executava l'espai de treball de la documentació amb
docusaurus start --port 3001, de manera que tota la sessió de desenvolupament fallava sempre que un altre procés ja ocupava el3001, encara que l'aplicació principal ja fes servir Portless. - Impacte:
yarn startpodia matar el procés web just després d'arrencar i interrompia feina local no relacionada per una col·lisió al port de la documentació. - Mitigació: mantingueu l'arrencada de la documentació darrere de
yarn start:docs, que ara fa servir Portless mésscripts/start-docs.mjsper respectar un port lliure injectat o recórrer al següent port disponible quan s'executa directament. - Estat: confirmat
El nom d'amfitrió de Portless per a la documentació estava codificat de manera fixa
- Data: 2026-04-03
- Observat per: Codex
- Context: execució de
yarn starten un worktree secundari de Bitsocial Web mentre un altre worktree ja servia la documentació a través de Portless - Què va sorprendre:
start:docsencara registrava el nom d'amfitrió literaldocs.bitsocial.localhost, de manera queyarn startpodia fallar tot i que l'aplicació about ja sabia com evitar les col·lisions de rutes de Portless per al seu propi nom d'amfitrió. - Impacte: els worktrees paral·lels no podien fer servir de manera fiable l'ordre de desenvolupament de l'arrel perquè el procés de la documentació sortia primer i llavors
concurrentlymatava la resta de la sessió. - Mitigació: mantingueu l'arrencada de la documentació darrere de
scripts/start-docs.mjs, que ara deriva el mateix nom d'amfitrió de Portless amb àmbit de branca que l'aplicació about i injecta aquest URL públic compartit a l'objectiu del proxy de desenvolupament de/docs. - Estat: confirmat
Els shells dels worktrees poden no agafar la versió de Node fixada al repositori
- Data: 2026-04-03
- Observat per: Codex
- Context: execució de
yarn starten worktrees de Git com ara.claude/worktrees/*o en còpies de worktrees germans - Què va sorprendre: alguns shells de worktree resolien
nodeiyarn nodecap al Node25.2.1de Homebrew tot i que el repositori fixa22.12.0a.nvmrc, de manera queyarn startpodia executar en silenci els llançadors de desenvolupament amb el runtime equivocat. - Impacte: el comportament del servidor de desenvolupament pot divergir entre la còpia principal i els worktrees, cosa que fa que els errors siguin difícils de reproduir i incompleix la cadena d'eines de Node 22 que el repositori dona per descomptada.
- Mitigació: mantingueu els llançadors de desenvolupament darrere de
scripts/start-dev.mjsiscripts/start-docs.mjs, que ara es tornen a executar amb el binari de Node de.nvmrcquan el shell actual té la versió equivocada. La configuració del shell hauria de continuar prioritzantnvm use. - Estat: confirmat
Les restes de docs-site/ poden amagar que falta codi font de documentació després de la refactorització
- Data: 2026-04-01
- Observat per: Codex
- Context: neteja del monorepo posterior a la fusió, després de moure el projecte de Docusaurus de
docs-site/adocs/ - Què va sorprendre: la carpeta antiga
docs-site/pot quedar-se al disc amb fitxers obsolets però importants com arai18n/, fins i tot després que el repositori versionat s'hagi mogut adocs/. Això fa que la refactorització sembli duplicada en local i pot amagar que les traduccions de la documentació versionades no s'havien mogut realment adocs/. - Impacte: els agents poden suprimir la carpeta antiga com si fos “brossa” i perdre accidentalment l'única còpia local de les traduccions de la documentació, o bé continuar editant scripts que encara apunten al camí mort
docs-site/. - Mitigació: tracteu
docs/com l'únic projecte de documentació canònic. Abans de suprimir cap resta local dedocs-site/, restaureu el codi font versionat com aradocs/i18n/i actualitzeu els scripts i els hooks perquè deixin de fer referència adocs-site. - Estat: confirmat
La previsualització multiidioma de la documentació pot disparar la RAM durant la verificació
- Data: 2026-04-01
- Observat per: Codex
- Context: correcció de la i18n de la documentació, l'encaminament per idioma i el comportament de Pagefind amb
yarn start:docsmés Playwright - Què va sorprendre: el mode de previsualització per defecte de la documentació ara fa una compilació completa multiidioma més la indexació de Pagefind abans de servir res, i mantenir aquest procés viu juntament amb diverses sessions de Playwright o de Chrome pot consumir molta més RAM que un bucle de desenvolupament normal de Vite o de Docusaurus amb un sol idioma.
- Impacte: la màquina es pot quedar sense memòria, les sessions de navegador poden petar i les execucions interrompudes poden deixar enrere servidors de documentació obsolets o navegadors sense interfície que continuen consumint memòria.
- Mitigació: per a feina de documentació que no necessiti verificar rutes per idioma ni Pagefind, prioritzeu
DOCS_START_MODE=live yarn start:docs. Feu servir la previsualització multiidioma per defecte només quan hàgiu de validar rutes traduïdes o Pagefind. Mantingueu una única sessió de Playwright, tanqueu les sessions de navegador antigues abans d'obrir-ne de noves i atureu el servidor de documentació després de la verificació si ja no el necessiteu. - Estat: confirmat
translate-docs.py pot deixar idiomes de la documentació traduïts a mitges o amb enllaços trencats
- Data: 2026-04-06
- Observat per: Codex
- Context: correcció de les rutes i el contingut localitzats de la documentació després que
yarn start:docsservís pàgines de detall en anglès o no aconseguís generar la sortida per idioma - Què va sorprendre: el procés de traducció de la documentació tenia dos modes de fallada específics del repositori alhora:
scripts/translate-docs.pynomés extreia un subconjunt petit dels missatges deDocsHomequan les cridestr(...)feien servir formes que no sabia analitzar, i el markdown traduït sotadocs/i18n/**podia contenir slugs traduïts automàticament o artefactesZXQPLACEHOLDERdins dels destins dels enllaços. - Impacte: les pàgines d'inici localitzades poden recórrer silenciosament a l'anglès, les pàgines de detall localitzades poden semblar sense traduir i un
yarn docs:buildcomplet pot fallar per enllaços trencats en un idioma encara que la documentació d'origen sigui vàlida. - Mitigació: després de canviar les traduccions de la documentació o de regenerar els fitxers d'idioma, executeu sempre
yarn docs:builddes de l'arrel del repositori, cerqueuZXQPLACEHOLDERal markdown dedocs/i18n/**i comproveu que els enllaços traduïts continuen apuntant als slugs canònics de la documentació, com ara/apps/5chan/, en lloc de camins d'URL traduïts. Si ha canviat el text deDocsHome, confirmeu quescripts/translate-docs.pyencara extreu tots els missatgesdocs.home.*. - Estat: confirmat
Les comprovacions sense JS del lloc about han de fer servir la ruta de Portless, no una previsualització SSR independent
- Data: 2026-04-12
- Observat per: Codex
- Context: verificació del suport sense JS del lloc
about/des d'un worktree de branca - Què va sorprendre: una previsualització SSR independent pot semblar correcta mentre la ruta real de Portless amb àmbit de branca encara serveix l'embolcall d'aplicació equivocat o un procés antic. En aquest repositori, el contracte local real és el nom d'amfitrió de Portless que dona
yarn start, no un servidor de previsualització improvisat. - Impacte: els agents poden afirmar per error que el suport sense JS funciona, o passar per alt regressions que només apareixen a
*.bitsocial.localhost. - Mitigació: per a la verificació al navegador d'
about/, engegueu sempre el servidor local real ambyarn startoyarn start:abouti proveu primer l'URL de Portless amb àmbit de branca. Si un nom d'amfitrió de Portless sembla obsolet, inspeccioneu i atureu el procés antic abans de tornar a provar. - Estat: confirmat
chain/ era invisible per a yarn build:verify i yarn doctor
- Data: 2026-07-05
- Observat per: Codex
- Context: verificació d'un diff que només tocava chain/ després que l'espai de treball
chain/(aplicació de Vite independent per achain.bitsocial.net) s'afegís al monorepo. - Què va sorprendre:
scripts/verify-build.mjsnomés reconeixia els prefixos de camíabout/,docs/istats/, de manera que un diff que només tocava chain/ imprimia «No targeted build checks matched the current diff» i no executava cap compilació, encara quebuild:chainja existia alpackage.jsonde l'arrel. A banda d'això,yarn doctorestava codificat de manera fixa com areact-doctor about -y, de manera que els canvis de React sotachain/srcno rebien cap cobertura de React Doctor. - Impacte: els agents que verificaven canvis de chain havien de saber que calia cridar
yarn build:chaindirectament en lloc de confiar enyarn build:verify, i els problemes de React achain/src(efectes, hooks, codi mort) passaven desapercebuts per ayarn doctor. - Mitigació:
scripts/verify-build.mjsara té una brancachain/que replica la d'about/, idoctor/doctor:verboseara executenreact-doctor --project about,chain -yen una sola invocació.doctor:scorecontinua sent només per aaboutperquè--scoreno imprimeix res, i sense avisar, quan es combina amb--projectper a més d'un projecte; feu serviryarn react-doctor --project about,chain --verbose -y(o--json) si cal una puntuació de chain. - Estat: confirmat
El P2P al navegador funciona sobre WebSockets segurs; pkc-js denega WebRTC i WebTransport per defecte
- Data: 2026-08-02
- Observat per: Claude
- Context: redacció de text per a la pàgina d'entrada i per a la documentació sobre com funciona el P2P al navegador de Bitsocial
- Què va sorprendre:
@pkcprotocol/pkc-jsinclou un filtre de connexions per defecte que rebutja els intents de connexió per WebRTC i WebTransport al navegador:dist/browser/helia/dial-transport-filter.jsexportaDENIED_DIAL_TRANSPORTS_BY_DEFAULT = ["webrtc", "webrtc-direct", "webtransport"]. El comentari del codi font en dona el motiu: al navegador, aquests transports afegeixen camins d'establiment de connexió llargs i que sovint fallen (STUN/ICE, rotació de certhash) que alenteixen les càrregues, mentre que WebSocket és directe i fiable. Tots els peers actius del panell d'estat P2P del blog mostren «Secure WebSocket». El filtre viu anode_modules, de manera que res del repositori no en dona cap pista. - Impacte: és molt fàcil escriure text públic tècnicament versemblant però fals; per exemple, atribuir a l'arribada de WebTransport al Baseline dels navegadors el març de 2026 el fet que el P2P al navegador de Bitsocial sigui possible. Aquesta afirmació va arribar a la pàgina d'entrada, a la taula comparativa i a dues pàgines de documentació abans que el desenvolupador se n'adonés. Les afirmacions errònies sobre l'arquitectura en pàgines públiques les revisa exactament el públic desenvolupador al qual s'adreça el lloc.
- Mitigació: no deduïu mai quins transports utilitza Bitsocial a partir del que libp2p o la plataforma del navegador admeten en principi. Consulteu
node_modules/@pkcprotocol/pkc-js/dist/browser/helia/dial-transport-filter.jsper veure la llista de denegació actual, confirmeu que no hi ha cap substitució deconnectionGatersotaabout/src/i llegiu les etiquetes de transport en directe al panell «P2P status» del blog abans de fer cap afirmació pública. El canvi upstream que realment va desbloquejar la publicació des del navegador va ser la correcció del seqno monotònic de gossipsub a@libp2p/gossipsub15.0.21 (maig de 2026); pkc-js actualment inclou la 16.0.4. - Estat: confirmat
Els enllaços relatius ./page.md des d'una pàgina de documentació sense traduir trenquen totes les compilacions localitzades
- Data: 2026-08-02
- Observat per: Claude
- Context: addició d'una pàgina nova només en anglès,
docs/browser-p2p.md, que enllaçava amb documentació existent mitjançant./peer-to-peer-protocol.mdi./apps/5chan.md - Què va sorprendre: cada idioma sota
docs/i18n/<lang>/docusaurus-plugin-content-docs/current/replica l'arbre de la documentació. Una pàgina nova que no hi sigui es continua renderitzant en tots els idiomes gràcies a la reserva en anglès, però els seus enllaços de markdown relatius ja no es resolen: Docusaurus genera/ar/browser-p2p/peer-to-peer-protocol.md/i fa fallar la compilació amb «Docusaurus found broken links!». El punt clau és queyarn build:verifyiyarn docs:build:verifynomés compileneni passen sense cap problema; només ho revela unyarn docs:buildcomplet, que s'atura al primer idioma per ordre alfabètic (ar). - Impacte: un canvi a la documentació pot superar totes les comprovacions locals ràpides i, tot i així, trencar la compilació multiidioma de producció. A més, la fallada sembla no tenir cap relació amb el canvi, perquè l'error anomena un camí d'idioma que l'autor no ha tocat mai.
- Mitigació: a qualsevol pàgina de documentació que no estigui replicada a
docs/i18n/**, feu servir enllaços relatius a l'arrel (/peer-to-peer-protocol/,/apps/5chan/) en lloc d'enllaços relatius.md; Docusaurus hi afegeix el prefix de l'idioma automàticament.docs/build-your-own-client.mdn'és l'exemple existent. Executeu unyarn docs:buildcomplet, no nomésbuild:verify, abans de lliurar cap canvi que afegeixi o enllaci una pàgina de documentació. - Estat: confirmat
update-translations.js s'ha d'executar des d'about/, i les execucions concurrents perden claus en silenci
- Data: 2026-08-02
- Observat per: Claude
- Context: aplicació de 26 claus d'i18next traduïdes als 36 idiomes mitjançant la skill
translate - Què va sorprendre: dos paranys diferents al mateix script. Primer,
scripts/update-translations.jsresol el seu objectiu com apath.join(process.cwd(), "public", "translations"), però aquest repositori manté les traduccions aabout/public/translations. Executar l'ordre documentada des de l'arrel del repositori falla a cada invocació amb «Translations directory not found»:docs/agent-playbooks/translations.mdmostranode scripts/update-translations.js ..., cosa que es llegeix com una ordre per executar des de l'arrel del repositori. Segon, cada invocació és una lectura-modificació-escriptura sobre els 36 fitxers d'idioma, de manera que dues invocacions simultànies s'esclafen mútuament i una clau desapareix sense cap error. La skilltranslateindica explícitament que es generin fins a 4 subagents concurrents, i cadascun cridaria l'script. - Impacte: la forma des de l'arrel del repositori falla de manera sorollosa i malbarata una passada sencera. El problema de concurrència falla en silenci: desapareixen claus d'idiomes arbitraris i el diff continua semblant plausible.
- Mitigació: executeu-lo com a
cd about && node ../scripts/update-translations.js --key <key> --map <abs-path> --write. No deixeu mai que els subagents traductors escriguin fitxers d'idioma de manera concurrent: feu que només emetin fitxers JSON de diccionari i després apliqueu totes les claus de manera seriada des de l'agent pare. Un cop aplicades, verifiqueu programàticament que cada clau existeix als 35 idiomes que no són l'anglès i que cap valor no és idèntic byte a byte a l'original en anglès. - Estat: confirmat