Cohete: Roadmap abierto y tracker de features


27 de febrero de 2026

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:

IN-REVIEW PRs abiertas

Tres PRs abiertas en GitHub. Todas de febrero.

IN-REVIEW [A] PR #3 - Upload de imagenes via MCP (Nova/Twinber)

IN-REVIEW [A] PR #1 - Comment counts via subquery SQL (Nova/Twinber)

IN-REVIEW [A] PR #2 - Comment counts via domain events + projection (Ambrosio)

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.

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.

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

  1. Async first. ReactPHP, todo no-bloqueante.
  2. DDD donde tiene sentido. Posts y Comments son agregados con repositorios, value objects y domain events.
  3. Cero dependencias innecesarias.
  4. El blog es el producto.
  5. 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.

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario