Hallazgos de fricción real en producción (turismo, onefix-appv1, pisorentado.com):
- CocoDB::getInstance() no existe (fatal), sustituido por DB::getInstance() como última opción
- El enrutado HTTP directo de /hooks/<id>/ da 404 en Forge; documentado el patrón vía filtro | hook
- Modelo de ejecución eval(): __DIR__ vs APP_ROOT_PATH, params por HTTP vs filtro Twig
- DB::escape() ya entrecomilla el literal; patrón seguro documentado
- Nunca delegar hashing de contraseñas en el CMS (create_field no tiene tipo password; SHA1 inadecuado)
- Aviso de que success:true en write-ops/DDL del MCP no garantiza que la operación se aplicó
- .gitignore: .claude/settings.local.json (ahí van las claves), .env, *.pem, *.key
- .githooks/pre-push: bloquea el push si lo que sube contiene claves (gitleaks
si está instalado; si no, grep de los formatos más comunes). Activar con
git config core.hooksPath .githooks
- .gitea/workflows/gitleaks.yml: escaneo en cada push y pull request
- CLAUDE.md: regla 14, el repo es público y las claves nunca se versionan
Motivo: en 2026-03 se subió una clave de API en .claude/settings.json. Ya está
revocada y el historial reescrito para quitarla.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HPL66q9F33YZxbLPUT7KW8
- CocoDB::get with all options (uploads, relations, redis, groupBy, etc.)
- CocoDB::insertRecords and updateRecords with functions parameter
- CocoDB::deleteRecords
- Advanced where syntax (operators, OR, NOT, IS NULL, raw_key)
- Options reference tables for get/insert/update
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CLAUDE.md with project structure, DB access, and environment info
- docs/ with placeholder files for modular system, hooks/API, and builder fields
- .claude/settings.json with Playwright and Fetch MCP servers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>