sourcecode 0.3.0__tar.gz → 0.4.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.
Files changed (155) hide show
  1. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/ROADMAP.md +11 -4
  2. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/STATE.md +14 -12
  3. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-01-PLAN.md +141 -0
  4. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-01-SUMMARY.md +52 -0
  5. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-02-PLAN.md +134 -0
  6. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-02-SUMMARY.md +48 -0
  7. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-03-PLAN.md +131 -0
  8. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-03-SUMMARY.md +46 -0
  9. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-04-PLAN.md +143 -0
  10. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-04-SUMMARY.md +50 -0
  11. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-RESEARCH.md +165 -0
  12. {sourcecode-0.3.0 → sourcecode-0.4.0}/PKG-INFO +64 -1
  13. {sourcecode-0.3.0 → sourcecode-0.4.0}/README.md +63 -0
  14. {sourcecode-0.3.0 → sourcecode-0.4.0}/docs/schema.md +92 -3
  15. {sourcecode-0.3.0 → sourcecode-0.4.0}/pyproject.toml +1 -1
  16. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/__init__.py +1 -1
  17. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/cli.py +50 -0
  18. sourcecode-0.4.0/src/sourcecode/graph_analyzer.py +759 -0
  19. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/schema.py +46 -0
  20. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_cli.py +1 -0
  21. sourcecode-0.4.0/tests/test_graph_analyzer_polyglot.py +76 -0
  22. sourcecode-0.4.0/tests/test_graph_analyzer_python_node.py +86 -0
  23. sourcecode-0.4.0/tests/test_graph_schema.py +75 -0
  24. sourcecode-0.4.0/tests/test_integration_graph_modules.py +66 -0
  25. {sourcecode-0.3.0 → sourcecode-0.4.0}/.github/workflows/ci.yml +0 -0
  26. {sourcecode-0.3.0 → sourcecode-0.4.0}/.github/workflows/release.yml +0 -0
  27. {sourcecode-0.3.0 → sourcecode-0.4.0}/.gitignore +0 -0
  28. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/PROJECT.md +0 -0
  29. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/REQUIREMENTS.md +0 -0
  30. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/config.json +0 -0
  31. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-01-PLAN.md +0 -0
  32. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-01-SUMMARY.md +0 -0
  33. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-02-PLAN.md +0 -0
  34. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-02-SUMMARY.md +0 -0
  35. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-03-PLAN.md +0 -0
  36. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-03-SUMMARY.md +0 -0
  37. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-04-PLAN.md +0 -0
  38. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-04-SUMMARY.md +0 -0
  39. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-CONTEXT.md +0 -0
  40. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-DISCUSSION-LOG.md +0 -0
  41. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-RESEARCH.md +0 -0
  42. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-REVIEW.md +0 -0
  43. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-VERIFICATION.md +0 -0
  44. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-01-PLAN.md +0 -0
  45. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-01-SUMMARY.md +0 -0
  46. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-02-PLAN.md +0 -0
  47. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-02-SUMMARY.md +0 -0
  48. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-03-PLAN.md +0 -0
  49. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-03-SUMMARY.md +0 -0
  50. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-04-PLAN.md +0 -0
  51. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-04-SUMMARY.md +0 -0
  52. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-RESEARCH.md +0 -0
  53. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-01-PLAN.md +0 -0
  54. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-01-SUMMARY.md +0 -0
  55. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-02-PLAN.md +0 -0
  56. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-02-SUMMARY.md +0 -0
  57. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-RESEARCH.md +0 -0
  58. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-01-PLAN.md +0 -0
  59. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-01-SUMMARY.md +0 -0
  60. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-02-PLAN.md +0 -0
  61. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-02-SUMMARY.md +0 -0
  62. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-03-PLAN.md +0 -0
  63. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-03-SUMMARY.md +0 -0
  64. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-RESEARCH.md +0 -0
  65. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/.gitkeep +0 -0
  66. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-01-PLAN.md +0 -0
  67. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-01-SUMMARY.md +0 -0
  68. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-02-PLAN.md +0 -0
  69. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-02-SUMMARY.md +0 -0
  70. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-03-PLAN.md +0 -0
  71. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-03-SUMMARY.md +0 -0
  72. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-04-PLAN.md +0 -0
  73. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-04-SUMMARY.md +0 -0
  74. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-RESEARCH.md +0 -0
  75. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/.gitkeep +0 -0
  76. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-01-PLAN.md +0 -0
  77. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-01-SUMMARY.md +0 -0
  78. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-02-PLAN.md +0 -0
  79. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-02-SUMMARY.md +0 -0
  80. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-03-PLAN.md +0 -0
  81. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-03-SUMMARY.md +0 -0
  82. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-04-PLAN.md +0 -0
  83. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-04-SUMMARY.md +0 -0
  84. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-RESEARCH.md +0 -0
  85. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/07-grafos-de-codigo/.gitkeep +0 -0
  86. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/08-documentacion-extraida/.gitkeep +0 -0
  87. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/09-metricas-de-calidad/.gitkeep +0 -0
  88. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/10-contexto-git-y-operativo/.gitkeep +0 -0
  89. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/research/ARCHITECTURE.md +0 -0
  90. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/research/FEATURES.md +0 -0
  91. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/research/PITFALLS.md +0 -0
  92. {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/research/STACK.md +0 -0
  93. {sourcecode-0.3.0 → sourcecode-0.4.0}/.ruff.toml +0 -0
  94. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/classifier.py +0 -0
  95. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/dependency_analyzer.py +0 -0
  96. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/__init__.py +0 -0
  97. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/base.py +0 -0
  98. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/dart.py +0 -0
  99. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/dotnet.py +0 -0
  100. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/elixir.py +0 -0
  101. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/go.py +0 -0
  102. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/heuristic.py +0 -0
  103. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/java.py +0 -0
  104. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
  105. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/nodejs.py +0 -0
  106. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/parsers.py +0 -0
  107. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/php.py +0 -0
  108. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/project.py +0 -0
  109. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/python.py +0 -0
  110. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/ruby.py +0 -0
  111. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/rust.py +0 -0
  112. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/systems.py +0 -0
  113. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/terraform.py +0 -0
  114. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/tooling.py +0 -0
  115. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/redactor.py +0 -0
  116. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/scanner.py +0 -0
  117. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/serializer.py +0 -0
  118. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/tree_utils.py +0 -0
  119. {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/workspace.py +0 -0
  120. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/__init__.py +0 -0
  121. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/conftest.py +0 -0
  122. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
  123. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/fastapi_app/src/main.py +0 -0
  124. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/go_service/cmd/api/main.go +0 -0
  125. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/go_service/go.mod +0 -0
  126. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
  127. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/package.json +0 -0
  128. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
  129. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
  130. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
  131. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
  132. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
  133. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
  134. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_classifier.py +0 -0
  135. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_dependency_analyzer_node_python.py +0 -0
  136. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_dependency_analyzer_polyglot.py +0 -0
  137. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_dependency_schema.py +0 -0
  138. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_go_rust_java.py +0 -0
  139. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_nodejs.py +0 -0
  140. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_php_ruby_dart.py +0 -0
  141. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_python.py +0 -0
  142. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_universal_managed.py +0 -0
  143. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_universal_systems.py +0 -0
  144. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detectors_base.py +0 -0
  145. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration.py +0 -0
  146. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration_dependencies.py +0 -0
  147. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration_detection.py +0 -0
  148. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration_multistack.py +0 -0
  149. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration_universal.py +0 -0
  150. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_packaging.py +0 -0
  151. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_real_projects.py +0 -0
  152. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_redactor.py +0 -0
  153. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_scanner.py +0 -0
  154. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_schema.py +0 -0
  155. {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_workspace_analyzer.py +0 -0
@@ -11,8 +11,8 @@ Sourcecode se construye en diez fases que van desde el scaffold del proyecto has
11
11
  - [x] **Fase 3: Clasificacion y Multi-Stack** - TypeClassifier, soporte monorepo/fullstack y niveles de confianza
12
12
  - [x] **Fase 4: Pulido y Publicacion** - Tests de integracion sobre proyectos reales, documentacion, CI/CD y publicacion en PyPI
13
13
  - [x] **Fase 5: Scanner Universal** - Ampliar stacks, ecosistemas y senales de deteccion para cubrir mas tipos de proyectos reales
14
- - [ ] **Fase 6: Dependencias Inteligentes** - Dependencias exactas, transitivas y resolucion multi-ecosistema con `--dependencies`
15
- - [ ] **Fase 7: Grafos de Codigo** - Grafo de modulos, imports, llamadas y jerarquias estructurales con `--graph-modules`
14
+ - [x] **Fase 6: Dependencias Inteligentes** - Dependencias exactas, transitivas y resolucion multi-ecosistema con `--dependencies`
15
+ - [x] **Fase 7: Grafos de Codigo** - Grafo de modulos, imports, llamadas y jerarquias estructurales con `--graph-modules`
16
16
  - [ ] **Fase 8: Documentacion Extraida** - Docstrings, comentarios y resúmenes de modulos consumibles por IA con `--docs`
17
17
  - [ ] **Fase 9: Metricas de Calidad** - LOC, complejidad, tests asociados y cobertura con `--full-metrics`
18
18
  - [ ] **Fase 10: Contexto Git y Operativo** - Historia git, volatilidad, CI/CD, Docker y metadata de entorno con `--git-history`
@@ -139,7 +139,14 @@ Plans:
139
139
  2. El output identifica nodos clave como funciones top-level, clases o entry points y, cuando sea factible con analisis seguro, relaciones de llamada o uso entre ellos
140
140
  3. En proyectos grandes o multi-stack, el analisis se degrada con seguridad mediante limites de profundidad/tamano en lugar de bloquearse o intentar parseo total no acotado
141
141
  4. El schema deja claro el nivel de confianza y el metodo de construccion del grafo (`ast`, `heuristic`, `unresolved`) para que el consumidor sepa cuanto confiar en cada arista
142
- **Plans**: 0 planes
142
+ **Status**: COMPLETE — implemented 2026-04-08; module graph integrated behind `--graph-modules`, full suite green
143
+ **Plans**: 4 planes
144
+
145
+ Plans:
146
+ - [x] 07-01: Base del grafo — schema, flag `--graph-modules` y analizador lazy desacoplado
147
+ - [x] 07-02: Python y Node.js/TypeScript — imports internos, nodos de modulo y degradacion segura
148
+ - [x] 07-03: Relaciones estructurales y soporte polyglot — llamadas simples, jerarquias basicas y soporte inicial Go/JVM
149
+ - [x] 07-04: Integracion final — workspaces, limites de analisis, tests end-to-end y documentacion publica del contrato
143
150
  **UI hint**: no
144
151
 
145
152
  ### Fase 8: Documentacion Extraida
@@ -191,7 +198,7 @@ Las fases se ejecutan en orden numerico: 1 → 2 → 3 → 4 → 5 → 6 → 7
191
198
  | 4. Pulido y Publicacion | 3/3 | Complete | 2026-04-07 |
192
199
  | 5. Scanner Universal | 4/4 | Complete | 2026-04-07 |
193
200
  | 6. Dependencias Inteligentes | 4/4 | Complete | 2026-04-08 |
194
- | 7. Grafos de Codigo | 0/0 | Not planned | - |
201
+ | 7. Grafos de Codigo | 4/4 | Complete | 2026-04-08 |
195
202
  | 8. Documentacion Extraida | 0/0 | Not planned | - |
196
203
  | 9. Metricas de Calidad | 0/0 | Not planned | - |
197
204
  | 10. Contexto Git y Operativo | 0/0 | Not planned | - |
@@ -4,14 +4,14 @@ milestone: v1.0
4
4
  milestone_name: milestone
5
5
  status: in_progress
6
6
  stopped_at: Phase 05 execution complete; roadmap extended with future universal-analysis phases
7
- last_updated: "2026-04-08T10:10:00.000Z"
8
- last_activity: 2026-04-08 -- Phase 06 completed
7
+ last_updated: "2026-04-08T11:25:00.000Z"
8
+ last_activity: 2026-04-08 -- Phase 07 completed
9
9
  progress:
10
10
  total_phases: 10
11
- completed_phases: 6
12
- total_plans: 21
13
- completed_plans: 21
14
- percent: 60
11
+ completed_phases: 7
12
+ total_plans: 25
13
+ completed_plans: 25
14
+ percent: 70
15
15
  ---
16
16
 
17
17
  # Project State
@@ -21,16 +21,16 @@ progress:
21
21
  See: .planning/PROJECT.md (updated 2026-04-07)
22
22
 
23
23
  **Core value:** Un agente IA que recibe el output de esta herramienta llega al proyecto ya informado — no necesita preguntar lo obvio ni explorar ciegamente el codigo.
24
- **Current focus:** Fase 06 completada; siguiente paso natural: planificar grafos de codigo
24
+ **Current focus:** Fase 07 completada; siguiente paso natural: planificar documentacion extraida
25
25
 
26
26
  ## Current Position
27
27
 
28
- Phase: 06 (dependencias-inteligentes) — COMPLETE
28
+ Phase: 07 (grafos-de-codigo) — COMPLETE
29
29
  Plan: 4 of 4
30
- Status: Phase 06 complete
31
- Last activity: 2026-04-08 -- Phase 06 completed
30
+ Status: Phase 07 complete
31
+ Last activity: 2026-04-08 -- Phase 07 completed
32
32
 
33
- Progress: [██████░░░░] 60%
33
+ Progress: [███████░░░] 70%
34
34
 
35
35
  ## Performance Metrics
36
36
 
@@ -95,6 +95,8 @@ None.
95
95
  - Phase 10 added: Contexto git y operativo — historia reciente, volatilidad, CI/CD y metadata segura bajo `--git-history`.
96
96
  - Phase 6 planned in 4 planes: base de schema/CLI, Node+Python, ecosistemas polyglot y cierre end-to-end con workspaces/docs.
97
97
  - Phase 6 completed: `--dependencies` ahora expone versiones declaradas/resueltas, transitivas conservadoras y contexto por workspace.
98
+ - Phase 7 planned in 4 planes: base de schema/CLI, Python+Node, relaciones extra/polyglot y cierre end-to-end con workspaces/docs.
99
+ - Phase 7 completed: `--graph-modules` ahora expone nodos, aristas, metodos y limitaciones del grafo con soporte por workspace.
98
100
 
99
101
  ### Blockers/Concerns
100
102
 
@@ -105,4 +107,4 @@ None.
105
107
  Last session: 2026-04-07T19:37:00Z
106
108
  Stopped at: Phase 04 execution complete — pytest green; docs and workflows added
107
109
  Resume file: None
108
- Next action: /gsd:plan-phase 7
110
+ Next action: /gsd:plan-phase 8
@@ -0,0 +1,141 @@
1
+ ---
2
+ phase: 07-grafos-de-codigo
3
+ plan: 01
4
+ type: execute
5
+ wave: 1
6
+ depends_on: []
7
+ files_modified:
8
+ - src/sourcecode/cli.py
9
+ - src/sourcecode/schema.py
10
+ - src/sourcecode/graph_analyzer.py
11
+ - src/sourcecode/serializer.py
12
+ - tests/test_graph_schema.py
13
+ - tests/test_cli.py
14
+ autonomous: true
15
+ requirements:
16
+ - GRAPH-01
17
+ - OUT-08
18
+
19
+ must_haves:
20
+ truths:
21
+ - "La CLI expone `--graph-modules` sin encarecer `sourcecode .`"
22
+ - "El schema del grafo es opcional, claro y compatible hacia atras"
23
+ - "Existe un analizador lazy desacoplado para el grafo de codigo"
24
+ artifacts:
25
+ - path: "src/sourcecode/schema.py"
26
+ provides: "Modelo publico de nodos, aristas y summary del grafo"
27
+ - path: "src/sourcecode/cli.py"
28
+ provides: "Flag `--graph-modules` e integracion opt-in"
29
+ - path: "src/sourcecode/graph_analyzer.py"
30
+ provides: "Entrada comun del analisis estructural"
31
+ - path: "tests/test_graph_schema.py"
32
+ provides: "Cobertura del contrato y defaults del grafo"
33
+ ---
34
+
35
+ <objective>
36
+ Preparar la base de la fase 7: contrato de datos del grafo, flag CLI y esqueleto del analizador sin implementar todavia todas las relaciones por lenguaje.
37
+
38
+ Purpose: Fijar una base comun para que los resolutores por lenguaje puedan crecer sin rehacer el contrato publico.
39
+
40
+ Output: schema de grafo, CLI opt-in y analizador lazy desacoplado.
41
+ </objective>
42
+
43
+ <execution_context>
44
+ @.codex/get-shit-done/workflows/execute-plan.md
45
+ @.codex/get-shit-done/templates/summary.md
46
+ </execution_context>
47
+
48
+ <context>
49
+ @.planning/ROADMAP.md
50
+ @.planning/phases/07-grafos-de-codigo/07-RESEARCH.md
51
+ @src/sourcecode/cli.py
52
+ @src/sourcecode/schema.py
53
+ @src/sourcecode/serializer.py
54
+ </context>
55
+
56
+ <tasks>
57
+
58
+ <task type="auto" tdd="true">
59
+ <name>Tarea 1: Extender schema con nodos, aristas y summary</name>
60
+ <files>src/sourcecode/schema.py, tests/test_graph_schema.py</files>
61
+
62
+ <behavior>
63
+ - el output puede incluir un bloque de grafo sin romper consumidores actuales
64
+ - cada arista indica tipo, confianza y metodo de construccion
65
+ - el summary distingue entre analisis no solicitado, cobertura parcial y limites aplicados
66
+ </behavior>
67
+
68
+ <action>
69
+ Crear tests RED para:
70
+
71
+ - serializacion de nodos de modulo y funcion
72
+ - serializacion de aristas `imports` y `calls`
73
+ - `SourceMap` sin `--graph-modules` sigue siendo valido
74
+
75
+ Implementar dataclasses o tipos equivalentes para:
76
+
77
+ - nodos del grafo
78
+ - aristas del grafo
79
+ - resumen del analisis
80
+ - campo opcional en `SourceMap`
81
+ </action>
82
+
83
+ <verify>
84
+ <automated>.venv/bin/python -m pytest tests/test_graph_schema.py -q</automated>
85
+ </verify>
86
+
87
+ <acceptance_criteria>
88
+ - El contrato del grafo es serializable, claro y extensible
89
+ - El schema previo sigue intacto cuando no se solicita analisis estructural
90
+ </acceptance_criteria>
91
+
92
+ <done>El modelo de datos del grafo queda fijado.</done>
93
+ </task>
94
+
95
+ <task type="auto" tdd="true">
96
+ <name>Tarea 2: Añadir flag CLI y analizador lazy</name>
97
+ <files>src/sourcecode/cli.py, src/sourcecode/graph_analyzer.py, tests/test_cli.py</files>
98
+
99
+ <behavior>
100
+ - `sourcecode . --graph-modules` activa el analizador estructural
101
+ - `sourcecode .` no hace trabajo extra ni rellena el bloque de grafo
102
+ - la salida sigue siendo valida en JSON/YAML y no invade `--compact`
103
+ </behavior>
104
+
105
+ <action>
106
+ Crear tests RED para:
107
+
108
+ - `--graph-modules` activa el analizador
109
+ - sin flag, el analizador no se ejecuta
110
+ - `--compact` no incluye el bloque pesado del grafo
111
+
112
+ Implementar el esqueleto de `GraphAnalyzer` y conectarlo de forma lazy desde la CLI.
113
+ </action>
114
+
115
+ <verify>
116
+ <automated>.venv/bin/python -m pytest tests/test_cli.py tests/test_graph_schema.py -q</automated>
117
+ </verify>
118
+
119
+ <acceptance_criteria>
120
+ - El coste del grafo queda detras del flag
121
+ - La infraestructura base de la fase queda lista para parseo por lenguaje
122
+ </acceptance_criteria>
123
+
124
+ <done>La CLI ya tiene la puerta de entrada al grafo estructural.</done>
125
+ </task>
126
+
127
+ </tasks>
128
+
129
+ <verification>
130
+ ## Verificacion global
131
+
132
+ - `.venv/bin/python -m pytest tests/test_graph_schema.py tests/test_cli.py -q`
133
+ - validar que `sourcecode .` sin flag no serializa bloque de grafo
134
+ </verification>
135
+
136
+ <success_criteria>
137
+ ## Success Criteria
138
+
139
+ - Existe un contrato estable para grafos internos
140
+ - `--graph-modules` queda integrado como opcion opt-in y lazy
141
+ </success_criteria>
@@ -0,0 +1,52 @@
1
+ ---
2
+ phase: 07-grafos-de-codigo
3
+ plan: 01
4
+ subsystem: api
5
+ tags: [graph, schema, cli, lazy-loading]
6
+ requires:
7
+ - phase: 06-dependencias-inteligentes
8
+ provides: bloques opt-in en schema/CLI y analizador desacoplado
9
+ provides:
10
+ - Modelo publico de grafo estructural
11
+ - Flag CLI `--graph-modules`
12
+ - GraphAnalyzer base
13
+ affects: [schema, cli, output]
14
+ tech-stack:
15
+ added: []
16
+ patterns: [lazy-analysis, backward-compatible-schema]
17
+ key-files:
18
+ created:
19
+ - src/sourcecode/graph_analyzer.py
20
+ - tests/test_graph_schema.py
21
+ modified:
22
+ - src/sourcecode/schema.py
23
+ - src/sourcecode/cli.py
24
+ - tests/test_cli.py
25
+ key-decisions:
26
+ - "El grafo vive en `module_graph` como bloque opcional del schema"
27
+ - "El comando base no construye el grafo salvo que el usuario active `--graph-modules`"
28
+ patterns-established:
29
+ - "Analisis estructural pesado detras de flag opt-in"
30
+ requirements-completed: [GRAPH-01, OUT-08]
31
+ duration: 14min
32
+ completed: 2026-04-08
33
+ ---
34
+
35
+ # Phase 07-01 Summary
36
+
37
+ **Base del grafo: schema, CLI y analizador lazy**
38
+
39
+ ## Accomplishments
40
+
41
+ - Se añadieron `GraphNode`, `GraphEdge`, `ModuleGraphSummary` y `ModuleGraph` al schema público.
42
+ - La CLI incorpora `--graph-modules` sin penalizar `sourcecode .`.
43
+ - Se creó `GraphAnalyzer` como punto de entrada común para el análisis estructural.
44
+ - `compact_view()` sigue excluyendo el bloque pesado del grafo.
45
+
46
+ ## Verification
47
+
48
+ - `.venv/bin/python -m pytest tests/test_graph_schema.py tests/test_cli.py -q`
49
+
50
+ ## Notes
51
+
52
+ - La fase reutiliza el patrón opt-in introducido en dependencias para mantener el producto rápido por defecto.
@@ -0,0 +1,134 @@
1
+ ---
2
+ phase: 07-grafos-de-codigo
3
+ plan: 02
4
+ type: execute
5
+ wave: 2
6
+ depends_on:
7
+ - 07-01
8
+ files_modified:
9
+ - src/sourcecode/graph_analyzer.py
10
+ - src/sourcecode/tree_utils.py
11
+ - tests/test_graph_analyzer_python_node.py
12
+ - tests/test_integration_graph_modules.py
13
+ autonomous: true
14
+ requirements:
15
+ - GRAPH-01
16
+ - GRAPH-03
17
+
18
+ must_haves:
19
+ truths:
20
+ - "Python y Node.js/TypeScript exponen grafo de imports internos entre modulos"
21
+ - "El analisis distingue aristas internas de externas o no resueltas"
22
+ - "Los parseos degradan con seguridad ante sintaxis no soportada o archivos grandes"
23
+ artifacts:
24
+ - path: "src/sourcecode/graph_analyzer.py"
25
+ provides: "Resolucion inicial de imports para Python y Node.js/TypeScript"
26
+ - path: "tests/test_graph_analyzer_python_node.py"
27
+ provides: "Cobertura unitaria de modulos y aristas de imports"
28
+ - path: "tests/test_integration_graph_modules.py"
29
+ provides: "Smoke e integracion CLI para los lenguajes prioritarios"
30
+ ---
31
+
32
+ <objective>
33
+ Implementar la primera oleada fuerte del grafo sobre los ecosistemas mas rentables para analisis local: Python y Node.js/TypeScript.
34
+
35
+ Purpose: Entregar valor practico rapido con imports internos y modulos relevantes antes de ampliar el modelo a relaciones mas profundas.
36
+
37
+ Output: parseo de imports, nodos de modulo y salida estable para Python y Node.
38
+ </objective>
39
+
40
+ <execution_context>
41
+ @.codex/get-shit-done/workflows/execute-plan.md
42
+ @.codex/get-shit-done/templates/summary.md
43
+ </execution_context>
44
+
45
+ <context>
46
+ @.planning/ROADMAP.md
47
+ @.planning/phases/07-grafos-de-codigo/07-RESEARCH.md
48
+ @.planning/phases/07-grafos-de-codigo/07-01-PLAN.md
49
+ @src/sourcecode/graph_analyzer.py
50
+ @src/sourcecode/tree_utils.py
51
+ @src/sourcecode/detectors/python.py
52
+ @src/sourcecode/detectors/nodejs.py
53
+ </context>
54
+
55
+ <tasks>
56
+
57
+ <task type="auto" tdd="true">
58
+ <name>Tarea 1: Grafo de imports para Python</name>
59
+ <files>src/sourcecode/graph_analyzer.py, tests/test_graph_analyzer_python_node.py, tests/test_integration_graph_modules.py</files>
60
+
61
+ <behavior>
62
+ - `import` y `from ... import ...` entre modulos internos generan aristas `imports`
63
+ - funciones y clases top-level relevantes aparecen como nodos cuando el AST es valido
64
+ - errores de parseo no rompen el analisis global
65
+ </behavior>
66
+
67
+ <action>
68
+ Crear fixtures/tests RED para:
69
+
70
+ - paquete Python con imports relativos e internos
71
+ - modulo con funciones top-level y una clase
72
+ - archivo con sintaxis rota o no soportada que deba degradar a warning
73
+
74
+ Implementar parseo con `ast` estandar y linking de modulos internos por path.
75
+ </action>
76
+
77
+ <verify>
78
+ <automated>.venv/bin/python -m pytest tests/test_graph_analyzer_python_node.py -q -k python</automated>
79
+ </verify>
80
+
81
+ <acceptance_criteria>
82
+ - Python entrega imports internos fiables y nodos utiles
83
+ - El analisis soporta degradacion segura ante parseo fallido
84
+ </acceptance_criteria>
85
+
86
+ <done>Python queda cubierto para el grafo de modulos.</done>
87
+ </task>
88
+
89
+ <task type="auto" tdd="true">
90
+ <name>Tarea 2: Grafo de imports para Node.js y TypeScript</name>
91
+ <files>src/sourcecode/graph_analyzer.py, src/sourcecode/tree_utils.py, tests/test_graph_analyzer_python_node.py, tests/test_integration_graph_modules.py</files>
92
+
93
+ <behavior>
94
+ - `import ... from` y `require()` internos generan aristas `imports`
95
+ - TypeScript y JavaScript comparten un modelo comun de modulo
96
+ - rutas relativas se resuelven sin depender de bundlers ni toolchains
97
+ </behavior>
98
+
99
+ <action>
100
+ Crear fixtures/tests RED para:
101
+
102
+ - proyecto TS con imports relativos
103
+ - proyecto JS con `require()`
104
+ - caso con alias o import no resoluble que deba quedar marcado como `unresolved`
105
+
106
+ Implementar parseo textual seguro y resolucion interna por convenciones de archivos (`index`, extensiones `.js/.ts/.tsx`).
107
+ </action>
108
+
109
+ <verify>
110
+ <automated>.venv/bin/python -m pytest tests/test_graph_analyzer_python_node.py -q -k "node or typescript"</automated>
111
+ </verify>
112
+
113
+ <acceptance_criteria>
114
+ - Node.js/TypeScript ya no se quedan sin grafo estructural basico
115
+ - Las aristas ambiguas se etiquetan en lugar de inventarse
116
+ </acceptance_criteria>
117
+
118
+ <done>Node.js y TypeScript quedan cubiertos para imports internos.</done>
119
+ </task>
120
+
121
+ </tasks>
122
+
123
+ <verification>
124
+ ## Verificacion global
125
+
126
+ - `.venv/bin/python -m pytest tests/test_graph_analyzer_python_node.py tests/test_integration_graph_modules.py -q`
127
+ </verification>
128
+
129
+ <success_criteria>
130
+ ## Success Criteria
131
+
132
+ - Python y Node.js/TypeScript cubren imports internos con degradacion segura
133
+ - El grafo ya entrega valor practico en los lenguajes mas comunes
134
+ </success_criteria>
@@ -0,0 +1,48 @@
1
+ ---
2
+ phase: 07-grafos-de-codigo
3
+ plan: 02
4
+ subsystem: graph
5
+ tags: [python, nodejs, typescript, imports]
6
+ requires:
7
+ - phase: 07-grafos-de-codigo
8
+ provides: schema del grafo y CLI lazy
9
+ provides:
10
+ - Grafo de imports para Python
11
+ - Grafo de imports para Node.js y TypeScript
12
+ - Nodos de modulo, funcion y clase en lenguajes prioritarios
13
+ affects: [graph, output]
14
+ tech-stack:
15
+ added: []
16
+ patterns: [ast-python, heuristic-node-resolution]
17
+ key-files:
18
+ created:
19
+ - tests/test_graph_analyzer_python_node.py
20
+ - tests/test_integration_graph_modules.py
21
+ modified:
22
+ - src/sourcecode/graph_analyzer.py
23
+ key-decisions:
24
+ - "Python usa `ast` estandar para imports, funciones, clases y llamadas simples"
25
+ - "Node.js/TypeScript usa resolucion textual segura para imports relativos y `require()`"
26
+ requirements-completed: [GRAPH-01, GRAPH-03]
27
+ duration: 20min
28
+ completed: 2026-04-08
29
+ ---
30
+
31
+ # Phase 07-02 Summary
32
+
33
+ **Python y Node.js/TypeScript con imports internos y nodos útiles**
34
+
35
+ ## Accomplishments
36
+
37
+ - Python ahora expone imports internos, funciones top-level, clases, `contains`, `calls` y `extends` cuando el AST lo permite.
38
+ - Node.js y TypeScript resuelven imports relativos y `require()` sin toolchains externas.
39
+ - Los parse errors e imports no resolubles se registran en `module_graph.summary.limitations`.
40
+ - Se añadieron tests unitarios e integración CLI para ambos ecosistemas.
41
+
42
+ ## Verification
43
+
44
+ - `.venv/bin/python -m pytest tests/test_graph_analyzer_python_node.py tests/test_integration_graph_modules.py -q`
45
+
46
+ ## Notes
47
+
48
+ - Se priorizó valor práctico y trazabilidad sobre profundidad semántica total.
@@ -0,0 +1,131 @@
1
+ ---
2
+ phase: 07-grafos-de-codigo
3
+ plan: 03
4
+ type: execute
5
+ wave: 3
6
+ depends_on:
7
+ - 07-01
8
+ files_modified:
9
+ - src/sourcecode/graph_analyzer.py
10
+ - tests/test_graph_analyzer_polyglot.py
11
+ - tests/test_integration_graph_modules.py
12
+ autonomous: true
13
+ requirements:
14
+ - GRAPH-02
15
+ - GRAPH-03
16
+
17
+ must_haves:
18
+ truths:
19
+ - "El grafo incorpora relaciones estructurales adicionales sin prometer semantica completa"
20
+ - "Go y JVM reciben soporte inicial al menos para imports y tipos principales"
21
+ - "Las aristas indican metodo y confianza segun el parser usado"
22
+ artifacts:
23
+ - path: "src/sourcecode/graph_analyzer.py"
24
+ provides: "Relaciones de llamada/jerarquia seguras y soporte polyglot inicial"
25
+ - path: "tests/test_graph_analyzer_polyglot.py"
26
+ provides: "Cobertura unitaria de Go y JVM, mas relaciones extra"
27
+ ---
28
+
29
+ <objective>
30
+ Ampliar el grafo con relaciones estructurales adicionales y soporte inicial para otros lenguajes ya soportados por el scanner.
31
+
32
+ Purpose: Subir el valor del grafo sin caer en promesas de semantica total ni analisis interprocedural costoso.
33
+
34
+ Output: llamadas simples, jerarquias basicas y cobertura inicial para Go/JVM.
35
+ </objective>
36
+
37
+ <execution_context>
38
+ @.codex/get-shit-done/workflows/execute-plan.md
39
+ @.codex/get-shit-done/templates/summary.md
40
+ </execution_context>
41
+
42
+ <context>
43
+ @.planning/ROADMAP.md
44
+ @.planning/phases/07-grafos-de-codigo/07-RESEARCH.md
45
+ @.planning/phases/07-grafos-de-codigo/07-02-PLAN.md
46
+ @src/sourcecode/graph_analyzer.py
47
+ @src/sourcecode/detectors/go.py
48
+ @src/sourcecode/detectors/java.py
49
+ @src/sourcecode/detectors/jvm_ext.py
50
+ </context>
51
+
52
+ <tasks>
53
+
54
+ <task type="auto" tdd="true">
55
+ <name>Tarea 1: Relaciones de llamadas y jerarquias basicas</name>
56
+ <files>src/sourcecode/graph_analyzer.py, tests/test_graph_analyzer_polyglot.py</files>
57
+
58
+ <behavior>
59
+ - funciones top-level pueden generar aristas `calls` simples cuando el AST lo permita
60
+ - clases y herencia simple pueden emitir aristas `extends` o `contains`
61
+ - el metodo de construccion queda explicitado como `ast` o `heuristic`
62
+ </behavior>
63
+
64
+ <action>
65
+ Crear tests RED para:
66
+
67
+ - modulo Python con una funcion que llama a otra
68
+ - clase que hereda de otra en un caso simple
69
+ - caso ambiguo que deba quedarse sin arista en vez de inferirse mal
70
+
71
+ Implementar solo relaciones sintacticas baratas y defendibles.
72
+ </action>
73
+
74
+ <verify>
75
+ <automated>.venv/bin/python -m pytest tests/test_graph_analyzer_polyglot.py -q -k "calls or extends"</automated>
76
+ </verify>
77
+
78
+ <acceptance_criteria>
79
+ - El grafo gana profundidad sin vender precision falsa
80
+ - La semantica de las aristas queda trazable por metodo y confianza
81
+ </acceptance_criteria>
82
+
83
+ <done>El grafo ya no se limita solo a imports.</done>
84
+ </task>
85
+
86
+ <task type="auto" tdd="true">
87
+ <name>Tarea 2: Soporte inicial para Go y JVM</name>
88
+ <files>src/sourcecode/graph_analyzer.py, tests/test_graph_analyzer_polyglot.py, tests/test_integration_graph_modules.py</files>
89
+
90
+ <behavior>
91
+ - Go expone imports y funciones top-level razonables
92
+ - Java/Kotlin/Scala exponen imports y tipos principales cuando la estructura sea clara
93
+ - cuando falte precision, el grafo marca `heuristic` o `unresolved`
94
+ </behavior>
95
+
96
+ <action>
97
+ Crear fixtures/tests RED para:
98
+
99
+ - paquete Go con imports internos
100
+ - clase Java o Kotlin con imports y tipo principal
101
+ - caso JVM ambiguo que degrade a cobertura parcial
102
+
103
+ Implementar soporte inicial priorizando robustez y coste bajo.
104
+ </action>
105
+
106
+ <verify>
107
+ <automated>.venv/bin/python -m pytest tests/test_graph_analyzer_polyglot.py -q -k "go or java or kotlin or scala"</automated>
108
+ </verify>
109
+
110
+ <acceptance_criteria>
111
+ - Go y JVM tienen al menos una base de grafo util
112
+ - La salida sigue siendo honesta sobre cobertura y limites
113
+ </acceptance_criteria>
114
+
115
+ <done>La fase ya cubre grafo estructural inicial en varios stacks.</done>
116
+ </task>
117
+
118
+ </tasks>
119
+
120
+ <verification>
121
+ ## Verificacion global
122
+
123
+ - `.venv/bin/python -m pytest tests/test_graph_analyzer_polyglot.py tests/test_integration_graph_modules.py -q`
124
+ </verification>
125
+
126
+ <success_criteria>
127
+ ## Success Criteria
128
+
129
+ - El grafo incorpora relaciones mas utiles que simples imports
130
+ - Go y JVM reciben soporte inicial sin romper el presupuesto de analisis
131
+ </success_criteria>
@@ -0,0 +1,46 @@
1
+ ---
2
+ phase: 07-grafos-de-codigo
3
+ plan: 03
4
+ subsystem: graph
5
+ tags: [go, jvm, extends, calls, polyglot]
6
+ requires:
7
+ - phase: 07-grafos-de-codigo
8
+ provides: analizador base y cobertura Python/Node
9
+ provides:
10
+ - Soporte inicial Go para imports y funciones top-level
11
+ - Soporte inicial JVM para imports y jerarquias basicas
12
+ - Relaciones estructurales adicionales mas alla de imports
13
+ affects: [graph]
14
+ tech-stack:
15
+ added: []
16
+ patterns: [polyglot-heuristics, explicit-confidence]
17
+ key-files:
18
+ created:
19
+ - tests/test_graph_analyzer_polyglot.py
20
+ modified:
21
+ - src/sourcecode/graph_analyzer.py
22
+ key-decisions:
23
+ - "Go se resuelve a nivel de modulo usando `go.mod` y paths internos del mismo modulo"
24
+ - "JVM se cubre de forma inicial con imports y `extends` basicos via parseo textual seguro"
25
+ requirements-completed: [GRAPH-02, GRAPH-03]
26
+ duration: 18min
27
+ completed: 2026-04-08
28
+ ---
29
+
30
+ # Phase 07-03 Summary
31
+
32
+ **Relaciones estructurales adicionales y cobertura polyglot inicial**
33
+
34
+ ## Accomplishments
35
+
36
+ - Go ahora expone imports internos y funciones top-level razonables.
37
+ - Java/Kotlin/Scala incorporan imports y relaciones `extends` simples cuando pueden resolverse localmente.
38
+ - El grafo gana profundidad con `contains`, `calls` y `extends` sin depender de compiladores ni indexadores externos.
39
+
40
+ ## Verification
41
+
42
+ - `.venv/bin/python -m pytest tests/test_graph_analyzer_polyglot.py -q`
43
+
44
+ ## Notes
45
+
46
+ - La cobertura sigue siendo conservadora: cuando no hay certeza suficiente, el análisis deja limitaciones explícitas.