sourcecode 4.5.1__tar.gz → 4.5.2__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.5.1 → sourcecode-4.5.2}/CHANGELOG.md +58 -0
- sourcecode-4.5.2/CLAUDE.md +74 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/CONTRIBUTING.md +56 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/PKG-INFO +3 -3
- {sourcecode-4.5.1 → sourcecode-4.5.2}/README.md +2 -2
- {sourcecode-4.5.1 → sourcecode-4.5.2}/pyproject.toml +1 -1
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/__init__.py +1 -1
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/cli.py +544 -359
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/release_info.py +1 -1
- {sourcecode-4.5.1 → sourcecode-4.5.2}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/.gitignore +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/.ruff.toml +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/LICENSE +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/SECURITY.md +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/raw +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/scripts/perf_harness.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/archetype.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/cache.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/classifier.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/compare.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/degradation.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/envelope.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/explain.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/license.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/perf.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/posture.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/progress.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/redactor.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/remedies.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/ris.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/risk.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/sarif.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/scanner.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/schema.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/security_config.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/serializer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/version_check.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/src/sourcecode/workspace.py +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/supabase/functions/README.md +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-4.5.1 → sourcecode-4.5.2}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -2,6 +2,64 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [4.5.2] — 2026-08-04
|
|
6
|
+
|
|
7
|
+
Patch: two affordances that shipped command by command, and therefore drifted, become
|
|
8
|
+
properties of the CLI. No analysis changes, no published field is added or removed, no
|
|
9
|
+
exit code moves, and every payload is byte-identical to 4.5.1.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **60 of 84 commands did not accept `--copy` / `-c`.** Among them `verify`, `risk`,
|
|
14
|
+
`posture`, `verify-edit`, `schema`, `archetype`, `cold-start`, `enrich`,
|
|
15
|
+
`data-exposure`, `migrate-recipe`, `baseline capture`, every `cache`/`mcp` status
|
|
16
|
+
command, `version`, `auth status`, `telemetry status`, and all 29 `retrieve` intents.
|
|
17
|
+
The flag had been added one command at a time since it was introduced, so what a
|
|
18
|
+
reader could copy depended on which command they happened to be using. It is now a
|
|
19
|
+
property of the CLI: every command that answers a question publishes it, declared
|
|
20
|
+
through one factory (`cli._copy_option()`) so all of them bind `-c` and describe it
|
|
21
|
+
with the same sentence. The text answers gained it too — `ask version -c`,
|
|
22
|
+
`ask cache status -c`, `ask mcp status -c` — via `_emit_text_output`/`_TextAnswer`,
|
|
23
|
+
which collect the lines as they are printed so the clipboard holds exactly what the
|
|
24
|
+
reader saw.
|
|
25
|
+
- **Four commands published `--copy` and then dropped it on their empty-population
|
|
26
|
+
path.** `spring-audit`, `impact-chain`, `pr-impact` and the root `--changed-only`
|
|
27
|
+
scan passed a hard-coded `False` into the output seam when there were no Java files
|
|
28
|
+
or no changed files: the flag parsed, exited 0, and copied nothing. A shorter answer
|
|
29
|
+
is still the answer. Found by the new battery, not by hand.
|
|
30
|
+
- **65 of 84 commands ran silently, including the slowest ones.** Measured on
|
|
31
|
+
BroadleafCommerce: `ask risk` is 15.2 s, `verify-edit` 11.8 s, `posture` 5.9 s,
|
|
32
|
+
`migrate-recipe` 5.0 s, `archetype` 5.1 s, `retrieve <intent>` 4.6 s — none of them
|
|
33
|
+
wrote a byte while they worked, which is indistinguishable from a hang. They now draw
|
|
34
|
+
the existing `Progress` spinner on stderr, naming the phase. `retrieve`'s 29 intents
|
|
35
|
+
take it once in the adapter they share rather than in 29 copies. Every spinner stops
|
|
36
|
+
in a `finally`, so a failing run never prints its error underneath a live frame.
|
|
37
|
+
Nothing changes for a non-interactive consumer: `Progress` already disables itself
|
|
38
|
+
off-TTY, in CI, under `NO_COLOR` and on `TERM=dumb`, and only ever writes to stderr.
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- **`tests/test_output_affordances.py` — the mechanism, not a promise in a document.**
|
|
43
|
+
426 checks whose population comes from the CLI registry itself: a command must
|
|
44
|
+
publish `--copy` or appear in `cli.COMMANDS_WITHOUT_COPY`, must start a spinner or
|
|
45
|
+
appear in `cli.COMMANDS_WITHOUT_PROGRESS`, must bind `-c` to `--copy`, and must
|
|
46
|
+
describe the flag with the shared help string. It also rejects a declared `--copy`
|
|
47
|
+
wired to a constant `False`, and rejects an exemption naming a command that no longer
|
|
48
|
+
exists — a stale entry would silently excuse the next command to take that name. The
|
|
49
|
+
same C4 remedy this project applies everywhere: the catalogue is generated, never
|
|
50
|
+
maintained by hand.
|
|
51
|
+
- Both affordances are now written down where the next change is made:
|
|
52
|
+
`CLAUDE.md` (new), `CONTRIBUTING.md` § *Adding a new command*, and a *Two things
|
|
53
|
+
every command does* section in `docs/USER_GUIDE.md` and `docs/MANUAL-USUARIO.md`.
|
|
54
|
+
|
|
55
|
+
### Known limitation
|
|
56
|
+
|
|
57
|
+
- `ask chunk-file -c` still means `--chunk`, not `--copy`: it claimed the letter before
|
|
58
|
+
`--copy` existed, and removing it would break `ask chunk-file Big.java -c 3`, which
|
|
59
|
+
its `supported` tier does not permit inside a major. `--copy` works in full there. The
|
|
60
|
+
exception is recorded in `cli.COMMANDS_WITHOUT_COPY_SHORTHAND` rather than tolerated
|
|
61
|
+
silently, and the shorthand moves to `--copy` at the next major.
|
|
62
|
+
|
|
5
63
|
## [4.5.1] — 2026-08-03
|
|
6
64
|
|
|
7
65
|
Patch: documentation only. No engine change, no published field, no exit code.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Working on this repository
|
|
2
|
+
|
|
3
|
+
## Non-negotiable: every new command ships both output affordances
|
|
4
|
+
|
|
5
|
+
When you add a CLI command — or a new answer, subcommand or output path on an
|
|
6
|
+
existing one — it **must** publish both of these. They are not polish, they are
|
|
7
|
+
part of what a command is here. Both are enforced by
|
|
8
|
+
`tests/test_output_affordances.py`, which derives its population from the CLI
|
|
9
|
+
registry, so a new command fails the suite until each has been decided.
|
|
10
|
+
|
|
11
|
+
### 1. `--copy` / `-c` — the answer is copyable
|
|
12
|
+
|
|
13
|
+
Declare it with the shared factory, never a fresh `typer.Option`:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
copy: bool = _copy_option(),
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Then **wire it through**. Declaring the flag and passing a hard-coded `False`
|
|
20
|
+
into `_emit_command_output` is the exact defect the battery was written for:
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
_emit_command_output(payload, output_path, copy, success_msg=...) # payload commands
|
|
24
|
+
_emit_text_output(text, copy) # single-block text
|
|
25
|
+
_TextAnswer() # → .say(line) per line, .done(copy) at the end # line-by-line answers
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Wire **every** return path, including the early ones (no Java files, no changed
|
|
29
|
+
files, nothing to report). A shorter answer is still the answer.
|
|
30
|
+
|
|
31
|
+
### 2. `Progress()` — the wait is visible
|
|
32
|
+
|
|
33
|
+
If the command analyses a repository, start a spinner and stop it in `finally`,
|
|
34
|
+
so a raised `typer.Exit` never prints its error under a live spinner frame:
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
_prog = Progress()
|
|
38
|
+
_prog.start("building IR")
|
|
39
|
+
try:
|
|
40
|
+
result = analyse(target)
|
|
41
|
+
finally:
|
|
42
|
+
_prog.stop() # .finish() only when a "✓ done (3.2s)" line is wanted
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`Progress` writes to stderr only and disables itself off-TTY, in CI, under
|
|
46
|
+
`NO_COLOR` and on `TERM=dumb` — piped output, CI logs and MCP sessions stay
|
|
47
|
+
byte-identical. When commands delegate (`retrieve`'s 29 intents →
|
|
48
|
+
`_run_retrieval_intent`; `onboard`/`review-pr`/`fix-bug` → `prepare-context`),
|
|
49
|
+
put the spinner in the shared helper, not in 29 copies.
|
|
50
|
+
|
|
51
|
+
### Opting out is a decision, not an omission
|
|
52
|
+
|
|
53
|
+
Add the command to `cli.COMMANDS_WITHOUT_COPY` or
|
|
54
|
+
`cli.COMMANDS_WITHOUT_PROGRESS` **with an inline comment stating why**:
|
|
55
|
+
|
|
56
|
+
- no `--copy` when stdout is a confirmation that an effect happened rather than
|
|
57
|
+
an answer worth keeping (`cache clear`, `mcp init`, `telemetry enable`)
|
|
58
|
+
- no spinner when the command reads local metadata, one named file, or a stored
|
|
59
|
+
history and returns in milliseconds (`version`, `cache status`, `trend`)
|
|
60
|
+
|
|
61
|
+
Anything that touches a repository gets both, however fast it is on a small one:
|
|
62
|
+
the same command runs on a 3 300-file monolith.
|
|
63
|
+
|
|
64
|
+
## Related conventions this repo already enforces
|
|
65
|
+
|
|
66
|
+
- **One authority per fact.** A hand-written catalogue beside a generated one
|
|
67
|
+
drifts. Populations come from the CLI registry (`COMMAND_TIERS`,
|
|
68
|
+
`cli.HELP_PANELS`, the doc batteries), never from a list maintained by hand.
|
|
69
|
+
- **Never a confident falsehood.** An axis that could not be measured is
|
|
70
|
+
`unknown`, never `0` and never "not reachable".
|
|
71
|
+
- **Vendor-agnostic inference.** Logic never branches on a proprietary name;
|
|
72
|
+
names are evidence, never the rule.
|
|
73
|
+
- Run the suite with `-o addopts=""` to see the summary line; the entry point for
|
|
74
|
+
local runs is `run_cli.py`, not `python -m sourcecode.cli`.
|
|
@@ -84,6 +84,62 @@ tests/
|
|
|
84
84
|
3. Register it in `detectors/__init__.py` → `build_default_detectors()`
|
|
85
85
|
4. Add tests in `tests/test_detector_<language>.py`
|
|
86
86
|
|
|
87
|
+
### Adding a new command (or a new answer to an existing one)
|
|
88
|
+
|
|
89
|
+
**Every command that answers a question ships two affordances. Both are
|
|
90
|
+
mandatory, both are enforced by `tests/test_output_affordances.py`, and the
|
|
91
|
+
battery derives its population from the CLI registry — so a new command fails
|
|
92
|
+
these tests until a decision has been taken about each.**
|
|
93
|
+
|
|
94
|
+
**1. The answer is copyable.** Declare the flag with the shared factory, never a
|
|
95
|
+
fresh `typer.Option`, so all ~75 commands describe it identically and all bind
|
|
96
|
+
the same shorthand:
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
@app.command("my-command")
|
|
100
|
+
def my_command_cmd(
|
|
101
|
+
path: Path = typer.Argument(Path(".")),
|
|
102
|
+
output_path: Optional[Path] = typer.Option(None, "--output", "-o"),
|
|
103
|
+
copy: bool = _copy_option(), # ← --copy / -c
|
|
104
|
+
) -> None:
|
|
105
|
+
...
|
|
106
|
+
_emit_command_output(payload, output_path, copy, success_msg=...)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Then *wire it*. A declared `--copy` that reaches `_emit_command_output` as a
|
|
110
|
+
hard-coded `False` parses fine and does nothing; the battery fails on that
|
|
111
|
+
specific shape, because it is how four commands shipped a flag that silently
|
|
112
|
+
dropped the answer on their empty-repository path. Commands that answer in lines
|
|
113
|
+
rather than in a payload use `_emit_text_output(...)` or `_TextAnswer` instead.
|
|
114
|
+
|
|
115
|
+
**2. The wait is visible.** If the command analyses a repository, start a spinner
|
|
116
|
+
and stop it in a `finally`, so an error is never printed underneath a live
|
|
117
|
+
spinner frame:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
_prog = Progress()
|
|
121
|
+
_prog.start("building IR")
|
|
122
|
+
try:
|
|
123
|
+
result = analyse(target)
|
|
124
|
+
finally:
|
|
125
|
+
_prog.stop() # .finish() when a "✓ done (3.2s)" line is wanted
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
`Progress` costs nothing when nobody is watching: it disables itself off-TTY, in
|
|
129
|
+
CI, under `NO_COLOR`, and on `TERM=dumb`, and it only ever writes to stderr —
|
|
130
|
+
piped output and MCP sessions stay byte-identical. Put the spinner in the shared
|
|
131
|
+
helper when several commands delegate to one (`retrieve`'s 29 intents share
|
|
132
|
+
`_run_retrieval_intent`; `onboard`/`review-pr`/`fix-bug` delegate to
|
|
133
|
+
`prepare-context`), and the battery will see it through one level of call.
|
|
134
|
+
|
|
135
|
+
**Opting out** is allowed and must be explicit: add the command to
|
|
136
|
+
`cli.COMMANDS_WITHOUT_COPY` or `cli.COMMANDS_WITHOUT_PROGRESS` **with an inline
|
|
137
|
+
comment giving the reason**. A command whose stdout is a confirmation of an
|
|
138
|
+
effect (`cache clear`) does not need `--copy`; one that reads local metadata and
|
|
139
|
+
returns in milliseconds (`version`) does not need a spinner. Every other command
|
|
140
|
+
does. The exemption sets are checked against the registry too, so a renamed or
|
|
141
|
+
deleted command cannot leave a stale entry that silently excuses its successor.
|
|
142
|
+
|
|
87
143
|
### Modifying the output schema
|
|
88
144
|
|
|
89
145
|
The schema is defined in `schema.py` as Python dataclasses. All fields must have defaults so that existing consumers are not broken. Add new fields at the end of the relevant dataclass with `Optional[T] = None` or `list[T] = field(default_factory=list)`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 4.5.
|
|
3
|
+
Version: 4.5.2
|
|
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.5.
|
|
100
|
+
ask version # ask 4.5.2 — and, on a build that has aged,
|
|
101
101
|
# how many releases have probably shipped since
|
|
102
102
|
```
|
|
103
103
|
|
|
@@ -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.5.
|
|
62
|
+
ask version # ask 4.5.2 — and, on a build that has aged,
|
|
63
63
|
# how many releases have probably shipped since
|
|
64
64
|
```
|
|
65
65
|
|