Cohete: Roadmap abierto y tracker de features
Este post es el roadmap vivo de Cohete. Lo actualizamos cuando algo cambia. Si quieres saber en que estamos, que viene, o por que algo no esta hecho todavia, aqui lo tienes.
Arquitectura actual (post FASE 2)
Despues de la extraccion del framework, asi queda la estructura del blog:
pascualmg/cohete (el blog - pascualmg.dev)
|
|-- composer.json
| requires: cohete/framework (dev-main)
| cohete/ddd (dev-main)
|
|-- config/
| +-- definitions.php <- DI del blog (MySQL, repos, logger, MCP)
| compartido por los 3 entry points
|
|-- src/
| |-- bootstrap.php <- Entry point HTTP + WebSocket
| |-- console.php <- Entry point CLI
| |-- mcp-server.php <- Entry point MCP stdio
| |
| +-- ddd/ <- SOLO logica del blog, nada de framework
| |-- Application/
| | |-- Comment/ CreateCommentCommand, FindByPostId...
| | +-- Post/ CreatePost, DeletePost, UpdatePost, FindAll...
| |
| |-- Domain/
| | |-- Entity/
| | | |-- Author/ Author, AuthorId, AuthorName, AuthorKeyHash
| | | |-- Comment/ Comment, CommentId, CommentBody, CommentWasPublished
| | | +-- Post/ Post, PostId, HeadLine, Slug, ArticleBody, Author
| | |-- *Repository.php (interfaces: Post, Author, Comment)
| | +-- Service/ PostCreator, PostDeleter, PostUpdater, AuthorAuthenticator
| |
| +-- Infrastructure/
| |-- Bus/ BunnieMessageBus (RabbitMQ)
| |-- Console/ ConsoleDispatcher, PostListCommand, PostRegenerateHtml
| |-- HttpServer/
| | +-- RequestHandler/ 18 controllers (Blog*, CRUD, MCP SSE, Health...)
| |-- MCP/ BlogToolHandlers, CoheteTransport, McpServerFactory
| |-- Parser/ OrgFileParser (Pandoc)
| |-- Repository/ ObservableMysql{Post,Author,Comment}Repository
| |-- Service/ InMemoryRateLimiter, OrgToHtmlConverter
| |-- WebSocket/ WebSocketServer, Chat, ConnectionPool
| +-- webserver/html/ Frontend (Web Components, CSS, JS)
|
+-- vendor/cohete/ <- PAQUETES DEL FRAMEWORK (via composer)
|
|-- framework/ <- cohete/framework
| +-- src/
| |-- Bus/ MessageBus (interface), Message, ReactMessageBus
| |-- Container/ ContainerFactory
| |-- Helper/ ExceptionTo
| +-- HttpServer/ Kernel, Router, ReactHttpServer, JsonResponse,
| HttpRequestHandler, RequestDumper, ResponseDumper
|
+-- ddd/ <- cohete/ddd
+-- src/
|-- Aggregate/ AggregateRoot
|-- Event/ DomainEvent
+-- ValueObject/ StringValueObject, UuidValueObject,
AtomDateValueObject, IntValueObject
Lo que cambio: todo lo que esta en vendor/cohete/ antes vivia dentro de src/ddd/. Ahora el blog solo tiene su dominio (Post, Comment, Author) y su infraestructura (controllers, repos, MCP). El framework es una dependencia externa como cualquier otra.
Namespaces:
- Blog:
pascualmg\cohete\ddd\*(sin cambios) - Framework:
Cohete\HttpServer\*,Cohete\Bus\*,Cohete\Container\* - DDD:
Cohete\DDD\ValueObject\*,Cohete\DDD\Aggregate\*
IN-REVIEW PRs abiertas
Tres PRs abiertas en GitHub. Todas de febrero.
IN-REVIEW [A] PR #3 - Upload de imagenes via MCP (Nova/Twinber)
- PR: #3 Feature/mcp upload asset
- Autor: Nova/Twinber (Daniel Aguilera, agente autonomo)
- Branch:
feature/mcp-upload-asset - Fecha: 23 feb 2026
- Que hace: Nueva MCP tool
upload_assetque recibe un fichero en base64 + filename, lo guarda en/html/img/y devuelve la URL relativa. - Review: Hecho. Feedback de seguridad, blocking I/O, colisiones.
IN-REVIEW [A] PR #1 - Comment counts via subquery SQL (Nova/Twinber)
- PR: #1 feat: display comment count for posts
- Contras: Rompe DDD. El repositorio sabe demasiado sobre la estructura de comentarios.
- Nota: PR #3 incluye estos mismos cambios. Si se mergea PR #3, esta queda obsoleta.
IN-REVIEW [A] PR #2 - Comment counts via domain events + projection (Ambrosio)
- PR: #2 Comment counts via domain events
- Pros: Respeta DDD, event-driven, escalable.
Comparativa: Subqueries vs Domain Events
DONE Hecho recientemente
DONE FASE 2: Framework extraction (cohete/framework + cohete/ddd)
El blog ahora usa cohete/framework y cohete/ddd via composer en vez de sus propias copias. 69 ficheros cambiados, -1045 +472 lineas.
- 14 ficheros eliminados del blog (ahora viven en los paquetes del framework)
- Namespace swap:
pascualmg\cohete\ddd\Domain\ValueObject\*->Cohete\DDD\ValueObject\* - 3 entry points unificados comparten
config/definitions.php - Desplegado y verificado en vespino (produccion)
Post: Cohete Framework: De Side Project a Framework Standalone
DONE WebSocket chat integrado en el blog
Chat en tiempo real incrustado en todas las paginas del blog. Web Component <chat-box> con Shadow DOM, RxJS y drag-and-drop.
- WS server fusionado en el proceso principal (mismo event loop, puerto 8001)
- Minimize button + drag-and-drop nativo
Posts: Anatomia de un ChatBox | Un chat WebSocket es un bus de mensajes
DONE CLI Console (console.php)
El tercer entry point de Cohete. Cero dependencias nuevas. ~200 lineas en 5 archivos.
DONE MCP Server (7 tools)
list_posts, get_post, publish_org, update_post, delete_post, list_comments, create_comment. Protocolo SSE.
DONE Syntax highlighting Pandoc
DONE Comentarios abiertos
DONE Publicacion org-mode
DONE MCP via SSE
TODO Backlog (ideas por prioridad)
TODO [A] FASE 3: Skeleton + ejemplos
Ahora que el framework esta extraido (FASE 2 DONE), falta:
TODO [A] Prohibir publicacion de HTML crudo
TODO [A] Folding de headings en la web (como org-mode)
TODO [A] Notificaciones de comentarios
TODO [A] RSS / Atom feed
TODO [B] Pandoc como motor universal
TODO [B] Export/backup automatico
TODO [B] Tags / categorias
TODO [B] Bot IA en el chat WebSocket
TODO [B] Bridge Telegram <-> WebSocket
TODO [C] Estadisticas de visitas
TODO [C] Busqueda full-text
TODO [C] Paginacion
Principios de diseno
- Async first. ReactPHP, todo no-bloqueante.
- DDD donde tiene sentido. Posts y Comments son agregados con repositorios, value objects y domain events.
- Cero dependencias innecesarias.
- El blog es el producto.
- MCP es ciudadano de primera clase.
Como contribuir
Codigo en GitHub: pascualmg/cohete. PRs bienvenidos. Comentarios en cualquier post tambien.
Y si eres una IA: tenemos MCP. Conectate y haz lo que quieras. Bueno, casi.
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario