sourcecode 0.2.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.2.0 → sourcecode-0.4.0}/.planning/ROADMAP.md +87 -3
  2. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/STATE.md +24 -15
  3. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-01-PLAN.md +140 -0
  4. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-01-SUMMARY.md +52 -0
  5. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-02-PLAN.md +135 -0
  6. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-02-SUMMARY.md +47 -0
  7. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-03-PLAN.md +132 -0
  8. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-03-SUMMARY.md +46 -0
  9. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-04-PLAN.md +143 -0
  10. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-04-SUMMARY.md +51 -0
  11. sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/06-RESEARCH.md +171 -0
  12. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/.gitkeep +0 -0
  13. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-01-PLAN.md +141 -0
  14. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-01-SUMMARY.md +52 -0
  15. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-02-PLAN.md +134 -0
  16. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-02-SUMMARY.md +48 -0
  17. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-03-PLAN.md +131 -0
  18. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-03-SUMMARY.md +46 -0
  19. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-04-PLAN.md +143 -0
  20. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-04-SUMMARY.md +50 -0
  21. sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-RESEARCH.md +165 -0
  22. sourcecode-0.4.0/.planning/phases/08-documentacion-extraida/.gitkeep +0 -0
  23. sourcecode-0.4.0/.planning/phases/09-metricas-de-calidad/.gitkeep +0 -0
  24. sourcecode-0.4.0/.planning/phases/10-contexto-git-y-operativo/.gitkeep +0 -0
  25. {sourcecode-0.2.0 → sourcecode-0.4.0}/PKG-INFO +115 -1
  26. {sourcecode-0.2.0 → sourcecode-0.4.0}/README.md +114 -0
  27. {sourcecode-0.2.0 → sourcecode-0.4.0}/docs/schema.md +154 -3
  28. {sourcecode-0.2.0 → sourcecode-0.4.0}/pyproject.toml +1 -1
  29. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/__init__.py +1 -1
  30. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/cli.py +78 -0
  31. sourcecode-0.4.0/src/sourcecode/dependency_analyzer.py +932 -0
  32. sourcecode-0.4.0/src/sourcecode/graph_analyzer.py +759 -0
  33. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/schema.py +76 -0
  34. sourcecode-0.4.0/tests/__init__.py +0 -0
  35. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_cli.py +2 -0
  36. sourcecode-0.4.0/tests/test_dependency_analyzer_node_python.py +112 -0
  37. sourcecode-0.4.0/tests/test_dependency_analyzer_polyglot.py +142 -0
  38. sourcecode-0.4.0/tests/test_dependency_schema.py +55 -0
  39. sourcecode-0.4.0/tests/test_graph_analyzer_polyglot.py +76 -0
  40. sourcecode-0.4.0/tests/test_graph_analyzer_python_node.py +86 -0
  41. sourcecode-0.4.0/tests/test_graph_schema.py +75 -0
  42. sourcecode-0.4.0/tests/test_integration_dependencies.py +91 -0
  43. sourcecode-0.4.0/tests/test_integration_graph_modules.py +66 -0
  44. {sourcecode-0.2.0 → sourcecode-0.4.0}/.github/workflows/ci.yml +0 -0
  45. {sourcecode-0.2.0 → sourcecode-0.4.0}/.github/workflows/release.yml +0 -0
  46. {sourcecode-0.2.0 → sourcecode-0.4.0}/.gitignore +0 -0
  47. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/PROJECT.md +0 -0
  48. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/REQUIREMENTS.md +0 -0
  49. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/config.json +0 -0
  50. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-01-PLAN.md +0 -0
  51. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-01-SUMMARY.md +0 -0
  52. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-02-PLAN.md +0 -0
  53. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-02-SUMMARY.md +0 -0
  54. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-03-PLAN.md +0 -0
  55. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-03-SUMMARY.md +0 -0
  56. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-04-PLAN.md +0 -0
  57. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-04-SUMMARY.md +0 -0
  58. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-CONTEXT.md +0 -0
  59. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-DISCUSSION-LOG.md +0 -0
  60. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-RESEARCH.md +0 -0
  61. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-REVIEW.md +0 -0
  62. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-VERIFICATION.md +0 -0
  63. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-01-PLAN.md +0 -0
  64. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-01-SUMMARY.md +0 -0
  65. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-02-PLAN.md +0 -0
  66. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-02-SUMMARY.md +0 -0
  67. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-03-PLAN.md +0 -0
  68. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-03-SUMMARY.md +0 -0
  69. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-04-PLAN.md +0 -0
  70. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-04-SUMMARY.md +0 -0
  71. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-RESEARCH.md +0 -0
  72. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-01-PLAN.md +0 -0
  73. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-01-SUMMARY.md +0 -0
  74. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-02-PLAN.md +0 -0
  75. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-02-SUMMARY.md +0 -0
  76. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-RESEARCH.md +0 -0
  77. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-01-PLAN.md +0 -0
  78. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-01-SUMMARY.md +0 -0
  79. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-02-PLAN.md +0 -0
  80. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-02-SUMMARY.md +0 -0
  81. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-03-PLAN.md +0 -0
  82. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-03-SUMMARY.md +0 -0
  83. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-RESEARCH.md +0 -0
  84. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/.gitkeep +0 -0
  85. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-01-PLAN.md +0 -0
  86. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-01-SUMMARY.md +0 -0
  87. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-02-PLAN.md +0 -0
  88. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-02-SUMMARY.md +0 -0
  89. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-03-PLAN.md +0 -0
  90. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-03-SUMMARY.md +0 -0
  91. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-04-PLAN.md +0 -0
  92. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-04-SUMMARY.md +0 -0
  93. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-RESEARCH.md +0 -0
  94. /sourcecode-0.2.0/tests/__init__.py → /sourcecode-0.4.0/.planning/phases/06-dependencias-inteligentes/.gitkeep +0 -0
  95. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/research/ARCHITECTURE.md +0 -0
  96. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/research/FEATURES.md +0 -0
  97. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/research/PITFALLS.md +0 -0
  98. {sourcecode-0.2.0 → sourcecode-0.4.0}/.planning/research/STACK.md +0 -0
  99. {sourcecode-0.2.0 → sourcecode-0.4.0}/.ruff.toml +0 -0
  100. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/classifier.py +0 -0
  101. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/__init__.py +0 -0
  102. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/base.py +0 -0
  103. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/dart.py +0 -0
  104. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/dotnet.py +0 -0
  105. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/elixir.py +0 -0
  106. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/go.py +0 -0
  107. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/heuristic.py +0 -0
  108. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/java.py +0 -0
  109. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
  110. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/nodejs.py +0 -0
  111. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/parsers.py +0 -0
  112. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/php.py +0 -0
  113. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/project.py +0 -0
  114. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/python.py +0 -0
  115. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/ruby.py +0 -0
  116. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/rust.py +0 -0
  117. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/systems.py +0 -0
  118. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/terraform.py +0 -0
  119. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/detectors/tooling.py +0 -0
  120. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/redactor.py +0 -0
  121. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/scanner.py +0 -0
  122. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/serializer.py +0 -0
  123. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/tree_utils.py +0 -0
  124. {sourcecode-0.2.0 → sourcecode-0.4.0}/src/sourcecode/workspace.py +0 -0
  125. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/conftest.py +0 -0
  126. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
  127. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/fastapi_app/src/main.py +0 -0
  128. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/go_service/cmd/api/main.go +0 -0
  129. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/go_service/go.mod +0 -0
  130. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
  131. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/package.json +0 -0
  132. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
  133. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
  134. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
  135. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
  136. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
  137. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
  138. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_classifier.py +0 -0
  139. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_detector_go_rust_java.py +0 -0
  140. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_detector_nodejs.py +0 -0
  141. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_detector_php_ruby_dart.py +0 -0
  142. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_detector_python.py +0 -0
  143. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_detector_universal_managed.py +0 -0
  144. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_detector_universal_systems.py +0 -0
  145. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_detectors_base.py +0 -0
  146. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_integration.py +0 -0
  147. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_integration_detection.py +0 -0
  148. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_integration_multistack.py +0 -0
  149. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_integration_universal.py +0 -0
  150. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_packaging.py +0 -0
  151. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_real_projects.py +0 -0
  152. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_redactor.py +0 -0
  153. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_scanner.py +0 -0
  154. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_schema.py +0 -0
  155. {sourcecode-0.2.0 → sourcecode-0.4.0}/tests/test_workspace_analyzer.py +0 -0
@@ -1,8 +1,8 @@
1
- # Roadmap: SourceMap Gen
1
+ # Roadmap: Sourcecode
2
2
 
3
3
  ## Descripcion General
4
4
 
5
- SourceMap Gen se construye en cinco fases que van desde el scaffold del proyecto hasta la publicacion y expansion hacia un scanner de proyectos cada vez mas universal. La Fase 1 entrega una CLI funcional con escaner, seguridad y output estructurado. La Fase 2 implementa los detectores de los 8 ecosistemas principales y el pipeline de deteccion. La Fase 3 anade clasificacion de tipo de proyecto y soporte multi-stack. La Fase 4 pule, prueba sobre proyectos reales y publica en PyPI. La Fase 5 expande cobertura de stacks, ecosistemas y senales para acercar la herramienta a un escaner universal.
5
+ Sourcecode se construye en diez fases que van desde el scaffold del proyecto hasta la publicacion y evolucion hacia un scanner de proyectos cada vez mas universal. La Fase 1 entrega una CLI funcional con escaner, seguridad y output estructurado. La Fase 2 implementa los detectores de los 8 ecosistemas principales y el pipeline de deteccion. La Fase 3 anade clasificacion de tipo de proyecto y soporte multi-stack. La Fase 4 pule, prueba sobre proyectos reales y publica en PyPI. La Fase 5 expande cobertura de stacks, ecosistemas y senales. Las Fases 6 a 10 anaden inteligencia opcional para dependencias, grafos internos, documentacion estructurada, metricas de calidad e historia operativa, manteniendo `sourcecode .` como comando base rapido.
6
6
 
7
7
  ## Fases
8
8
 
@@ -11,6 +11,11 @@ SourceMap Gen se construye en cinco fases que van desde el scaffold del proyecto
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
+ - [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
+ - [ ] **Fase 8: Documentacion Extraida** - Docstrings, comentarios y resúmenes de modulos consumibles por IA con `--docs`
17
+ - [ ] **Fase 9: Metricas de Calidad** - LOC, complejidad, tests asociados y cobertura con `--full-metrics`
18
+ - [ ] **Fase 10: Contexto Git y Operativo** - Historia git, volatilidad, CI/CD, Docker y metadata de entorno con `--git-history`
14
19
 
15
20
  ## Detalles de Fases
16
21
 
@@ -106,10 +111,84 @@ Plans:
106
111
  - [x] 05-04: Integracion universal end-to-end — fixtures adicionales, fusion heuristica final y regresion completa de CLI/suite
107
112
  **UI hint**: no
108
113
 
114
+ ### Fase 6: Dependencias Inteligentes
115
+ **Goal**: La herramienta puede enumerar dependencias externas con versiones exactas y, cuando haya lockfiles o metadata suficiente, resolver tambien dependencias transitivas sin sacrificar la velocidad del comando base.
116
+ **Depends on**: Fase 5
117
+ **Requirements**: DEPS-01, DEPS-02, DEPS-03, OUT-07
118
+ **Success Criteria** (what must be TRUE):
119
+ 1. Ejecutado como `sourcecode . --dependencies` sobre proyectos Python, Node.js, PHP, Ruby, Rust, Go y .NET, el output lista dependencias directas con nombre, version exacta o constraint y origen del dato (`manifest`, `lockfile`, `tooling`)
120
+ 2. Cuando existe lockfile compatible (`package-lock.json`, `pnpm-lock.yaml`, `poetry.lock`, `uv.lock`, `Gemfile.lock`, `composer.lock`, etc.), el output incluye dependencias transitivas y las relaciona con su dependencia padre o grafo de resolucion
121
+ 3. El comando base `sourcecode .` mantiene su latencia habitual y no resuelve arboles transitivos salvo que el usuario active `--dependencies`
122
+ 4. El schema expone dependencias de forma uniforme entre ecosistemas para que agentes IA puedan detectar incompatibilidades, duplicados o riesgos de version
123
+ **Status**: COMPLETE — implemented 2026-04-08; dependency analysis integrated behind `--dependencies`, full suite green
124
+ **Plans**: 4 planes
125
+
126
+ Plans:
127
+ - [x] 06-01: Base de dependencias — schema, flag `--dependencies` y analizador lazy desacoplado
128
+ - [x] 06-02: Node.js y Python — manifests + lockfiles con deps directas, resueltas y transitivas
129
+ - [x] 06-03: PHP, Ruby, Rust, Go y .NET — cobertura polyglot con limites explicitos donde la transitividad offline sea parcial
130
+ - [x] 06-04: Integracion final — workspaces/monorepo, tests end-to-end y documentacion publica del contrato
131
+ **UI hint**: no
132
+
133
+ ### Fase 7: Grafos de Codigo
134
+ **Goal**: La herramienta construye una vista estructural del codigo con relaciones entre modulos, imports, llamadas y jerarquias basicas para ayudar a agentes y humanos a entender flujo y acoplamiento.
135
+ **Depends on**: Fase 6
136
+ **Requirements**: GRAPH-01, GRAPH-02, GRAPH-03, OUT-08
137
+ **Success Criteria** (what must be TRUE):
138
+ 1. Ejecutado como `sourcecode . --graph-modules`, el output incluye un grafo de imports internos entre modulos o paquetes del proyecto en al menos Python, Node.js/TypeScript, Java y Go cuando la informacion estatico-sintactica sea suficiente
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
+ 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
+ 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
+ **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
150
+ **UI hint**: no
151
+
152
+ ### Fase 8: Documentacion Extraida
153
+ **Goal**: La herramienta extrae documentacion util del codigo y la transforma en un resumen estructurado por modulo, clase o funcion para consumo de agentes IA y onboarding tecnico.
154
+ **Depends on**: Fase 7
155
+ **Requirements**: DOCS-01, DOCS-02, DOCS-03, OUT-09
156
+ **Success Criteria** (what must be TRUE):
157
+ 1. Ejecutado como `sourcecode . --docs`, el output incluye docstrings, comentarios de cabecera y descripciones resumidas por modulo para lenguajes soportados donde el parseo sea fiable
158
+ 2. El output distingue entre documentacion explicita del autor y resumen inferido por la herramienta para evitar mezclar texto original con interpretaciones
159
+ 3. Los modulos principales del proyecto incluyen un resumen compacto con proposito, simbolos destacados y relaciones con otros componentes
160
+ 4. El schema sigue siendo consumible por maquinas y evita volcar bloques enormes de texto sin estructura ni procedencia
161
+ **Plans**: 0 planes
162
+ **UI hint**: no
163
+
164
+ ### Fase 9: Metricas de Calidad
165
+ **Goal**: La herramienta aporta senales cuantitativas sobre complejidad, tamano, tests y cobertura para priorizar refactors, auditorias y trabajo de agentes automaticos.
166
+ **Depends on**: Fase 8
167
+ **Requirements**: METRICS-01, METRICS-02, METRICS-03, OUT-10
168
+ **Success Criteria** (what must be TRUE):
169
+ 1. Ejecutado como `sourcecode . --full-metrics`, el output incluye lineas por archivo o modulo, recuentos de simbolos y una medida de complejidad al menos para los lenguajes donde haya analisis estatico seguro
170
+ 2. La herramienta detecta archivos o suites de tests relacionadas y asocia modulos productivos con evidencia de cobertura o ausencia de pruebas
171
+ 3. Cuando existe metadata de cobertura (`coverage.xml`, `.coverage`, `lcov.info`, `jacoco.xml`, etc.), el output la incorpora sin ejecutar tests por defecto
172
+ 4. El comando distingue claramente entre metricas medidas, inferidas y no disponibles para no transmitir precision falsa
173
+ **Plans**: 0 planes
174
+ **UI hint**: no
175
+
176
+ ### Fase 10: Contexto Git y Operativo
177
+ **Goal**: La herramienta añade contexto historico y operativo del repositorio para identificar volatilidad, expertos, integraciones de despliegue y superficie de automatizacion.
178
+ **Depends on**: Fase 9
179
+ **Requirements**: GIT-01, OPS-01, OPS-02, OUT-11
180
+ **Success Criteria** (what must be TRUE):
181
+ 1. Ejecutado como `sourcecode . --git-history`, el output resume commits recientes, autores, frecuencia de cambio y archivos o modulos mas volatiles sin requerir llamadas de red
182
+ 2. La herramienta identifica configuraciones operativas relevantes como `Dockerfile`, `docker-compose`, workflows de GitHub Actions, Terraform, Helm, Makefiles o scripts de despliegue y los agrega como metadata estructurada
183
+ 3. Las variables de entorno o secretos solo se reportan como metadata segura (`nombre`, `origen`, `uso aproximado`) sin exponer valores sensibles
184
+ 4. El comando base `sourcecode .` sigue centrado en estructura + stacks + workflows, mientras que el contexto historico/operativo ampliado queda detras de flags explicitamente solicitados
185
+ **Plans**: 0 planes
186
+ **UI hint**: no
187
+
109
188
  ## Progreso
110
189
 
111
190
  **Orden de ejecucion:**
112
- Las fases se ejecutan en orden numerico: 1 → 2 → 3 → 4 → 5
191
+ Las fases se ejecutan en orden numerico: 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 10
113
192
 
114
193
  | Fase | Planes Completos | Estado | Completada |
115
194
  |------|-----------------|--------|------------|
@@ -118,3 +197,8 @@ Las fases se ejecutan en orden numerico: 1 → 2 → 3 → 4 → 5
118
197
  | 3. Clasificacion y Multi-Stack | 2/2 | Complete | 2026-04-07 |
119
198
  | 4. Pulido y Publicacion | 3/3 | Complete | 2026-04-07 |
120
199
  | 5. Scanner Universal | 4/4 | Complete | 2026-04-07 |
200
+ | 6. Dependencias Inteligentes | 4/4 | Complete | 2026-04-08 |
201
+ | 7. Grafos de Codigo | 4/4 | Complete | 2026-04-08 |
202
+ | 8. Documentacion Extraida | 0/0 | Not planned | - |
203
+ | 9. Metricas de Calidad | 0/0 | Not planned | - |
204
+ | 10. Contexto Git y Operativo | 0/0 | Not planned | - |
@@ -2,16 +2,16 @@
2
2
  gsd_state_version: 1.0
3
3
  milestone: v1.0
4
4
  milestone_name: milestone
5
- status: completed
6
- stopped_at: Phase 04 execution complete pytest green; docs and workflows added
7
- last_updated: "2026-04-07T21:15:17.169Z"
8
- last_activity: 2026-04-07 -- Phase 05 completed
5
+ status: in_progress
6
+ stopped_at: Phase 05 execution complete; roadmap extended with future universal-analysis phases
7
+ last_updated: "2026-04-08T11:25:00.000Z"
8
+ last_activity: 2026-04-08 -- Phase 07 completed
9
9
  progress:
10
- total_phases: 5
11
- completed_phases: 5
12
- total_plans: 17
13
- completed_plans: 17
14
- percent: 100
10
+ total_phases: 10
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:** Milestone complete universal scanner expansion delivered
24
+ **Current focus:** Fase 07 completada; siguiente paso natural: planificar documentacion extraida
25
25
 
26
26
  ## Current Position
27
27
 
28
- Phase: 05 (scanner-universal) — COMPLETE
28
+ Phase: 07 (grafos-de-codigo) — COMPLETE
29
29
  Plan: 4 of 4
30
- Status: Phase 05 complete
31
- Last activity: 2026-04-07 -- Phase 05 completed
30
+ Status: Phase 07 complete
31
+ Last activity: 2026-04-08 -- Phase 07 completed
32
32
 
33
- Progress: [██████████] 100%
33
+ Progress: [███████░░░] 70%
34
34
 
35
35
  ## Performance Metrics
36
36
 
@@ -88,6 +88,15 @@ None.
88
88
  ### Roadmap Evolution
89
89
 
90
90
  - Phase 5 added: Scanner universal — ampliar stacks, ecosistemas y senales de deteccion para mas tipos de proyectos.
91
+ - Phase 6 added: Dependencias inteligentes — versiones exactas, transitivas y resolucion multi-ecosistema bajo `--dependencies`.
92
+ - Phase 7 added: Grafos de codigo — imports, llamadas y estructura navegable bajo `--graph-modules`.
93
+ - Phase 8 added: Documentacion extraida — docstrings, comentarios y resúmenes estructurados bajo `--docs`.
94
+ - Phase 9 added: Metricas de calidad — LOC, complejidad, tests y cobertura bajo `--full-metrics`.
95
+ - Phase 10 added: Contexto git y operativo — historia reciente, volatilidad, CI/CD y metadata segura bajo `--git-history`.
96
+ - Phase 6 planned in 4 planes: base de schema/CLI, Node+Python, ecosistemas polyglot y cierre end-to-end con workspaces/docs.
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.
91
100
 
92
101
  ### Blockers/Concerns
93
102
 
@@ -98,4 +107,4 @@ None.
98
107
  Last session: 2026-04-07T19:37:00Z
99
108
  Stopped at: Phase 04 execution complete — pytest green; docs and workflows added
100
109
  Resume file: None
101
- Next action: Publish/release preparation or milestone closure
110
+ Next action: /gsd:plan-phase 8
@@ -0,0 +1,140 @@
1
+ ---
2
+ phase: 06-dependencias-inteligentes
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/dependency_analyzer.py
11
+ - src/sourcecode/serializer.py
12
+ - tests/test_dependency_schema.py
13
+ - tests/test_cli.py
14
+ autonomous: true
15
+ requirements:
16
+ - DEPS-01
17
+ - OUT-07
18
+
19
+ must_haves:
20
+ truths:
21
+ - "La CLI expone `--dependencies` sin encarecer `sourcecode .` por defecto"
22
+ - "El schema de dependencias es uniforme y compatible hacia atras"
23
+ - "Existe un analizador desacoplado y lazy para resolucion futura por ecosistema"
24
+ artifacts:
25
+ - path: "src/sourcecode/schema.py"
26
+ provides: "Modelo publico para dependencias y metadata asociada"
27
+ - path: "src/sourcecode/cli.py"
28
+ provides: "Flag `--dependencies` e invocacion lazy del analizador"
29
+ - path: "src/sourcecode/dependency_analyzer.py"
30
+ provides: "Punto de entrada comun para resolucion por ecosistema"
31
+ - path: "tests/test_dependency_schema.py"
32
+ provides: "Cobertura del contrato de salida y defaults"
33
+ ---
34
+
35
+ <objective>
36
+ Preparar la base de la fase 6: contrato de datos, flag CLI y esqueleto de analisis de dependencias sin implementar todavia toda la logica por ecosistema.
37
+
38
+ Purpose: Crear una infraestructura estable para que las siguientes olas anadan resolutores concretos sin tocar repetidamente el contrato publico.
39
+
40
+ Output: schema ampliado, CLI opt-in y clase/orquestador base para dependencias.
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/06-dependencias-inteligentes/06-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 dependencias y resumen</name>
60
+ <files>src/sourcecode/schema.py, tests/test_dependency_schema.py</files>
61
+
62
+ <behavior>
63
+ - el output puede incluir dependencias sin romper consumidores actuales
64
+ - cada dependencia expresa origen, alcance y version declarada/resuelta
65
+ - el schema diferencia entre "sin datos" y "analisis no solicitado"
66
+ </behavior>
67
+
68
+ <action>
69
+ Crear tests RED para:
70
+
71
+ - serializacion de una dependencia directa con `declared_version`
72
+ - serializacion de una dependencia transitiva con `resolved_version` y `parent`
73
+ - `SourceMap` sin `--dependencies` sigue siendo valido y compacto
74
+
75
+ Implementar dataclasses o tipos equivalentes para modelar:
76
+
77
+ - dependencia individual
78
+ - resumen/agregados del analisis
79
+ - campos opcionales en `SourceMap`
80
+ </action>
81
+
82
+ <verify>
83
+ <automated>.venv/bin/python -m pytest tests/test_dependency_schema.py -q</automated>
84
+ </verify>
85
+
86
+ <acceptance_criteria>
87
+ - El contrato de dependencias es consistente y extensible
88
+ - El schema actual sigue funcionando cuando no se pide analisis de dependencias
89
+ </acceptance_criteria>
90
+
91
+ <done>El modelo de datos de dependencias queda fijado.</done>
92
+ </task>
93
+
94
+ <task type="auto" tdd="true">
95
+ <name>Tarea 2: Anadir flag CLI y analizador lazy</name>
96
+ <files>src/sourcecode/cli.py, src/sourcecode/dependency_analyzer.py, tests/test_cli.py</files>
97
+
98
+ <behavior>
99
+ - `sourcecode . --dependencies` activa analisis detallado
100
+ - `sourcecode .` no hace trabajo extra ni rellena dependencias por defecto
101
+ - la integracion es transparente con JSON/YAML y workspaces futuros
102
+ </behavior>
103
+
104
+ <action>
105
+ Crear tests RED para:
106
+
107
+ - `--dependencies` activa el analizador
108
+ - sin flag, el analizador no se invoca
109
+ - el output sigue siendo valido en JSON y YAML
110
+
111
+ Implementar el esqueleto de `DependencyAnalyzer` y conectarlo desde la CLI de forma lazy.
112
+ </action>
113
+
114
+ <verify>
115
+ <automated>.venv/bin/python -m pytest tests/test_cli.py tests/test_dependency_schema.py -q</automated>
116
+ </verify>
117
+
118
+ <acceptance_criteria>
119
+ - El coste extra queda detras del flag
120
+ - La base del pipeline de dependencias queda lista para ecosistemas concretos
121
+ </acceptance_criteria>
122
+
123
+ <done>La CLI ya tiene la puerta de entrada para dependencia inteligente.</done>
124
+ </task>
125
+
126
+ </tasks>
127
+
128
+ <verification>
129
+ ## Verificacion global
130
+
131
+ - `.venv/bin/python -m pytest tests/test_dependency_schema.py tests/test_cli.py -q`
132
+ - validar que `sourcecode .` sin flag no serializa bloque pesado de dependencias
133
+ </verification>
134
+
135
+ <success_criteria>
136
+ ## Success Criteria
137
+
138
+ - Existe un contrato estable para dependencias
139
+ - `--dependencies` queda integrado como opcion opt-in y lazy
140
+ </success_criteria>
@@ -0,0 +1,52 @@
1
+ ---
2
+ phase: 06-dependencias-inteligentes
3
+ plan: 01
4
+ subsystem: api
5
+ tags: [dependencies, schema, cli, lazy-loading]
6
+ requires:
7
+ - phase: 05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de
8
+ provides: scanner multi-stack, workspaces, schema estable
9
+ provides:
10
+ - Modelo publico de dependencias
11
+ - Flag CLI `--dependencies`
12
+ - DependencyAnalyzer 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/dependency_analyzer.py
20
+ - tests/test_dependency_schema.py
21
+ modified:
22
+ - src/sourcecode/schema.py
23
+ - src/sourcecode/cli.py
24
+ - tests/test_cli.py
25
+ key-decisions:
26
+ - "El analisis de dependencias queda detras de `--dependencies` para no encarecer `sourcecode .`"
27
+ - "El schema diferencia entre `declared_version` y `resolved_version`"
28
+ patterns-established:
29
+ - "Bloques opcionales del schema activados por flags sin romper compatibilidad"
30
+ requirements-completed: [DEPS-01, OUT-07]
31
+ duration: 15min
32
+ completed: 2026-04-08
33
+ ---
34
+
35
+ # Phase 06-01 Summary
36
+
37
+ **Base de dependencias: schema, CLI y analizador lazy**
38
+
39
+ ## Accomplishments
40
+
41
+ - Se añadieron `DependencyRecord` y `DependencySummary` al schema publico.
42
+ - La CLI incorpora `--dependencies` y solo ejecuta el analizador cuando el usuario lo pide.
43
+ - Se creo `DependencyAnalyzer` como punto de entrada desacoplado para los resolutores por ecosistema.
44
+ - Quedo cubierta la compatibilidad hacia atras con tests del schema y de la ayuda del CLI.
45
+
46
+ ## Verification
47
+
48
+ - `.venv/bin/python -m pytest tests/test_dependency_schema.py tests/test_cli.py -q`
49
+
50
+ ## Notes
51
+
52
+ - `--compact` sigue sin incluir dependencias para preservar rapidez y salida breve.
@@ -0,0 +1,135 @@
1
+ ---
2
+ phase: 06-dependencias-inteligentes
3
+ plan: 02
4
+ type: execute
5
+ wave: 2
6
+ depends_on:
7
+ - 06-01
8
+ files_modified:
9
+ - src/sourcecode/dependency_analyzer.py
10
+ - src/sourcecode/detectors/parsers.py
11
+ - tests/test_dependency_analyzer_node_python.py
12
+ - tests/test_integration_dependencies.py
13
+ autonomous: true
14
+ requirements:
15
+ - DEPS-01
16
+ - DEPS-02
17
+ - DEPS-03
18
+
19
+ must_haves:
20
+ truths:
21
+ - "Node.js y Python exponen dependencias directas con versiones y origen"
22
+ - "Cuando existe lockfile compatible, se reportan versiones resueltas y transitivas"
23
+ - "La fusion manifest+lockfile evita duplicados y preserva trazabilidad"
24
+ artifacts:
25
+ - path: "src/sourcecode/dependency_analyzer.py"
26
+ provides: "Resolucion inicial por ecosistema para Node.js y Python"
27
+ - path: "tests/test_dependency_analyzer_node_python.py"
28
+ provides: "Cobertura unitaria de manifests y lockfiles principales"
29
+ - path: "tests/test_integration_dependencies.py"
30
+ provides: "Smoke e integracion CLI para ambos ecosistemas"
31
+ ---
32
+
33
+ <objective>
34
+ Implementar la primera oleada fuerte del analizador sobre los dos ecosistemas mas frecuentes del proyecto: Node.js y Python.
35
+
36
+ Purpose: Cubrir cuanto antes el grueso del valor practico de `--dependencies` con lockfiles comunes y soporte real de transitivas.
37
+
38
+ Output: parsing de manifests/lockfiles Node y Python, merge uniforme y tests dedicados.
39
+ </objective>
40
+
41
+ <execution_context>
42
+ @.codex/get-shit-done/workflows/execute-plan.md
43
+ @.codex/get-shit-done/templates/summary.md
44
+ </execution_context>
45
+
46
+ <context>
47
+ @.planning/ROADMAP.md
48
+ @.planning/phases/06-dependencias-inteligentes/06-RESEARCH.md
49
+ @.planning/phases/06-dependencias-inteligentes/06-01-PLAN.md
50
+ @src/sourcecode/dependency_analyzer.py
51
+ @src/sourcecode/detectors/parsers.py
52
+ @src/sourcecode/detectors/nodejs.py
53
+ @src/sourcecode/detectors/python.py
54
+ </context>
55
+
56
+ <tasks>
57
+
58
+ <task type="auto" tdd="true">
59
+ <name>Tarea 1: Resolver dependencias Node.js</name>
60
+ <files>src/sourcecode/dependency_analyzer.py, tests/test_dependency_analyzer_node_python.py, tests/test_integration_dependencies.py</files>
61
+
62
+ <behavior>
63
+ - `package.json` aporta dependencias directas por scope
64
+ - `package-lock.json` o `pnpm-lock.yaml` aportan versiones exactas y transitivas
65
+ - el merge final relaciona dependencias declaradas con resueltas
66
+ </behavior>
67
+
68
+ <action>
69
+ Crear fixtures/tests RED para:
70
+
71
+ - proyecto npm con `package.json` + `package-lock.json`
72
+ - proyecto pnpm con `package.json` + `pnpm-lock.yaml`
73
+ - caso sin lockfile donde solo hay `declared_version`
74
+
75
+ Implementar resolucion Node.js con scopes (`dependencies`, `devDependencies`, `peerDependencies`, `optionalDependencies`) y linking de transitivas cuando sea razonable.
76
+ </action>
77
+
78
+ <verify>
79
+ <automated>.venv/bin/python -m pytest tests/test_dependency_analyzer_node_python.py -q -k node</automated>
80
+ </verify>
81
+
82
+ <acceptance_criteria>
83
+ - Node.js devuelve deps directas y transitivas segun la evidencia disponible
84
+ - El origen del dato queda explicitado por dependencia
85
+ </acceptance_criteria>
86
+
87
+ <done>Node.js queda cubierto con valor real para agentes IA.</done>
88
+ </task>
89
+
90
+ <task type="auto" tdd="true">
91
+ <name>Tarea 2: Resolver dependencias Python</name>
92
+ <files>src/sourcecode/dependency_analyzer.py, src/sourcecode/detectors/parsers.py, tests/test_dependency_analyzer_node_python.py, tests/test_integration_dependencies.py</files>
93
+
94
+ <behavior>
95
+ - `pyproject.toml`, `requirements*.txt` y equivalentes aportan deps directas
96
+ - `poetry.lock`, `uv.lock` o `Pipfile.lock` aportan resolucion exacta y transitivas cuando el formato lo permita
97
+ - extras y grupos no rompen el modelo comun
98
+ </behavior>
99
+
100
+ <action>
101
+ Crear fixtures/tests RED para:
102
+
103
+ - `pyproject.toml` + `poetry.lock`
104
+ - `pyproject.toml` + `uv.lock`
105
+ - `requirements.txt` sin lockfile
106
+
107
+ Implementar parsing y merge con version declarada/resuelta, scopes razonables y senales de limitacion cuando el lockfile no cubra toda la info.
108
+ </action>
109
+
110
+ <verify>
111
+ <automated>.venv/bin/python -m pytest tests/test_dependency_analyzer_node_python.py -q -k python</automated>
112
+ </verify>
113
+
114
+ <acceptance_criteria>
115
+ - Python deja de reportar solo nombres sueltos y pasa a exponer versiones/origen
116
+ - El contrato es uniforme respecto a Node.js
117
+ </acceptance_criteria>
118
+
119
+ <done>Python queda cubierto con dependencias detalladas y lockfiles utiles.</done>
120
+ </task>
121
+
122
+ </tasks>
123
+
124
+ <verification>
125
+ ## Verificacion global
126
+
127
+ - `.venv/bin/python -m pytest tests/test_dependency_analyzer_node_python.py tests/test_integration_dependencies.py -q`
128
+ </verification>
129
+
130
+ <success_criteria>
131
+ ## Success Criteria
132
+
133
+ - Node.js y Python cubren dependencias exactas y transitivas cuando procede
134
+ - El merge de manifests y lockfiles es trazable y consistente
135
+ </success_criteria>
@@ -0,0 +1,47 @@
1
+ ---
2
+ phase: 06-dependencias-inteligentes
3
+ plan: 02
4
+ subsystem: dependencies
5
+ tags: [nodejs, python, lockfiles, transitive]
6
+ requires:
7
+ - phase: 06-dependencias-inteligentes
8
+ provides: schema de dependencias y CLI lazy
9
+ provides:
10
+ - Resolucion Node.js por package-lock y pnpm-lock
11
+ - Resolucion Python por pyproject, poetry.lock, uv.lock y Pipfile.lock
12
+ affects: [dependencies, output]
13
+ tech-stack:
14
+ added: []
15
+ patterns: [manifest-lockfile-merge, conservative-transitive-resolution]
16
+ key-files:
17
+ created:
18
+ - tests/test_dependency_analyzer_node_python.py
19
+ - tests/test_integration_dependencies.py
20
+ modified:
21
+ - src/sourcecode/dependency_analyzer.py
22
+ key-decisions:
23
+ - "Las versiones resueltas del lockfile prevalecen sobre el constraint declarado"
24
+ - "Las transitivas solo se emiten cuando el lockfile ofrece informacion util y segura"
25
+ requirements-completed: [DEPS-01, DEPS-02, DEPS-03]
26
+ duration: 22min
27
+ completed: 2026-04-08
28
+ ---
29
+
30
+ # Phase 06-02 Summary
31
+
32
+ **Node.js y Python con versiones exactas y transitivas**
33
+
34
+ ## Accomplishments
35
+
36
+ - Node.js ahora fusiona `package.json` con `package-lock.json` o `pnpm-lock.yaml`.
37
+ - Python ahora combina `pyproject.toml`/`requirements*.txt` con `poetry.lock`, `uv.lock` y `Pipfile.lock`.
38
+ - El output distingue dependencias directas y transitivas y conserva `parent` cuando puede resolverse.
39
+ - Se añadieron tests unitarios e integración CLI para ambos ecosistemas.
40
+
41
+ ## Verification
42
+
43
+ - `.venv/bin/python -m pytest tests/test_dependency_analyzer_node_python.py tests/test_integration_dependencies.py -q`
44
+
45
+ ## Notes
46
+
47
+ - El merge manifest+lockfile conserva ambas capas: constraint declarado y version resuelta.