chore: snapshot WIP previo + flow 0008 + 7 sub-issues (0112-0119)

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>
This commit is contained in:
2026-05-18 18:17:08 +02:00
parent 5fb2269c00
commit 7eb7b3d0c8
121 changed files with 14963 additions and 3084 deletions
@@ -74,6 +74,16 @@ def generate(app_md: Path, modules_root: Path, app_name: str, out_path: Path) ->
if not isinstance(uses_modules, list):
uses_modules = []
# Toda app C++ procesada por add_imgui_app enlaza fn_framework. Inyectamos
# framework_cpp implicito si la app es C++ y no lo declara explicitamente.
# Asi el array embebido refleja la version real del framework linkeado,
# sin pedir a cada app.md que lo declare a mano.
lang = str(fm.get("lang", "")).lower()
if lang == "cpp":
already = [str(m) for m in uses_modules]
if not any(m.startswith("framework_") for m in already):
uses_modules = ["framework_cpp"] + already
entries: list[dict] = []
missing: list[str] = []
for mid in uses_modules:
@@ -107,6 +117,20 @@ def generate(app_md: Path, modules_root: Path, app_name: str, out_path: Path) ->
else:
lines.append("const ModuleInfo app_modules_array[1] = { { nullptr, nullptr, nullptr } };")
lines.append("const unsigned long app_modules_count = 0;")
# Header badge identity — auto-derivado del bloque `icon:` del app.md.
# Permite que el framework muestre el badge accent en viewports secundarios
# sin tocar main.cpp. Coherente con App Hub (mismo hex que la tarjeta).
icon_block = fm.get("icon") or {}
accent_hex = str(icon_block.get("accent", "") or "")
glyph_name = str(icon_block.get("phosphor", "") or "")
lines.append(
f'const char* const app_header_accent_hex = "{_escape_c_string(accent_hex)}";'
)
lines.append(
f'const char* const app_header_glyph_name = "{_escape_c_string(glyph_name)}";'
)
lines.append("} // namespace fn")
lines.append("")