CocoDB::getInstance() no existe (fatal Call to undefined method) — corregido, con DB::getInstance() documentado como ultima opcion real.
Documentado el enrutado HTTP de hooks (404 en Forge para /hooks/<id>/) y el patron de diagnostico via filtro | hook.
Documentado el modelo de ejecucion de hooks (eval()): __DIR__ vs APP_ROOT_PATH, params por HTTP ($_REQUEST) vs filtro Twig.
Documentado que DB::escape() devuelve el literal ya entrecomillado, con el patron seguro para filtros de usuario.
Nueva seccion "Seguridad en hooks": nunca delegar el hashing de contrasenas en el CMS (isPasswordField no hashea; editor_password usa SHA1).
Nuevo aviso en mcp-tools-reference.md: las write-ops/DDL del MCP pueden devolver success:true sin que la operacion real se haya aplicado — verificar siempre con una operacion real posterior.
Documentado el contrato de plugins CMS personalizados (cms/lib/plugins/index.php: addPlugins, checkPoints, gating adminOnly, filtros menuFilter/actionFilter, install.sql/schemaPresets) — no estaba documentado en ningun sitio.
Todos estos son hallazgos de friccion real capturados trabajando en proyectos Acai (turismo, onefix-appv1, pisorentado.com), reclasificados como mejoras de scaffolding (en vez de solo reportarlos) tras confirmar acceso de PR a este repo.
Test plan
Revision de contenido (son cambios de documentacion, sin codigo ejecutable)
## Resumen
- `CocoDB::getInstance()` no existe (fatal `Call to undefined method`) — corregido, con `DB::getInstance()` documentado como ultima opcion real.
- Documentado el enrutado HTTP de hooks (404 en Forge para `/hooks/<id>/`) y el patron de diagnostico via filtro `| hook`.
- Documentado el modelo de ejecucion de hooks (`eval()`): `__DIR__` vs `APP_ROOT_PATH`, params por HTTP (`$_REQUEST`) vs filtro Twig.
- Documentado que `DB::escape()` devuelve el literal ya entrecomillado, con el patron seguro para filtros de usuario.
- Nueva seccion "Seguridad en hooks": nunca delegar el hashing de contrasenas en el CMS (`isPasswordField` no hashea; `editor_password` usa SHA1).
- Nuevo aviso en `mcp-tools-reference.md`: las write-ops/DDL del MCP pueden devolver `success:true` sin que la operacion real se haya aplicado — verificar siempre con una operacion real posterior.
- Documentado el contrato de plugins CMS personalizados (`cms/lib/plugins/index.php`: `addPlugins`, checkPoints, gating `adminOnly`, filtros `menuFilter`/`actionFilter`, `install.sql`/`schemaPresets`) — no estaba documentado en ningun sitio.
Todos estos son hallazgos de friccion real capturados trabajando en proyectos Acai (turismo, onefix-appv1, pisorentado.com), reclasificados como mejoras de scaffolding (en vez de solo reportarlos) tras confirmar acceso de PR a este repo.
## Test plan
- [x] Revision de contenido (son cambios de documentacion, sin codigo ejecutable)
- [ ] Revision por el equipo que mantiene `acai-scaffold`
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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ó
No estaba documentado en absoluto (solo se mencionaba builder_saas para color). Evita tener que
explorar el servidor por SSH para entender addPlugins/checkPoints/gating/filtros.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Resumen
CocoDB::getInstance()no existe (fatalCall to undefined method) — corregido, conDB::getInstance()documentado como ultima opcion real./hooks/<id>/) y el patron de diagnostico via filtro| hook.eval()):__DIR__vsAPP_ROOT_PATH, params por HTTP ($_REQUEST) vs filtro Twig.DB::escape()devuelve el literal ya entrecomillado, con el patron seguro para filtros de usuario.isPasswordFieldno hashea;editor_passwordusa SHA1).mcp-tools-reference.md: las write-ops/DDL del MCP pueden devolversuccess:truesin que la operacion real se haya aplicado — verificar siempre con una operacion real posterior.cms/lib/plugins/index.php:addPlugins, checkPoints, gatingadminOnly, filtrosmenuFilter/actionFilter,install.sql/schemaPresets) — no estaba documentado en ningun sitio.Todos estos son hallazgos de friccion real capturados trabajando en proyectos Acai (turismo, onefix-appv1, pisorentado.com), reclasificados como mejoras de scaffolding (en vez de solo reportarlos) tras confirmar acceso de PR a este repo.
Test plan
acai-scaffold🤖 Generated with Claude Code
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.