sourcecode 4.10.2__tar.gz → 4.10.3__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.10.2 → sourcecode-4.10.3}/CHANGELOG.md +23 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/PKG-INFO +3 -3
- {sourcecode-4.10.2 → sourcecode-4.10.3}/README.md +2 -2
- {sourcecode-4.10.2 → sourcecode-4.10.3}/pyproject.toml +1 -1
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/__init__.py +1 -1
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/security_config_scan.py +26 -10
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_security_audit.py +2 -1
- {sourcecode-4.10.2 → sourcecode-4.10.3}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/.gitignore +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/.ruff.toml +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/CLAUDE.md +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/CONTRIBUTING.md +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/LICENSE +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/SECURITY.md +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/raw +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/scripts/perf_harness.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/archetype.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/cache.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/classifier.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/cli.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/compare.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/degradation.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/envelope.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/explain.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/license.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/perf.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/posture.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/progress.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/provenance.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/redactor.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/release_info.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/remedies.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/ris.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/risk.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/runs.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/sarif.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/scanner.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/schema.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/security_config.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/serializer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/source_text.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/version_check.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/src/sourcecode/workspace.py +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/supabase/functions/README.md +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-4.10.2 → sourcecode-4.10.3}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [4.10.3] — 2026-08-05
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **`GATE-001` no longer reads Java control keywords as method calls.** The regex
|
|
10
|
+
body scan behind the gated-endpoint audit treated `if(...)`, `for(...)`,
|
|
11
|
+
`while(...)`, `switch(...)`, `catch(...)` and `synchronized(...)` as same-class
|
|
12
|
+
invocations, so a handler could be reported as `Controller#if`. Those symbols
|
|
13
|
+
reached the `risk` critical band and `audit-report` top risks. Control keywords
|
|
14
|
+
are now excluded from method-name matches; the real private-method gate finding
|
|
15
|
+
stays covered.
|
|
16
|
+
- **`SEC-007` reports JavaMelody descriptor credentials in their field shape.**
|
|
17
|
+
`authorized-users` is now read directly from the named descriptor parameter even
|
|
18
|
+
when the value carries a digest (`{SHA-256}…`), spans multiple lines, or is
|
|
19
|
+
wrapped in `CDATA`, and the generic descriptor-value fallback is deduplicated so
|
|
20
|
+
one credential yields exactly one finding. The evidence line stays redacted.
|
|
21
|
+
|
|
22
|
+
### Tests
|
|
23
|
+
|
|
24
|
+
- Regression coverage binds both fixes through the full `spring-audit` CLI path,
|
|
25
|
+
including a `options/DPA/WEB-INF/web.xml` descriptor and a controller whose
|
|
26
|
+
handler body contains the control constructs that produced the false positive.
|
|
27
|
+
|
|
5
28
|
## [4.10.2] — 2026-08-05
|
|
6
29
|
|
|
7
30
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 4.10.
|
|
3
|
+
Version: 4.10.3
|
|
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`**
|
|
@@ -106,7 +106,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
106
106
|
# pip / pipx
|
|
107
107
|
pipx install sourcecode # or: pip install sourcecode
|
|
108
108
|
|
|
109
|
-
ask version # ask 4.10.
|
|
109
|
+
ask version # ask 4.10.3 — and, on a build that has aged,
|
|
110
110
|
# how many releases have probably shipped since
|
|
111
111
|
```
|
|
112
112
|
|
|
@@ -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`**
|
|
@@ -68,7 +68,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
68
68
|
# pip / pipx
|
|
69
69
|
pipx install sourcecode # or: pip install sourcecode
|
|
70
70
|
|
|
71
|
-
ask version # ask 4.10.
|
|
71
|
+
ask version # ask 4.10.3 — and, on a build that has aged,
|
|
72
72
|
# how many releases have probably shipped since
|
|
73
73
|
```
|
|
74
74
|
|
|
@@ -111,8 +111,8 @@ _IS_REFERENCE = re.compile(r"[$@]\{[^}]+\}|^\s*$|^\s*ENC\(|^\s*\*+\s*$")
|
|
|
111
111
|
#: XML elements whose text is a configured VALUE. Servlet/JEE spec vocabulary.
|
|
112
112
|
_DESCRIPTOR_VALUE = re.compile(
|
|
113
113
|
r"<(?P<tag>param-value|env-entry-value|value|property|password)\b[^>]*>"
|
|
114
|
-
r"(?P<value
|
|
115
|
-
re.IGNORECASE,
|
|
114
|
+
r"(?P<value>.*?)</(?P=tag)>",
|
|
115
|
+
re.IGNORECASE | re.DOTALL,
|
|
116
116
|
)
|
|
117
117
|
|
|
118
118
|
_DESCRIPTOR_INIT_PARAM = re.compile(
|
|
@@ -124,8 +124,8 @@ _DESCRIPTOR_PARAM_NAME = re.compile(
|
|
|
124
124
|
re.IGNORECASE,
|
|
125
125
|
)
|
|
126
126
|
_DESCRIPTOR_PARAM_VALUE = re.compile(
|
|
127
|
-
r"<param-value\b[^>]*>(?P<value
|
|
128
|
-
re.IGNORECASE,
|
|
127
|
+
r"<param-value\b[^>]*>(?P<value>.*?)</param-value>",
|
|
128
|
+
re.IGNORECASE | re.DOTALL,
|
|
129
129
|
)
|
|
130
130
|
_JAVAMELODY_CREDENTIAL_PARAMS: frozenset[str] = frozenset({
|
|
131
131
|
"authorized-users",
|
|
@@ -364,7 +364,14 @@ def _scan_descriptor(text: str, rel: str) -> "list[SecurityConfigObservation]":
|
|
|
364
364
|
holds a reference and is not reported; one that carries a digest literal
|
|
365
365
|
holds the credential itself, in a file under version control.
|
|
366
366
|
"""
|
|
367
|
+
def _xml_value(raw: str) -> str:
|
|
368
|
+
value = raw.strip()
|
|
369
|
+
if value.startswith("<![CDATA[") and value.endswith("]]>"):
|
|
370
|
+
value = value[len("<![CDATA["):-len("]]>")]
|
|
371
|
+
return value.strip()
|
|
372
|
+
|
|
367
373
|
out: "list[SecurityConfigObservation]" = []
|
|
374
|
+
javamelody_value_offsets: set[int] = set()
|
|
368
375
|
for param in _DESCRIPTOR_INIT_PARAM.finditer(text):
|
|
369
376
|
body = param.group("body")
|
|
370
377
|
name_m = _DESCRIPTOR_PARAM_NAME.search(body)
|
|
@@ -372,22 +379,29 @@ def _scan_descriptor(text: str, rel: str) -> "list[SecurityConfigObservation]":
|
|
|
372
379
|
if name_m is None or value_m is None:
|
|
373
380
|
continue
|
|
374
381
|
name = name_m.group("value").strip().lower()
|
|
375
|
-
value = value_m.group("value")
|
|
382
|
+
value = _xml_value(value_m.group("value"))
|
|
376
383
|
if name not in _JAVAMELODY_CREDENTIAL_PARAMS:
|
|
377
384
|
continue
|
|
378
385
|
if not value or _IS_REFERENCE.search(value):
|
|
379
386
|
continue
|
|
380
387
|
if ":" not in value:
|
|
381
388
|
continue
|
|
382
|
-
if _DIGEST_LITERAL.search(value):
|
|
383
|
-
continue
|
|
384
389
|
user = value.split(":", 1)[0].strip() or "user"
|
|
390
|
+
value_offset = param.start("body") + value_m.start("value")
|
|
391
|
+
javamelody_value_offsets.add(value_offset)
|
|
392
|
+
digest = _DIGEST_LITERAL.search(value)
|
|
393
|
+
evidence = (
|
|
394
|
+
f"<param-value>{user}:…{{{digest.group('algo')}}}"
|
|
395
|
+
f"{digest.group('digest')[:8]}…</param-value>"
|
|
396
|
+
if digest is not None
|
|
397
|
+
else f"<param-value>{user}:…</param-value>"
|
|
398
|
+
)
|
|
385
399
|
out.append(SecurityConfigObservation(
|
|
386
400
|
rule="SEC-007",
|
|
387
401
|
file=rel,
|
|
388
|
-
line=_line_of(text,
|
|
402
|
+
line=_line_of(text, value_offset),
|
|
389
403
|
symbol=rel,
|
|
390
|
-
evidence=
|
|
404
|
+
evidence=evidence,
|
|
391
405
|
detail=(
|
|
392
406
|
"JavaMelody authorized-users stores a monitoring-console credential "
|
|
393
407
|
"directly in the deployment descriptor. The value is redacted here; "
|
|
@@ -395,7 +409,9 @@ def _scan_descriptor(text: str, rel: str) -> "list[SecurityConfigObservation]":
|
|
|
395
409
|
),
|
|
396
410
|
))
|
|
397
411
|
for match in _DESCRIPTOR_VALUE.finditer(text):
|
|
398
|
-
|
|
412
|
+
if match.start("value") in javamelody_value_offsets:
|
|
413
|
+
continue
|
|
414
|
+
value = _xml_value(match.group("value"))
|
|
399
415
|
if not value or _IS_REFERENCE.search(value):
|
|
400
416
|
continue
|
|
401
417
|
digest = _DIGEST_LITERAL.search(value)
|
|
@@ -508,7 +508,8 @@ def _line_of(source: str, offset: int) -> int:
|
|
|
508
508
|
_JAVA_METHOD_RE = re.compile(
|
|
509
509
|
r"(?P<mods>(?:(?:public|protected|private|static|final|synchronized|abstract|native)\s+)*)"
|
|
510
510
|
r"(?P<ret>[\w.$<>\[\], ?]+)\s+"
|
|
511
|
-
r"(?P<name>
|
|
511
|
+
r"(?P<name>(?!(?:if|for|while|switch|catch|synchronized|return|new|throw|try|else|do)\b)"
|
|
512
|
+
r"[a-zA-Z_][\w$]*)\s*\([^;{}]*\)\s*(?:throws\s+[^{]+)?\{",
|
|
512
513
|
re.MULTILINE,
|
|
513
514
|
)
|
|
514
515
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|