sourcecode 4.6.0__tar.gz → 4.8.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-4.6.0 → sourcecode-4.8.0}/CHANGELOG.md +62 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/PKG-INFO +8 -8
- {sourcecode-4.6.0 → sourcecode-4.8.0}/README.md +7 -7
- {sourcecode-4.6.0 → sourcecode-4.8.0}/pyproject.toml +1 -1
- {sourcecode-4.6.0 → sourcecode-4.8.0}/scripts/perf_harness.py +38 -1
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/__init__.py +1 -1
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/cli.py +544 -78
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/context_cache.py +48 -1
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/java.py +4 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/hibernate_strat.py +28 -6
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/registry.py +9 -4
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/server.py +13 -4
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/migrate_check.py +44 -4
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/perf.py +112 -1
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/risk.py +159 -6
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/rule_catalog.py +10 -3
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/security_config_scan.py +172 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/source_text.py +2 -3
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_impact.py +65 -23
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_security_audit.py +20 -2
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/verify_rules.py +1 -1
- {sourcecode-4.6.0 → sourcecode-4.8.0}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/.gitignore +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/.ruff.toml +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/CLAUDE.md +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/CONTRIBUTING.md +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/LICENSE +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/SECURITY.md +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/raw +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/archetype.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/cache.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/classifier.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/compare.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/degradation.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/envelope.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/explain.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/license.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/posture.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/progress.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/release_info.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/remedies.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/ris.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/sarif.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/schema.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/security_config.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/serializer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/version_check.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/supabase/functions/README.md +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-4.6.0 → sourcecode-4.8.0}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -2,6 +2,68 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [4.8.0] — 2026-08-04
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **`risk` now gives MyBatis XML findings real reach.** `SEC-008` mapper XML
|
|
10
|
+
binds to the Java mapper interface named by the XML namespace, then walks that
|
|
11
|
+
interface's callers instead of publishing manufactured zero reach.
|
|
12
|
+
- **`risk` now maps deployment descriptor controls to endpoint reach.**
|
|
13
|
+
`DEAD-001` in `web.xml` reads descriptor URL patterns and reports the
|
|
14
|
+
endpoint population they cover, or an explicit unknown reach reason when the
|
|
15
|
+
descriptor scope cannot be parsed.
|
|
16
|
+
- **`migrate-check` no longer scores unresolved transitive Hibernate as ready.**
|
|
17
|
+
`spring-boot-starter-data-jpa` without a resolved Hibernate version now
|
|
18
|
+
degrades to unresolved transitive evidence instead of `hibernate_readiness:
|
|
19
|
+
100`.
|
|
20
|
+
- **`impact-chain` names caller-count units.** List entries, distinct symbols and
|
|
21
|
+
distinct classes are published separately so truncation warnings and metadata
|
|
22
|
+
no longer reuse one ambiguous "direct callers" phrase.
|
|
23
|
+
- **Expensive semantic passes warn about repository contention.** `spring-audit`,
|
|
24
|
+
`risk`, `migrate-check` and `verify` register an advisory analysis scope and
|
|
25
|
+
warn interactive users when another expensive `ask` process is already running
|
|
26
|
+
against the same repository.
|
|
27
|
+
- **Cache context stats publish lookup distributions.** `cache context-stats`
|
|
28
|
+
now includes lookup/build p50/p95 and context-layer payload sizes so cache-hit
|
|
29
|
+
cost can be budgeted instead of inferred.
|
|
30
|
+
- **Cache command grammar is consistent.** `ask cache model [path]` accepts a
|
|
31
|
+
repository path like sibling cache commands.
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- **Human-scale table triage for large audits.** `spring-audit`, `risk` and
|
|
36
|
+
`migrate-check` now support table renderers with direct filtering:
|
|
37
|
+
`--table`, `--rule`/`--only`, `--band` where applicable, and `--top-n`.
|
|
38
|
+
|
|
39
|
+
### Documentation
|
|
40
|
+
|
|
41
|
+
- README and user guide examples now report `4.8.0`.
|
|
42
|
+
- The development roadmap records the saint-server field-evaluation fixes and
|
|
43
|
+
future feature queue.
|
|
44
|
+
|
|
45
|
+
## [4.7.0] — 2026-08-04
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
- **`impact-chain` no longer pays a repository-wide TX + security audit by default.**
|
|
50
|
+
`impact_findings` is now opt-in with `--with-findings`, so the common query cost
|
|
51
|
+
follows the queried subgraph instead of the whole repository.
|
|
52
|
+
- **`migrate-check` now separates migration blockers from broad blockers.**
|
|
53
|
+
The payload publishes `migration_blocking_count` while keeping the legacy
|
|
54
|
+
`blocking_count` for compatibility.
|
|
55
|
+
- **Disabled security controls are reported explicitly.** Commented-out
|
|
56
|
+
framework security annotations now emit `DEAD-001`, and security catalog/help
|
|
57
|
+
output includes disabled-control findings.
|
|
58
|
+
- **MyBatis SQL interpolation is classified as SQL-injection risk.** Mapper
|
|
59
|
+
`${...}` interpolation emits `SEC-008` instead of being treated as a generic
|
|
60
|
+
raw SQL smell.
|
|
61
|
+
- **Performance claims now have endpoint-scale coverage.** The battery includes
|
|
62
|
+
a high-endpoint fixture, publishes scale dimensions, and gates unexplained
|
|
63
|
+
performance regressions against prior measurements.
|
|
64
|
+
- **Framework detection covers Jersey and Governator.** Migration/readiness
|
|
65
|
+
output no longer misses those stacks when scanning mixed Java repositories.
|
|
66
|
+
|
|
5
67
|
## [4.6.0] — 2026-08-04
|
|
6
68
|
|
|
7
69
|
Field evaluation #11 (7,5/10), by the evaluator who measured 4.5.2 twelve hours
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.8.0
|
|
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`**
|
|
@@ -97,7 +97,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
97
97
|
# pip / pipx
|
|
98
98
|
pipx install sourcecode # or: pip install sourcecode
|
|
99
99
|
|
|
100
|
-
ask version # ask 4.
|
|
100
|
+
ask version # ask 4.8.0 — and, on a build that has aged,
|
|
101
101
|
# how many releases have probably shipped since
|
|
102
102
|
```
|
|
103
103
|
|
|
@@ -211,7 +211,7 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
|
|
|
211
211
|
|
|
212
212
|
### 2 · Impact Analysis
|
|
213
213
|
Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
|
|
214
|
-
`ask impact` · `ask impact-chain` (TX/SEC
|
|
214
|
+
`ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact`
|
|
215
215
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
216
216
|
|
|
217
217
|
### 3 · Architecture Intelligence
|
|
@@ -306,13 +306,13 @@ from it.
|
|
|
306
306
|
| Command | Tier | Answers | Note |
|
|
307
307
|
|---|---|---|---|
|
|
308
308
|
| `posture` | experimental | which beans a profile set wires, and how effective endpoint access differs between two sets | the most differentiated capability here |
|
|
309
|
-
| `risk` | experimental | what each defect actually costs, once reach, access, write effect and the shape of the input path are in it | `defect_severity × reachability × auth_verdict × write_effect × query_construction × input_constraints`; every factor names its authority |
|
|
309
|
+
| `risk` | experimental | what each defect actually costs, once reach, access, write effect and the shape of the input path are in it | `defect_severity × reachability × auth_verdict × write_effect × query_construction × input_constraints`; every factor names its authority; `--table --rule SEC-008 --band high --top-n 20` gives audit triage without `jq` |
|
|
310
310
|
| `enrich` | experimental | another scanner's SARIF findings, ranked by what this repository does with them | `--sarif <log>`; the same composition as `risk`, with the scanner as the severity authority |
|
|
311
311
|
| `migrate-recipe` | experimental | the migration report as the OpenRewrite recipe that applies it | only recipes a finding named; the manual remainder published beside them; writes nothing without `--write`, and never a runnable command for an empty recipe list |
|
|
312
312
|
| `data-exposure` | experimental | which routes can carry the data you labelled, and who reaches them | labels declared in `sourcecode.config.json` — never inferred from a name; `signature` and `call_reach` evidence published apart, field-level flow out of scope (NC-008). With nothing declared, `ask data-exposure /path/to/repo` answers `answered: false` and hands back the file, the key and an example to declare — it never reports zero exposed routes |
|
|
313
313
|
| `endpoints` | core | every REST endpoint, effective path, security policy, confidence | Spring MVC + JAX-RS (~65 % recall on JAX-RS sub-resource locators). `--compact` answers the exposure census without the rows; `--servlets` lists the servlet-mounted surface as its own population; `--client-usage` says which routes the TS/JS client in this repository actually calls |
|
|
314
|
-
| `spring-audit` | core | transactional anomalies + security surface + validation gaps | `--ci`, `-f github-comment` |
|
|
315
|
-
| `migrate-check` | core | Boot 2→3 readiness: located blockers, per-dimension score, effort | `--blast-radius` orders the re-test plan |
|
|
314
|
+
| `spring-audit` | core | transactional anomalies + security surface + validation gaps | `--ci`, `-f github-comment`; `--table --rule SEC-008 --top-n 20` for human-scale review |
|
|
315
|
+
| `migrate-check` | core | Boot 2→3 readiness: located blockers, per-dimension score, effort | `--blast-radius` orders the re-test plan; `--table --rule MIG-001 --band critical --top-n 20` for blocker triage |
|
|
316
316
|
| `impact` / `impact-chain` | core | blast radius of a change, to the endpoints it reaches | target the **interface**, not the `Impl` |
|
|
317
317
|
| `pr-impact` | core | the same, scoped to a PR diff | gating command: `--fail-on`, exit codes |
|
|
318
318
|
| `verify` | core | does the repo satisfy its declared contracts, **relative to a baseline** | `.ask/contracts.yml`; exit 0/1/2 |
|
|
@@ -328,7 +328,7 @@ from it.
|
|
|
328
328
|
| `retrieve` | parked | typed knowledge queries over the model | |
|
|
329
329
|
| `archetype` | experimental | evidence-based architectural archetype | |
|
|
330
330
|
| `rename-class` / `chunk-file` | supported | word-boundary Java rename; split a large file for an agent | |
|
|
331
|
-
| `cache status\|warm\|model\|clear` · `auth` · `telemetry` · `mcp` · `config` · `version` | supported | housekeeping | `activate` too |
|
|
331
|
+
| `cache status\|warm\|model\|clear` · `auth` · `telemetry` · `mcp` · `config` · `version` | supported | housekeeping | `cache model [path]` explains what a warm buys per command; `activate` too |
|
|
332
332
|
|
|
333
333
|
---
|
|
334
334
|
|
|
@@ -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`**
|
|
@@ -59,7 +59,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
59
59
|
# pip / pipx
|
|
60
60
|
pipx install sourcecode # or: pip install sourcecode
|
|
61
61
|
|
|
62
|
-
ask version # ask 4.
|
|
62
|
+
ask version # ask 4.8.0 — and, on a build that has aged,
|
|
63
63
|
# how many releases have probably shipped since
|
|
64
64
|
```
|
|
65
65
|
|
|
@@ -173,7 +173,7 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
|
|
|
173
173
|
|
|
174
174
|
### 2 · Impact Analysis
|
|
175
175
|
Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
|
|
176
|
-
`ask impact` · `ask impact-chain` (TX/SEC
|
|
176
|
+
`ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact`
|
|
177
177
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
178
178
|
|
|
179
179
|
### 3 · Architecture Intelligence
|
|
@@ -268,13 +268,13 @@ from it.
|
|
|
268
268
|
| Command | Tier | Answers | Note |
|
|
269
269
|
|---|---|---|---|
|
|
270
270
|
| `posture` | experimental | which beans a profile set wires, and how effective endpoint access differs between two sets | the most differentiated capability here |
|
|
271
|
-
| `risk` | experimental | what each defect actually costs, once reach, access, write effect and the shape of the input path are in it | `defect_severity × reachability × auth_verdict × write_effect × query_construction × input_constraints`; every factor names its authority |
|
|
271
|
+
| `risk` | experimental | what each defect actually costs, once reach, access, write effect and the shape of the input path are in it | `defect_severity × reachability × auth_verdict × write_effect × query_construction × input_constraints`; every factor names its authority; `--table --rule SEC-008 --band high --top-n 20` gives audit triage without `jq` |
|
|
272
272
|
| `enrich` | experimental | another scanner's SARIF findings, ranked by what this repository does with them | `--sarif <log>`; the same composition as `risk`, with the scanner as the severity authority |
|
|
273
273
|
| `migrate-recipe` | experimental | the migration report as the OpenRewrite recipe that applies it | only recipes a finding named; the manual remainder published beside them; writes nothing without `--write`, and never a runnable command for an empty recipe list |
|
|
274
274
|
| `data-exposure` | experimental | which routes can carry the data you labelled, and who reaches them | labels declared in `sourcecode.config.json` — never inferred from a name; `signature` and `call_reach` evidence published apart, field-level flow out of scope (NC-008). With nothing declared, `ask data-exposure /path/to/repo` answers `answered: false` and hands back the file, the key and an example to declare — it never reports zero exposed routes |
|
|
275
275
|
| `endpoints` | core | every REST endpoint, effective path, security policy, confidence | Spring MVC + JAX-RS (~65 % recall on JAX-RS sub-resource locators). `--compact` answers the exposure census without the rows; `--servlets` lists the servlet-mounted surface as its own population; `--client-usage` says which routes the TS/JS client in this repository actually calls |
|
|
276
|
-
| `spring-audit` | core | transactional anomalies + security surface + validation gaps | `--ci`, `-f github-comment` |
|
|
277
|
-
| `migrate-check` | core | Boot 2→3 readiness: located blockers, per-dimension score, effort | `--blast-radius` orders the re-test plan |
|
|
276
|
+
| `spring-audit` | core | transactional anomalies + security surface + validation gaps | `--ci`, `-f github-comment`; `--table --rule SEC-008 --top-n 20` for human-scale review |
|
|
277
|
+
| `migrate-check` | core | Boot 2→3 readiness: located blockers, per-dimension score, effort | `--blast-radius` orders the re-test plan; `--table --rule MIG-001 --band critical --top-n 20` for blocker triage |
|
|
278
278
|
| `impact` / `impact-chain` | core | blast radius of a change, to the endpoints it reaches | target the **interface**, not the `Impl` |
|
|
279
279
|
| `pr-impact` | core | the same, scoped to a PR diff | gating command: `--fail-on`, exit codes |
|
|
280
280
|
| `verify` | core | does the repo satisfy its declared contracts, **relative to a baseline** | `.ask/contracts.yml`; exit 0/1/2 |
|
|
@@ -290,7 +290,7 @@ from it.
|
|
|
290
290
|
| `retrieve` | parked | typed knowledge queries over the model | |
|
|
291
291
|
| `archetype` | experimental | evidence-based architectural archetype | |
|
|
292
292
|
| `rename-class` / `chunk-file` | supported | word-boundary Java rename; split a large file for an agent | |
|
|
293
|
-
| `cache status\|warm\|model\|clear` · `auth` · `telemetry` · `mcp` · `config` · `version` | supported | housekeeping | `activate` too |
|
|
293
|
+
| `cache status\|warm\|model\|clear` · `auth` · `telemetry` · `mcp` · `config` · `version` | supported | housekeeping | `cache model [path]` explains what a warm buys per command; `activate` too |
|
|
294
294
|
|
|
295
295
|
---
|
|
296
296
|
|
|
@@ -201,6 +201,12 @@ def main() -> int:
|
|
|
201
201
|
ap.add_argument("--fleet-root", type=Path, default=DEFAULT_FLEET_ROOT)
|
|
202
202
|
ap.add_argument("--out", type=Path, default=None,
|
|
203
203
|
help="Output dir (default: docs/perf/baselines/<tool_version>).")
|
|
204
|
+
ap.add_argument("--compare-dir", type=Path, default=None,
|
|
205
|
+
help="Previous perf-baseline directory to gate against.")
|
|
206
|
+
ap.add_argument("--max-regression", type=float, default=0.25,
|
|
207
|
+
help="Allowed wall p50/p95 regression ratio before failing (default: 0.25).")
|
|
208
|
+
ap.add_argument("--allow-incomparable", action="store_true",
|
|
209
|
+
help="Do not fail when baseline/current cells are incomparable.")
|
|
204
210
|
ap.add_argument("--quick", action="store_true", help="petclinic only, 2 runs — smoke test.")
|
|
205
211
|
ap.add_argument("--dry-run", action="store_true", help="Print the plan, run nothing.")
|
|
206
212
|
args = ap.parse_args()
|
|
@@ -227,6 +233,7 @@ def main() -> int:
|
|
|
227
233
|
return 0
|
|
228
234
|
|
|
229
235
|
out_dir.mkdir(parents=True, exist_ok=True)
|
|
236
|
+
failures: list[tuple[str, dict]] = []
|
|
230
237
|
for cmd, name, mode in plan:
|
|
231
238
|
subdir = FLEET.get(name, name)
|
|
232
239
|
repo_path = args.fleet_root / subdir
|
|
@@ -242,9 +249,39 @@ def main() -> int:
|
|
|
242
249
|
fname = f"{name}__{cmd or 'ask'}__{mode}.json"
|
|
243
250
|
(out_dir / fname).write_text(json.dumps(cell, indent=2) + "\n", encoding="utf-8")
|
|
244
251
|
w = cell["wall_ms"]
|
|
245
|
-
|
|
252
|
+
gate = None
|
|
253
|
+
if args.compare_dir:
|
|
254
|
+
base_path = args.compare_dir / fname
|
|
255
|
+
if base_path.exists():
|
|
256
|
+
try:
|
|
257
|
+
baseline = json.loads(base_path.read_text(encoding="utf-8"))
|
|
258
|
+
gate = perf.regression_gate(
|
|
259
|
+
baseline,
|
|
260
|
+
cell,
|
|
261
|
+
max_regression=args.max_regression,
|
|
262
|
+
allow_incomparable=args.allow_incomparable,
|
|
263
|
+
)
|
|
264
|
+
(out_dir / f"{fname}.gate.json").write_text(
|
|
265
|
+
json.dumps(gate, indent=2) + "\n", encoding="utf-8"
|
|
266
|
+
)
|
|
267
|
+
if not gate.get("passed"):
|
|
268
|
+
failures.append((fname, gate))
|
|
269
|
+
except (OSError, ValueError) as exc:
|
|
270
|
+
failures.append((fname, {
|
|
271
|
+
"status": "incomparable",
|
|
272
|
+
"passed": False,
|
|
273
|
+
"reasons": [f"could not read baseline: {exc}"],
|
|
274
|
+
}))
|
|
275
|
+
_gate_text = f" gate={gate['status']}" if gate else ""
|
|
276
|
+
print(f" p50={w['p50']}ms p95={w['p95']}ms{_gate_text} -> {fname}")
|
|
246
277
|
|
|
247
278
|
print(f"done. artifacts in {out_dir}")
|
|
279
|
+
if failures:
|
|
280
|
+
print("perf regression gate failed:", file=sys.stderr)
|
|
281
|
+
for fname, gate in failures:
|
|
282
|
+
detail = gate.get("failed_metrics") or gate.get("reasons")
|
|
283
|
+
print(f" {fname}: {gate.get('status')} {detail}", file=sys.stderr)
|
|
284
|
+
return 1
|
|
248
285
|
return 0
|
|
249
286
|
|
|
250
287
|
|