b9716a7cd6
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.9 KiB
3.9 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags, flow
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | flow | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0117 | Funcion cpp dod_evidence_panel: render screenshots/logs/urls/cmd-output | pendiente | feature |
|
registry | alta |
|
|
2026-05-18 | 2026-05-18 |
|
0008 |
0117 — Funcion dod_evidence_panel_cpp_viz
Problema
kanban_cpp (0112) y skill_tree v2 (0116) necesitan ambos un panel que muestre items DoD + evidencias adjuntas. Sin funcion compartida, se duplica logica (regla delegation.md).
Decision
Funcion C++ en cpp/functions/viz/dod_evidence_panel.{cpp,h,md}. API:
namespace fn_viz {
struct DodItem {
std::string id;
std::string kind; // "screenshot" | "log" | "url" | "cmd"
std::string expected;
bool required;
std::string status; // "pending" | "done" | "validated" | "failed"
};
struct DodEvidence {
std::string item_id;
std::string kind;
std::string payload_path; // para screenshot/log
std::string payload_url; // para url
std::string payload_text; // para cmd output
int64_t attached_at;
bool validated;
std::string validated_by;
};
struct DodPanelState {
std::vector<DodItem> items;
std::vector<DodEvidence> evidences;
std::string run_id;
std::function<void(const std::string&)> on_validate; // callback(evidence_id)
std::function<void(const std::string&)> on_reject; // idem
};
void render_dod_evidence_panel(DodPanelState& state);
}
Renderiza:
- Lista de items con icono por status (
TI_CIRCLE_DASHED/TI_CIRCLE_CHECK/TI_CIRCLE_DOT/TI_CIRCLE_X). - Por item: evidencia adjunta segun kind:
screenshot: thumbnail viastb_image_load+ImGui::Image. Click -> open full-size en popup.log:selectable_text_cpp_core(registry) con scroll + grep pattern deexpectedhighlighted.url:TI_EXTERNAL_LINKclickable ->ShellExecuteW(Win) /xdg-open(Linux).cmd: dos columnas (expected vs actual) usandodata_table_cpp_viz. Diff highlight rojo si mismatch.
- Botones por evidencia:
Validate(verde, callbackon_validate) /Reject(rojo, callbackon_reject).
Criterios de aceptacion
cpp/functions/viz/dod_evidence_panel.{cpp,h,md}registrado.params_schemayoutputcompletos en frontmatter.- Tag
agentsaplicado. .mdcumple contrato self-doc (## Ejemplocon DodPanelState concreto,## Cuando usarla,## Gotchas).- Demo en
cpp/apps/primitives_gallery/demos_viz.cppcon DodPanelState dummy (4 kinds + 2 validados + 2 pending). kanban_cpp::panel_dodusa la funcion (declarado enuses_functions).skill_tree(panel inferior cuando hay run activo) usa la funcion.- Tests visuales: golden image en
primitives_gallery --capture. fn doctor capabilitiesmuestra grupoagentscon esta funcion listada.uses_functionsdeclara:selectable_text_cpp_core,data_table_cpp_viz,icons_tabler_cpp_core.
Gotchas
stb_image_loadpara PNGs grandes (screenshots full HD): clamp dimensions del thumbnail a 320x180. Liberar texturas conglDeleteTexturesal cerrar panel.- WSL paths vs Windows: si
payload_pathviene como/mnt/c/..., convertir aC:\...solo paraShellExecuteW. Parastb_imageda igual. - Cache de texturas: re-cargar PNG cada frame es caro. Map
path -> GLuintcon LRU. Invalidar si mtime cambia. - Callbacks
on_validate/on_reject: invocan POST HTTP alagent_runner_api. NO bloquear frame; spawn thread. cmdevidence con stdout largo: clip a 50 lineas + botonShow full.
Out of scope
- Editor de schema DoD (vive en kanban_cpp o futura UI).
- Comparacion AI de screenshots (futuro: visual diff).
- Persistencia local de validaciones offline.