sourcecode 0.2.0__tar.gz → 0.3.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.
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/ROADMAP.md +80 -3
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/STATE.md +22 -15
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-01-PLAN.md +140 -0
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-01-SUMMARY.md +52 -0
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-02-PLAN.md +135 -0
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-02-SUMMARY.md +47 -0
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-03-PLAN.md +132 -0
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-03-SUMMARY.md +46 -0
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-04-PLAN.md +143 -0
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-04-SUMMARY.md +51 -0
- sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/06-RESEARCH.md +171 -0
- sourcecode-0.3.0/.planning/phases/07-grafos-de-codigo/.gitkeep +0 -0
- sourcecode-0.3.0/.planning/phases/08-documentacion-extraida/.gitkeep +0 -0
- sourcecode-0.3.0/.planning/phases/09-metricas-de-calidad/.gitkeep +0 -0
- sourcecode-0.3.0/.planning/phases/10-contexto-git-y-operativo/.gitkeep +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/PKG-INFO +52 -1
- {sourcecode-0.2.0 → sourcecode-0.3.0}/README.md +51 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/docs/schema.md +65 -3
- {sourcecode-0.2.0 → sourcecode-0.3.0}/pyproject.toml +1 -1
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/__init__.py +1 -1
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/cli.py +28 -0
- sourcecode-0.3.0/src/sourcecode/dependency_analyzer.py +932 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/schema.py +30 -0
- sourcecode-0.3.0/tests/__init__.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_cli.py +1 -0
- sourcecode-0.3.0/tests/test_dependency_analyzer_node_python.py +112 -0
- sourcecode-0.3.0/tests/test_dependency_analyzer_polyglot.py +142 -0
- sourcecode-0.3.0/tests/test_dependency_schema.py +55 -0
- sourcecode-0.3.0/tests/test_integration_dependencies.py +91 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.github/workflows/ci.yml +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.github/workflows/release.yml +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.gitignore +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/PROJECT.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/REQUIREMENTS.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/config.json +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-01-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-01-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-02-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-02-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-03-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-03-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-04-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-04-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-CONTEXT.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-DISCUSSION-LOG.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-RESEARCH.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-REVIEW.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/01-fundaciones/01-VERIFICATION.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-01-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-01-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-02-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-02-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-03-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-03-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-04-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-04-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/02-deteccion-core/02-RESEARCH.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/03-clasificacion-y-multi-stack/03-01-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/03-clasificacion-y-multi-stack/03-01-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/03-clasificacion-y-multi-stack/03-02-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/03-clasificacion-y-multi-stack/03-02-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/03-clasificacion-y-multi-stack/03-RESEARCH.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/04-pulido-y-publicacion/04-01-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/04-pulido-y-publicacion/04-01-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/04-pulido-y-publicacion/04-02-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/04-pulido-y-publicacion/04-02-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/04-pulido-y-publicacion/04-03-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/04-pulido-y-publicacion/04-03-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/04-pulido-y-publicacion/04-RESEARCH.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/.gitkeep +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-01-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-01-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-02-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-02-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-03-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-03-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-04-PLAN.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-04-SUMMARY.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/05-RESEARCH.md +0 -0
- /sourcecode-0.2.0/tests/__init__.py → /sourcecode-0.3.0/.planning/phases/06-dependencias-inteligentes/.gitkeep +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/research/ARCHITECTURE.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/research/FEATURES.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/research/PITFALLS.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.planning/research/STACK.md +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/.ruff.toml +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/classifier.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/serializer.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/conftest.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/fastapi_app/src/main.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/go_service/cmd/api/main.go +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/go_service/go.mod +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/nextjs_app/package.json +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_classifier.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_detector_go_rust_java.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_detector_nodejs.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_detector_php_ruby_dart.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_detector_python.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_detector_universal_managed.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_detector_universal_systems.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_detectors_base.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_integration.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_integration_detection.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_integration_multistack.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_integration_universal.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_packaging.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_real_projects.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_redactor.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_scanner.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_schema.py +0 -0
- {sourcecode-0.2.0 → sourcecode-0.3.0}/tests/test_workspace_analyzer.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# Roadmap:
|
|
1
|
+
# Roadmap: Sourcecode
|
|
2
2
|
|
|
3
3
|
## Descripcion General
|
|
4
4
|
|
|
5
|
-
|
|
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
|
+
- [ ] **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`
|
|
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,77 @@ 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
|
+
**Plans**: 0 planes
|
|
143
|
+
**UI hint**: no
|
|
144
|
+
|
|
145
|
+
### Fase 8: Documentacion Extraida
|
|
146
|
+
**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.
|
|
147
|
+
**Depends on**: Fase 7
|
|
148
|
+
**Requirements**: DOCS-01, DOCS-02, DOCS-03, OUT-09
|
|
149
|
+
**Success Criteria** (what must be TRUE):
|
|
150
|
+
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
|
|
151
|
+
2. El output distingue entre documentacion explicita del autor y resumen inferido por la herramienta para evitar mezclar texto original con interpretaciones
|
|
152
|
+
3. Los modulos principales del proyecto incluyen un resumen compacto con proposito, simbolos destacados y relaciones con otros componentes
|
|
153
|
+
4. El schema sigue siendo consumible por maquinas y evita volcar bloques enormes de texto sin estructura ni procedencia
|
|
154
|
+
**Plans**: 0 planes
|
|
155
|
+
**UI hint**: no
|
|
156
|
+
|
|
157
|
+
### Fase 9: Metricas de Calidad
|
|
158
|
+
**Goal**: La herramienta aporta senales cuantitativas sobre complejidad, tamano, tests y cobertura para priorizar refactors, auditorias y trabajo de agentes automaticos.
|
|
159
|
+
**Depends on**: Fase 8
|
|
160
|
+
**Requirements**: METRICS-01, METRICS-02, METRICS-03, OUT-10
|
|
161
|
+
**Success Criteria** (what must be TRUE):
|
|
162
|
+
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
|
|
163
|
+
2. La herramienta detecta archivos o suites de tests relacionadas y asocia modulos productivos con evidencia de cobertura o ausencia de pruebas
|
|
164
|
+
3. Cuando existe metadata de cobertura (`coverage.xml`, `.coverage`, `lcov.info`, `jacoco.xml`, etc.), el output la incorpora sin ejecutar tests por defecto
|
|
165
|
+
4. El comando distingue claramente entre metricas medidas, inferidas y no disponibles para no transmitir precision falsa
|
|
166
|
+
**Plans**: 0 planes
|
|
167
|
+
**UI hint**: no
|
|
168
|
+
|
|
169
|
+
### Fase 10: Contexto Git y Operativo
|
|
170
|
+
**Goal**: La herramienta añade contexto historico y operativo del repositorio para identificar volatilidad, expertos, integraciones de despliegue y superficie de automatizacion.
|
|
171
|
+
**Depends on**: Fase 9
|
|
172
|
+
**Requirements**: GIT-01, OPS-01, OPS-02, OUT-11
|
|
173
|
+
**Success Criteria** (what must be TRUE):
|
|
174
|
+
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
|
|
175
|
+
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
|
|
176
|
+
3. Las variables de entorno o secretos solo se reportan como metadata segura (`nombre`, `origen`, `uso aproximado`) sin exponer valores sensibles
|
|
177
|
+
4. El comando base `sourcecode .` sigue centrado en estructura + stacks + workflows, mientras que el contexto historico/operativo ampliado queda detras de flags explicitamente solicitados
|
|
178
|
+
**Plans**: 0 planes
|
|
179
|
+
**UI hint**: no
|
|
180
|
+
|
|
109
181
|
## Progreso
|
|
110
182
|
|
|
111
183
|
**Orden de ejecucion:**
|
|
112
|
-
Las fases se ejecutan en orden numerico: 1 → 2 → 3 → 4 → 5
|
|
184
|
+
Las fases se ejecutan en orden numerico: 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 10
|
|
113
185
|
|
|
114
186
|
| Fase | Planes Completos | Estado | Completada |
|
|
115
187
|
|------|-----------------|--------|------------|
|
|
@@ -118,3 +190,8 @@ Las fases se ejecutan en orden numerico: 1 → 2 → 3 → 4 → 5
|
|
|
118
190
|
| 3. Clasificacion y Multi-Stack | 2/2 | Complete | 2026-04-07 |
|
|
119
191
|
| 4. Pulido y Publicacion | 3/3 | Complete | 2026-04-07 |
|
|
120
192
|
| 5. Scanner Universal | 4/4 | Complete | 2026-04-07 |
|
|
193
|
+
| 6. Dependencias Inteligentes | 4/4 | Complete | 2026-04-08 |
|
|
194
|
+
| 7. Grafos de Codigo | 0/0 | Not planned | - |
|
|
195
|
+
| 8. Documentacion Extraida | 0/0 | Not planned | - |
|
|
196
|
+
| 9. Metricas de Calidad | 0/0 | Not planned | - |
|
|
197
|
+
| 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:
|
|
6
|
-
stopped_at: Phase
|
|
7
|
-
last_updated: "2026-04-
|
|
8
|
-
last_activity: 2026-04-
|
|
5
|
+
status: in_progress
|
|
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
|
|
9
9
|
progress:
|
|
10
|
-
total_phases:
|
|
11
|
-
completed_phases:
|
|
12
|
-
total_plans:
|
|
13
|
-
completed_plans:
|
|
14
|
-
percent:
|
|
10
|
+
total_phases: 10
|
|
11
|
+
completed_phases: 6
|
|
12
|
+
total_plans: 21
|
|
13
|
+
completed_plans: 21
|
|
14
|
+
percent: 60
|
|
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:**
|
|
24
|
+
**Current focus:** Fase 06 completada; siguiente paso natural: planificar grafos de codigo
|
|
25
25
|
|
|
26
26
|
## Current Position
|
|
27
27
|
|
|
28
|
-
Phase:
|
|
28
|
+
Phase: 06 (dependencias-inteligentes) — COMPLETE
|
|
29
29
|
Plan: 4 of 4
|
|
30
|
-
Status: Phase
|
|
31
|
-
Last activity: 2026-04-
|
|
30
|
+
Status: Phase 06 complete
|
|
31
|
+
Last activity: 2026-04-08 -- Phase 06 completed
|
|
32
32
|
|
|
33
|
-
Progress: [
|
|
33
|
+
Progress: [██████░░░░] 60%
|
|
34
34
|
|
|
35
35
|
## Performance Metrics
|
|
36
36
|
|
|
@@ -88,6 +88,13 @@ 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.
|
|
91
98
|
|
|
92
99
|
### Blockers/Concerns
|
|
93
100
|
|
|
@@ -98,4 +105,4 @@ None.
|
|
|
98
105
|
Last session: 2026-04-07T19:37:00Z
|
|
99
106
|
Stopped at: Phase 04 execution complete — pytest green; docs and workflows added
|
|
100
107
|
Resume file: None
|
|
101
|
-
Next action:
|
|
108
|
+
Next action: /gsd:plan-phase 7
|
|
@@ -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.
|