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.1 KiB
3.1 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0107a | fn doctor modules — detectar drift uses_modules vs uses_functions y version skew | pendiente | feature |
|
registry | alta |
|
|
2026-05-17 | 2026-05-17 |
|
0107a — fn doctor modules
Parte del issue principal 0107. Feature flag modules-v2.
Objetivo
Subcomando fn doctor modules + funcion del registry audit_modules_drift_go_infra que detecta:
- App declara
uses_modules: [X]Y un miembro de X aparece enuses_functions→ drift. - App declara
uses_modules: [X]pero suCMakeLists.txtNO linkeafn_module_X→ mismatch. - App linkea
fn_module_Xpero NO declarauses_modules: [X]→ mismatch inverso. - App declara
uses_modules: [{name: X, min_version: "1.4"}]ymodule.md::version< 1.4 → version skew (post 0107e).
Tareas
- 1.1
functions/infra/audit_modules_drift.gocon firma:type ModuleDriftReport struct { ModuleID string ModuleVersion string ConsumersTotal int ConsumersWithDrift int Violations []DriftViolation } type DriftViolation struct { AppID string Kind string // "duplicate_members" | "uses_modules_no_link" | "link_no_uses_modules" | "version_skew" DuplicatedIDs []string Message string } func AuditModulesDrift(registryDB string, cppRoot string) ([]ModuleDriftReport, error) - 1.2
.mdcorrespondiente con frontmatter completo + ejemplo lanzable. - 1.3 Subcomando en
cmd/fn/doctor.go:fn doctor modules+fn doctor modules --json. - 1.4 Exponer via MCP:
mcp__registry__fn_doctor subcommand="modules". - 1.5 Test sintetico: fixture con 1 modulo + 3 apps (1 limpia, 1 con drift de duplicados, 1 con version skew).
- 1.6 Anadir entrada a
.claude/rules/fn_doctor.mdmapeando subcomando.
Output esperado (texto)
fn doctor modules
=================
data_table_cpp v1.4.0 — 7 consumers
services_monitor DRIFT 12 duplicated members in uses_functions
dag_engine_ui DRIFT 12 duplicated members in uses_functions
odr_console DRIFT 5 duplicated members in uses_functions
navegator_dashboard DRIFT 12 duplicated members in uses_functions
graph_explorer DRIFT 12 duplicated members in uses_functions
registry_dashboard DRIFT 11 duplicated members in uses_functions
app_gestion DRIFT 12 duplicated members in uses_functions
framework_cpp v1.1.0 — 0 explicit consumers (transitive via add_imgui_app)
Summary: 2 modules, 7 apps with drift, 0 version skews.
Exit: 1 (drift detected)
Riesgos
- Falso positivo si un app legitimamente necesita un miembro fuera del scope del modulo (ej. usar
lua_enginestandalone). Mitigacion: post-0107d (members generales fuera del modulo), este caso desaparece. Mientras tanto: flag--ignore-knowncon allowlist temporal.