sourcecode 5.5.2__tar.gz → 5.5.5__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-5.5.2 → sourcecode-5.5.5}/CHANGELOG.md +61 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/PKG-INFO +3 -3
- {sourcecode-5.5.2 → sourcecode-5.5.5}/README.md +2 -2
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/DEFECT-LEDGER.md +16 -1
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/USER_GUIDE.md +8 -2
- {sourcecode-5.5.2 → sourcecode-5.5.5}/pyproject.toml +1 -1
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/cli.py +42 -8
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/deployment_prefix.py +18 -12
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/repository_ir.py +139 -43
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/security_config_scan.py +7 -1
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/servlet_surface.py +80 -11
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/validation_surface.py +9 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/.gitignore +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/.ruff.toml +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/CLAUDE.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/CONTRIBUTING.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/LICENSE +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/SECURITY.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/CACHE.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/DEVELOPMENT-ROADMAP.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/EXECUTIVE-ROADMAP.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/overview.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/contracts.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/licensing-schema.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/migrate-check.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/README.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/posture.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/privacy.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/schema.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/raw +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/scripts/perf_gate.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/scripts/perf_harness.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/license.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/supabase/functions/README.md +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.5.2 → sourcecode-5.5.5}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -2,6 +2,67 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [5.5.5] — 2026-08-13
|
|
6
|
+
|
|
7
|
+
**MSAS performance-audit corrections and read-only hygiene verification.**
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- `spring-audit` now preserves full default JSON when it fits the stdout
|
|
11
|
+
budget; only oversized answers are bounded, and the notice points to
|
|
12
|
+
`--output` for the complete report.
|
|
13
|
+
- SEC-004 ignores import-only deprecated encoders and reports concrete
|
|
14
|
+
construction or factory evidence instead.
|
|
15
|
+
- `pr-impact --files -` fails immediately on a terminal stdin with a pipe
|
|
16
|
+
instruction instead of waiting indefinitely.
|
|
17
|
+
- `ask config` now distinguishes declared custom security annotations from
|
|
18
|
+
mechanisms inferred with Likely confidence.
|
|
19
|
+
|
|
20
|
+
### Verification
|
|
21
|
+
- Re-ran read-only hygiene over the `spaghetti-api` and `eureka` fixtures.
|
|
22
|
+
The commands leave their checkouts untouched; `cold-start` reports `no_ris`
|
|
23
|
+
explicitly where no semantic model is available.
|
|
24
|
+
|
|
25
|
+
### Documentation
|
|
26
|
+
- Recorded the MSAS findings, their reproductions, the resolved commits, and
|
|
27
|
+
the remaining bounded-output, schema, timeline, benchmark, and Git-basis
|
|
28
|
+
work in the roadmap.
|
|
29
|
+
|
|
30
|
+
## [5.5.4] — 2026-08-13
|
|
31
|
+
|
|
32
|
+
**Re-audit performance and HTTP contract corrections.**
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
- Consolidated repeated XML and configuration traversals in `endpoints`; servlet
|
|
36
|
+
discovery now uses a pruned walk or the inventories already computed by the
|
|
37
|
+
endpoint analysis.
|
|
38
|
+
- Parsed braced Spring `RequestMethod` declarations and expose complete
|
|
39
|
+
`methods` lists while retaining the backwards-compatible primary `method`.
|
|
40
|
+
- Verified that atomic `--output` replacement produced the requested destination
|
|
41
|
+
before recording the run as successful.
|
|
42
|
+
|
|
43
|
+
### Documentation
|
|
44
|
+
- Documented `ANY` semantics and synchronized the defect ledger, roadmap, and
|
|
45
|
+
atomic audit-fix commits. The reported CLI alias discrepancy was not
|
|
46
|
+
reproducible against the public command signatures.
|
|
47
|
+
|
|
48
|
+
## [5.5.3] — 2026-08-13
|
|
49
|
+
|
|
50
|
+
**Audit regression fixes and diagnostic output.**
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
- Restored bounded default `spring-audit` stdout while preserving complete
|
|
54
|
+
reports through `--output`.
|
|
55
|
+
- Added depth, provenance, unit declarations, and hub-excluded reach to
|
|
56
|
+
`impact` for service-locator architectures.
|
|
57
|
+
- Hardened `web.xml` mapping extraction for legacy descriptors and consecutive
|
|
58
|
+
mappings, without activating commented mappings.
|
|
59
|
+
- Published root timing metadata and reused content-addressed manifest analysis.
|
|
60
|
+
- Made excluded test-source route counts explicit in endpoint output.
|
|
61
|
+
|
|
62
|
+
### Documentation
|
|
63
|
+
- Updated the roadmap with the 5.5.2 audit follow-up, deduplicated against
|
|
64
|
+
previous defect entries and linked to atomic fix commits.
|
|
65
|
+
|
|
5
66
|
## [5.5.2] — 2026-08-13
|
|
6
67
|
|
|
7
68
|
**Follow-up audit corrections and performance visibility.**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.5.
|
|
3
|
+
Version: 5.5.5
|
|
4
4
|
Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Keywords: agents,ai,codebase,context,developer-tools,llm
|
|
@@ -42,7 +42,7 @@ Description-Content-Type: text/markdown
|
|
|
42
42
|
|
|
43
43
|
**Context · Impact · Migration · Architecture · Review — everything from one structural model.**
|
|
44
44
|
|
|
45
|
-

|
|
46
46
|

|
|
47
47
|
|
|
48
48
|
> **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
|
|
@@ -126,7 +126,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
126
126
|
# pip / pipx
|
|
127
127
|
pipx install sourcecode # or: pip install sourcecode
|
|
128
128
|
|
|
129
|
-
ask version # ask 5.5.
|
|
129
|
+
ask version # ask 5.5.5 — and, on a build that has aged,
|
|
130
130
|
# how many releases have probably shipped since
|
|
131
131
|
```
|
|
132
132
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**Context · Impact · Migration · Architecture · Review — everything from one structural model.**
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|

|
|
9
9
|
|
|
10
10
|
> **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
|
|
@@ -88,7 +88,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
88
88
|
# pip / pipx
|
|
89
89
|
pipx install sourcecode # or: pip install sourcecode
|
|
90
90
|
|
|
91
|
-
ask version # ask 5.5.
|
|
91
|
+
ask version # ask 5.5.5 — and, on a build that has aged,
|
|
92
92
|
# how many releases have probably shipped since
|
|
93
93
|
```
|
|
94
94
|
|
|
@@ -16,6 +16,21 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
## Audit synchronization
|
|
20
|
+
|
|
21
|
+
| ID | Defect | Found | Severity | Status |
|
|
22
|
+
|---|---|---|---|---|
|
|
23
|
+
| AS-01 | `risk`/`enrich` could omit `sql_taint.bounded_interpolations`, making `sinks_total` impossible to audit against its bounded evidence. | 5.4.2 re-audit | Medium | **closed 5.4.2** — both projections preserve the bounded rows; the paired fixture asserts the sink total and the retained bounded interpolation. |
|
|
24
|
+
| AS-02 | Route projection emitted declarations from abstract Spring controllers, creating phantom routes and inflating the unprotected census. | 5.4.2 re-audit | Low | **closed 5.4.2** — abstract declarers are excluded while concrete subtype projection remains admitted; the route-surface regression covers both sides. |
|
|
25
|
+
| AS-03 | The distributed ledger could leave `C3-123` open after the 5.4.1 build already excluded static assets. | 5.4.2 re-audit | Informational | **closed 5.4.2** — the stale state was synchronized to the wheel it documents. |
|
|
26
|
+
| AS-04 | An unconstrained `@RequestMapping` was described by consumers as GET although Spring admits every verb. | 5.5.1 audit | Medium | **closed 5.5.1** — primary `method` is `ANY`; 5.5.4 adds the concrete `methods` list so consumers do not need to infer its expansion. |
|
|
27
|
+
| AS-05 | Test-source endpoint exclusion was neither visible nor reversible for modules whose test code lives below `src/main`. | 5.5.1 audit | High | **closed 5.5.3** — `--include-tests` changes admission and the production answer counts exclusions; 5.5.4 recovery adds the matched path basis. |
|
|
28
|
+
| AS-06 | `@InitBinder` alone was treated as evidence of programmatic validation, contaminating gaps and confidence. | 5.5.1 audit | High | **closed 5.5.1** — only a Spring `Validator` implementation or `setValidator` wiring declares the limit; 5.5.4 recovery publishes that population separately from annotation validators. |
|
|
29
|
+
| AS-07 | Nested types used as field types were reported statically unreferenced by modernization. | 5.5.1 audit | Medium | **closed 5.5.1** — field-type references contribute an incoming static edge. |
|
|
30
|
+
| AS-08 | `spring-audit` severity census could sum to zero beside nonzero findings. | 5.5.4 re-audit | High | **closed 5.5.4** — severity partitions reconcile to `total_findings`; this is asserted in the audit battery. |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
19
34
|
## Class C1 — One fact, two authorities
|
|
20
35
|
|
|
21
36
|
| ID | Defect | Found | Severity | Status |
|
|
@@ -35,7 +50,7 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
|
|
|
35
50
|
| C1-13 | **Hub-guard publishes `endpoints_total: 0` instead of `unknown`.** A service with 780 callers is capped at `depth=1` for cost — defensible — but reports 0 endpoints reached, contradicting the epistemic standard the tool imposes on itself everywhere else. Hubs are precisely where blast radius is asked for | 3.2.1 (eval #4) | Medium | **closed 3.6.0** — no battery repository crosses the guard (openmrs-core's largest hub, `Context`, has 215 caller classes against a threshold of 500), so it was reproduced on a generated fixture: `bfs_truncated: true`, `depth_reached: 1`, `endpoints_affected_count: 0` beside four more zeros nothing looked for. A reach-derived count of 0 under the cap is now `null`, named in `stats.unknown_under_cap`. The distinction is the point and is asserted both ways: a **non-zero** count under the cap stays a number (it is a floor the effect block already describes), and an **uncapped** run keeps its measured zero, because converting that would be the mirror-image defect. The hub threshold moved to module level so the fixture crosses the real guard instead of a copy of its value |
|
|
36
51
|
| C1-14 | **File-count drift across commands**: 3 334 / 3 337 / 3 342 / 3 374 files for one repository in one session. No command is wrong in isolation; together they cost the one thing a deterministic tool cannot lose — that its numbers agree with themselves | 3.2.1 (eval #4) | Medium | **within-document half closed 3.6.0 · cross-command half does not reproduce.** Of six commands measured on openmrs-core (`--compact`, `endpoints`, `spring-audit`, `migrate-check`, `modernize`, `validation`) only `migrate-check` publishes a scanned-file count at all, so there are no two figures left to disagree. What does reproduce is the same defect *inside one document*: `affected_files` named two populations — 265 under `summary` (every finding, any scope) against 264 under `effort_breakdown` (blocking findings only). Both correct; the shared name was the contradiction. Same remedy as C1-5: the narrower becomes `blocking_affected_files`, both carry a `_basis`, the old key stays an alias, and the battery asserts the two diverge exactly when a finding is non-blocking |
|
|
37
52
|
| C1-15 | **Analysis assumes a single destination.** Asked about a JDK move, `migrate-check` answers `headline_blocker: boot3_migration` and emits fix hints that send a developer to migrate namespaces they never planned to touch (481 `javax.persistence` under MIG-001). There is no way to say "JDK 11, keep Boot 2.7" | 3.2.1 (eval #4) | **High (product)** | **closed 3.6.0** — `--target-jdk N` and `--keep-boot` say which migration is being planned, filtered over the `migration_target` vocabulary every rule already carried rather than a parallel one. Measured on openmrs-core with `--target-jdk 11 --keep-boot`, the row's own acceptance: **MIG-001 85 → 0**, blocking 114 → 0, `headline_blocker` `hibernate_rewrite` → `none_applicable`, and the Hibernate 5→6 rewrite drops with it because Hibernate 6 arrives with Boot 3. Narrowing is not silencing: `metadata.route` publishes the target, the flag and every excluded axis, a `limitations` entry states how many findings were left out and that they are unresolved rather than fixed, and the route's own blockers stay (a JDK 11 route still reports MIG-021, asserted). The default is untouched, verified identical on three repositories |
|
|
38
|
-
| C1-16 | **Four fan-in figures for one class, and the note that promises the relationship is itself false.** Field: `modernize.in_degree` 1 026 / `impact-chain.direct_callers` 611 / `explain.incoming_callers` 519 / `impact.stats.direct_caller_count` 484 for one service, plus 3 222 vs 3 458 endpoints affected. **Re-measured on the battery, 3.4.0, `Money` @ BroadleafCommerce: 673 / 1 868 / 151 / 418** — `impact-chain` is absent from the published relationship and is **2,8× larger than the figure the note declares "always the largest of the three"**, while `explain` vs `impact` differ by **177 %**, not the *"small margin"* the same note promises. In the same runs `impact.stats.endpoints_affected_count: 0` against a populated `endpoints_affected` from `impact-chain` — a **false zero** on the blast-radius axis | 3.2.1 (eval #5) | **High** — this is the number a risk decision is taken with: *"¿el blast radius son 484 o 611 clases?"* | **
|
|
53
|
+
| C1-16 | **Four fan-in figures for one class, and the note that promises the relationship is itself false.** Field: `modernize.in_degree` 1 026 / `impact-chain.direct_callers` 611 / `explain.incoming_callers` 519 / `impact.stats.direct_caller_count` 484 for one service, plus 3 222 vs 3 458 endpoints affected. **Re-measured on the battery, 3.4.0, `Money` @ BroadleafCommerce: 673 / 1 868 / 151 / 418** — `impact-chain` is absent from the published relationship and is **2,8× larger than the figure the note declares "always the largest of the three"**, while `explain` vs `impact` differ by **177 %**, not the *"small margin"* the same note promises. In the same runs `impact.stats.endpoints_affected_count: 0` against a populated `endpoints_affected` from `impact-chain` — a **false zero** on the blast-radius axis | 3.2.1 (eval #5), reopened 5.5.4 | **High** — this is the number a risk decision is taken with: *"¿el blast radius son 484 o 611 clases?"* | **reopened 5.5.4.** The DI and subtype fixtures remain closed, but the claimed one-authority implementation was false for service locators: `impact` kept a local BFS that elevated `Locator#accessor` to every caller of `Locator`, while `impact-chain` used `caller_reach` and did not. 5.5.4 recovery removes that elevation and adds a two-accessor regression fixture; authority unification and cross-command parity remain open as Q-03. |
|
|
39
54
|
| C1-17 | **A fact with an authority still contradicts itself across two commands**: `--compact.analysis_gaps` says *"1 test file for 3 336 Java files"* while `review-pr.test_coverage_risk.repository_has_test_sources` says `false`, in the same repository. C1-2 was closed in 3.2.1 with five consumers rebound, and this evaluation ran **on 3.2.1** | 3.2.1 (eval #5) | Medium | **does not reproduce (measured 3.6.0)** — re-measured as the row instructed. On openmrs-core, keycloak and spring-petclinic neither statement is emitted, and both consumers reach one authority: `--compact` through `analyze_test_sources`, `review-pr` through `is_test_path`. What was missing is now asserted: the authority has **two entry points** and nothing held them to each other, which is exactly the shape a sixth consumer would take. Zero mismatches across a case table including the C1-2 discriminator (a `test` package inside a *main* source root is production code), plus the literal contradiction — "N test files" and "no test sources" — asserted unreachable in both directions |
|
|
40
55
|
| C1-18 | **The profile population differs per command, and the narrower one is what an agent reads.** Field: `--agent` reports a two-name profile set while `prepare-context fix-bug` reports four for the same repository in the same session — and the two names missing from the agent payload are the ones the *build* names for its deployable artefacts. Every finding about conditional security is keyed on that set, so the default agent surface answers the profile question with the population that lost the environments | 3.5.0 (eval #6) | **High** — it is the input to the one capability nothing else in the market has | **closed (unreleased)** — **fixture first, as C1-10 required**, and it reproduced worse than reported: on `tests/fixtures/spring_profile_population` the same repository in one session answered **`["qa","dev"]`** (default view — filenames + overlay directories), **`["dev","prod","staging"]`** (`posture` — config documents + `@Profile`) and **`["dev","prod","qa","staging"]`** (`--agent` / `fix-bug`, the union). Three populations under one name; every conditional-security finding is keyed on it. Authority `spring_profiles.profile_population`: four named signals (`file_naming`, `overlay_directory`, `config_documents`, `annotations`, plus `caller_supplied`), the union, and `by_signal` published so a name's provenance is auditable. The stack detector, `posture` and the serializer section all read it — asserted per surface, not claimed. Closing it exposed two false positives in the signals it inherited, both fixed structurally (never by name — VAI): an `application-{x}` file counts only **beside its base config** (alfresco's `alfresco/messages/application-model_de.properties` + 19 siblings invented twenty environments; now 0) and an overlay directory counts only when it **holds a config file** (spring-petclinic's `db/ messages/ static/ templates/` reported four; now `mysql, postgres`, which are its real profiles) |
|
|
41
56
|
| C1-19 | **File-count drift across commands, with witnesses this time.** 3 337 (`compact.project_summary`) / 3 336 (`analysis_gaps.testing`) / 3 342 (`migrate-check.metadata.java_files_scanned`) for one repository in one session | 3.8.0 (eval #7) | Medium | **closed 3.9.0** — measured, not equalised: the three figures count code-extension files in any language, the non-test denominator of a test ratio, and the .java files handed to the migration rules. Each names its population now, and `migrate-check.files_scanned_basis` states the two it is not. Original note: open — **C1-14's cross-command half, reopened.** 3.6.0 recorded that half as *not reproducing* because on openmrs-core only `migrate-check` published a scanned-file count at all; eval #7 shows three commands publishing one on a repository we do not have. Three populations are plausible and each may be right in isolation (all Java files / files admitted to the graph / files the migration rules scanned), which is exactly the C1-5 remedy: name the unit per figure, or bind them to one authority. Do not fix by making the numbers equal — measure which population each counts first |
|
|
@@ -136,7 +136,7 @@ pipx install sourcecode # isolated install, no venv needed
|
|
|
136
136
|
|
|
137
137
|
# Verify
|
|
138
138
|
ask version
|
|
139
|
-
# ask 5.5.
|
|
139
|
+
# ask 5.5.5
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
Requires Python 3.9+.
|
|
@@ -261,7 +261,13 @@ ask endpoints /path/to/repo
|
|
|
261
261
|
ask endpoints . --format yaml
|
|
262
262
|
```
|
|
263
263
|
|
|
264
|
-
Output: list of `{method, path, controller, handler}`.
|
|
264
|
+
Output: list of `{method, methods, path, controller, handler}`. `method` remains
|
|
265
|
+
the backwards-compatible primary verb; `methods` is the complete declared set.
|
|
266
|
+
An unconstrained `@RequestMapping` reports `method: "ANY"` and
|
|
267
|
+
`methods: ["GET", "POST", "PUT", "DELETE", "PATCH"]`, because it accepts all
|
|
268
|
+
of those verbs rather than defaulting to GET. Covers `@GetMapping`, `@PostMapping`,
|
|
269
|
+
`@PutMapping`, `@DeleteMapping`, `@PatchMapping`, `@RequestMapping`, `@GET`,
|
|
270
|
+
`@POST`, `@PUT`, `@DELETE`, `@PATCH` + `@Path`.
|
|
265
271
|
|
|
266
272
|
Each endpoint carries a `security` policy. Standard annotations (`@PreAuthorize`, `@Secured`, `@RolesAllowed`, …) are recognized automatically; a custom authorization annotation reports `policy: "none_detected"` until declared in a `sourcecode.config.json` at the repo root:
|
|
267
273
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import contextlib
|
|
4
|
+
import errno
|
|
4
5
|
import hashlib
|
|
5
6
|
import json
|
|
6
7
|
import difflib
|
|
@@ -1196,6 +1197,15 @@ def _safe_write_file(path: "Path", content: str) -> None:
|
|
|
1196
1197
|
fh.flush()
|
|
1197
1198
|
os.fsync(fh.fileno())
|
|
1198
1199
|
tmp.replace(path)
|
|
1200
|
+
# Atomic replacement alone does not prove that the destination is the
|
|
1201
|
+
# requested artifact. Verify the postcondition before reporting a run
|
|
1202
|
+
# output path, especially for non-empty JSON reports.
|
|
1203
|
+
if not path.is_file() or (content and path.stat().st_size == 0):
|
|
1204
|
+
raise OSError(
|
|
1205
|
+
errno.EIO,
|
|
1206
|
+
"atomic output replacement did not produce the requested file",
|
|
1207
|
+
str(path),
|
|
1208
|
+
)
|
|
1199
1209
|
try:
|
|
1200
1210
|
dir_fd = os.open(str(path.parent), os.O_RDONLY)
|
|
1201
1211
|
try:
|
|
@@ -2071,6 +2081,14 @@ def _resolve_files_option(
|
|
|
2071
2081
|
|
|
2072
2082
|
raw = str(files).replace(_text_input.BOM_CHAR, "").strip()
|
|
2073
2083
|
if raw == "-":
|
|
2084
|
+
if sys.stdin.isatty():
|
|
2085
|
+
_emit_error_json(
|
|
2086
|
+
INVALID_INPUT_CODE,
|
|
2087
|
+
"--files - reads the file list from stdin, but stdin is a terminal.",
|
|
2088
|
+
hint=f"Pipe the list: git diff --name-only main | ask {command} . --files -",
|
|
2089
|
+
expected="Piped stdin, a list file, or a comma-separated file list.",
|
|
2090
|
+
)
|
|
2091
|
+
raise typer.Exit(code=1)
|
|
2074
2092
|
return _text_input.parse_path_lines(_text_input.read_stdin_text()), "stdin"
|
|
2075
2093
|
as_path = Path(raw)
|
|
2076
2094
|
if as_path.is_file():
|
|
@@ -8857,7 +8875,8 @@ def spring_audit_cmd(
|
|
|
8857
8875
|
help=(
|
|
8858
8876
|
"Bounded summary: caps `findings` and the per-endpoint security projection "
|
|
8859
8877
|
"to their top 5, most-severe first. Every count is still measured over the "
|
|
8860
|
-
"whole population.
|
|
8878
|
+
"whole population. Stdout also switches to this form only when the full "
|
|
8879
|
+
"JSON exceeds its 50 KB budget; use --output for the complete report."
|
|
8861
8880
|
),
|
|
8862
8881
|
),
|
|
8863
8882
|
table: bool = typer.Option(
|
|
@@ -9194,17 +9213,19 @@ def spring_audit_cmd(
|
|
|
9194
9213
|
"phase that never ran is not evidence there is none."
|
|
9195
9214
|
)
|
|
9196
9215
|
|
|
9216
|
+
_full_data = combined.to_dict()
|
|
9197
9217
|
_bounded_default = (
|
|
9198
9218
|
not compact and output_path is None and format == "json" and not table
|
|
9219
|
+
and len(_json.dumps(_full_data, ensure_ascii=False).encode("utf-8")) > 50_000
|
|
9199
9220
|
)
|
|
9200
|
-
data = (
|
|
9201
|
-
combined.to_compact_dict()
|
|
9202
|
-
if compact or _bounded_default
|
|
9203
|
-
else combined.to_dict()
|
|
9204
|
-
)
|
|
9221
|
+
data = combined.to_compact_dict() if compact or _bounded_default else _full_data
|
|
9205
9222
|
if _bounded_default:
|
|
9206
9223
|
data.pop("mode", None)
|
|
9207
9224
|
data["default_output"] = "bounded"
|
|
9225
|
+
data.pop("compact_note", None)
|
|
9226
|
+
data["stdout_budget_note"] = (
|
|
9227
|
+
"Capped by the stdout payload budget; use --output <file> for the complete report."
|
|
9228
|
+
)
|
|
9208
9229
|
data.setdefault("metadata", {})["cache_layers"] = _cache_state
|
|
9209
9230
|
if _stopped_early:
|
|
9210
9231
|
# C3-87: the block is composed by `PhasedRun.status`, which is the
|
|
@@ -9239,7 +9260,19 @@ def spring_audit_cmd(
|
|
|
9239
9260
|
elif format == "github-comment":
|
|
9240
9261
|
output = _render_spring_audit_github_comment(combined, min_severity)
|
|
9241
9262
|
else:
|
|
9242
|
-
|
|
9263
|
+
_full_data = combined.to_dict()
|
|
9264
|
+
_bounded_default = (
|
|
9265
|
+
not compact and output_path is None and format == "json" and not table
|
|
9266
|
+
and len(_json.dumps(_full_data, ensure_ascii=False).encode("utf-8")) > 50_000
|
|
9267
|
+
)
|
|
9268
|
+
data = combined.to_compact_dict() if compact or _bounded_default else _full_data
|
|
9269
|
+
if _bounded_default:
|
|
9270
|
+
data.pop("mode", None)
|
|
9271
|
+
data["default_output"] = "bounded"
|
|
9272
|
+
data.pop("compact_note", None)
|
|
9273
|
+
data["stdout_budget_note"] = (
|
|
9274
|
+
"Capped by the stdout payload budget; use --output <file> for the complete report."
|
|
9275
|
+
)
|
|
9243
9276
|
output = _serialize_dict(data, format)
|
|
9244
9277
|
|
|
9245
9278
|
# F-AV: our own readers ask for the count under either spelling — the break
|
|
@@ -12850,7 +12883,8 @@ def config_cmd(
|
|
|
12850
12883
|
_answer.say(f"Declaration: none at {_declaration_path}")
|
|
12851
12884
|
_answer.say(
|
|
12852
12885
|
" Nothing is declared, so `data-exposure` answers "
|
|
12853
|
-
"`answered: false
|
|
12886
|
+
"`answered: false`. Custom security annotations may still be inferred "
|
|
12887
|
+
"from usage with Likely confidence; declare them to make that policy Declared."
|
|
12854
12888
|
)
|
|
12855
12889
|
else:
|
|
12856
12890
|
_answer.say(f"Declaration: {_declaration_path}")
|
|
@@ -23,7 +23,7 @@ from __future__ import annotations
|
|
|
23
23
|
import re
|
|
24
24
|
from dataclasses import dataclass, field
|
|
25
25
|
from pathlib import Path
|
|
26
|
-
from typing import Any, Optional
|
|
26
|
+
from typing import Any, Iterable, Optional
|
|
27
27
|
|
|
28
28
|
# Published Spring Boot property keys (DATA — never a predicate on a repo name).
|
|
29
29
|
_CONTEXT_PATH_KEYS: tuple[str, ...] = (
|
|
@@ -163,25 +163,31 @@ def _profile_of_document(flat: "dict[str, str]", file_profile: Optional[str]) ->
|
|
|
163
163
|
return file_profile
|
|
164
164
|
|
|
165
165
|
|
|
166
|
-
def _config_files(root: Path) -> "list[Path]":
|
|
166
|
+
def _config_files(root: Path, files: Optional[Iterable[Path]] = None) -> "list[Path]":
|
|
167
167
|
"""Spring config files under conventional resource directories.
|
|
168
168
|
|
|
169
169
|
Bounded and sorted for determinism; test resources are excluded because a
|
|
170
170
|
prefix declared for tests is not the deployed one.
|
|
171
171
|
"""
|
|
172
|
+
candidates = files if files is not None else root.rglob("application*.*")
|
|
172
173
|
found: list[Path] = []
|
|
173
|
-
for
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
174
|
+
for path in candidates:
|
|
175
|
+
path = Path(path)
|
|
176
|
+
name = path.name
|
|
177
|
+
if name not in _CONFIG_BASENAMES and not _PROFILE_FILE_RE.match(name):
|
|
178
|
+
continue
|
|
179
|
+
text = str(path).replace("\\", "/")
|
|
180
|
+
in_resources = "/src/main/resources/" in text
|
|
181
|
+
in_config = "/config/" in text
|
|
182
|
+
if not (in_resources or in_config) or "/src/test/" in text or "/target/" in text:
|
|
183
|
+
continue
|
|
184
|
+
found.append(path)
|
|
181
185
|
return sorted(set(found))[:60]
|
|
182
186
|
|
|
183
187
|
|
|
184
|
-
def detect_deployment_prefix(
|
|
188
|
+
def detect_deployment_prefix(
|
|
189
|
+
root: Path, *, files: Optional[Iterable[Path]] = None
|
|
190
|
+
) -> DeploymentPrefix:
|
|
185
191
|
"""Read the deployment prefix from the repo's Spring configuration.
|
|
186
192
|
|
|
187
193
|
Best effort and never raises: an unreadable or malformed config yields an
|
|
@@ -190,7 +196,7 @@ def detect_deployment_prefix(root: Path) -> DeploymentPrefix:
|
|
|
190
196
|
"""
|
|
191
197
|
result = DeploymentPrefix()
|
|
192
198
|
try:
|
|
193
|
-
candidates = _config_files(Path(root))
|
|
199
|
+
candidates = _config_files(Path(root), files)
|
|
194
200
|
except Exception:
|
|
195
201
|
return result
|
|
196
202
|
|