context-map-ai 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- context_map_ai-2.0.0/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- context_map_ai-2.0.0/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- context_map_ai-2.0.0/.github/PULL_REQUEST_TEMPLATE.md +22 -0
- context_map_ai-2.0.0/.github/copilot-instructions.md +34 -0
- context_map_ai-2.0.0/.github/workflows/ci.yml +34 -0
- context_map_ai-2.0.0/.github/workflows/docs.yml +29 -0
- context_map_ai-2.0.0/.github/workflows/publish.yml +42 -0
- context_map_ai-2.0.0/.gitignore +56 -0
- context_map_ai-2.0.0/.hermes/config.yaml +58 -0
- context_map_ai-2.0.0/.hermes/shields/pre-commit.md +24 -0
- context_map_ai-2.0.0/.hermes/triggers/post-commit.md +20 -0
- context_map_ai-2.0.0/.hermes/workflows/dev-loop.md +26 -0
- context_map_ai-2.0.0/.pre-commit-hooks.yaml +7 -0
- context_map_ai-2.0.0/AGENTS.md +213 -0
- context_map_ai-2.0.0/CHANGELOG.md +326 -0
- context_map_ai-2.0.0/CODE_OF_CONDUCT.md +51 -0
- context_map_ai-2.0.0/CONTRIBUTING.md +91 -0
- context_map_ai-2.0.0/LICENSE +21 -0
- context_map_ai-2.0.0/Makefile +38 -0
- context_map_ai-2.0.0/PKG-INFO +270 -0
- context_map_ai-2.0.0/README.md +238 -0
- context_map_ai-2.0.0/README_EN.md +208 -0
- context_map_ai-2.0.0/action.yml +56 -0
- context_map_ai-2.0.0/context_map/__init__.py +1 -0
- context_map_ai-2.0.0/context_map/__tests__/conftest.py +33 -0
- context_map_ai-2.0.0/context_map/__tests__/smoke.py +23 -0
- context_map_ai-2.0.0/context_map/__tests__/test_checker_frescura.py +122 -0
- context_map_ai-2.0.0/context_map/__tests__/test_cli.py +134 -0
- context_map_ai-2.0.0/context_map/__tests__/test_conexiones.py +675 -0
- context_map_ai-2.0.0/context_map/__tests__/test_cyclomatic.py +44 -0
- context_map_ai-2.0.0/context_map/__tests__/test_diario_consolidado.py +76 -0
- context_map_ai-2.0.0/context_map/__tests__/test_doctor.py +43 -0
- context_map_ai-2.0.0/context_map/__tests__/test_ecosistema.py +448 -0
- context_map_ai-2.0.0/context_map/__tests__/test_enterprise_features.py +338 -0
- context_map_ai-2.0.0/context_map/__tests__/test_export.py +43 -0
- context_map_ai-2.0.0/context_map/__tests__/test_hermes_clasificacion.py +73 -0
- context_map_ai-2.0.0/context_map/__tests__/test_hook_memoria_viva.py +45 -0
- context_map_ai-2.0.0/context_map/__tests__/test_hooks.py +35 -0
- context_map_ai-2.0.0/context_map/__tests__/test_ingest.py +155 -0
- context_map_ai-2.0.0/context_map/__tests__/test_mermaid.py +59 -0
- context_map_ai-2.0.0/context_map/__tests__/test_metrica_memoria_viva.py +87 -0
- context_map_ai-2.0.0/context_map/__tests__/test_parsing.py +65 -0
- context_map_ai-2.0.0/context_map/__tests__/test_personal.py +489 -0
- context_map_ai-2.0.0/context_map/__tests__/test_refresh_temporales.py +34 -0
- context_map_ai-2.0.0/context_map/__tests__/test_reglas_catalogo.py +146 -0
- context_map_ai-2.0.0/context_map/__tests__/test_scan_cache.py +30 -0
- context_map_ai-2.0.0/context_map/__tests__/test_scanner.py +68 -0
- context_map_ai-2.0.0/context_map/__tests__/test_security_scanner.py +40 -0
- context_map_ai-2.0.0/context_map/__tests__/test_standardize.py +52 -0
- context_map_ai-2.0.0/context_map/__tests__/test_tokenization.py +115 -0
- context_map_ai-2.0.0/context_map/__tests__/test_topologia_arbol.py +307 -0
- context_map_ai-2.0.0/context_map/__tests__/test_vault_consolidation.py +441 -0
- context_map_ai-2.0.0/context_map/__tests__/test_watcher.py +29 -0
- context_map_ai-2.0.0/context_map/__tests__/test_wrap.py +79 -0
- context_map_ai-2.0.0/context_map/application/__init__.py +10 -0
- context_map_ai-2.0.0/context_map/application/cli/__init__.py +8 -0
- context_map_ai-2.0.0/context_map/application/cli/cli.py +139 -0
- context_map_ai-2.0.0/context_map/application/cli/parser.py +204 -0
- context_map_ai-2.0.0/context_map/application/commands/__init__.py +60 -0
- context_map_ai-2.0.0/context_map/application/commands/_helpers.py +348 -0
- context_map_ai-2.0.0/context_map/application/commands/adapt.py +85 -0
- context_map_ai-2.0.0/context_map/application/commands/auto.py +56 -0
- context_map_ai-2.0.0/context_map/application/commands/build.py +166 -0
- context_map_ai-2.0.0/context_map/application/commands/doctor_cmd.py +56 -0
- context_map_ai-2.0.0/context_map/application/commands/export.py +136 -0
- context_map_ai-2.0.0/context_map/application/commands/hook.py +49 -0
- context_map_ai-2.0.0/context_map/application/commands/importers.py +163 -0
- context_map_ai-2.0.0/context_map/application/commands/ingest.py +133 -0
- context_map_ai-2.0.0/context_map/application/commands/personal.py +555 -0
- context_map_ai-2.0.0/context_map/application/commands/refresh.py +138 -0
- context_map_ai-2.0.0/context_map/application/commands/scan.py +38 -0
- context_map_ai-2.0.0/context_map/application/commands/sync.py +179 -0
- context_map_ai-2.0.0/context_map/application/commands/tools.py +127 -0
- context_map_ai-2.0.0/context_map/application/commands/update.py +144 -0
- context_map_ai-2.0.0/context_map/application/commands/watch.py +27 -0
- context_map_ai-2.0.0/context_map/application/commands/wrap.py +89 -0
- context_map_ai-2.0.0/context_map/cli.py +26 -0
- context_map_ai-2.0.0/context_map/core/__init__.py +68 -0
- context_map_ai-2.0.0/context_map/core/generators/__init__.py +13 -0
- context_map_ai-2.0.0/context_map/core/generators/generadores.py +186 -0
- context_map_ai-2.0.0/context_map/core/generators/narrative_templates.py +264 -0
- context_map_ai-2.0.0/context_map/core/logging_setup.py +71 -0
- context_map_ai-2.0.0/context_map/core/models/__init__.py +7 -0
- context_map_ai-2.0.0/context_map/core/models/config.py +17 -0
- context_map_ai-2.0.0/context_map/core/models/models.py +172 -0
- context_map_ai-2.0.0/context_map/core/normalization/__init__.py +27 -0
- context_map_ai-2.0.0/context_map/core/normalization/cleaning.py +135 -0
- context_map_ai-2.0.0/context_map/core/normalization/inference.py +209 -0
- context_map_ai-2.0.0/context_map/core/normalization/mappings.py +116 -0
- context_map_ai-2.0.0/context_map/core/normalization/standardize.py +145 -0
- context_map_ai-2.0.0/context_map/core/parsing/__init__.py +19 -0
- context_map_ai-2.0.0/context_map/core/parsing/cargadores.py +108 -0
- context_map_ai-2.0.0/context_map/core/parsing/clasificacion.py +45 -0
- context_map_ai-2.0.0/context_map/core/parsing/dedup.py +28 -0
- context_map_ai-2.0.0/context_map/core/parsing/grafo.py +78 -0
- context_map_ai-2.0.0/context_map/core/personal/__init__.py +23 -0
- context_map_ai-2.0.0/context_map/core/personal/bd.py +527 -0
- context_map_ai-2.0.0/context_map/core/storage/__init__.py +17 -0
- context_map_ai-2.0.0/context_map/core/storage/config_loader.py +62 -0
- context_map_ai-2.0.0/context_map/core/storage/store.py +214 -0
- context_map_ai-2.0.0/context_map/core/tokenization.py +258 -0
- context_map_ai-2.0.0/context_map/domain/__init__.py +49 -0
- context_map_ai-2.0.0/context_map/domain/analysis/__init__.py +17 -0
- context_map_ai-2.0.0/context_map/domain/analysis/checker.py +48 -0
- context_map_ai-2.0.0/context_map/domain/analysis/complexity.py +134 -0
- context_map_ai-2.0.0/context_map/domain/analysis/models.py +46 -0
- context_map_ai-2.0.0/context_map/domain/analysis/reporting.py +95 -0
- context_map_ai-2.0.0/context_map/domain/analysis/signals.py +411 -0
- context_map_ai-2.0.0/context_map/domain/analyzers/cyclomatic.py +125 -0
- context_map_ai-2.0.0/context_map/domain/ecosystem/__init__.py +27 -0
- context_map_ai-2.0.0/context_map/domain/ecosystem/adaptador.py +229 -0
- context_map_ai-2.0.0/context_map/domain/ecosystem/detector.py +436 -0
- context_map_ai-2.0.0/context_map/domain/ecosystem/hooks.py +131 -0
- context_map_ai-2.0.0/context_map/domain/ecosystem/rules_templates.py +396 -0
- context_map_ai-2.0.0/context_map/domain/health/__init__.py +24 -0
- context_map_ai-2.0.0/context_map/domain/health/doctor.py +321 -0
- context_map_ai-2.0.0/context_map/domain/ingestion/__init__.py +19 -0
- context_map_ai-2.0.0/context_map/domain/ingestion/ingest.py +292 -0
- context_map_ai-2.0.0/context_map/domain/reglas/reglas.py +244 -0
- context_map_ai-2.0.0/context_map/domain/reporting/__init__.py +13 -0
- context_map_ai-2.0.0/context_map/domain/reporting/reporter.py +189 -0
- context_map_ai-2.0.0/context_map/domain/scanning/__init__.py +13 -0
- context_map_ai-2.0.0/context_map/domain/scanning/cache.py +116 -0
- context_map_ai-2.0.0/context_map/domain/scanning/scanner.py +307 -0
- context_map_ai-2.0.0/context_map/domain/scanning/security.py +79 -0
- context_map_ai-2.0.0/context_map/domain/synchronization/__init__.py +7 -0
- context_map_ai-2.0.0/context_map/domain/synchronization/relaciones.py +67 -0
- context_map_ai-2.0.0/context_map/domain/synchronization/sync.py +249 -0
- context_map_ai-2.0.0/context_map/domain/synchronization/watcher.py +142 -0
- context_map_ai-2.0.0/context_map/infrastructure/__init__.py +4 -0
- context_map_ai-2.0.0/context_map/infrastructure/analyzers/__init__.py +4 -0
- context_map_ai-2.0.0/context_map/infrastructure/analyzers/content.py +182 -0
- context_map_ai-2.0.0/context_map/infrastructure/analyzers/structure.py +194 -0
- context_map_ai-2.0.0/context_map/infrastructure/integrations/__init__.py +4 -0
- context_map_ai-2.0.0/context_map/infrastructure/integrations/antigravity.py +398 -0
- context_map_ai-2.0.0/context_map/infrastructure/integrations/chat_export.py +217 -0
- context_map_ai-2.0.0/context_map/infrastructure/integrations/git.py +147 -0
- context_map_ai-2.0.0/context_map/infrastructure/integrations/hermes.py +304 -0
- context_map_ai-2.0.0/context_map/infrastructure/mcp_server.py +279 -0
- context_map_ai-2.0.0/context_map/infrastructure/version_check.py +192 -0
- context_map_ai-2.0.0/context_map/presentation/__init__.py +20 -0
- context_map_ai-2.0.0/context_map/presentation/briefs/__init__.py +9 -0
- context_map_ai-2.0.0/context_map/presentation/briefs/agents.py +161 -0
- context_map_ai-2.0.0/context_map/presentation/briefs/brief.py +107 -0
- context_map_ai-2.0.0/context_map/presentation/briefs/extractors.py +167 -0
- context_map_ai-2.0.0/context_map/presentation/briefs/sections.py +183 -0
- context_map_ai-2.0.0/context_map/presentation/briefs/skill.py +224 -0
- context_map_ai-2.0.0/context_map/presentation/vault/__init__.py +25 -0
- context_map_ai-2.0.0/context_map/presentation/vault/atomic.py +420 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/__init__.py +22 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/canvas.py +281 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/common.py +611 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/consolidado.py +479 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/jerarquico.py +262 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/notas_ideas.py +232 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/rutas.py +149 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/secciones_backlog.py +131 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/secciones_estructura.py +248 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/secciones_historial.py +252 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/secciones_ideas.py +331 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/secciones_proposito.py +220 -0
- context_map_ai-2.0.0/context_map/presentation/vault/consolidated/secciones_riesgos.py +187 -0
- context_map_ai-2.0.0/context_map/presentation/vault/mermaid.py +150 -0
- context_map_ai-2.0.0/context_map/presentation/vault/preservar.py +121 -0
- context_map_ai-2.0.0/context_map/presentation/vault/templates.py +197 -0
- context_map_ai-2.0.0/context_map/presentation/vault/writer.py +160 -0
- context_map_ai-2.0.0/docs/LAUNCH_KIT.md +92 -0
- context_map_ai-2.0.0/docs/plans/2026-08-10-mapa-mental-conectado.md +387 -0
- context_map_ai-2.0.0/docs/plans/PLAN-MEJORAS-CONTEXTO-VIVO-2026-08-14.md +502 -0
- context_map_ai-2.0.0/mkdocs.yml +63 -0
- context_map_ai-2.0.0/pyproject.toml +88 -0
- context_map_ai-2.0.0/uv.lock +1373 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 🐛 Bug Report / Reporte de Error
|
|
3
|
+
about: Create a report to help us improve ContextMap
|
|
4
|
+
title: '[BUG] '
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🐛 Description / Descripción
|
|
10
|
+
A clear and concise description of what the bug is. / Una descripción clara y concisa de lo que es el error.
|
|
11
|
+
|
|
12
|
+
## 🔄 Steps to Reproduce / Pasos para Reproducir
|
|
13
|
+
1. Go to / Ir a '...'
|
|
14
|
+
2. Run command / Ejecutar comando '...'
|
|
15
|
+
3. See error / Ver el error
|
|
16
|
+
|
|
17
|
+
## 🎯 Expected Behavior / Comportamiento Esperado
|
|
18
|
+
A clear and concise description of what you expected to happen.
|
|
19
|
+
|
|
20
|
+
## 💻 Environment / Entorno
|
|
21
|
+
- **OS:** [e.g. Windows 11 / Ubuntu 24.04 / macOS Sequoia]
|
|
22
|
+
- **Python Version:** [e.g. 3.11.5]
|
|
23
|
+
- **ContextMap Version:** [e.g. 1.9.0]
|
|
24
|
+
- **AI Agent / IDE:** [e.g. Antigravity / Cursor / Claude Code / Hermes]
|
|
25
|
+
|
|
26
|
+
## 📋 Error Logs / Traza de Error
|
|
27
|
+
```text
|
|
28
|
+
// Paste logs here / Pega los logs aquí
|
|
29
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 🚀 Feature Request / Solicitud de Funcionalidad
|
|
3
|
+
about: Suggest an idea or improvement for ContextMap
|
|
4
|
+
title: '[FEAT] '
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 💡 Is your feature request related to a problem? / ¿Está relacionada con un problema?
|
|
10
|
+
A clear description of what the problem is (e.g. "I'd like to export context to...").
|
|
11
|
+
|
|
12
|
+
## 🎨 Proposed Solution / Solución Propuesta
|
|
13
|
+
A clear description of what you want to happen or how you imagine the feature.
|
|
14
|
+
|
|
15
|
+
## ⚖️ Alternatives Considered / Alternativas Consideradas
|
|
16
|
+
Any alternative solutions or features you've considered.
|
|
17
|
+
|
|
18
|
+
## 📝 Additional Context / Contexto Adicional
|
|
19
|
+
Add any other context or screenshots about the feature request here.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
## 📌 Tipo de Cambio
|
|
2
|
+
|
|
3
|
+
- [ ] 🐛 Corrección de error (Bug fix)
|
|
4
|
+
- [ ] ✨ Nueva funcionalidad (Feature)
|
|
5
|
+
- [ ] ♻️ Refactorización de código (Refactor / Clean Code)
|
|
6
|
+
- [ ] 📝 Actualización de documentación (Docs)
|
|
7
|
+
- [ ] 🧪 Adición o corrección de pruebas (Tests)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 📝 Descripción de los Cambios
|
|
12
|
+
Proporciona un resumen claro de los cambios introducidos y el problema que resuelven.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 🎯 Lista de Verificación (Checklist)
|
|
17
|
+
|
|
18
|
+
- [ ] Mi código sigue las normas de `AGENTS.md` (Español Técnico, Google Style Docstrings, Type Hinting).
|
|
19
|
+
- [ ] He ejecutado la suite de pruebas unitarias (`python -m pytest`) y todas pasan al 100% en verde.
|
|
20
|
+
- [ ] He verificado la topología de árbol de Obsidian (`test_topologia_arbol.py`) sin wikilinks rotos.
|
|
21
|
+
- [ ] He ejecutado `python -m context_map.cli refresh .` para actualizar el brief y el vault.
|
|
22
|
+
- [ ] No he incluido información sensible, credenciales o API keys.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# GitHub Copilot — Instrucciones para ContextMap
|
|
2
|
+
|
|
3
|
+
> Generado automáticamente por **ContextMap** (2026-08-12).
|
|
4
|
+
|
|
5
|
+
## Antes de sugerir código
|
|
6
|
+
|
|
7
|
+
- Revisa `.context-map/CONTEXT.md` para entender el proyecto (stack, riesgos, tareas).
|
|
8
|
+
- Respeta la arquitectura modular existente.
|
|
9
|
+
- Usa convenciones del proyecto: docstrings en español, type hints estrictos.
|
|
10
|
+
|
|
11
|
+
## Verificación
|
|
12
|
+
|
|
13
|
+
- Tests: `python -m pytest`
|
|
14
|
+
- ContextMap: `python -m context_map.cli build --clean --brief`
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
<!-- CONTEXTMAP:BEGIN -->
|
|
18
|
+
|
|
19
|
+
# GitHub Copilot — Instrucciones para ContextMap
|
|
20
|
+
|
|
21
|
+
> Generado automáticamente por **ContextMap** (2026-08-18).
|
|
22
|
+
|
|
23
|
+
## Antes de sugerir código
|
|
24
|
+
|
|
25
|
+
- Revisa `.context-map/CONTEXT.md` para entender el proyecto (stack, riesgos, tareas).
|
|
26
|
+
- Respeta la arquitectura modular existente.
|
|
27
|
+
- Usa convenciones del proyecto: docstrings en español, type hints strictly.
|
|
28
|
+
|
|
29
|
+
## Verificación
|
|
30
|
+
|
|
31
|
+
- Tests: `python -m pytest`
|
|
32
|
+
- ContextMap: `python -m context_map.cli build --clean --brief`
|
|
33
|
+
|
|
34
|
+
<!-- CONTEXTMAP:END -->
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [master]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [master]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Tests (pytest)
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: astral-sh/setup-uv@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
- name: Instalar dependencias
|
|
19
|
+
run: uv sync --dev --all-extras
|
|
20
|
+
- name: Ejecutar tests
|
|
21
|
+
run: uv run pytest -q
|
|
22
|
+
|
|
23
|
+
lint:
|
|
24
|
+
name: Lint (ruff · bloqueante)
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: astral-sh/setup-uv@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.12"
|
|
31
|
+
- name: Instalar dependencias
|
|
32
|
+
run: uv sync --dev --all-extras
|
|
33
|
+
- name: Ruff check
|
|
34
|
+
run: uv run ruff check context_map/
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: 🌐 Deploy MkDocs Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
- main
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
deploy:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: '3.11'
|
|
22
|
+
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: |
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
pip install mkdocs mkdocs-material pymdown-extensions
|
|
27
|
+
|
|
28
|
+
- name: Deploy to GitHub Pages
|
|
29
|
+
run: mkdocs gh-deploy --force
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: 📦 Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
push:
|
|
7
|
+
tags:
|
|
8
|
+
- 'v*'
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
pypi-publish:
|
|
15
|
+
name: Build and publish Python distribution to PyPI
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
permissions:
|
|
18
|
+
id-token: write # Requerido para PyPI Trusted Publisher (OIDC)
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: '3.11'
|
|
27
|
+
|
|
28
|
+
- name: Install build tools
|
|
29
|
+
run: |
|
|
30
|
+
python -m pip install --upgrade pip
|
|
31
|
+
pip install build twine hatchling
|
|
32
|
+
|
|
33
|
+
- name: Build package
|
|
34
|
+
run: python -m build
|
|
35
|
+
|
|
36
|
+
- name: Check package artifacts
|
|
37
|
+
run: twine check dist/*
|
|
38
|
+
|
|
39
|
+
- name: Publish package to PyPI
|
|
40
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
41
|
+
with:
|
|
42
|
+
skip-existing: true
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
.venv/
|
|
25
|
+
venv/
|
|
26
|
+
env/
|
|
27
|
+
ENV/
|
|
28
|
+
|
|
29
|
+
# IDE
|
|
30
|
+
.vscode/
|
|
31
|
+
.idea/
|
|
32
|
+
*.swp
|
|
33
|
+
*.swo
|
|
34
|
+
*~
|
|
35
|
+
|
|
36
|
+
# Testing
|
|
37
|
+
.pytest_cache/
|
|
38
|
+
.coverage
|
|
39
|
+
htmlcov/
|
|
40
|
+
.tox/
|
|
41
|
+
.nox/
|
|
42
|
+
|
|
43
|
+
# Type checking
|
|
44
|
+
.mypy_cache/
|
|
45
|
+
.pytype/
|
|
46
|
+
.ruff_cache/
|
|
47
|
+
|
|
48
|
+
# OS
|
|
49
|
+
.DS_Store
|
|
50
|
+
Thumbs.db
|
|
51
|
+
|
|
52
|
+
# Context Map (generated)
|
|
53
|
+
.context-map/
|
|
54
|
+
|
|
55
|
+
# Logs
|
|
56
|
+
*.log
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Configuración del agente Hermes para ContextMap
|
|
2
|
+
# Generado automáticamente por ContextMap — adaptado al stack detectado
|
|
3
|
+
|
|
4
|
+
project:
|
|
5
|
+
name: "ContextMap"
|
|
6
|
+
description: "Proyecto gestionado con ContextMap"
|
|
7
|
+
language: "Python"
|
|
8
|
+
architecture: "Modular (gobernanza por ContextMap)"
|
|
9
|
+
|
|
10
|
+
agent:
|
|
11
|
+
instructions: ".context-map/CONTEXT.md"
|
|
12
|
+
language_style:
|
|
13
|
+
code: "es"
|
|
14
|
+
messages: "es"
|
|
15
|
+
commit_messages: "es"
|
|
16
|
+
|
|
17
|
+
workflows:
|
|
18
|
+
dev_loop: ".hermes/workflows/dev-loop.md"
|
|
19
|
+
test_loop: ".hermes/workflows/test-loop.md"
|
|
20
|
+
|
|
21
|
+
shields:
|
|
22
|
+
pre_commit: ".hermes/shields/pre-commit.md"
|
|
23
|
+
quality: ".hermes/shields/quality-gate.md"
|
|
24
|
+
|
|
25
|
+
triggers:
|
|
26
|
+
post_commit: ".hermes/triggers/post-commit.md"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
<!-- CONTEXTMAP:BEGIN -->
|
|
30
|
+
|
|
31
|
+
# Configuración del agente Hermes para ContextMap
|
|
32
|
+
# Generado automáticamente por ContextMap — adaptado al stack detectado
|
|
33
|
+
|
|
34
|
+
project:
|
|
35
|
+
name: "ContextMap"
|
|
36
|
+
description: "Proyecto gestionado con ContextMap"
|
|
37
|
+
language: "Python"
|
|
38
|
+
architecture: "Modular (gobernanza por ContextMap)"
|
|
39
|
+
|
|
40
|
+
agent:
|
|
41
|
+
instructions: ".context-map/CONTEXT.md"
|
|
42
|
+
language_style:
|
|
43
|
+
code: "es"
|
|
44
|
+
messages: "es"
|
|
45
|
+
commit_messages: "es"
|
|
46
|
+
|
|
47
|
+
workflows:
|
|
48
|
+
dev_loop: ".hermes/workflows/dev-loop.md"
|
|
49
|
+
test_loop: ".hermes/workflows/test-loop.md"
|
|
50
|
+
|
|
51
|
+
shields:
|
|
52
|
+
pre_commit: ".hermes/shields/pre-commit.md"
|
|
53
|
+
quality: ".hermes/shields/quality-gate.md"
|
|
54
|
+
|
|
55
|
+
triggers:
|
|
56
|
+
post_commit: ".hermes/triggers/post-commit.md"
|
|
57
|
+
|
|
58
|
+
<!-- CONTEXTMAP:END -->
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Escudo Pre-Commit — ContextMap
|
|
2
|
+
|
|
3
|
+
## Verificaciones obligatorias
|
|
4
|
+
|
|
5
|
+
- [ ] Tests pasan: `python -m pytest`
|
|
6
|
+
- [ ] Sin secretos en el diff (api_key, password, .env)
|
|
7
|
+
- [ ] Sin archivos huérfanos en la raíz (PLAN.md, NOTAS.txt)
|
|
8
|
+
- [ ] ContextMap actualizado: `python -m context_map.cli build --clean --brief`
|
|
9
|
+
- [ ] Conventional Commits en español
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
<!-- CONTEXTMAP:BEGIN -->
|
|
13
|
+
|
|
14
|
+
# Escudo Pre-Commit — ContextMap
|
|
15
|
+
|
|
16
|
+
## Verificaciones obligatorias
|
|
17
|
+
|
|
18
|
+
- [ ] Tests pasan: `python -m pytest`
|
|
19
|
+
- [ ] Sin secretos en el diff (api_key, password, .env)
|
|
20
|
+
- [ ] Sin archivos huérfanos en la raíz (PLAN.md, NOTAS.txt)
|
|
21
|
+
- [ ] ContextMap actualizado: `python -m context_map.cli build --clean --brief`
|
|
22
|
+
- [ ] Conventional Commits en español
|
|
23
|
+
|
|
24
|
+
<!-- CONTEXTMAP:END -->
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Post-Commit — ContextMap
|
|
2
|
+
|
|
3
|
+
Después de cada commit:
|
|
4
|
+
|
|
5
|
+
1. Verifica que `python -m context_map.cli build --clean --brief` se ejecutó (hook pre-commit).
|
|
6
|
+
2. Si el commit tocó dependencias: actualiza el lockfile del gestor de paquetes.
|
|
7
|
+
3. Si el commit tocó arquitectura: revisa que el vault 4.0-RIESGOS no marcó nueva deuda.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
<!-- CONTEXTMAP:BEGIN -->
|
|
11
|
+
|
|
12
|
+
# Post-Commit — ContextMap
|
|
13
|
+
|
|
14
|
+
Después de cada commit:
|
|
15
|
+
|
|
16
|
+
1. Verifica que `python -m context_map.cli build --clean --brief` se ejecutó (hook pre-commit).
|
|
17
|
+
2. Si el commit tocó dependencias: actualiza el lockfile del gestor de paquetes.
|
|
18
|
+
3. Si el commit tocó arquitectura: revisa que el vault 4.0-RIESGOS no marcó nueva deuda.
|
|
19
|
+
|
|
20
|
+
<!-- CONTEXTMAP:END -->
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Dev Loop — ContextMap
|
|
2
|
+
|
|
3
|
+
Ciclo de trabajo estándar (generado por ContextMap):
|
|
4
|
+
|
|
5
|
+
1. **Entender**: lee `.context-map/CONTEXT.md` y el vault del proyecto.
|
|
6
|
+
2. **Planificar**: define el cambio antes de escribir código.
|
|
7
|
+
3. **Implementar**: respeta la arquitectura modular existente.
|
|
8
|
+
4. **Verificar**: ejecuta `python -m pytest` (100% en verde).
|
|
9
|
+
5. **ContextMap**: `python -m context_map.cli scan . && python -m context_map.cli build --clean --brief`.
|
|
10
|
+
6. **Commit**: Conventional Commits en español.
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<!-- CONTEXTMAP:BEGIN -->
|
|
14
|
+
|
|
15
|
+
# Dev Loop — ContextMap
|
|
16
|
+
|
|
17
|
+
Ciclo de trabajo estándar (generado por ContextMap):
|
|
18
|
+
|
|
19
|
+
1. **Entender**: lee `.context-map/CONTEXT.md` y el vault del proyecto.
|
|
20
|
+
2. **Planificar**: define el cambio antes de escribir código.
|
|
21
|
+
3. **Implementar**: respeta la arquitectura modular existente.
|
|
22
|
+
4. **Verificar**: ejecuta `python -m pytest` (100% en verde).
|
|
23
|
+
5. **ContextMap**: `python -m context_map.cli scan . && python -m context_map.cli build --clean --brief`.
|
|
24
|
+
6. **Commit**: Conventional Commits en español.
|
|
25
|
+
|
|
26
|
+
<!-- CONTEXTMAP:END -->
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
- id: context-map
|
|
2
|
+
name: ContextMap Auto Sync
|
|
3
|
+
description: Escanea y actualiza automáticamente la bóveda de Obsidian y briefs de ContextMap antes de cada commit.
|
|
4
|
+
entry: ctxmap build --clean --brief --quiet
|
|
5
|
+
language: python
|
|
6
|
+
stages: [pre-commit]
|
|
7
|
+
types: [python, markdown, yaml, json]
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Instrucciones para Agentes de IA — Context Map
|
|
2
|
+
|
|
3
|
+
Este documento establece las normas obligatorias, arquitectura y flujo de trabajo que **todos los Agentes de Inteligencia Artificial** (Antigravity, Cursor, Hermes, Claude, Windsurf, Copilot, etc.) deben seguir sin excepción al interactuar con este repositorio.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Reglas Globales de Comunicación y Código
|
|
8
|
+
|
|
9
|
+
* **Idioma**: Todas las respuestas, explicaciones y docstrings deben redactarse exclusivamente en **Español Técnico Profesional**.
|
|
10
|
+
* **Documentación**: Todo código generado debe incluir comentarios descriptivos y **Docstrings** formales (Google Style / PEP 257) en funciones, clases y módulos.
|
|
11
|
+
* **Tipado Fuerte**: Uso estricto de **Type Hinting** en Python (`List[Node]`, `Tuple[str, int]`, `Optional[Dict]`, etc.).
|
|
12
|
+
* **Limpieza de Raíz**: No crear archivos sueltos en la raíz (`PLAN.md`, `ROADMAP.txt`). Mantener únicamente los archivos de configuración e identidad (`README.md`, `LICENSE`, `pyproject.toml`, `AGENTS.md`, `.gitignore`).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 2. Arquitectura de Código (Clean Architecture Jerárquica)
|
|
17
|
+
|
|
18
|
+
El código de `context_map` está organizado bajo el principio de responsabilidad única en la convención `modulo/submodulo/archivo.py`:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
context_map/
|
|
22
|
+
├── core/ # Fundamentos del dominio
|
|
23
|
+
│ ├── models/ # Dataclasses (Node, Edge, Event)
|
|
24
|
+
│ ├── parsing/ # Parser de eventos y deserialización JSONL
|
|
25
|
+
│ ├── storage/ # Persistencia JSONL y snapshots
|
|
26
|
+
│ ├── normalization/ # Estandarización y clasificación semántica
|
|
27
|
+
│ └── generators/ # Generadores de resúmenes y Contexto Narrativo
|
|
28
|
+
├── domain/ # Lógica de negocio
|
|
29
|
+
│ ├── scanning/ # Escáner estático del proyecto
|
|
30
|
+
│ ├── synchronization/ # Sincronización incremental del grafo
|
|
31
|
+
│ ├── ingestion/ # Ingesta de documentos externos (MD/TXT/PDF → DOCUMENTO)
|
|
32
|
+
│ ├── ecosystem/ # Detección de stack/IDE y adaptación de reglas agénticas
|
|
33
|
+
│ ├── analysis/ # Análisis de readiness del sistema
|
|
34
|
+
│ ├── health/ # Diagnóstico y mantenimiento (doctor)
|
|
35
|
+
│ └── reporting/ # Reportes semanales de avance
|
|
36
|
+
├── application/ # CLI y orquestación
|
|
37
|
+
│ ├── cli/ # Parser principal de argumentos CLI
|
|
38
|
+
│ └── commands/ # Comandos unificados (build, scan, sync, etc.)
|
|
39
|
+
├── infrastructure/ # Integraciones externas
|
|
40
|
+
│ ├── integrations/ # Git, Hermes, Antigravity, Chat exports
|
|
41
|
+
│ └── analyzers/ # Analizadores AST de estructura y contenido
|
|
42
|
+
└── presentation/ # Generación de salidas visuales
|
|
43
|
+
├── vault/ # Generador de Vault Obsidian (atomic, consolidated, templates)
|
|
44
|
+
└── briefs/ # Generador de CONTEXT.md para Agentes
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 3. Protocolo de Inicio para Agentes (Ponerse en Contexto)
|
|
50
|
+
|
|
51
|
+
Cualquier agente que tome una tarea en este proyecto **DEBE** seguir estos pasos obligatorios antes de escribir o modificar código:
|
|
52
|
+
|
|
53
|
+
1. **Verificar el PROYECTO correcto**: el vault de ESTE proyecto es
|
|
54
|
+
`.context-map/vault-ContextMap/`. Si el usuario pregunta por OTRO proyecto (p. ej.
|
|
55
|
+
mi-app-utm) o por un vault que no es este, dilo ANTES de responder — nunca
|
|
56
|
+
respondas con el contexto de otro proyecto.
|
|
57
|
+
2. **Leer el Brief Ejecutivo**:
|
|
58
|
+
Consultar [.context-map/CONTEXT.md](file:///c:/Users/jose.cespedes/Desktop/PruebaContext/.context-map/CONTEXT.md) para conocer las métricas, riesgos críticos y tareas pendientes.
|
|
59
|
+
3. **Comprobar la FRESCURA del contexto**: si el brief avisa que el diario manual
|
|
60
|
+
es más nuevo que el build (sección "Estado del Contexto"), ejecuta
|
|
61
|
+
`ctxmap refresh .` ANTES de responder sobre el estado del proyecto.
|
|
62
|
+
4. **Leer los PENDIENTES REALES**: además del backlog generado (5.0-BACKLOG),
|
|
63
|
+
revisa SIEMPRE `.context-map/vault-ContextMap/7.0-MANUAL/BACKLOG.md` (si existe)
|
|
64
|
+
y el diario más reciente (`7.0-MANUAL/Diario/`). Los pendientes conversados con
|
|
65
|
+
el usuario viven ahí.
|
|
66
|
+
5. **Revisar el Backlog y Vault**:
|
|
67
|
+
Inspeccionar `.context-map/vault-ContextMap/2.0-IDEAS/2.1-Ideas-Pendientes/` y `5.0-BACKLOG/5.1-Tareas.md`.
|
|
68
|
+
6. **No Suponer Rutas o Lógica**:
|
|
69
|
+
Inspeccionar el código fuente antes de formular hipótesis de cambio.
|
|
70
|
+
|
|
71
|
+
> ⚠️ **NUNCA respondas "¿qué quedó pendiente?" basándote solo en un documento
|
|
72
|
+
> suelto (auditoría, CHANGELOG, docs/)** — cruza SIEMPRE el brief + backlog manual
|
|
73
|
+
> + diario más reciente. Esa es la fuente de verdad del proyecto.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 4. Topología Estricta en Árbol para Obsidian (Graph View) — REGLA INAMOVIBLE
|
|
78
|
+
|
|
79
|
+
> **Esta es la regla MÁS IMPORTANTE del renderizador. Ningún agente, refactor
|
|
80
|
+
> o "mejora" puede violarla. El Graph View de Obsidian DEBE verse como un
|
|
81
|
+
> árbol puro: cada nota cuelga de EXACTAMENTE UN padre, las ramas de ideas
|
|
82
|
+
> pendientes (2.1), futuras (2.2) y completadas (2.3) son INDEPENDIENTES y
|
|
83
|
+
> NUNCA se cruzan entre sí ni con otras secciones.**
|
|
84
|
+
|
|
85
|
+
### 4.1 Estructura del Árbol (obligatoria)
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
00-INDICE.md ← raíz (padre de todos)
|
|
89
|
+
├── 1.0-PROPOSITO/ ← sección raíz
|
|
90
|
+
│ └── 1.1, 1.2, 1.3 ← hojas → SOLO a su sección padre
|
|
91
|
+
├── 2.0-IDEAS/ ← sección raíz
|
|
92
|
+
│ ├── 2.1-Ideas-Pendientes/ ← RAMA INDEPENDIENTE
|
|
93
|
+
│ │ └── DEVOPS/DEVOPS-Pendientes.md ← índice de concepto (nombre ÚNICO)
|
|
94
|
+
│ │ └── idea_*.md ← nota → SOLO a su índice
|
|
95
|
+
│ ├── 2.2-Ideas-Futuras/ ← RAMA INDEPENDIENTE (solo si hay activas)
|
|
96
|
+
│ │ └── CONCEPTO/CONCEPTO-Futuras.md
|
|
97
|
+
│ ├── 2.3-Ideas-Completas-e-Implementadas/ ← RAMA INDEPENDIENTE
|
|
98
|
+
│ │ └── DEVOPS/DEVOPS-Completas.md
|
|
99
|
+
│ │ └── 01-DEVOPS-01-10.md ← batch → SOLO a su índice
|
|
100
|
+
│ └── 2.4-Ideas-Relevantes.md
|
|
101
|
+
├── 3.0-ESTRUCTURA/ → 3.1
|
|
102
|
+
├── 4.0-RIESGOS/ → notas de riesgo
|
|
103
|
+
├── 5.0-BACKLOG/ → 5.1
|
|
104
|
+
└── 6.0-HISTORIAL/ → 6.1, 6.2, 6.3
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 4.2 Reglas Obligatorias (violarlas = bug)
|
|
108
|
+
|
|
109
|
+
1. **CADA NOTA TIENE EXACTAMENTE UN PADRE** (árbol puro). El padre se
|
|
110
|
+
materializa como el ÚNICO wikilink con `⬅` (pie "Volver a..."). Ningún
|
|
111
|
+
nodo enlaza a más de un nivel superior, ni a nodos hermanos, ni entre
|
|
112
|
+
secciones de estado, ni a `00-INDICE.md` (salvo las 6 secciones raíz).
|
|
113
|
+
2. **Nivel 0 (`00-INDICE.md`)**: Enlaza **únicamente** a los 6 Nodos de
|
|
114
|
+
Sección Raíz (`1.0`, `2.0`, `3.0`, `4.0`, `5.0`, `6.0`).
|
|
115
|
+
3. **Nivel 1 (Secciones Raíz `X.0`)**: Enlazan a `00-INDICE.md` (su padre)
|
|
116
|
+
y a sus sub-nodos `X.Y` (sus hijos). Nada más.
|
|
117
|
+
4. **Nivel 2 y Nodos Hoja**: Enlazan **exclusivamente a su Sección Padre**
|
|
118
|
+
vía el pie `⬅ Volver a ...`. NUNCA de regreso a `00-INDICE.md`.
|
|
119
|
+
5. **Índices de concepto con nombre ÚNICO por estado**:
|
|
120
|
+
`{CONCEPTO}-Pendientes.md`, `{CONCEPTO}-Futuras.md`, `{CONCEPTO}-Completas.md`.
|
|
121
|
+
NUNCA `{CONCEPTO}.md` a secas: Obsidian fusiona archivos con el mismo
|
|
122
|
+
nombre base y mezclaría ideas pendientes con completas.
|
|
123
|
+
6. **PROHIBIDO enlazar por nombre corto ambiguo**: todo wikilink a un índice
|
|
124
|
+
de concepto usa su nombre único completo (con sufijo de estado). Las notas
|
|
125
|
+
de idea muestran el concepto como texto plano (`` ``Concepto`` ``), SIN
|
|
126
|
+
wikilink adicional al índice (el pie ya enlaza al padre).
|
|
127
|
+
7. **Los batches de ideas completadas se nombran `NN-CONCEPTO-INICIO-FIN.md`
|
|
128
|
+
y su índice DEBE enlazar a los batches reales** (nunca a `idea_*.md`
|
|
129
|
+
inexistentes → nodos fantasma).
|
|
130
|
+
8. **Enlaces a sub-secciones condicionales**: `2.0-IDEAS.md` solo enlaza a
|
|
131
|
+
`2.1` / `2.2` / `2.3` si existen nodos de ese estado. Enlaces rotos =
|
|
132
|
+
nodos fantasma = bug.
|
|
133
|
+
9. **`00-CONEXIONES.md` en modo jerárquico se renderiza SIN wikilinks**
|
|
134
|
+
(`con_wikilinks=False`): los nombres de archivo del modo jerárquico no
|
|
135
|
+
derivan del slug del título, así que los wikilinks crearían nodos fantasma.
|
|
136
|
+
|
|
137
|
+
### 4.3 Verificación Automática (inamovible)
|
|
138
|
+
|
|
139
|
+
- El test `context_map/__tests__/test_topologia_arbol.py` DEBE pasar antes
|
|
140
|
+
de cualquier commit (verificado por `python -m pytest`). Comprueba:
|
|
141
|
+
- 0 nodos sin padre (excepto `00-INDICE.md` y `00-CONEXIONES.md`)
|
|
142
|
+
- 0 colisiones de nombre base entre archivos del vault
|
|
143
|
+
- 0 wikilinks rotos (target que no existe como archivo)
|
|
144
|
+
- Cada índice de concepto termina en `-Pendientes/-Futuras/-Completas.md`
|
|
145
|
+
- El **pre-commit hook** regenera el vault con el código LOCAL
|
|
146
|
+
(`python -m context_map.cli build`) — NUNCA con el binario global `ctxmap`
|
|
147
|
+
desactualizado. Si el vault generado no pasa 4.3, el commit está roto.
|
|
148
|
+
|
|
149
|
+
### 4.4 Vault ÚNICO por proyecto
|
|
150
|
+
|
|
151
|
+
- El vault activo es `.context-map/vault-<NombreProyecto>` (ej:
|
|
152
|
+
`vault-ContextMap`, sin guión extra). El nombre lo resuelve el repo GitHub.
|
|
153
|
+
- PROHIBIDO acumular vaults paralelos obsoletos (`vault-Context-Map`,
|
|
154
|
+
`vault-TestAuto`, etc.): cualquier vault que no se regenera por `build`
|
|
155
|
+
debe moverse a `.context-map/_legacy/` o eliminarse. Solo debe existir UN
|
|
156
|
+
vault por proyecto para que Obsidian no mezcle grafos.
|
|
157
|
+
- **Sincronización Multi-Vault**: Todo cambio en `build` debe renderizarse
|
|
158
|
+
en `.context-map/vault/` y en `.context-map/vault-<project>/`
|
|
159
|
+
simultáneamente para que la vista de Obsidian se actualice en tiempo real.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 5. Metodología de Contexto Narrativo con Alma
|
|
164
|
+
|
|
165
|
+
Toda nota generada para una entidad en el Vault debe invocar `generar_contexto_narrativo(node)` en `context_map/core/generators/generadores.py` para inyectar su estructura polimórfica según el tipo de nodo:
|
|
166
|
+
|
|
167
|
+
* **`IDEA`**: ¿Por qué?, ¿De dónde surgió?, ¿Para qué?, ¿Cómo?, y tabla de **Pros y Contras**.
|
|
168
|
+
* **`RIESGO`**: ¿Qué riesgo es?, Ubicación, Impacto, Mitigación y **Matriz de Gravedad**.
|
|
169
|
+
* **`CAMBIO` / `CORRECCION`**: Modificación realizada, Razón del cambio, Archivos y **Verificación de No-Regresión**.
|
|
170
|
+
* **`BASE`**: Componente estructural, **Rol en la Arquitectura** e integraciones.
|
|
171
|
+
* **`PRUEBA`**: Funcionalidad validada, Criterios de Aceptación y comando `pytest`.
|
|
172
|
+
* **`FUTURO`**: Tarea pendiente (TODO), Ubicación en código y Prioridad.
|
|
173
|
+
|
|
174
|
+
### 5.1 HUMANIZAR TODOS LOS ARCHIVOS (regla obligatoria)
|
|
175
|
+
|
|
176
|
+
Al actualizar el contexto, el agente debe revisar y **redactar TODOS los
|
|
177
|
+
archivos del vault** (no solo `7.0-MANUAL/`): índices con propósito (no
|
|
178
|
+
conteos), narrativas sin plantillas vacías, títulos legibles, riesgos
|
|
179
|
+
deduplicados, historia con los mensajes reales, ideas con alma. **Guardar
|
|
180
|
+
siempre el contexto**: nunca borrar información con historia ni notas
|
|
181
|
+
manuales — lo tosco se redacta, no se elimina.
|
|
182
|
+
|
|
183
|
+
### 5.2 MEMORIA VIVA DEL PROYECTO (regla fundamental)
|
|
184
|
+
|
|
185
|
+
ContextMap es la **memoria del proyecto**, mantenida constantemente por el
|
|
186
|
+
agente: si durante el trabajo surge una idea, decisión o lección, se
|
|
187
|
+
**documenta automáticamente** (sin esperar a que lo pidan) en la nota del
|
|
188
|
+
día (`7.0-MANUAL/Diario/`) y, si es reutilizable, como conocimiento
|
|
189
|
+
accionable en `8.0-KNOWLEDGE/` (formato: Lección · Cómo se resolvió ·
|
|
190
|
+
Prompt específico · Instrucción específica · Conexiones). Lo conversado
|
|
191
|
+
siempre queda.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 6. Verificación Obligatoria y Commits
|
|
196
|
+
|
|
197
|
+
Antes de dar por completada cualquier tarea o comitear en Git:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# 1. Ejecutar tests unitarios (deben pasar 100%)
|
|
201
|
+
python -m pytest
|
|
202
|
+
|
|
203
|
+
# 2. Escanear y actualizar el mapa de contexto
|
|
204
|
+
python -m context_map.cli scan .
|
|
205
|
+
|
|
206
|
+
# 3. Reconstruir la bóveda de Obsidian y el brief de contexto
|
|
207
|
+
python -m context_map.cli build --clean --brief
|
|
208
|
+
|
|
209
|
+
# 4. Verificar readiness
|
|
210
|
+
python -m context_map.cli check .
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
* **Mensajes de Commit**: Usar la convención *Conventional Commits* en español (ej. `feat: ...`, `fix: ...`, `refactor: ...`, `docs: ...`).
|