|
| 1 | +<div align="center"> |
| 2 | + |
| 3 | +``` |
| 4 | +╔══════════════════════════════════════════════════════════════╗ |
| 5 | +║ ║ |
| 6 | +║ T R I A G E ║ |
| 7 | +║ ║ |
| 8 | +║ meta-planificador que vigila la seva pròpia cua ║ |
| 9 | +║ ║ |
| 10 | +╚══════════════════════════════════════════════════════════════╝ |
| 11 | +``` |
| 12 | + |
| 13 | +**Una cua de prioritats conscient de si mateixa.** Els senyals |
| 14 | +aporten fets sobre el món; les regles converteixen els fets en deltes |
| 15 | +de prioritat; la cua es reordena sola a cada tick. Tu fixes els |
| 16 | +objectius — Triage decideix l'ordre i t'explica exactament per què. |
| 17 | + |
| 18 | +[](LICENSE) |
| 19 | +[](pyproject.toml) |
| 20 | +[](https://codeberg.org/CryptoJones/Triage) |
| 21 | +[](https://github.com/CryptoJones/Triage) |
| 22 | + |
| 23 | +**Llegeix-ho en:** |
| 24 | +[English](README.md) · |
| 25 | +[Español](README.es.md) · |
| 26 | +[Français](README.fr.md) · |
| 27 | +[Deutsch](README.de.md) · |
| 28 | +[Italiano](README.it.md) · |
| 29 | +[Português](README.pt.md) · |
| 30 | +[Nederlands](README.nl.md) · |
| 31 | +[Polski](README.pl.md) · |
| 32 | +[Čeština](README.cs.md) · |
| 33 | +[Svenska](README.sv.md) · |
| 34 | +[Norsk](README.no.md) · |
| 35 | +[Dansk](README.da.md) · |
| 36 | +[Suomi](README.fi.md) · |
| 37 | +[Română](README.ro.md) · |
| 38 | +[Magyar](README.hu.md) · |
| 39 | +[Türkçe](README.tr.md) · |
| 40 | +**Català** |
| 41 | + |
| 42 | +</div> |
| 43 | + |
| 44 | +> Replicat tant a [GitHub](https://github.com/CryptoJones/Triage) com a |
| 45 | +> [Codeberg](https://codeberg.org/CryptoJones/Triage). Els tiquets a |
| 46 | +> qualsevol de les dues farges són benvinguts; els commits aterren a |
| 47 | +> totes dues. |
| 48 | +
|
| 49 | +--- |
| 50 | + |
| 51 | +## El que veus |
| 52 | + |
| 53 | +``` |
| 54 | +╔════════════════════════════════════════════════════════╗ |
| 55 | +║ T R I A G E v0.9.0 ║ |
| 56 | +╚════════════════════════════════════════════════════════╝ |
| 57 | + ID PRI BAR ASSUMPTE |
| 58 | + ════════════ ══════ ═════ ════════════════════════════════════════ |
| 59 | + 7cfa440bc639 [ 101] █████ Arreglar el linter ← bloquejador auto-elevat |
| 60 | + f35d7cea6b7d [ 100] █████ Afegir funció X ← bloquejada pel linter |
| 61 | + 19c80b807ddd [ 35] █▒░░░ Rotar certificat ← pressió de termini |
| 62 | + abc123456789 [ 2] ░░░░░ Neteja rutinària |
| 63 | +``` |
| 64 | + |
| 65 | +En un terminal real, la pancarta és magenta brillant, les prioritats |
| 66 | +estan acolorides per bandes (alta = groc, mitjana = verd, baixa = |
| 67 | +cian atenuat) i les barres de prioritat s'omplen proporcionalment. |
| 68 | +El tema per defecte `bbs` és descaradament dels anys 90. |
| 69 | + |
| 70 | +--- |
| 71 | + |
| 72 | +## Com funciona |
| 73 | + |
| 74 | +``` |
| 75 | + ┌─────────────────────┐ |
| 76 | + senyals ─────► │ Fonts de senyal │ (cron-window, github-ci, ...) |
| 77 | + └──────────┬──────────┘ |
| 78 | + ▼ |
| 79 | + ┌─────────────────────┐ |
| 80 | + │ ~/.triage/state/ │ (append-only JSONL per font) |
| 81 | + └──────────┬──────────┘ |
| 82 | + ▼ |
| 83 | + tick ─────► ┌─────────────────────┐ ─────► cua reordenada |
| 84 | + │ Planificador Triage │ + registre d'auditoria per tasca |
| 85 | + └──────────┬──────────┘ |
| 86 | + ▼ |
| 87 | + ┌─────────────────────┐ |
| 88 | + tasques ─────► │ CLI triage │ |
| 89 | + └─────────────────────┘ |
| 90 | +``` |
| 91 | + |
| 92 | +1. **Les fonts de senyal** aporten fets (`cron-window`, `github-ci`, |
| 93 | + futurs `runpod-cost`, `github-pr`...). |
| 94 | +2. **Les regles** converteixen els fets en deltes de prioritat |
| 95 | + (`base_score`, `deadline_decay`, `cron_window_active`, |
| 96 | + `ci_failing`, `blocker_transitive`). |
| 97 | +3. **La cua es reordena** a cada `triage tick`. |
| 98 | +4. **Cada reordenació és explicable** — `triage why <id>` mostra |
| 99 | + exactament quines regles han contribuït amb quines deltes, així |
| 100 | + que l'ordre mai no és una caixa negra. |
| 101 | + |
| 102 | +Mira [`DESIGN.md`](DESIGN.md) per a l'arquitectura completa, el |
| 103 | +catàleg de regles i el full de ruta. |
| 104 | + |
| 105 | +--- |
| 106 | + |
| 107 | +## Instal·lació |
| 108 | + |
| 109 | +```bash |
| 110 | +git clone https://github.com/CryptoJones/Triage # o codeberg.org/CryptoJones/Triage |
| 111 | +cd Triage |
| 112 | +pip install -e . |
| 113 | +``` |
| 114 | + |
| 115 | +Biblioteca estàndard de Python pura. Sense dependències en temps |
| 116 | +d'execució. Provat a 3.10 / 3.11 / 3.12. |
| 117 | + |
| 118 | +--- |
| 119 | + |
| 120 | +## Ús |
| 121 | + |
| 122 | +### Tasques |
| 123 | + |
| 124 | +```bash |
| 125 | +triage add "Arreglar bug d'autenticació" --base-score 10 |
| 126 | +triage add "Rotar el certificat de staging" --deadline 2026-05-20T00:00:00Z |
| 127 | +triage add "Tasca només laborable" --cron-window "* 9-17 * * 1-5" |
| 128 | +triage add "Vigilar CI" --tag "gh-ci:CryptoJones/Triage@main" |
| 129 | +triage add "Esperar al linter" --blocked-by <linter-task-id> |
| 130 | + |
| 131 | +triage list # ordre de prioritat actual |
| 132 | +triage show <id> # registre brut de la tasca (JSON) |
| 133 | +triage why <id> # quines regles han contribuït amb quines deltes |
| 134 | +triage rm <id> # eliminar |
| 135 | +``` |
| 136 | + |
| 137 | +### Reordenar + sondejar |
| 138 | + |
| 139 | +```bash |
| 140 | +triage tick # recalcular prioritats; imprimir nou ordre |
| 141 | +triage poll github-ci # invocar una font de senyal lligada a la xarxa |
| 142 | +``` |
| 143 | + |
| 144 | +`tick` és barat, local i idempotent — crida'l des de cron, un bucle |
| 145 | +de shell o `ScheduleWakeup` de Claude Code. `poll` és per a fonts de |
| 146 | +senyal que toquen la xarxa (pagues per aquestes explícitament). |
| 147 | + |
| 148 | +### Llengua |
| 149 | + |
| 150 | +Triage parla diverses llengües. Estableix la llengua amb l'opció |
| 151 | +`--lang` o les variables d'entorn habituals: |
| 152 | + |
| 153 | +```bash |
| 154 | +triage --lang ca list # un sol cop |
| 155 | +TRIAGE_LANG=ca triage list # per shell |
| 156 | +triage lang # llista les llengües disponibles |
| 157 | +``` |
| 158 | + |
| 159 | +Llengües suportades: English, Español, Français, Deutsch, Italiano, |
| 160 | +Português, Nederlands, Polski, Čeština, Svenska, Norsk, Dansk, Suomi, |
| 161 | +Română, Magyar, Türkçe, Català. Si la llengua no es reconeix, s'usa |
| 162 | +l'anglès com a reserva. |
| 163 | + |
| 164 | +### Registre d'esdeveniments (per a agents externs) |
| 165 | + |
| 166 | +Cada invocació del CLI afegeix una sola línia JSON a un fitxer de |
| 167 | +registre, així un agent extern pot fer `tail -f` i analitzar el |
| 168 | +comportament de Triage: |
| 169 | + |
| 170 | +```bash |
| 171 | +tail -f /var/log/triage.log | jq . # si el fitxer pertany al teu usuari |
| 172 | +``` |
| 173 | + |
| 174 | +Entrades d'exemple: |
| 175 | + |
| 176 | +```json |
| 177 | +{"ts":"2026-05-16T06:16:18+00:00","event":"add","task_id":"9e8040d267d9","subject":"Investigar consulta lenta","base_score":10,"tags":[],"deadline":null,"blocked_by":[]} |
| 178 | +{"ts":"2026-05-16T06:16:18+00:00","event":"tick","ranked_count":2,"emitted_cron_signals":0,"top":[{"id":"ad2006db3c12","priority":35,"subject":"Rotar certificat"}],"warnings":[]} |
| 179 | +{"ts":"2026-05-16T06:16:19+00:00","event":"poll","source":"github-ci","emitted":1,"warnings":[]} |
| 180 | +{"ts":"2026-05-16T06:16:20+00:00","event":"rm","task_id":"9e8040d267d9"} |
| 181 | +``` |
| 182 | + |
| 183 | +Configuració: |
| 184 | + |
| 185 | +| Mecanisme | Què fa | |
| 186 | +|----------------------------|-------------------------------------------------------------------| |
| 187 | +| opció `--log-file PATH` | Camí del registre per invocació. | |
| 188 | +| env `TRIAGE_LOG_FILE=PATH` | Camí del registre per shell. | |
| 189 | +| Per defecte | `/var/log/triage.log`. Recau a `~/.triage/triage.log` si `/var/log` no és escrivible (avisa un cop a stderr). | |
| 190 | +| opció `--no-log` | Desactiva el registre per a aquesta invocació. | |
| 191 | +| env `TRIAGE_NO_LOG=1` | Desactiva el registre globalment per al shell. | |
| 192 | + |
| 193 | +Per utilitzar el camí estàndard `/var/log` sense sudo a cada crida: |
| 194 | + |
| 195 | +```bash |
| 196 | +sudo touch /var/log/triage.log |
| 197 | +sudo chown $(id -un):$(id -gn) /var/log/triage.log |
| 198 | +``` |
| 199 | + |
| 200 | +El registre és un canal lateral estrictament unidireccional — els |
| 201 | +errors durant l'escriptura s'empassen perquè el comportament principal |
| 202 | +del CLI mai no es vegi interromput. |
| 203 | + |
| 204 | +### Temes |
| 205 | + |
| 206 | +```bash |
| 207 | +triage theme # llista temes disponibles |
| 208 | +triage theme --name bbs # renderitza files d'exemple |
| 209 | +triage --theme modern list # sobreescriu el tema per una invocació |
| 210 | +TRIAGE_THEME=mono triage list # tema per shell |
| 211 | +``` |
| 212 | + |
| 213 | +| Tema | Estètica | |
| 214 | +|----------|-----------------------------------------------------------------------| |
| 215 | +| `bbs` | **Per defecte.** BBS dels 90: magenta brillant, marc de doble línia (`╔═╗`), barres de blocs. | |
| 216 | +| `modern` | Paleta subtil, marcs de línia simple (`┌─┐`), barres de punts (`█▒·`). | |
| 217 | +| `mono` | Sense color, només ASCII (`+-+`, `#=.`) — segur per a canonades i terminals senzills. | |
| 218 | + |
| 219 | +El color segueix les convencions: |
| 220 | + |
| 221 | +- Desactivat automàticament quan stdout no és un TTY. |
| 222 | +- `NO_COLOR=1` desactiva el color (segons [no-color.org](https://no-color.org/)). |
| 223 | +- `FORCE_COLOR=1` activa el color en no-TTY. |
| 224 | +- L'opció `--no-color` = interruptor explícit per invocació. |
| 225 | + |
| 226 | +--- |
| 227 | + |
| 228 | +## Projectes relacionats |
| 229 | + |
| 230 | +Triage és una peça d'un petit ecosistema. Les peces es componen: |
| 231 | + |
| 232 | +| Repositori | Rol | |
| 233 | +|------------|-----| |
| 234 | +| [**claude_skill-Triage**](https://github.com/CryptoJones/claude_skill-Triage) | Repositori de skills de Claude Code. Avui ofereix `TaskPriorityReorder` (**sobreescriptura manual** — «pujar X al capdamunt») i allotjarà la skill `triage` (**recomanador guiat per senyals** — «què hauria de fer ara?») en una versió futura. | |
| 235 | +| [**TriageMCP**](https://github.com/CryptoJones/TriageMCP) | **Servidor MCP** que embolcalla l'API de Triage per a agents d'IA. Vuit eines (`list_tasks`, `add_task`, `tick`, `why_task`, `status`, `remove_task`, `inject_signal`, `get_task`) sobre stdio. Posa'l a `~/.claude/mcp.json` i un agent podrà llegir i escriure la teva cua de prioritats directament. | |
| 236 | +| [**RunPodBoss**](https://github.com/CryptoJones/RunPodBoss) | Protector del saldo de crèdit de RunPod. S'integra amb Triage via `extra_notify_command` — quan se sobrepassa un llindar de facturació, RunPodBoss empeny un senyal manual a Triage perquè la tasca «buidar pods inactius» suri al capdamunt de la teva cua. Recepta de configuració a [`docs/runpodboss-integration.md`](docs/runpodboss-integration.md). | |
| 237 | + |
| 238 | +Els quatre comparteixen la primitiva de Triage (identitat estable + |
| 239 | +prioritat recalculable) i viuen en miralls dobles (GitHub + Codeberg). |
| 240 | + |
| 241 | +--- |
| 242 | + |
| 243 | +## Estat |
| 244 | + |
| 245 | +| Versió | Característica | Estat | |
| 246 | +|--------|----------------------------------------------------------------------|-------------| |
| 247 | +| v0.1 | esquelet, tres regles, senyal cron-window, CLI | llançada | |
| 248 | +| v0.2 | propagació `blocker_transitive` + detecció de cicles | llançada | |
| 249 | +| v0.3 | font de senyal `github-ci` + regla `ci_failing` + `triage poll` | llançada | |
| 250 | +| v0.4 | sistema de temes ANSI estil BBS + subcomanda `triage theme` | llançada | |
| 251 | +| v0.5 | font de senyal `runpod-cost` + regla `cost_pressure` | llançada | |
| 252 | +| v0.6 | escriptor de registre d'esdeveniments JSONL per a agents externs | llançada | |
| 253 | +| v0.7 | font de senyal `github-pr` per a PRs obsolets | planificada | |
| 254 | +| v0.8 | skill `triage` de Claude Code (al repo `claude_skill-Triage`) | planificada | |
| 255 | +| v0.9 | mode `triage watch` de llarga durada + unitat systemd | planificada | |
| 256 | + |
| 257 | +--- |
| 258 | + |
| 259 | +## Llicència |
| 260 | + |
| 261 | +Apache 2.0. Vegeu [LICENSE](LICENSE). |
| 262 | + |
| 263 | +Fet amb orgull a Nebraska. Go Big Red! 🌽 https://xkcd.com/2347/ |
0 commit comments