--- type: RFI asset_id: RFI-XX-IntelliBanks-ManejoRutasDotfolders-v01 version: v01 status: Abierto owner: Victor Heredia sherpa_owner: Jay responsable_implementacion: Alex intellbank: IB-XX-Maestro fecha_creacion: 2026-07-01 fecha_ultima_actualizacion: 2026-07-01 proposito: Solicitar a Alex que la app IntelliBanks preserve las rutas de vault al sincronizar (no aplanar archivos a la raíz) e ignore las carpetas ocultas (dotfolders), sin crear mirrors visibles ni subir config personal a la nube compartida. relacionado: RFI-XX-IntelliBanks-NavInternaDashboards-v01 --- # RFI — Manejo de rutas y dotfolders en la app IntelliBanks **Request for Implementation** **Tripleta:** Owner: Victor Heredia · Sherpa: Jay · Implementa/Ratifica técnico: Alex **Prioridad:** Alta (ensucia la raíz del vault del equipo y expone config personal en la nube compartida) **Fecha:** 2026-07-01 --- ## 1. Resumen ejecutivo Tras la actualización de la app y el trabajo en la nube del 1-jul, aparecieron en la **raíz** del vault (`Documents/IntelliBanks/`) archivos y carpetas que **no deberían estar ahí**. La regla del ecosistema es simple: **todo archivo vive bajo una carpeta `IB-*`; la raíz solo contiene carpetas `IB-*` + la metadata oculta de la app.** Se detectaron **dos comportamientos** de la app que rompen esa regla: 1. **Aplanamiento de rutas:** la app coloca en la raíz **duplicados** de archivos que ya existen (idénticos) en su ubicación canónica bajo un `IB-*`. 2. **Mirrors de dotfolders:** la app crea carpetas **visibles** `archivo.claude/` y `archivo.obsidian/` (a partir de las ocultas `.claude`/`.obsidian`) y **sube `.obsidian/`** (config personal) a la nube compartida. Se solicita corregir ambos. --- ## 2. Evidencia (1-jul-2026) **2.1 — Duplicados aplanados a la raíz.** Aparecieron 7 archivos sueltos en la raíz, todos con timestamp 07:00–07:01 (ventana de descarga de nube tras el update), **md5-idénticos** a los canónicos que ya existían en su `IB-*`: | Archivo en raíz (incorrecto) | Ya existía (canónico, idéntico) | |---|---| | `BC-AmyEdmondson-CognitiveStack-v01.md` | `IB-EL-EmpowerLabs/BC-EL-BrainCodes/…` | | `BC-ChrisWalker-CognitiveStack-v01.md` | `IB-EL-EmpowerLabs/BC-EL-BrainCodes/…` | | `BC-DanSullivan-CognitiveStack-v01.md` / `-v02.md` | `IB-EL-EmpowerLabs/BC-EL-BrainCodes/…` | | `BC-DanielPriestley-CognitiveStack-v01.md` / `-v02.md` | `IB-EL-EmpowerLabs/BC-EL-BrainCodes/…` | | `DC-IS-AnalisisCompetitivo-TDU-MarketplaceColaborativo-v02_docx.md` | `IB-Clientes/IB-IS-IntegraSalud/PB-IS-IntegraSalud/…` | → La app bajó copias **sin su ruta de vault**, colocándolas en la raíz, aun cuando el canónico ya estaba en su carpeta correcta. **2.2 — Mirrors de dotfolders y config subida.** En la raíz aparecieron: - `archivo.claude/` (con un subdir `skills` vacío) y `archivo.obsidian/` (vacío) — mirrors visibles de las carpetas ocultas `.claude`/`.obsidian`. - Además, el health check confirmó que la app **sube `.obsidian/` a la nube del equipo** (evento de sync de `workspace.json`), es decir, la config personal de Obsidian de cada usuario termina en la nube compartida. --- ## 3. Causa raíz (hipótesis) Al descargar de la nube, la app **no está reconstruyendo la ruta relativa completa** (`IB-*/subcarpetas/archivo`) para algunos activos, y los deja en la raíz. En paralelo, **no tiene lista de exclusión** para dotfolders, así que intenta sincronizarlos y los materializa como carpetas `archivo.*` visibles. Ambos son del lado de la app (backend/cliente de sync), no de los archivos. --- ## 4. Implementación solicitada 1. **Preservar ruta al descargar:** todo archivo debe recrearse en su ruta de vault completa. **Nunca** colocar archivos en la raíz del vault. 2. **No duplicar:** si un `skill_id`/hash ya existe en su ruta canónica, no crear una segunda copia (menos en la raíz). 3. **Ignorar dotfolders:** excluir de la sincronización `.obsidian/`, `.claude/`, `.git/` (y dotfiles en general). **No** crear mirrors `archivo.*`. **No** subir config personal a la nube compartida. 4. **Regla dura de raíz:** la raíz del vault solo debe contener carpetas `IB-*` + la metadata de la app (`.intellibanks_*`). Cualquier otra cosa es error de sync. 5. **Limpieza retroactiva (opcional):** una pasada que detecte y elimine duplicados en raíz y mirrors `archivo.*` ya generados en la nube, para todos los usuarios del equipo. --- ## 5. Criterios de aceptación - [ ] Tras un ciclo de descarga, la **raíz** del vault solo tiene carpetas `IB-*` (+ metadata oculta). Cero archivos sueltos. - [ ] Ningún archivo se duplica en la raíz si ya existe en su ruta canónica. - [ ] No se crean carpetas `archivo.claude/` ni `archivo.obsidian/`. - [ ] `.obsidian/` (y otros dotfolders) **no** se suben a la nube compartida. - [ ] La limpieza local de estos artefactos **no** los regenera en el siguiente sync. --- ## 6. Alcance e impacto - **Afecta a todo el equipo** (nube compartida): cada usuario ve su raíz ensuciada y su config personal expuesta. - **Riesgo:** ruido, confusión de versiones (duplicados), y fuga de config personal (`.obsidian`) al espacio común. - **Workaround actual:** limpieza manual de la raíz (hecha 1-jul), pero **reaparece** en cada sync hasta corregir la app. --- ## 7. Relación con otros RFI - `RFI-XX-IntelliBanks-NavInternaDashboards-v01` — navegación entre dashboards dentro de la app (servir por ID vs ruta). Distinto problema, mismo backend. --- *Generado con evidencia de la sesión del 2026-07-01. Owner: Victor Heredia · Sherpa: Jay.* --- ## Anexo (2026-07-13) — Evidencia forense: la fuente es la maquinaria de skills dentro del vault Reincidencia confirmada (carpetas raíz `EL-PluginMarketplace/`, `skills/`, `archivo.claude/`, `PLB-BVH-Plantillas/` el 2026-07-13, 09:24–09:32). Diagnóstico forense (ver `CAS-EL-WORX-MarketplaceEnVault-RaizJunk-v01`): - **Ningún skill hace `mkdir`** de esas carpetas (grep de scripts = 0). No es un skill "malo". - **Causa raíz:** la capa de distribución (marketplace empaquetado + caché `.claude/skills` de Cowork) opera **dentro** del vault; la app la **espeja** (`.claude`→`archivo.claude`) y **aplana** los esqueletos a la raíz. - **Recurrencia disparada por 7 tareas programadas** que corren contra el vault (diarias/semanales) — cada corrida re-materializa la caché de skills en la carpeta. **Implicación para el blindaje (refuerza la Capa 1 server-side):** además de rechazar archivos fuera de `IB-`, la app debe: 1. **Ignorar dotfolders** (`.claude/`, `.obsidian/`) — no espejarlos como `archivo.*`. 2. **No aplanar** esqueletos de carpetas a la raíz — preservar ruta o cuarentena. 3. Idealmente, **detectar y rechazar** paquetes de marketplace/estructuras de plugins dentro del vault (no son contenido de conocimiento). Regla de gobernanza derivada: **el marketplace empaquetado vive solo en el repo git externo, nunca en el vault** (consistente con `sx-publicador`).