Document TaskStream boards in the README and .env.example
Some checks failed
Tests / lint (push) Has been cancelled
Tests / test (push) Has been cancelled
Tests / test-postgres (push) Has been cancelled
Tests / mcp (push) Has been cancelled

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-07 22:20:23 +02:00
parent d30dd971d7
commit cdfc8763a5
2 changed files with 55 additions and 0 deletions

View File

@@ -186,3 +186,18 @@ GIT_SYNC_CRON=hourly
GIT_SYNC_TTL=55
GIT_MAX_ISSUES=25
GIT_HTTP_TIMEOUT=15
###############################################################################
# TaskStream — the issue tracker
###############################################################################
# `taskstream: true` on POST /v1/projects opens a public board there too.
# Both default to production.
TASKSTREAM_API_URL=https://api.taskstream.pireon.dev
TASKSTREAM_WEB_URL=https://taskstream.pireon.dev
# A Pireon personal access token (oauth.pireon.dev/tokens), only used when the
# caller signs in with a machine token (pmt_…), which TaskStream cannot read.
# People with a Pireon token have theirs passed on instead. Empty: machine
# tokens cannot ask for a board.
TASKSTREAM_TOKEN=
TASKSTREAM_HTTP_TIMEOUT=10

View File

@@ -525,6 +525,46 @@ fuera. Añadir GitLab es escribir una clase que implemente
[`RepositoryProvider`](app/Services/Git/Contracts/RepositoryProvider.php) y
registrarla en `config/git.php`, sin tocar nada más.
## Tableros en TaskStream
Al crear un proyecto por la API, `taskstream: true` le abre también un tablero
en [TaskStream](https://taskstream.pireon.dev), el gestor de tareas del
colectivo, y la respuesta trae el enlace:
```json
POST /api/v1/projects
{ "title": { "es": "Catálogo abierto" }, "slug": { "es": "catalogo" }, "taskstream": true }
→ 201 { "data": { …, "taskstream_key": "CATALOGO", "taskstream_url": "https://taskstream.pireon.dev/p/CATALOGO" } }
```
- **Público** siempre: es el tablero de un proyecto que se enseña.
- **Clave**: la de `taskstream_key` (de 2 a 10 letras o cifras, empezando por
letra) o, si no se indica, una sacada del slug en el idioma por defecto: de
una palabra, sus diez primeros caracteres (`catalogo` → `CATALOGO`); de
varias, sus iniciales (`mi-web-nueva` → `MWN`).
- **Primero TaskStream**: si lo rechaza (una clave ya usada, por ejemplo), aquí
no se crea nada y el motivo vuelve como error de validación (422); si no
responde, 502. Así no quedan proyectos a medias ni webhooks de algo que no
existe.
- **A nombre de quien lo pide**: TaskStream acepta los mismos tokens de Pireon
que esta API, y se le pasa el de quien llama. Un token de máquina (`pmt_…`)
allí no significa nada, así que esas peticiones usan `TASKSTREAM_TOKEN`; sin
él, no pueden pedir tablero.
- Solo al crear: en una edición los dos campos se ignoran, y un proyecto
duplicado no hereda el tablero del original.
```dotenv
TASKSTREAM_API_URL=https://api.taskstream.pireon.dev # por defecto
TASKSTREAM_WEB_URL=https://taskstream.pireon.dev # de aquí sale el enlace
TASKSTREAM_TOKEN= # token personal de Pireon, solo para tokens de máquina
TASKSTREAM_HTTP_TIMEOUT=10
```
El cliente está en [`TaskStreamClient`](app/Services/TaskStream/TaskStreamClient.php)
y la lógica (clave, token, errores) en
[`OpenInTaskStream`](app/Actions/Projects/OpenInTaskStream.php).
## API pública (para el frontend)
Sin autenticación y de solo lectura. Todo lo que devuelve ya está publicado en