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.
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/ROADMAP.md +11 -4
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/STATE.md +14 -12
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-01-PLAN.md +141 -0
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-01-SUMMARY.md +52 -0
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-02-PLAN.md +134 -0
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-02-SUMMARY.md +48 -0
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-03-PLAN.md +131 -0
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-03-SUMMARY.md +46 -0
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-04-PLAN.md +143 -0
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-04-SUMMARY.md +50 -0
- sourcecode-0.4.0/.planning/phases/07-grafos-de-codigo/07-RESEARCH.md +165 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/PKG-INFO +64 -1
- {sourcecode-0.3.0 → sourcecode-0.4.0}/README.md +63 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/docs/schema.md +92 -3
- {sourcecode-0.3.0 → sourcecode-0.4.0}/pyproject.toml +1 -1
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/__init__.py +1 -1
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/cli.py +50 -0
- sourcecode-0.4.0/src/sourcecode/graph_analyzer.py +759 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/schema.py +46 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_cli.py +1 -0
- sourcecode-0.4.0/tests/test_graph_analyzer_polyglot.py +76 -0
- sourcecode-0.4.0/tests/test_graph_analyzer_python_node.py +86 -0
- sourcecode-0.4.0/tests/test_graph_schema.py +75 -0
- sourcecode-0.4.0/tests/test_integration_graph_modules.py +66 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.github/workflows/ci.yml +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.github/workflows/release.yml +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.gitignore +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/PROJECT.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/REQUIREMENTS.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/config.json +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-01-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-01-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-02-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-02-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-03-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-03-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-04-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-04-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-CONTEXT.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-DISCUSSION-LOG.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-RESEARCH.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-REVIEW.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/01-fundaciones/01-VERIFICATION.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-01-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-01-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-02-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-02-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-03-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-03-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-04-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-04-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/02-deteccion-core/02-RESEARCH.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-01-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-01-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-02-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-02-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/03-clasificacion-y-multi-stack/03-RESEARCH.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-01-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-01-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-02-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-02-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-03-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-03-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/04-pulido-y-publicacion/04-RESEARCH.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/05-scanner-universal-ampliar-stacks-ecosistemas-y-senales-de-de/.gitkeep +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/.gitkeep +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-01-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-01-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-02-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-02-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-03-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-03-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-04-PLAN.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-04-SUMMARY.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/06-dependencias-inteligentes/06-RESEARCH.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/07-grafos-de-codigo/.gitkeep +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/08-documentacion-extraida/.gitkeep +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/09-metricas-de-calidad/.gitkeep +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/phases/10-contexto-git-y-operativo/.gitkeep +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/research/ARCHITECTURE.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/research/FEATURES.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/research/PITFALLS.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.planning/research/STACK.md +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/.ruff.toml +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/classifier.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/serializer.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/__init__.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/conftest.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/fastapi_app/src/main.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/go_service/cmd/api/main.go +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/go_service/go.mod +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/package.json +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_classifier.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_dependency_analyzer_node_python.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_dependency_analyzer_polyglot.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_dependency_schema.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_go_rust_java.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_nodejs.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_php_ruby_dart.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_python.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_universal_managed.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detector_universal_systems.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_detectors_base.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration_dependencies.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration_detection.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration_multistack.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_integration_universal.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_packaging.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_real_projects.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_redactor.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_scanner.py +0 -0
- {sourcecode-0.3.0 → sourcecode-0.4.0}/tests/test_schema.py +0 -0
- {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
|
-
- [
|
|
15
|
-
- [
|
|
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
|
-
**
|
|
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 |
|
|
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-
|
|
8
|
-
last_activity: 2026-04-08 -- Phase
|
|
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:
|
|
12
|
-
total_plans:
|
|
13
|
-
completed_plans:
|
|
14
|
-
percent:
|
|
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
|
|
24
|
+
**Current focus:** Fase 07 completada; siguiente paso natural: planificar documentacion extraida
|
|
25
25
|
|
|
26
26
|
## Current Position
|
|
27
27
|
|
|
28
|
-
Phase:
|
|
28
|
+
Phase: 07 (grafos-de-codigo) — COMPLETE
|
|
29
29
|
Plan: 4 of 4
|
|
30
|
-
Status: Phase
|
|
31
|
-
Last activity: 2026-04-08 -- Phase
|
|
30
|
+
Status: Phase 07 complete
|
|
31
|
+
Last activity: 2026-04-08 -- Phase 07 completed
|
|
32
32
|
|
|
33
|
-
Progress: [
|
|
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
|
|
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.
|