feat(dev): issues 0100-0104 — dev_console binary + work_tab + DoD user-facing + frontmatter migration de 146 issues + taxonomia canonica

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-17 02:44:04 +02:00
parent 5d2a14e50a
commit 5e6a974a5d
165 changed files with 3935 additions and 324 deletions
+93
View File
@@ -0,0 +1,93 @@
---
description: "Gestiona issues del registry en dev/issues/. Subcomandos: list, show, status, board, dep, roadmap, tag, done, stale, create. Frontmatter YAML canonico (issue 0100)."
---
# /issue — Gestionar issues del registry
Issues viven en `dev/issues/NNNN-<slug>.md` con frontmatter YAML canonico (id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags).
Allowlists en `dev/TAXONOMY.md` (no inventar valores).
Diferencia con `dev/flows/`:
- **Issues** = bugs, features, refactors, chores, epics de implementacion.
- **Flows** = casos de uso end-to-end multi-app.
## Sintaxis
```
/issue list [--domain X] [--type Y] [--status Z] [--prio P] [--epic NNNN]
/issue show NNNN
/issue status NNNN # acceptance % + estado deps
/issue board # kanban pendiente/in-progress/bloqueado/done
/issue dep NNNN # arbol bloquea/depende
/issue roadmap NNNN # epic + sub-IDs (NNNNa, NNNNb, ...)
/issue tag NNNN +X -Y # mantenimiento tags/domain
/issue done NNNN # mueve a completed/, valida deps
/issue stale [--days 30]
/issue create <slug> --type T --domain D [--prio P] [--depends NNNN]
```
## Implementacion
**Fase 1 (manual via Claude):**
El agente lee `dev/issues/*.md`, parsea frontmatter YAML con `yaml.safe_load`, aplica el filtro, imprime tabla.
```python
import yaml, pathlib, re
issues = []
for f in pathlib.Path("dev/issues").glob("*.md"):
if f.name in {"README.md", "template.md"}: continue
txt = f.read_text()
m = re.match(r"^---\n(.*?)\n---", txt, re.S)
if not m: continue
fm = yaml.safe_load(m.group(1)) or {}
fm["_path"] = str(f)
issues.append(fm)
# filter + print
```
**Fase 2 (cuando 0101 dev_console exista):**
Cada subcomando se mapea a `./apps/dev_console/dev_console issue <subcomando> $ARGS`.
## Subcomandos clave
### `list`
Imprime tabla `id | title | status | type | domain | priority | depends_pending`. Filtrable por flags.
### `show NNNN`
Read directo del .md + render del frontmatter como tabla + body como markdown.
### `status NNNN`
Cuenta checkboxes en `## Acceptance` + chequea si todos los `depends` estan en `status: completado`. Si alguno no, marca `bloqueado`.
### `board`
Tabla 4 columnas (pendiente / in-progress / bloqueado / completado_hoy). Card por issue: id + title + prio. Status `bloqueado` se calcula on-the-fly desde `depends`.
### `roadmap NNNN`
Si `type: epic`: lista sub-issues `NNNNa`, `NNNNb`, etc. con su estado. Si no epic: error "not an epic".
### `done NNNN`
1. Lee frontmatter.
2. Verifica todos `depends` cerrados (sino, error).
3. Cuenta `## Acceptance` 100% (sino, error).
4. `git mv dev/issues/NNNN-*.md dev/issues/completed/`.
5. Actualiza `status: completado` + `updated: today`.
### `create <slug> --type T --domain D`
Genera siguiente ID libre (max existing + 1, zero-padded 4). Scaffold desde plantilla minima con frontmatter rellenado.
## Reglas
- Domain debe estar en `dev/TAXONOMY.md` allowlist.
- Scope/type/priority idem.
- `id` siempre string `"NNNN"` (zero-padded, sub-IDs con sufijo `a-z`).
- Modificar frontmatter SIEMPRE preserva campos no tocados (no overwrite).
+67
View File
@@ -0,0 +1,67 @@
---
description: "Vista cross-cutting de issues + flows. Subcomandos: today, weekly, search, dashboard. Mezcla los dos universos en una lista priorizable."
---
# /work — Vista cross-cutting issues + flows
Issues = trabajo de implementacion. Flows = casos de uso multi-app. `/work` los muestra juntos para responder "que hago ahora" sin saltar entre dos sitios.
## Sintaxis
```
/work today # top items prio alta + deps satisfechas (issues + flows)
/work weekly # review semanal: closed vs planeados
/work search "texto" # FTS sobre issues + flows + completed
/work dashboard # JSON consumible por tab Work (issue 0102)
```
## Implementacion
**Fase 1 (manual via Claude):**
El agente lee `dev/issues/*.md` + `dev/flows/*.md`, parsea frontmatter YAML, ordena por:
1. `priority: alta` primero.
2. `status: pendiente` con `depends` todos `completado` (no bloqueados).
3. Items con DoD/Acceptance >=80% (a punto de cerrar).
4. Fecha `updated` mas reciente.
Imprime tabla unificada:
```
KIND | ID | TITLE | PRIO | STATUS | NEXT STEP
issue| 0099 | datahub app launcher | alta | pendiente | revisar deps
flow | 0001 | hn-top-stories | high | pending | cerrar DoD user-facing
issue| 0100 | migrate issue frontmatter | alta | pendiente | ejecutar pipeline
...
```
**Fase 2 (cuando 0101 dev_console exista):**
`./apps/dev_console/dev_console work <subcomando> $ARGS`.
## Subcomandos
### `today`
Filtro: `priority in (alta, media)` + `status: pendiente` + dependencias resueltas. Max 10 items. Si hay >10, prioriza `alta` y avisa "N items pendientes en cola".
### `weekly`
Git log `--since='1 week ago'` sobre `dev/issues/completed/` y `dev/flows/completed/` -> tabla de items cerrados. Comparado con `created: <esta semana>` -> ratio in/out.
### `search "texto"`
`grep -ri` sobre `dev/issues/` + `dev/flows/` (incluido completed/), filtra por title/body. Output: `path:line: match`.
### `dashboard`
Output JSON estructurado para consumo por tab Work del `registry_dashboard` (issue 0102). Estructura:
```json
{
"issues": {"pendiente": [...], "in-progress": [...], "bloqueado": [...], "completado_24h": [...]},
"flows": [{"id": "0001", "dod_percent": 50, "user_facing_percent": 0, "...": ...}],
"telemetry": {"calls_24h": N, "violations_24h": N, "pending_proposals": N}
}
```
+1
View File
@@ -35,3 +35,4 @@ Reglas operativas del proyecto. Cada archivo es una regla independiente.
| 29 | [capability_groups.md](capability_groups.md) | Tags planos + paginas madre `docs/capabilities/<grupo>.md` para desbloquear clusters de funciones en un read. Issue 0086 |
| 30 | [function_growth_and_self_docs.md](function_growth_and_self_docs.md) | Contrato self-doc de cada `.md` (Ejemplo + Cuando usarla + Gotchas + Growth log) + crecimiento del registry por **promocion de composiciones** a pipelines, NO por inflado de funciones. Issue 0087 |
| 31 | [autonomous_loop.md](autonomous_loop.md) | Reglas para `fn-orquestador` + `/autonomous-task`: sandbox obligatorio, paths protegidos, filtro proposals auto-aplicables, watchdog, idempotencia. Issue 0069 |
| 32 | [../../dev/TAXONOMY.md](../../dev/TAXONOMY.md) | Allowlist canonica para dominios/tipos/scopes/estados/prioridades + flow patterns. Aplica a `dev/issues/` y `dev/flows/`. Issues 0100 + 0103 |
+3
View File
@@ -85,3 +85,6 @@ kotlin/functions/ui/
# Module versioning auto-generated headers (written by `fn index`, issue 0097)
**/version_generated.h
**/app_modules_generated.h
# Issue migration backups (0100)
dev/issues/.backup_pre_*
+1 -1
View File
@@ -30,7 +30,7 @@ uses_types:
- dag_types_cpp_gfx
framework: "imgui"
entry_point: "main.cpp"
dir_path: "cpp/apps/shaders_lab"
dir_path: "apps/shaders_lab"
repo_url: ""
icon:
phosphor: "palette"
@@ -3,7 +3,7 @@ name: deploy_cpp_exe_to_windows
kind: function
lang: bash
domain: infra
version: "1.0.0"
version: "1.1.0"
purity: impure
signature: "deploy_cpp_exe_to_windows(app_name: string, app_dir: string) -> void"
description: "Copia el .exe de Windows (compilado por build_cpp_windows) y sus assets al escritorio de Windows /mnt/c/Users/lucas/Desktop/apps/<APP>/. Mata el proceso si esta corriendo (taskkill.exe pre-autorizado), copia DLLs, sincroniza assets/ y enrichers/ con rsync, maneja runtime Python embebido si python_runtime: true en app.md, y copia extras gx-cli. Preserva siempre local_files/ (estado del usuario)."
@@ -63,3 +63,8 @@ Desktop/apps/<APP>/
- `rsync --delete` en assets/ y enrichers/ para mantener destino limpio.
- Si `python_runtime: true` en `app.md` y `runtime/.lock` es mas antiguo que `app.md`, invoca `tools/freeze_python_runtime.sh` automaticamente.
- `local_files/` jamas se toca: contiene estado per-PC del usuario (DBs SQLite, ImGui layouts, settings).
## Capability growth log
v1.1.0 (2026-05-17) — Bugfix: el `cp` del .exe no chequeaba exit status y la funcion reportaba OK aunque fallase por "Permission denied" (proceso aun vivo). Ahora: (1) tras `taskkill.exe`, poll de hasta 3s sobre `tasklist.exe` esperando muerte real del proceso; (2) `cp` envuelto en retry 5 veces con backoff 0.5s y re-taskkill entre intentos; (3) si los 5 intentos fallan, `return 1` (antes: silently continued).
v1.0.0 — Initial.
@@ -30,12 +30,38 @@ deploy_cpp_exe_to_windows() {
mkdir -p "$dest" "$assets"
# --- 3. Pre-deploy: matar proceso si esta corriendo en Windows ---
# Windows libera el file handle async tras taskkill. Hacemos poll hasta que
# el proceso desaparezca de tasklist o se agote el timeout.
if command -v taskkill.exe >/dev/null 2>&1; then
taskkill.exe /IM "${app}.exe" /F >/dev/null 2>&1 || true
local i
for i in 1 2 3 4 5 6 7 8 9 10; do
if ! tasklist.exe /FI "IMAGENAME eq ${app}.exe" /NH 2>/dev/null \
| grep -qi "^${app}.exe"; then
break
fi
sleep 0.3
done
fi
# --- 4. Copiar .exe al top level ---
cp -v "$exe_src" "$dest/"
# --- 4. Copiar .exe al top level con retry ---
# Windows puede tener el archivo aun bloqueado momentaneamente; reintentar.
local cp_ok=0
local attempt
for attempt in 1 2 3 4 5; do
if cp -v "$exe_src" "$dest/"; then
cp_ok=1
break
fi
echo "deploy_cpp_exe_to_windows: cp intento $attempt fallo, reintentando..." >&2
# Reintentar taskkill por si el proceso resucito o quedo zombie.
taskkill.exe /IM "${app}.exe" /F >/dev/null 2>&1 || true
sleep 0.5
done
if [ "$cp_ok" -ne 1 ]; then
echo "ERROR: cp del .exe fallo tras 5 intentos. $exe_src -> $dest/" >&2
return 1
fi
# --- 5. DLLs al top level (Windows DLL search convention) ---
find "$build_win/apps/$app" -maxdepth 1 -type f -name '*.dll' \
+2
View File
@@ -71,6 +71,8 @@ void about_window_render() {
// --- Modules consumidos por la app (issue 0097) ---
if (fn::app_modules_count > 0) {
ImGui::Spacing();
ImGui::Separator();
ImGui::Spacing();
ImGui::Text("Modules (%lu)", fn::app_modules_count);
if (ImGui::BeginTable("##fn_modules_table", 2,
+76
View File
@@ -0,0 +1,76 @@
#include "core/app_card.h"
namespace fn_ui {
static ImU32 with_alpha(ImU32 c, float a) {
ImVec4 v = ImGui::ColorConvertU32ToFloat4(c);
v.w = a;
return ImGui::ColorConvertFloat4ToU32(v);
}
bool app_card(const AppCardData& data, ImVec2 size) {
ImGui::PushID(data.id);
ImVec2 pos = ImGui::GetCursorScreenPos();
ImGui::InvisibleButton("##card", size);
bool hovered = ImGui::IsItemHovered();
bool held = ImGui::IsItemActive();
bool clicked = ImGui::IsItemClicked();
ImDrawList* dl = ImGui::GetWindowDrawList();
ImVec2 p0 = pos;
ImVec2 p1 = ImVec2(pos.x + size.x, pos.y + size.y);
ImU32 bg = with_alpha(data.accent, hovered ? 0.28f : 0.16f);
if (held) bg = with_alpha(data.accent, 0.40f);
ImU32 border = with_alpha(data.accent, hovered ? 0.95f : 0.55f);
const float rounding = 8.0f;
dl->AddRectFilled(p0, p1, bg, rounding);
dl->AddRect(p0, p1, border, rounding, 0, 1.5f);
const float stripe_w = 6.0f;
dl->AddRectFilled(p0, ImVec2(p0.x + stripe_w, p1.y), data.accent, rounding,
ImDrawFlags_RoundCornersLeft);
// Clip everything past this point so wrapped text never spills out.
dl->PushClipRect(ImVec2(p0.x + stripe_w + 2.0f, p0.y + 2.0f),
ImVec2(p1.x - 2.0f, p1.y - 2.0f), true);
const float pad_x = stripe_w + 10.0f;
const float pad_y = 10.0f;
// Optional icon on the left
float text_left = p0.x + pad_x;
if (data.icon != (ImTextureID)0) {
float icon_size = size.y - 2.0f * pad_y;
if (icon_size > 64.0f) icon_size = 64.0f;
ImVec2 icon_p0(p0.x + pad_x, p0.y + (size.y - icon_size) * 0.5f);
ImVec2 icon_p1(icon_p0.x + icon_size, icon_p0.y + icon_size);
dl->AddImageRounded(data.icon, icon_p0, icon_p1,
ImVec2(0, 0), ImVec2(1, 1),
IM_COL32_WHITE, 6.0f);
text_left = icon_p1.x + 10.0f;
}
ImVec2 title_pos = ImVec2(text_left, p0.y + pad_y);
ImU32 title_col = IM_COL32(245, 245, 250, 255);
if (data.title) {
dl->AddText(title_pos, title_col, data.title);
}
if (data.description && data.description[0] != '\0') {
ImVec2 desc_pos = ImVec2(text_left,
title_pos.y + ImGui::GetTextLineHeight() + 4.0f);
ImU32 desc_col = IM_COL32(195, 200, 210, 230);
float wrap_w = (p1.x - 8.0f) - text_left;
if (wrap_w < 20.0f) wrap_w = 20.0f;
dl->AddText(NULL, 0.0f, desc_pos, desc_col,
data.description, NULL, wrap_w);
}
dl->PopClipRect();
ImGui::PopID();
return clicked;
}
} // namespace fn_ui
+24
View File
@@ -0,0 +1,24 @@
#pragma once
#include <imgui.h>
namespace fn_ui {
struct AppCardData {
const char* id; // unique ImGui ID within the parent window
const char* title; // bold display name (single line)
const char* description; // optional second line; may be nullptr or ""
ImU32 accent; // accent color (IM_COL32 / hex parsed)
ImTextureID icon; // optional icon texture (0 = no icon, layout still works)
};
// Renders a card-shaped clickable area with:
// - rounded translucent accent background
// - solid accent stripe on the left edge
// - title on top, wrapped description below
// Uses InvisibleButton for hit-testing + ImDrawList for visuals so it does
// not inherit ImGui::Button colors.
//
// Returns true on the frame the user clicks the card.
bool app_card(const AppCardData& data, ImVec2 size);
} // namespace fn_ui
+80
View File
@@ -0,0 +1,80 @@
---
name: app_card
kind: component
lang: cpp
domain: core
version: "1.1.0"
purity: pure
signature: "bool fn_ui::app_card(const fn_ui::AppCardData& data, ImVec2 size)"
description: "Clickable card widget with accent stripe, optional left-side icon (ImTextureID), title and wrapped description. Inner ClipRect prevents description overflow when text exceeds card height. Does NOT inherit ImGui::Button colors — uses InvisibleButton + ImDrawList so visuals are fully driven by accent."
tags: [imgui, ui, card, button, launcher, hub]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [imgui]
tested: false
tests: []
test_file_path: ""
file_path: "cpp/functions/core/app_card.cpp"
framework: imgui
params:
- name: data
desc: "AppCardData {id, title, description, accent}. id must be unique within the parent window. description may be nullptr or empty."
- name: size
desc: "Card size in pixels (width x height). Typical: ImVec2(280, 96)."
output: "true the frame the user clicks the card, false otherwise."
notes: "Consumed by apps/app_hub_launcher. Pattern: caller loops over a vector of cards in a grid using SameLine + Dummy for row spacing."
---
# app_card
Clickable card widget for app/launcher grids. Visual identity driven by an accent color (semi-transparent fill + solid stripe + accent border) so it does NOT look like a default `ImGui::Button` (no blue). Uses `InvisibleButton` for hit-testing and `ImDrawList` for the visuals — no `ImGui::Button` is involved.
## Ejemplo
```cpp
#include "core/app_card.h"
fn_ui::AppCardData card;
card.id = "graph_explorer";
card.title = "Graph Explorer";
card.description = "Visor de grafos GPU-accelerated";
card.accent = IM_COL32(0x08, 0x91, 0xc2, 255); // #0891c2
if (fn_ui::app_card(card, ImVec2(280, 96))) {
// launch the app
}
```
Grid layout (N cards per row):
```cpp
float card_w = 280.0f, card_h = 96.0f, spacing = 12.0f;
int cols = std::max(1, (int)((ImGui::GetContentRegionAvail().x + spacing) / (card_w + spacing)));
int shown = 0;
for (auto& app : apps) {
if (shown % cols != 0) ImGui::SameLine(0.0f, spacing);
fn_ui::AppCardData c{app.id.c_str(), app.title.c_str(), app.desc.c_str(), app.accent};
if (fn_ui::app_card(c, ImVec2(card_w, card_h))) launch(app);
++shown;
if (shown % cols == 0) ImGui::Dummy(ImVec2(0.0f, spacing - 4.0f));
}
```
## Cuando usarla
Cuando necesites un grid/lista de "cards" clicables (launchers, dashboards de modulos, selectores de proyecto) y quieras que la identidad visual venga de un accent color por card en vez de los azules por defecto de `ImGui::Button`. Si solo quieres un boton simple con texto, usa `ImGui::Button` normal.
## Gotchas
- `data.id` debe ser unico dentro del padre — colision = un solo card recibe el click.
- La descripcion se renderiza con wrap automatico; si `size.y` es muy pequeno el texto se sale por debajo (no clipea). Ajusta `size.y` a 90-110 px para 2-3 lineas de wrap.
- Pinta sobre `ImGui::GetWindowDrawList()` — debe llamarse dentro de una ventana ImGui activa.
- El color `data.accent` debe llevar alpha 255; las transparencias para fondo/border/hover las calcula el componente internamente.
## Capability growth log
v1.1.0 (2026-05-17) — Optional `icon` (ImTextureID) param renders left-side thumbnail; PushClipRect contains description overflow.
v1.0.0 (2026-05-17) — Initial. Extracted from inline rendering in `apps/app_hub_launcher/main.cpp`.
+96
View File
@@ -0,0 +1,96 @@
# Taxonomia canonica — dev/issues + dev/flows
Fuente de verdad para los campos del frontmatter YAML de issues y flows. Cualquier valor fuera de las allowlists hace fallar `fn doctor issues` y el filtrado de `dev_console`.
## Dominios (allowlist)
| Tag | Que entra |
|---|---|
| `meta` | telemetria, hooks, bucle reactivo, MCP, loops autonomos, taxonomia, dev_console |
| `cpp-stack` | apps C++/ImGui + primitivos GFX, GL, ImPlot, tablas, paneles, app shell |
| `kanban` | app `kanban` (features, stickers, columnas, reports, daily summary) |
| `trading` | roadmap trading (market data, broker, portfolio, backtester, journal, ...) |
| `gamedev` | roadmap gamedev (SDL3, sokol, runtime, asset pipeline, build targets) |
| `osint` | ODR + OSINT + graph_explorer |
| `data-ingest` | extractores, navegator, data_factory, dag_engine, recipes |
| `registry-quality` | auditorias, drift, registry-first refactors, uses_functions, migrations |
| `notify` | Matrix, Telegram, email, slack |
| `imagegen` | stable-diffusion, imagegen_studio, sd-cpp |
| `apps-infra` | launcher, datahub, app shell shared infra, app locations |
| `dev-ux` | fricion del agente (output mudo, paths rotos, gradle_run, slash commands) |
| `deploy` | deploy_server, systemd, VPS, rsync, webhooks |
| `frontend` | React + Vite + Mantine + hooks + visualizaciones web |
| `mcp` | MCP server, tools del registry, integracion Claude Code |
| `browser` | Chrome, CDP, navegator helpers |
| `telemetry` | call_monitor, function_stats, observability |
| `docs` | reglas, plantillas, ADRs, capability pages |
## Tipos
| Tag | Que es |
|---|---|
| `app` | crear app entera (apps/ o cpp/apps/) |
| `feature` | accion concreta, una rama corta |
| `bugfix` | corregir defecto |
| `refactor` | reescribir sin cambiar comportamiento |
| `chore` | auditoria, indexado, limpieza, migracion |
| `docs` | solo documentacion |
| `spike` | exploracion timeboxed |
| `epic` | roadmap con sub-issues hijo (NNNN + NNNNa, NNNNb, ...) |
| `infra` | sub-piezas de un epic |
| `planning` | issue de planificacion (no entrega codigo) |
## Estados
| Tag | Que significa |
|---|---|
| `pendiente` | no arrancado |
| `in-progress` | rama abierta + commits |
| `bloqueado` | espera dep no resuelta |
| `completado` | merge a master + DoD verde + archivado |
| `deferred` | fuera de scope actual, conservado |
## Scopes
| Tag | Que toca |
|---|---|
| `registry-only` | solo `functions/`, `types/`, `python/functions/`, etc. |
| `app-scoped` | una app concreta |
| `multi-app` | atraviesa >=2 apps |
| `cross-stack` | toca C++ + Go + Py + Frontend o equivalente |
## Prioridades
| Tag | Que significa |
|---|---|
| `alta` | bloquea otros items, alto impacto |
| `media` | importante pero no critico |
| `baja` | nice-to-have |
## Flow patterns (solo dev/flows)
| Pattern | Que es |
|---|---|
| `smoke-cron` | pipeline programado de prueba (HN, AEMET) |
| `prod-data` | caso real con datos personales/sensibles |
| `event-driven` | webhook -> fanout/notify |
| `manual-deep` | humano dispara, multi-paso interactivo |
| `gitops` | estado de servicio -> codigo versionado |
| `realtime-loop` | bucle continuo sin trigger discreto |
## Convenciones de uso
- `domain` es lista (multi-tag permitido). `scope`, `type`, `priority`, `status` son escalares.
- Issue sin `type` o `priority` -> warning en `fn doctor issues` + bloquea `done`.
- Issue con dominio fuera de la lista -> error en validador.
- Roadmaps usan `type: epic` con sub-issues `NNNNa`, `NNNNb`, ... que son `type: infra` o `feature`.
- Issue cerrado vive en `dev/issues/completed/` con `status: completado`.
## Como evolucionar la taxonomia
Anadir dominio nuevo requiere:
1. PR a este archivo + a `python/functions/pipelines/migrate_issues_frontmatter.py` (heuristica).
2. Justificacion: >=3 issues actuales o previstos que encajen.
3. Frontera neta con dominios vecinos.
NO crear dominios para 1 issue suelto -> usa `tags:` libre.
@@ -1,3 +1,19 @@
---
id: "0027"
title: "C++ gl_compute_shader + gl_pingpong_fbo + DAG node Compute"
status: pendiente
type: feature
domain:
- cpp-stack
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0027 — C++ gl_compute_shader + gl_pingpong_fbo + DAG node Compute
## APP Metadata
+17
View File
@@ -1,3 +1,20 @@
---
id: "0030"
title: "C++ audio reactivo (capture + FFT + uniform feed + viz)"
status: pendiente
type: feature
domain:
- cpp-stack
- frontend
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0030 — C++ audio reactivo (capture + FFT + uniform feed + viz)
## APP Metadata
+16
View File
@@ -1,3 +1,19 @@
---
id: "0033"
title: "C++ http_inspector + websocket_client"
status: pendiente
type: feature
domain:
- cpp-stack
scope: multi-app
priority: baja
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0033 — C++ http_inspector + websocket_client
## APP Metadata
+16
View File
@@ -1,3 +1,19 @@
---
id: "0035"
title: "C++ map_tiles (slippy map OSM)"
status: pendiente
type: feature
domain:
- cpp-stack
scope: multi-app
priority: baja
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0035 — C++ map_tiles (slippy map OSM)
## APP Metadata
@@ -1,3 +1,19 @@
---
id: "0036"
title: "C++ image_canvas + webcam_texture"
status: pendiente
type: feature
domain:
- cpp-stack
scope: multi-app
priority: baja
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0036 — C++ image_canvas + webcam_texture
## APP Metadata
@@ -1,3 +1,18 @@
---
id: "0051"
title: "Funciones pendientes del pipeline de extraccion (NER+RE+OpenIE)"
status: pendiente
type: feature
domain: []
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0051 — Funciones pendientes del pipeline de extraccion (NER+RE+OpenIE)
## APP Metadata
@@ -1,3 +1,20 @@
---
id: "0054"
title: "deploy_server: refactor registry-first (SSH/systemd/rsync/health/docker-compose)"
status: pendiente
type: refactor
domain:
- registry-quality
- deploy
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0054 — deploy_server: refactor registry-first (SSH/systemd/rsync/health/docker-compose)
## APP Metadata
@@ -1,3 +1,19 @@
---
id: "0055"
title: "docker_tui: refactor para usar funciones docker_* del registry"
status: pendiente
type: refactor
domain:
- registry-quality
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0055 — docker_tui: refactor para usar funciones docker_* del registry
## APP Metadata
@@ -1,3 +1,19 @@
---
id: "0056"
title: "audit_uses_functions: detectar imports Python anidados (`from pkg.subpkg import X`)"
status: pendiente
type: chore
domain:
- registry-quality
scope: registry-only
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0056 — audit_uses_functions: detectar imports Python anidados (`from pkg.subpkg import X`)
## APP Metadata
+16
View File
@@ -1,3 +1,19 @@
---
id: "0057"
title: "audit_uses_functions: mejorar deteccion de simbolos Go con abreviaturas"
status: pendiente
type: chore
domain:
- registry-quality
scope: registry-only
priority: baja
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0057 — audit_uses_functions: mejorar deteccion de simbolos Go con abreviaturas
## APP Metadata
@@ -1,3 +1,20 @@
---
id: "0058"
title: "kanban: sync uses_functions cuando termine WIP en curso"
status: pendiente
type: docs
domain:
- kanban
- registry-quality
scope: multi-app
priority: baja
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0058 — kanban: sync uses_functions cuando termine WIP en curso
## APP Metadata
+16
View File
@@ -1,3 +1,19 @@
---
id: "0059"
title: "Resolver doble tracking de `apps/*/app.md` (fn_registry + sub-repo)"
status: pendiente
type: infra
domain:
- registry-quality
scope: app-scoped
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0059 — Resolver doble tracking de `apps/*/app.md` (fn_registry + sub-repo)
## APP Metadata
@@ -1,3 +1,18 @@
---
id: "0060"
title: "`fn doctor secrets`: scan de secrets en TODOS los repos"
status: pendiente
type: feature
domain: []
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0060 — `fn doctor secrets`: scan de secrets en TODOS los repos
## APP Metadata
@@ -1,3 +1,19 @@
---
id: "0061"
title: "Integrar `notify_telegram` en deploy_server + bucle reactivo"
status: pendiente
type: feature
domain:
- notify
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0061 — Integrar `notify_telegram` en deploy_server + bucle reactivo
## APP Metadata
+16
View File
@@ -1,3 +1,19 @@
---
id: "0063"
title: "kanban: sistema de stickers (emojis) sobre cards"
status: pendiente
type: feature
domain:
- kanban
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0063 — kanban: sistema de stickers (emojis) sobre cards
## APP Metadata
@@ -1,11 +1,22 @@
---
id: 0065
title: Extraer jobs system de graph_explorer al registry (jobs_pool + cache + subprocess worker)
status: pending
priority: high
id: "53"
title: "Extraer jobs system de graph_explorer al registry (jobs_pool + cache + subprocess worker)"
status: pendiente
type: feature
domain:
- registry-quality
scope: registry-only
priority: alta
depends: []
blocks:
- "54"
related:
- "22"
- "23"
- "0028"
created: 2026-05-09
blocks: [0066]
related: [0026, 0027, 0028]
updated: 2026-05-17
tags: []
---
## Contexto
@@ -1,10 +1,17 @@
---
id: 0066
title: online_data_recopilation — odr_console MVP (lanzador GUI + 5-pasos + 1 collector)
status: pending
priority: high
id: "54"
title: "online_data_recopilation — odr_console MVP (lanzador GUI + 5-pasos + 1 collector)"
status: pendiente
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-09
blocked_by: [0065]
updated: 2026-05-17
tags: []
---
## Objetivo
+15 -21
View File
@@ -1,26 +1,20 @@
---
id: 0067
title: Roadmap de prereqs — issues de osint_graph que odr_console necesita antes/durante MVP
status: pending
priority: high
id: "55"
title: "Roadmap de prereqs — issues de osint_graph que odr_console necesita antes/durante MVP"
status: pendiente
type: epic
domain:
- osint
scope: cross-stack
priority: alta
depends: []
blocks: []
related:
- "53"
- "54"
created: 2026-05-09
related: [0065, 0066]
references: [
"projects/osint_graph/apps/graph_explorer/issues/0033-multilang-dispatcher-embedded-python.md",
"projects/osint_graph/apps/graph_explorer/issues/0033c-fn-check-vendored.md",
"projects/osint_graph/apps/graph_explorer/issues/0033d-indexer-python-runtime-fields.md",
"projects/osint_graph/apps/graph_explorer/issues/0033e-compile-skill-orchestration.md",
"projects/osint_graph/apps/graph_explorer/issues/0038-browser-launch-cdp-control.md",
"projects/osint_graph/apps/graph_explorer/issues/0039-cookie-session-manager.md",
"projects/osint_graph/apps/graph_explorer/issues/0040-multi-profile-management.md",
"projects/osint_graph/apps/graph_explorer/issues/0029-enrichers-cdp.md",
"projects/osint_graph/apps/graph_explorer/issues/0030-deep-enrich-macro.md",
"projects/osint_graph/apps/graph_explorer/issues/0021-command-palette.md",
"projects/osint_graph/apps/graph_explorer/issues/0034-port-system-enrichers-to-go.md",
"projects/osint_graph/apps/graph_explorer/issues/0014-browser-extension.md",
"projects/osint_graph/apps/graph_explorer/issues/0012-http-ingest-endpoint.md",
"projects/osint_graph/apps/graph_explorer/issues/0017-gx-cli.md"
]
updated: 2026-05-17
tags: []
---
## Objetivo
+16 -6
View File
@@ -1,11 +1,21 @@
---
id: 0068
title: Cerrar bucle reactivo — fn-analizador (fase 4) y fn-mejorador (fase 5) con contrato e2e_checks
status: done
closed: 2026-05-14
priority: high
id: "0068"
title: "Cerrar bucle reactivo — fn-analizador (fase 4) y fn-mejorador (fase 5) con contrato e2e_checks"
status: completado
type: feature
domain:
- meta
scope: multi-app
priority: alta
depends: []
blocks: []
related:
- "22"
- "23"
- "0028"
created: 2026-05-09
related: [0026, 0027, 0028]
updated: 2026-05-17
tags: []
---
## Cierre 2026-05-14
@@ -1,12 +1,23 @@
---
id: 0069
title: Bucle autonomo de subagentes — completar y mejorar tareas sin intervencion humana
status: done
closed: 2026-05-15
priority: medium
id: "0069"
title: "Bucle autonomo de subagentes — completar y mejorar tareas sin intervencion humana"
status: completado
type: feature
domain:
- meta
scope: multi-app
priority: media
depends:
- "0068"
blocks: []
related:
- "22"
- "23"
- "0028"
- "0085"
created: 2026-05-09
depends_on: [0068]
related: [0026, 0027, 0028, 0085]
updated: 2026-05-17
tags: []
---
## Cierre 2026-05-15
@@ -1,11 +1,18 @@
---
id: 0070
title: Funciones globales del registry para control de navegador (find by text, click by text, scroll, HAR, jsonld, opengraph, ...)
status: pending
priority: medium
id: "56"
title: "Funciones globales del registry para control de navegador (find by text, click by text, scroll, HAR, jsonld, opengraph, ...)"
status: pendiente
type: epic
domain:
- browser
scope: cross-stack
priority: media
depends: []
blocks: []
related: []
created: 2026-05-09
related_apps: [navegator_dashboard, graph_explorer]
related_issues_app: [navegator/0001, graph_explorer/0038]
updated: 2026-05-17
tags: []
---
## Contexto
@@ -1,11 +1,19 @@
---
id: 0071
title: Extraer paneles ImGui reutilizables de las apps C++ a cpp/functions/ — roadmap
status: pending
priority: medium
id: "57"
title: "Extraer paneles ImGui reutilizables de las apps C++ a cpp/functions/ — roadmap"
status: pendiente
type: epic
domain:
- cpp-stack
- registry-quality
scope: cross-stack
priority: media
depends: []
blocks: []
related: []
created: 2026-05-09
related_apps: [graph_explorer, registry_dashboard, odr_console, navegator_dashboard]
related_issues_app: [navegator/0001]
updated: 2026-05-17
tags: []
---
## Contexto
+13 -6
View File
@@ -1,12 +1,19 @@
---
id: 0071a
title: Extraer `claude_chat_panel` a cpp/functions/core/ (sub-issue de 0071)
status: pending
id: "0071a"
title: "Extraer `claude_chat_panel` a cpp/functions/core/ (sub-issue de 0071)"
status: pendiente
type: feature
domain:
- registry-quality
scope: registry-only
priority: alta
depends:
- "0071f"
blocks: []
related: []
created: 2026-05-10
parent: 0071
related_apps: [graph_explorer, navegator_dashboard]
depends_on: [0071f]
updated: 2026-05-17
tags: []
---
## Contexto
+13 -7
View File
@@ -1,13 +1,19 @@
---
id: 0071b
title: Extraer `jobs_queue_panel` a cpp/functions/core/ (sub-issue de 0071)
status: pending
id: "0071b"
title: "Extraer `jobs_queue_panel` a cpp/functions/core/ (sub-issue de 0071)"
status: pendiente
type: feature
domain:
- registry-quality
scope: registry-only
priority: media
depends:
- "0071f"
blocks: []
related: []
created: 2026-05-10
parent: 0071
related_apps: [graph_explorer, odr_console, navegator_dashboard]
related_issues: [0065]
depends_on: [0071f]
updated: 2026-05-17
tags: []
---
## Contexto
@@ -1,11 +1,18 @@
---
id: 0071f
title: Extraer `subprocess_streamer` a cpp/functions/core/ (sub-issue de 0071)
status: pending
id: "0071f"
title: "Extraer `subprocess_streamer` a cpp/functions/core/ (sub-issue de 0071)"
status: pendiente
type: feature
domain:
- registry-quality
scope: registry-only
priority: media
depends: []
blocks: []
related: []
created: 2026-05-10
parent: 0071
related_apps: [graph_explorer]
updated: 2026-05-17
tags: []
---
## Contexto
+12 -5
View File
@@ -1,11 +1,18 @@
---
id: 0071g
title: Extraer `app_db_init` a cpp/functions/core/ (sub-issue de 0071, Tier 4)
status: pending
id: "0071g"
title: "Extraer `app_db_init` a cpp/functions/core/ (sub-issue de 0071, Tier 4)"
status: pendiente
type: feature
domain:
- registry-quality
scope: registry-only
priority: media
depends: []
blocks: []
related: []
created: 2026-05-10
parent: 0071
related_apps: [graph_explorer, navegator_dashboard, kanban, deploy_server, registry_dashboard]
updated: 2026-05-17
tags: []
---
## Contexto
+15 -6
View File
@@ -1,11 +1,20 @@
---
id: 0072
title: Stack gamedev ligero multi-plataforma + crypto (roadmap)
status: pending
priority: medium
id: "58"
title: "Stack gamedev ligero multi-plataforma + crypto (roadmap)"
status: pendiente
type: epic
domain:
- gamedev
scope: cross-stack
priority: media
depends: []
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, roadmap]
related_issues: [0072a, 0072b, 0072c, 0072d, 0072e, 0072f, 0072g, 0072h, 0072i, 0072j, 0072k, 0072l]
updated: 2026-05-17
tags:
- gamedev
- roadmap
---
## Contexto
@@ -1,12 +1,22 @@
---
id: 0072a
title: gamedev — smoke SDL3 + sokol_gfx + ImGui (PC + WASM)
status: pending
priority: high
id: "0072a"
title: "gamedev — smoke SDL3 + sokol_gfx + ImGui (PC + WASM)"
status: pendiente
type: feature
domain:
- cpp-stack
- gamedev
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, cpp, wasm]
parent_issue: 0072
related_apps: [engine_smoke]
updated: 2026-05-17
tags:
- gamedev
- cpp
- wasm
---
## Objetivo
+16 -7
View File
@@ -1,12 +1,21 @@
---
id: 0072b
title: gamedev — runtime nucleo (sprite batcher, audio, input, game loop)
status: pending
priority: high
id: "0072b"
title: "gamedev — runtime nucleo (sprite batcher, audio, input, game loop)"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: alta
depends:
- "0072a"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, cpp]
parent_issue: 0072
depends_on: [0072a]
updated: 2026-05-17
tags:
- gamedev
- cpp
---
## Objetivo
+17 -7
View File
@@ -1,12 +1,22 @@
---
id: 0072c
title: gamedev — asset pipeline (atlas packer, MSDF fonts, tilemap, shader translate)
status: pending
priority: high
id: "0072c"
title: "gamedev — asset pipeline (atlas packer, MSDF fonts, tilemap, shader translate)"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: alta
depends:
- "0072b"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, cpp, assets]
parent_issue: 0072
depends_on: [0072b]
updated: 2026-05-17
tags:
- gamedev
- cpp
- assets
---
## Objetivo
@@ -1,12 +1,23 @@
---
id: 0072d
title: gamedev — WASM build pipeline + size budget
status: pending
priority: high
id: "0072d"
title: "gamedev — WASM build pipeline + size budget"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: alta
depends:
- "0072a"
- "0072b"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, wasm, infra]
parent_issue: 0072
depends_on: [0072a, 0072b]
updated: 2026-05-17
tags:
- gamedev
- wasm
- infra
---
## Objetivo
+19 -7
View File
@@ -1,12 +1,24 @@
---
id: 0072e
title: gamedev — bridge crypto Web3 (wallets, sign tx) via JS interop en WASM
status: pending
priority: high
id: "0072e"
title: "gamedev — bridge crypto Web3 (wallets, sign tx) via JS interop en WASM"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: alta
depends:
- "0072a"
- "0072d"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, wasm, crypto, web3]
parent_issue: 0072
depends_on: [0072a, 0072d]
updated: 2026-05-17
tags:
- gamedev
- wasm
- crypto
- web3
---
## Objetivo
@@ -1,12 +1,23 @@
---
id: 0072f
title: gamedev — crypto on-chain (NFT assets, payments, leaderboards firmadas)
status: pending
priority: medium
id: "0072f"
title: "gamedev — crypto on-chain (NFT assets, payments, leaderboards firmadas)"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: media
depends:
- "0072e"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, crypto, web3, nft]
parent_issue: 0072
depends_on: [0072e]
updated: 2026-05-17
tags:
- gamedev
- crypto
- web3
- nft
---
## Objetivo
+18 -7
View File
@@ -1,12 +1,23 @@
---
id: 0072g
title: gamedev — Android build (NDK + touch input + virtual gamepad + WalletConnect)
status: pending
priority: medium
id: "0072g"
title: "gamedev — Android build (NDK + touch input + virtual gamepad + WalletConnect)"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: media
depends:
- "0072b"
- "0072c"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, android, mobile]
parent_issue: 0072
depends_on: [0072b, 0072c]
updated: 2026-05-17
tags:
- gamedev
- android
- mobile
---
## Objetivo
+18 -7
View File
@@ -1,12 +1,23 @@
---
id: 0072h
title: gamedev — iOS build (Xcode + Metal via sokol + safe area + WalletConnect)
status: pending
priority: medium
id: "0072h"
title: "gamedev — iOS build (Xcode + Metal via sokol + safe area + WalletConnect)"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: media
depends:
- "0072b"
- "0072c"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, ios, mobile]
parent_issue: 0072
depends_on: [0072b, 0072c]
updated: 2026-05-17
tags:
- gamedev
- ios
- mobile
---
## Objetivo
+19 -7
View File
@@ -1,12 +1,24 @@
---
id: 0072i
title: gamedev — editor visual `game_editor` (scene tree, asset browser, inspector)
status: pending
priority: medium
id: "0072i"
title: "gamedev — editor visual `game_editor` (scene tree, asset browser, inspector)"
status: pendiente
type: feature
domain:
- gamedev
scope: app-scoped
priority: media
depends:
- "0072b"
- "0072c"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, cpp, editor, tooling]
parent_issue: 0072
depends_on: [0072b, 0072c]
updated: 2026-05-17
tags:
- gamedev
- cpp
- editor
- tooling
---
## Objetivo
+17 -7
View File
@@ -1,12 +1,22 @@
---
id: 0072j
title: gamedev — physics 2D (Box2D integration + funciones registry)
status: pending
priority: medium
id: "0072j"
title: "gamedev — physics 2D (Box2D integration + funciones registry)"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: media
depends:
- "0072b"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, cpp, physics]
parent_issue: 0072
depends_on: [0072b]
updated: 2026-05-17
tags:
- gamedev
- cpp
- physics
---
## Objetivo
+20 -8
View File
@@ -1,13 +1,25 @@
---
id: 0072k
title: gamedev — demo plataformero `engine_demo` (referencia stack completo)
status: pending
priority: high
id: "0072k"
title: "gamedev — demo plataformero `engine_demo` (referencia stack completo)"
status: pendiente
type: feature
domain:
- gamedev
scope: multi-app
priority: alta
depends:
- "0072b"
- "0072c"
- "0072d"
- "0072j"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, cpp, demo]
parent_issue: 0072
depends_on: [0072b, 0072c, 0072d, 0072j]
related_issues: [0072e, 0072f, 0072g, 0072h]
updated: 2026-05-17
tags:
- gamedev
- cpp
- demo
---
## Objetivo
+16 -6
View File
@@ -1,12 +1,22 @@
---
id: 0072l
title: gamedev — scripting opcional (wren / lua / hot reload C++ dylib)
id: "0072l"
title: "gamedev — scripting opcional (wren / lua / hot reload C++ dylib)"
status: deferred
priority: low
type: feature
domain:
- gamedev
scope: multi-app
priority: baja
depends:
- "0072k"
blocks: []
related: []
created: 2026-05-10
tags: [gamedev, cpp, scripting]
parent_issue: 0072
depends_on: [0072k]
updated: 2026-05-17
tags:
- gamedev
- cpp
- scripting
---
## Objetivo
@@ -1,10 +1,18 @@
---
id: 0076
title: gradle_run no detecta SDK en $HOME/android-sdk (donde lo deja install_android_sdk)
status: pending
priority: medium
id: "62"
title: "gradle_run no detecta SDK en $HOME/android-sdk (donde lo deja install_android_sdk)"
status: pendiente
type: feature
domain:
- dev-ux
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-10
related_functions: [gradle_run_bash_infra, install_android_sdk_bash_infra]
updated: 2026-05-17
tags: []
---
## Sintoma
+13 -5
View File
@@ -1,10 +1,18 @@
---
id: 0077
title: fn run <bash_function> no propaga stdout/stderr al usuario
status: pending
priority: medium
id: "63"
title: "fn run <bash_function> no propaga stdout/stderr al usuario"
status: pendiente
type: feature
domain:
- dev-ux
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-10
related_components: [cmd/fn, fn run dispatcher]
updated: 2026-05-17
tags: []
---
## Sintoma
+13 -5
View File
@@ -1,11 +1,19 @@
---
id: 0082
title: Compilar binario `sd` (stable-diffusion.cpp) para sdcli_generate_go_ml
id: "0082"
title: "Compilar binario `sd` (stable-diffusion.cpp) para sdcli_generate_go_ml"
status: pendiente
priority: media
created: 2026-05-13
type: feature
related_components: [functions/ml/sdcli_generate.go, functions/ml/sdcli_resolve_binary.go, projects/imagegen]
domain:
- cpp-stack
- imagegen
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-13
updated: 2026-05-17
tags: []
---
## Objetivo
@@ -1,11 +1,18 @@
---
id: 0083
title: imagegen — notebook 02 validacion cruzada diffusers vs sdcpp_python
id: "0083"
title: "imagegen — notebook 02 validacion cruzada diffusers vs sdcpp_python"
status: pendiente
priority: alta
created: 2026-05-13
type: feature
related_components: [projects/imagegen/analysis/spike_diffusers_vs_sdcpp]
domain:
- imagegen
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-13
updated: 2026-05-17
tags: []
---
## Objetivo
+12 -5
View File
@@ -1,11 +1,18 @@
---
id: 0084
title: imagegen_studio — app Go binario producto (Fase 3 plan stack)
id: "0084"
title: "imagegen_studio — app Go binario producto (Fase 3 plan stack)"
status: pendiente
priority: media
created: 2026-05-13
type: feature
related_components: [functions/ml/sdcli_*.go, functions/ml/generation_config_go_ml, projects/imagegen]
domain:
- imagegen
scope: app-scoped
priority: media
depends: []
blocks: []
related: []
created: 2026-05-13
updated: 2026-05-17
tags: []
---
## Objetivo
@@ -1,11 +1,20 @@
---
id: 0085
title: Estandarizar llamadas a funciones del registry desde Claude + app de monitorizacion de uso
status: done
closed: 2026-05-15
priority: high
id: "0085"
title: "Estandarizar llamadas a funciones del registry desde Claude + app de monitorizacion de uso"
status: completado
type: feature
domain:
- meta
scope: multi-app
priority: alta
depends: []
blocks: []
related:
- "0068"
- "0069"
created: 2026-05-13
related: [0068, 0069]
updated: 2026-05-17
tags: []
---
## Cierre 2026-05-15
@@ -1,11 +1,20 @@
---
id: 0086
title: Refactor incremental de CLAUDE.md — delegacion agresiva a fn-constructor + capability groups por tags
status: done
closed: 2026-05-14
priority: high
id: "0086"
title: "Refactor incremental de CLAUDE.md — delegacion agresiva a fn-constructor + capability groups por tags"
status: completado
type: feature
domain:
- meta
scope: multi-app
priority: alta
depends: []
blocks: []
related:
- "0069"
- "0085"
created: 2026-05-13
related: [0069, 0085]
updated: 2026-05-17
tags: []
---
## Cierre 2026-05-14
@@ -1,3 +1,19 @@
---
id: "0087"
title: "Capability Discovery Acceleration"
status: pendiente
type: feature
domain:
- meta
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0087 — Capability Discovery Acceleration
**Status:** done
+12 -4
View File
@@ -1,10 +1,18 @@
---
id: "0088"
title: "kanban: requester input vacío + navegación con teclado"
status: open
created_at: 2026-05-14
priority: medium
app: kanban
status: pendiente
type: feature
domain:
- kanban
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
## Problema
@@ -1,3 +1,19 @@
---
id: "0088"
title: "Trading & Skill Management Roadmap"
status: pendiente
type: epic
domain:
- trading
scope: cross-stack
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088 — Trading & Skill Management Roadmap
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0088a"
title: "Trading: project scaffolding"
status: pendiente
type: feature
domain:
- trading
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088a — Trading: project scaffolding
**Status:** pendiente
@@ -1,3 +1,20 @@
---
id: "0088b"
title: "Trading: capability group `market_data`"
status: pendiente
type: feature
domain:
- trading
- meta
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088b — Trading: capability group `market_data`
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0088c"
title: "Trading: broker interface + adapter paper"
status: pendiente
type: feature
domain:
- trading
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088c — Trading: broker interface + adapter paper
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0088d"
title: "Trading: app `portfolio_tracker` (ledger INSERT-only)"
status: pendiente
type: feature
domain:
- trading
scope: app-scoped
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088d — Trading: app `portfolio_tracker` (ledger INSERT-only)
**Status:** pendiente
@@ -1,3 +1,20 @@
---
id: "0088e"
title: "Trading: capability group `strategy` + Strategy contract"
status: pendiente
type: feature
domain:
- trading
- meta
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088e — Trading: capability group `strategy` + Strategy contract
**Status:** pendiente
@@ -1,3 +1,20 @@
---
id: "0088f"
title: "Trading: capability group `risk` + kill_switch"
status: pendiente
type: feature
domain:
- trading
- meta
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088f — Trading: capability group `risk` + kill_switch
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0088g"
title: "Trading: app `backtester`"
status: pendiente
type: feature
domain:
- trading
scope: app-scoped
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088g — Trading: app `backtester`
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0088h"
title: "Trading: app `live_runner` (service, paper-first, broker real behind flag)"
status: pendiente
type: feature
domain:
- trading
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088h — Trading: app `live_runner` (service, paper-first, broker real behind flag)
**Status:** pendiente
+16
View File
@@ -1,3 +1,19 @@
---
id: "0088i"
title: "Trading: app `trading_journal` (reflection log)"
status: pendiente
type: feature
domain:
- trading
scope: app-scoped
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088i — Trading: app `trading_journal` (reflection log)
**Status:** pendiente
@@ -1,3 +1,20 @@
---
id: "0088j"
title: "Trading: wiring del bucle reactivo (assertions + proposals)"
status: pendiente
type: feature
domain:
- trading
- frontend
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088j — Trading: wiring del bucle reactivo (assertions + proposals)
**Status:** pendiente
+12 -4
View File
@@ -1,10 +1,18 @@
---
id: "0089"
title: "kanban: tiempo maximo por columna con borde rojo"
status: open
created_at: 2026-05-14
priority: medium
app: kanban
status: pendiente
type: feature
domain:
- kanban
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
## Problema
+12 -4
View File
@@ -1,10 +1,18 @@
---
id: "0090"
title: "kanban: Seleccionar Aleatorio en columna con animacion de ruleta"
status: open
created_at: 2026-05-14
priority: medium
app: kanban
status: pendiente
type: feature
domain:
- kanban
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
## Problema
+12 -4
View File
@@ -1,10 +1,18 @@
---
id: "0091"
title: "kanban: drag-aware dropzones para abrir/cerrar sidebar"
status: open
created_at: 2026-05-14
priority: medium
app: kanban
status: pendiente
type: feature
domain:
- kanban
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
## Problema
+12 -4
View File
@@ -1,10 +1,18 @@
---
id: "0092"
title: "kanban: archivo automatico para cards en columnas Done con +30 dias"
status: open
created_at: 2026-05-14
priority: medium
app: kanban
status: pendiente
type: feature
domain:
- kanban
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
## Problema
+12 -4
View File
@@ -1,10 +1,18 @@
---
id: "0093"
title: "kanban: reporte diario al pulsar numero del dia en el calendario"
status: open
created_at: 2026-05-14
priority: medium
app: kanban
status: pendiente
type: feature
domain:
- kanban
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
## Problema
+12 -4
View File
@@ -1,10 +1,18 @@
---
id: "0094"
title: "kanban: bocadillo del agente + PDF descargable en reporte diario"
status: open
created_at: 2026-05-14
priority: medium
app: kanban
status: pendiente
type: feature
domain:
- kanban
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
## Problema
@@ -1,3 +1,20 @@
---
id: "0095"
title: "Frontend C++ ImGui para `dag_engine`"
status: pendiente
type: feature
domain:
- cpp-stack
- frontend
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0095 — Frontend C++ ImGui para `dag_engine`
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0096"
title: "Estandarizar ubicacion de apps: fuera de carpetas por lenguaje"
status: pendiente
type: feature
domain:
- apps-infra
scope: app-scoped
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0096 — Estandarizar ubicacion de apps: fuera de carpetas por lenguaje
**Status:** pendiente
+16
View File
@@ -1,3 +1,19 @@
---
id: "0097"
title: "data_factory app (Factorio-style data pipeline)"
status: pendiente
type: feature
domain:
- data-ingest
scope: app-scoped
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0097 — data_factory app (Factorio-style data pipeline)
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0098"
title: "Navegator extractions enhancement (Pick + Network rows + AutoExtract + data_factory bridge)"
status: pendiente
type: feature
domain:
- data-ingest
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0098 — Navegator extractions enhancement (Pick + Network rows + AutoExtract + data_factory bridge)
**Status:** pendiente
+16
View File
@@ -1,3 +1,19 @@
---
id: "0099"
title: "datahub app (launcher central para todas las apps)"
status: pendiente
type: feature
domain:
- apps-infra
scope: app-scoped
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0099 — datahub app (launcher central para todas las apps)
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0100"
title: "Migrar frontmatter inline a YAML canonico en dev/issues/"
status: pendiente
type: chore
domain:
- registry-quality
scope: registry-only
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0100 — Migrar frontmatter inline a YAML canonico en dev/issues/
**Status:** pendiente
+16
View File
@@ -1,3 +1,19 @@
---
id: "0101"
title: "dev_console Go binario: /issue /flow /work unificados"
status: pendiente
type: app
domain:
- meta
scope: registry-only
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0101 — dev_console Go binario: /issue /flow /work unificados
**Status:** pendiente
+16
View File
@@ -1,3 +1,19 @@
---
id: "0102"
title: "Tab Work en registry_dashboard (issues + flows + telemetria)"
status: pendiente
type: feature
domain:
- meta
scope: app-scoped
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0102 — Tab Work en registry_dashboard (issues + flows + telemetria)
**Status:** pendiente
@@ -1,3 +1,19 @@
---
id: "0103"
title: "Taxonomia + slash commands /issue /flow /work"
status: pendiente
type: feature
domain:
- meta
scope: registry-only
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0103 — Taxonomia + slash commands /issue /flow /work
**Status:** pendiente
@@ -0,0 +1,168 @@
---
id: "0104"
title: "/fix-issue type-aware dispatch (chore vs feature vs bugfix vs epic)"
status: pendiente
type: feature
domain:
- meta
- dev-ux
scope: registry-only
priority: alta
depends:
- "0100"
blocks: []
related:
- "0101"
- "0103"
created: 2026-05-17
updated: 2026-05-17
tags: [slash-command, dispatch, type-aware]
---
# 0104 — `/fix-issue` type-aware dispatch
## Problema
Hoy `/fix-issue NNNN` arranca con el mismo flujo para CUALQUIER tipo de issue. Pero un `chore` (limpieza, migracion idempotente) no requiere el mismo ceremonial que un `feature` (TBD rama + acceptance + DoD), ni que un `bugfix` (reproduce + test que falla + fix + test verde), ni que un `epic` (planificacion de sub-issues, no codigo directo).
Resultado:
- `chore` se ejecuta con TBD branch innecesaria, ralentiza.
- `bugfix` se cierra sin test de regresion porque el flujo no lo exige.
- `epic` arranca con `/git-branch` aunque no toca codigo aun (deberia abrir sub-issues primero).
- `spike` se trata como feature, sin timebox.
- `docs` requiere ramas TBD que sobran (push directo a master segun apps_tbd.md para registry).
## Objetivo
`/fix-issue NNNN` lee el `type:` del frontmatter (issue 0100) y aplica el playbook correspondiente. Sin type valido -> error "type missing, run `/issue tag NNNN +type:<X>` first".
## Dispatch por type
### `bugfix`
1. `/git-branch issue/NNNN-<slug>`.
2. **Reproducir el bug**: pedir al usuario pasos exactos + snippet. Si no se reproduce -> abort.
3. **Escribir test que falla** ANTES del fix. Commit `test: reproduce <bug>`.
4. Implementar fix.
5. Test verde + run suite completa de la app afectada.
6. Commit `fix: <descripcion>`.
7. `/git-push` (merge --no-ff master).
8. Move a `completed/`.
### `feature`
1. `/git-branch issue/NNNN-<slug>`.
2. **Plan corto** (2-3 frases) sobre approach + DoD a marcar.
3. Implementar bloque por bloque, commits atomicos.
4. Acceptance checkboxes verdes via tests + manual user-test.
5. Si DoD pide `User-facing`: el flow asociado debe abrir la superficie usuario.
6. `/git-push`.
7. Move a `completed/`.
### `chore`
1. **NO TBD branch** (push directo a master). Si toca app -> usar TBD.
2. Si es pipeline idempotente: run `--dry-run` primero, mostrar diff, run real.
3. Backup antes de toda escritura masiva (ver 0100).
4. Commit `chore: <descripcion>`.
5. `/full-git-push`.
6. Move a `completed/`.
### `refactor`
1. `/git-branch issue/NNNN-<slug>`.
2. **Sin tests verdes pre-existentes -> abort**. Refactor sin red de seguridad es feature, no refactor.
3. Aplicar **Branch by Abstraction** (ver feature_flags.md) si cambio grande.
4. Tests siguen verdes en cada commit.
5. `/git-push`.
### `chore` + `audit`
1. Read-only fase exploratoria.
2. Output reporte (no escribir).
3. Si el reporte requiere fix -> abrir nuevo issue `bugfix` o `chore` por hallazgo.
4. Close audit issue con reporte adjunto en `## Notas`.
### `epic`
1. **NO codigo directo**. Epic es planning.
2. Listar sub-issues hijo (`NNNNa`, `NNNNb`, ...) — crearlos si no existen via `/issue create`.
3. Decidir orden de ejecucion (dependencias).
4. Status del epic = `bloqueado` mientras haya hijos abiertos.
5. Cerrar solo cuando todos los hijos esten `completado`.
### `spike`
1. `/git-branch spike/NNNN-<slug>` (no `issue/`).
2. **Timebox declarado** en frontmatter (`tags: [timebox-2h]`).
3. Output: aprendizaje en `## Notas` + nuevo issue concreto (feature/refactor) si vale la pena seguir.
4. NO commit a master. Si el spike falla -> branch deletada, issue `deferred`.
### `docs`
1. NO TBD (push directo).
2. Editar `.md` o `docs/` o reglas.
3. Si toca `.claude/rules/INDEX.md` -> verificar referencias rotas.
4. Commit `docs: <descripcion>`.
### `infra`
1. Sub-issue de un epic. `/fix-issue` redirige a guidance del epic padre.
2. Aplicar dispatch del type del padre (feature/refactor habitualmente).
### `planning`
1. NO codigo. Similar a `epic` pero scope mas pequeño (ej. propuesta de taxonomia, ADR).
2. Output: `.md` con conclusiones.
## Implementacion
Slash command `.claude/commands/fix-issue.md` actualizado:
```yaml
---
description: "Fix issue con dispatch por type (bugfix/feature/chore/refactor/epic/spike/docs/infra/planning)"
allowed-tools: [Bash, Read, Edit, Write, Glob, Grep, Agent]
---
# /fix-issue NNNN
1. Lee `dev/issues/NNNN-*.md` (parsea frontmatter YAML).
2. Lee `type:` del frontmatter.
3. Despacha al playbook correspondiente (ver dev/issues/0104-*.md).
4. Si type missing/invalido -> error con sugerencia.
```
Playbooks se materializan como sub-archivos en `dev/playbooks/<type>.md` (lectura on-demand). Cada uno con steps numerados + checklist DoD.
## Acceptance
- [ ] `.claude/commands/fix-issue.md` lee `type:` y dispacha.
- [ ] `dev/playbooks/{bugfix,feature,chore,refactor,epic,spike,docs,infra,planning}.md` existen.
- [ ] `/fix-issue NNNN` sin `type:` valido -> error claro + sugerencia.
- [ ] Documentacion en `.claude/rules/` referencia los playbooks.
- [ ] Smoke test: `/fix-issue 0099` (type=app) elige el playbook adecuado (mapea app -> feature playbook por defecto).
## Definition of Done
### Generico
- [ ] **Repetibilidad**: misma issue type produce mismo playbook 100x.
- [ ] **Observabilidad**: log "dispatch: type=feature" antes de arrancar.
- [ ] **Error-path**: type invalido -> error con sugerencia "did you mean ...?".
- [ ] **Idempotencia**: si la rama ya existe, reanudar (no abortar).
- [ ] **Secrets**: N/A.
- [ ] **Docs**: cada playbook tiene ejemplo + gotchas.
- [ ] **Registry-first**: playbooks reusan funciones del registry (git_branch, run_tests, etc.).
- [ ] **INDEX + status**: issue cerrado.
### User-facing
- [ ] **User-facing**: usuario teclea `/fix-issue 0099` y ve el playbook elegido como primera linea: `[dispatch] type=app -> playbook=feature (TBD branch + acceptance + DoD)`.
- [ ] **User-facing repeat**: cada issue futuro entra al playbook correcto automatico, sin que el usuario tenga que pensar.
- [ ] **User-facing onboarding**: parrafo en `dev/playbooks/README.md` explica que es cada playbook.
- [ ] **User-facing latencia**: dispatch decision <100ms.
## Notas
(rellenas tras correr)
+7
View File
@@ -1,5 +1,12 @@
# Issues
> **Frontmatter YAML** es la fuente de verdad desde 2026-05-17 (issue 0100).
> Cada `.md` empieza con bloque `---` con `id`, `title`, `status`, `type`, `domain`, `scope`, `priority`, `depends`, `blocks`, `related`, `created`, `updated`, `tags`.
> Para listar/filtrar: `/issue list --domain trading --status pendiente` (cuando `dev_console` exista — issue 0101).
>
> Dominios canonicos: `meta cpp-stack kanban trading gamedev osint data-ingest registry-quality notify imagegen apps-infra dev-ux deploy frontend mcp browser telemetry docs`.
> La tabla debajo es vista historica (legacy) y NO se actualiza; sera sustituida por output auto-generado en issue 0102.
| ID | Título | Estado | Prioridad | Tipo | Bloquea |
|----|--------|--------|-----------|------|---------|
| 0001 | Jupyter create notebook | completado | — | feature | — |
+15
View File
@@ -1,3 +1,18 @@
---
id: "0007a"
title: "Funciones core del DAG engine"
status: completado
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0007a — Funciones core del DAG engine
## Metadata
@@ -1,3 +1,18 @@
---
id: "0007b"
title: "Process manager: spawn, wait, kill, status"
status: completado
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0007b — Process manager: spawn, wait, kill, status
## Metadata
@@ -1,3 +1,18 @@
---
id: "0007c"
title: "Execution store: persistencia de estado"
status: completado
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0007c — Execution store: persistencia de estado
## Metadata
+15
View File
@@ -1,3 +1,18 @@
---
id: "0007d"
title: "Scheduler: cron parser y ticker"
status: completado
type: feature
domain: []
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0007d — Scheduler: cron parser y ticker
## Metadata
@@ -1,3 +1,18 @@
---
id: "0007e"
title: "DAG executor app: CLI/TUI que reemplaza Dagu"
status: completado
type: feature
domain: []
scope: app-scoped
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0007e — DAG executor app: CLI/TUI que reemplaza Dagu
## Metadata
@@ -1,3 +1,18 @@
---
id: "0008"
title: "SQLite API Web"
status: completado
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0008 — SQLite API Web
## Metadata
+15
View File
@@ -1,3 +1,18 @@
---
id: "0009"
title: "HTTP Server Foundation"
status: completado
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0009 — HTTP Server Foundation
## Metadata
+15
View File
@@ -1,3 +1,18 @@
---
id: "0010"
title: "Auth System"
status: completado
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0010 — Auth System
## Metadata
@@ -1,3 +1,18 @@
---
id: "0011"
title: "WebSocket & SSE Server"
status: completado
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0011 — WebSocket & SSE Server
## Metadata
+15
View File
@@ -1,3 +1,18 @@
---
id: "0012"
title: "Email & SMTP"
status: completado
type: feature
domain: []
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0012 — Email & SMTP
## Metadata
@@ -1,3 +1,18 @@
---
id: "0013"
title: "Background Job Queue"
status: completado
type: feature
domain: []
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0013 — Background Job Queue
## Metadata
+15
View File
@@ -1,3 +1,18 @@
---
id: "0014"
title: "File Upload & Storage"
status: completado
type: feature
domain: []
scope: multi-app
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0014 — File Upload & Storage
## Metadata

Some files were not shown because too many files have changed in this diff Show More