sourcecode 5.8.30__tar.gz → 5.8.31__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sourcecode-5.8.31/.github/workflows/build-windows.yml +78 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/.github/workflows/windows-battery.yml +0 -2
- {sourcecode-5.8.30 → sourcecode-5.8.31}/CHANGELOG.md +9 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/PKG-INFO +4 -4
- {sourcecode-5.8.30 → sourcecode-5.8.31}/README.md +3 -3
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/DEFECT-LEDGER.md +1 -1
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/DEVELOPMENT-ROADMAP.md +44 -1
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/EXECUTIVE-ROADMAP.md +25 -1
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/USER_GUIDE.md +3 -3
- {sourcecode-5.8.30 → sourcecode-5.8.31}/pyproject.toml +1 -1
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/cache.py +7 -1
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/cli.py +56 -7
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/envelope.py +1 -1
- sourcecode-5.8.31/src/sourcecode/github_diff.py +85 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/license.py +11 -2
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp_nudge.py +11 -1
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/migrate_check.py +4 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/packs.py +82 -24
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/readonly.py +3 -1
- sourcecode-5.8.30/.github/workflows/build-windows.yml +0 -40
- sourcecode-5.8.30/src/sourcecode/github_diff.py +0 -34
- {sourcecode-5.8.30 → sourcecode-5.8.31}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/.gitignore +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/.ruff.toml +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/CLAUDE.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/CONTRIBUTING.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/LICENSE +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/NOTICE +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/SECURITY.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/CACHE.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/overview.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/contracts.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/licensing-schema.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/migrate-check.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/README.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/posture.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/privacy.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/schema.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/hatch_build.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/scripts/perf_gate.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/scripts/perf_harness.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/scripts/test_fast.sh +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/supabase/functions/README.md +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.8.30 → sourcecode-5.8.31}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name: Build Windows EXE
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
build-windows:
|
|
8
|
+
runs-on: windows-latest
|
|
9
|
+
|
|
10
|
+
steps:
|
|
11
|
+
- name: Checkout repository
|
|
12
|
+
uses: actions/checkout@v4
|
|
13
|
+
|
|
14
|
+
- name: Setup Python
|
|
15
|
+
uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.11"
|
|
18
|
+
|
|
19
|
+
- name: Install dependencies
|
|
20
|
+
run: |
|
|
21
|
+
python -m pip install --upgrade pip
|
|
22
|
+
pip install build
|
|
23
|
+
pip install nuitka
|
|
24
|
+
|
|
25
|
+
- name: Build wheel artifact
|
|
26
|
+
run: python -m build --wheel --outdir build/wheel
|
|
27
|
+
|
|
28
|
+
- name: Install wheel artifact
|
|
29
|
+
run: pip install build/wheel/*.whl
|
|
30
|
+
|
|
31
|
+
- name: Build EXE
|
|
32
|
+
run: |
|
|
33
|
+
python -m nuitka ^
|
|
34
|
+
--onefile ^
|
|
35
|
+
--standalone ^
|
|
36
|
+
--follow-imports ^
|
|
37
|
+
--assume-yes-for-downloads ^
|
|
38
|
+
--output-dir=build ^
|
|
39
|
+
run_cli.py
|
|
40
|
+
shell: cmd
|
|
41
|
+
|
|
42
|
+
- name: Verify detached worker from installed artifact
|
|
43
|
+
shell: pwsh
|
|
44
|
+
run: |
|
|
45
|
+
$root = Join-Path $env:RUNNER_TEMP "ask-detached-repo"
|
|
46
|
+
$output = Join-Path $env:RUNNER_TEMP "ask-detached.json"
|
|
47
|
+
New-Item -ItemType Directory -Force (Join-Path $root "src/main/java/com/acme") | Out-Null
|
|
48
|
+
Set-Content -Path (Join-Path $root "pom.xml") -Value '<project><modelVersion>4.0.0</modelVersion><groupId>com.acme</groupId><artifactId>app</artifactId><version>1</version></project>'
|
|
49
|
+
Set-Content -Path (Join-Path $root "src/main/java/com/acme/App.java") -Value 'package com.acme; public class App {}'
|
|
50
|
+
python -m sourcecode spring-audit $root --output $output --detach
|
|
51
|
+
for ($i = 0; $i -lt 60 -and -not (Test-Path $output); $i++) { Start-Sleep -Seconds 1 }
|
|
52
|
+
if (-not (Test-Path $output)) { throw "Detached worker did not write its artifact" }
|
|
53
|
+
$payload = Get-Content $output -Raw | ConvertFrom-Json
|
|
54
|
+
if (-not $payload) { throw "Detached artifact is not valid JSON" }
|
|
55
|
+
|
|
56
|
+
- name: Verify pack fixes from installed artifact
|
|
57
|
+
shell: pwsh
|
|
58
|
+
run: |
|
|
59
|
+
$root = Join-Path $env:RUNNER_TEMP "ask-pack-repo"
|
|
60
|
+
New-Item -ItemType Directory -Force (Join-Path $root "src/main/java/com/acme") | Out-Null
|
|
61
|
+
New-Item -ItemType Directory -Force (Join-Path $root "src/test/java/com/acme") | Out-Null
|
|
62
|
+
Set-Content -Path (Join-Path $root "pom.xml") -Value '<project><modelVersion>4.0.0</modelVersion><groupId>com.acme</groupId><artifactId>app</artifactId><version>1</version></project>'
|
|
63
|
+
Set-Content -Path (Join-Path $root "src/main/java/com/acme/App.java") -Value 'package com.acme; public class App {}'
|
|
64
|
+
Set-Content -Path (Join-Path $root "src/test/java/com/acme/AppTest.java") -Value 'package com.acme; public class AppTest {}'
|
|
65
|
+
git -C $root init --quiet
|
|
66
|
+
git -C $root config user.email ci@example.invalid
|
|
67
|
+
git -C $root config user.name ASK-CI
|
|
68
|
+
git -C $root add .
|
|
69
|
+
git -C $root commit --quiet -m baseline
|
|
70
|
+
Add-Content -Path (Join-Path $root "src/test/java/com/acme/AppTest.java") -Value '// test-only change'
|
|
71
|
+
python -m sourcecode pack gate $root --since HEAD --format json --output-dir (Join-Path $env:RUNNER_TEMP "ask-gate")
|
|
72
|
+
python -m sourcecode pack assessment $root --only posture,risk --compact --progress stderr
|
|
73
|
+
|
|
74
|
+
- name: Upload artifact
|
|
75
|
+
uses: actions/upload-artifact@v4
|
|
76
|
+
with:
|
|
77
|
+
name: sourcecode-windows
|
|
78
|
+
path: build/**/*.exe
|
|
@@ -17,8 +17,6 @@ jobs:
|
|
|
17
17
|
battery:
|
|
18
18
|
runs-on: windows-latest
|
|
19
19
|
env:
|
|
20
|
-
NO_COLOR: "1"
|
|
21
|
-
TERM: "dumb"
|
|
22
20
|
# CLI payloads and diagnostics are UTF-8 contracts. Without this Windows
|
|
23
21
|
# decodes child-process output with the active code page, turning a valid
|
|
24
22
|
# JSON answer containing source text into an empty/failed test response.
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.8.31] — 2026-08-26
|
|
4
|
+
|
|
5
|
+
*Windows portability and release-evidence remediation. Cache and licensing test
|
|
6
|
+
isolation now honours explicit `HOME` overrides, warm workers use the active
|
|
7
|
+
interpreter, migration and identity paths remain portable, and the Windows CI
|
|
8
|
+
battery no longer disables the rendered help contract. Unix-only permission probes
|
|
9
|
+
are skipped on Windows. Local full-suite verification is green; native Windows
|
|
10
|
+
release-artifact verification remains the CI acceptance step.*
|
|
11
|
+
|
|
3
12
|
## [5.8.30] — 2026-08-26
|
|
4
13
|
|
|
5
14
|
*Pack audit remediation release. Unresolved test-only Java files no longer broaden
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.8.
|
|
3
|
+
Version: 5.8.31
|
|
4
4
|
Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/HarounDominique/sourcecode
|
|
6
6
|
Project-URL: Repository, https://github.com/HarounDominique/sourcecode
|
|
@@ -59,7 +59,7 @@ Description-Content-Type: text/markdown
|
|
|
59
59
|
> question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
|
|
60
60
|
> before inspecting a repository whose telemetry policy you need to control.
|
|
61
61
|
|
|
62
|
-

|
|
63
63
|

|
|
64
64
|
|
|
65
65
|
Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
|
|
@@ -177,7 +177,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
177
177
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
178
178
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
179
179
|
|
|
180
|
-
**Current performance status.** Release 5.8.
|
|
180
|
+
**Current performance status.** Release 5.8.31 retains the shared Canonical IR
|
|
181
181
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
182
182
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
183
183
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -210,7 +210,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
210
210
|
# pip / pipx
|
|
211
211
|
pipx install sourcecode # or: pip install sourcecode
|
|
212
212
|
|
|
213
|
-
ask version # ask 5.8.
|
|
213
|
+
ask version # ask 5.8.31 — and, on a build that has aged,
|
|
214
214
|
# how many releases have probably shipped since
|
|
215
215
|
```
|
|
216
216
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
> question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
|
|
11
11
|
> before inspecting a repository whose telemetry policy you need to control.
|
|
12
12
|
|
|
13
|
-

|
|
14
14
|

|
|
15
15
|
|
|
16
16
|
Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
|
|
@@ -128,7 +128,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
128
128
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
129
129
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
130
130
|
|
|
131
|
-
**Current performance status.** Release 5.8.
|
|
131
|
+
**Current performance status.** Release 5.8.31 retains the shared Canonical IR
|
|
132
132
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
133
133
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
134
134
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -161,7 +161,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
161
161
|
# pip / pipx
|
|
162
162
|
pipx install sourcecode # or: pip install sourcecode
|
|
163
163
|
|
|
164
|
-
ask version # ask 5.8.
|
|
164
|
+
ask version # ask 5.8.31 — and, on a build that has aged,
|
|
165
165
|
# how many releases have probably shipped since
|
|
166
166
|
```
|
|
167
167
|
|
|
@@ -25,7 +25,7 @@ checkout by `52bcc36` and `f89ae18`, with focused regression batteries passing;
|
|
|
25
25
|
artefact verification remains pending. The pack's `--since` timing is additional evidence
|
|
26
26
|
for `AUD-604-P01`, not a duplicate performance finding.
|
|
27
27
|
|
|
28
|
-
**Current `5.8.
|
|
28
|
+
**Current `5.8.31` queue:** artefact verification for `AUD-604-R01`; the two `AUD-605`
|
|
29
29
|
fixes are included in this release and await release-artefact verification.
|
|
30
30
|
|
|
31
31
|
**External `5.8.28` audit received, 2026-08-26 - `AUD-604`.**
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*Chief-engineer development record. This is the internal, dev-facing counterpart to the
|
|
4
4
|
customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
|
|
5
5
|
|
|
6
|
-
> **CURRENT QUEUE — release `5.8.
|
|
6
|
+
> **CURRENT QUEUE — release `5.8.31`, following the external pack audit of `5.8.28`, received 2026-08-26.** `AUD-605-G01` (P2,
|
|
7
7
|
> unresolved test files broadened pack-gate uncertainty to unrelated endpoints) and `AUD-605-U01` (P2, pack assessment did not
|
|
8
8
|
> forward foreground progress) are implemented in the current checkout in commits `52bcc36` and `f89ae18`; focused batteries pass.
|
|
9
9
|
> The pack audit adds evidence to `AUD-604-P01`, but does not open a duplicate performance row.
|
|
@@ -16,6 +16,49 @@ customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
|
|
|
16
16
|
> Pack evidence is in [`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md). Release-artifact
|
|
17
17
|
> verification of the two pack fixes remains after `AUD-604-R01`.
|
|
18
18
|
|
|
19
|
+
## Current Product Direction
|
|
20
|
+
|
|
21
|
+
This is the adopted interpretation of the external strategy report. It supersedes
|
|
22
|
+
the report's broader or duplicate proposals while retaining the historical queues
|
|
23
|
+
below as evidence. The governing product boundary remains the deterministic,
|
|
24
|
+
source-backed Java/Spring evidence layer in [`PRODUCT-ROUTE.md`](PRODUCT-ROUTE.md).
|
|
25
|
+
|
|
26
|
+
### Fixes
|
|
27
|
+
|
|
28
|
+
| ID | Priority | Scope | Acceptance criteria | Status/order |
|
|
29
|
+
|---|---:|---|---|---|
|
|
30
|
+
| `DIR-F01` | P1 | Replace pattern-only security decisions with shared semantic authorities. Distinguish definitions from invocations and production code from tests, examples and library code. | Each affected rule has a named population, source-backed reason and `non_coverage`; false-positive fixtures cover the reported `SEC-004` / `DEAD-001` shapes. | **Implemented:** current security scans exclude platform definitions, imports, Javadoc and live controls; future rules must use the same authority. |
|
|
31
|
+
| `DIR-F02` | P1 | Extend safe guardrails to genuinely heavy commands and compositions. | A bounded run stops the phase doing the work, publishes partial counts and confidence reduction, preserves completed evidence, and never presents an advisory-only command as enforceable. | **Implemented:** `BUDGETED_ANALYSIS_COMMANDS`, `PhasedRun` and partial-answer contracts bind the current heavy population. New heavy commands must join this registry. |
|
|
32
|
+
| `DIR-F03` | P1 | Finish CI gate ergonomics without weakening its evidence contract. | Verify the `5.8.31` pack fixes in release artefacts, then add only evidence-backed improvements such as PR-native change resolution and selective component control. `AUD-605-G01` is already fixed; test-only unresolved files must not return as a roadmap item. | **Implemented in `4d87532`:** `pack gate --pr` uses GitHub changed files and requires the exact local base SHA. Release-artifact verification remains. |
|
|
33
|
+
| `DIR-F04` | P2 | Consolidate reusable semantic predicates used by security and dead-code rules. | One authority is consumed by all relevant rules; population and parity tests prevent a rule from silently reverting to textual matching. This is an implementation constraint, not a new user-facing command. | **Implemented for current rules:** `source_text` owns comment/Javadoc views and security scans consume them. Future rules remain bound to this constraint. |
|
|
34
|
+
| `DIR-F05` | P2 | Continue operational observability for cost and confidence. | Timed answers publish cache state, phase/component progress, coverage, confidence and attributable run conditions; no cross-repository SLA or single-machine duration promise is published. | **Implemented for current timed surfaces;** continuous admission rule for new ones. |
|
|
35
|
+
|
|
36
|
+
### Features
|
|
37
|
+
|
|
38
|
+
| ID | Priority | Feature | Boundary and acceptance criteria | Status/order |
|
|
39
|
+
|---|---:|---|---|---|
|
|
40
|
+
| `DIR-X01` | P1 | Narrow Spring data-flow analysis. | Start with HTTP inputs, SQL/command/network/template sinks and explicit sanitizers. Publish confirmed paths, confidence and non-coverage; do not claim CodeQL-equivalent coverage. Design only after `DIR-F01` and `DIR-F02` are stable. | Conditional medium-term bet |
|
|
41
|
+
| `DIR-X02` | P2 | CI and developer-surface integrations. | Prefer a thin GitHub Action and existing SARIF/CI renderers over another analyzer. A future IDE integration must consume ASK JSON/MCP evidence, preserve attribution and add no second semantic model. | **Implemented baseline:** MCP, SARIF and GitHub/GitLab renderers ship. A distributable Action or IDE surface needs named-buyer validation. |
|
|
42
|
+
| `DIR-X03` | P2 | Selective and reusable pack execution. | `pack assessment` may select or reuse declared components only when tree state, inputs and fingerprints prove reuse; the manifest must say what ran and what was reused. This extends existing `S-24`, not a new pack architecture. | **Selection implemented in `9f4c0e1`:** `--only` runs declared components and publishes omissions. Artifact reuse remains evidence-gated. |
|
|
43
|
+
| `DIR-X04` | P3 | Targeted Spring ecosystem coverage. | Admit Spring Cloud, GraphQL or another adjacent surface only when a named buyer supplies a reproducible gap and the new parser/rule set preserves the same evidence contract. | Evidence-gated |
|
|
44
|
+
|
|
45
|
+
### Explicitly Rejected
|
|
46
|
+
|
|
47
|
+
These are not roadmap work: `--format` and `--compact` remain separate contracts;
|
|
48
|
+
`ask defects` is not a product priority; broad .NET/Node/TypeScript expansion is
|
|
49
|
+
deferred; ML-based prioritisation and automatic refactoring stay outside ASK's
|
|
50
|
+
deterministic core; SBOM/dashboard/hosted-agent scope is outside the product route;
|
|
51
|
+
and competitor accuracy claims require a reproducible benchmark before they can be
|
|
52
|
+
documented as facts.
|
|
53
|
+
|
|
54
|
+
### Decision Order
|
|
55
|
+
|
|
56
|
+
1. Verify the `5.8.31` release artefacts, especially Windows detached execution and packs.
|
|
57
|
+
2. Keep `DIR-F01`, `DIR-F02`, `DIR-F04` and `DIR-F05` as admission constraints for every new rule or heavy command.
|
|
58
|
+
3. Validate `DIR-F03` and `DIR-X03` on named CI repositories before adding artifact reuse or a packaged Action.
|
|
59
|
+
4. Design `DIR-X01` only after a source/sink/sanitizer corpus establishes its coverage contract; admit `DIR-X04` only from buyer evidence.
|
|
60
|
+
5. Keep all rejected items out of active planning unless the product route is explicitly revised.
|
|
61
|
+
|
|
19
62
|
> **Previous queue — external audit of `5.8.27`, received 2026-08-26.** `AUD-603-R01` (P1,
|
|
20
63
|
> detached worker exits because the module entry point is not invoked) -> `AUD-603-S01`
|
|
21
64
|
> (P1, DEAD-001 comment-prose false positive) -> `AUD-603-O01` (P2, posture diff compact
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
> `pack assessment` and `pack gate`, and make evidence and safe change the
|
|
6
6
|
> product surface. This roadmap must not introduce a competing product thesis.
|
|
7
7
|
|
|
8
|
-
> **CURRENT STATUS — release `5.8.
|
|
8
|
+
> **CURRENT STATUS — release `5.8.31`, following the `5.8.28` external audit intake, 2026-08-26.** The semantic
|
|
9
9
|
> regression matrix remains green: detached execution, DEAD-001 comment handling,
|
|
10
10
|
> Boot 3 applicability, non-interactive selftest scope communication, nested diff
|
|
11
11
|
> bounding and help timing guidance are confirmed fixed. The reported cold-cost signal
|
|
@@ -28,6 +28,30 @@
|
|
|
28
28
|
> not a separate regression claim. Details are in
|
|
29
29
|
> [`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md).
|
|
30
30
|
|
|
31
|
+
> **ADOPTED DIRECTION — strategy review, 2026-08-26.** ASK will deepen its existing
|
|
32
|
+
> moat instead of becoming a general SAST or AI platform. Semantic security accuracy,
|
|
33
|
+
> safe guardrails and honest operational metrics are now implementation constraints;
|
|
34
|
+
> CI gate ergonomics and selective pack execution are implemented in `4d87532` and
|
|
35
|
+
> `9f4c0e1`. The remaining strategic candidates are a narrowly scoped Spring data-flow
|
|
36
|
+
> prototype and evidence-led coverage of adjacent Spring surfaces.
|
|
37
|
+
|
|
38
|
+
> **What this means in practice.** Every fix must name its analysed population, source
|
|
39
|
+
> authority, confidence and non-coverage, and ship with a regression fixture. Every new
|
|
40
|
+
> feature must reuse the shared semantic model, preserve deterministic evidence and have
|
|
41
|
+
> a named buyer or reproducible user gap. `AUD-605-G01` is already fixed in 5.8.31; it is
|
|
42
|
+
> not reopened as a future feature merely because the report described the old behaviour.
|
|
43
|
+
|
|
44
|
+
> **Explicitly out of scope.** `--format` and `--compact` remain separate contracts;
|
|
45
|
+
> a defect-ledger command, broad .NET/Node/TypeScript support, ML prioritisation,
|
|
46
|
+
> automatic refactoring, generic SBOM/dashboard management and a hosted coding agent
|
|
47
|
+
> are rejected for this route. Competitor accuracy figures are not roadmap evidence
|
|
48
|
+
> without a reproducible benchmark.
|
|
49
|
+
|
|
50
|
+
> **Order:** verify the 5.8.31 artefacts; validate the new CI/pack paths with named buyers;
|
|
51
|
+
> then admit data-flow only with a source/sink/sanitizer corpus and ecosystem work only with
|
|
52
|
+
> buyer evidence. Detailed IDs, boundaries and acceptance criteria are in
|
|
53
|
+
> [`DEVELOPMENT-ROADMAP.md`](DEVELOPMENT-ROADMAP.md) under *Current Product Direction*.
|
|
54
|
+
|
|
31
55
|
> **CURRENT STATUS — `5.8.26` external audit intake, 2026-08-23.** The active engineering
|
|
32
56
|
> queue is `impact-chain` bounded-output regression, `posture --diff --compact` usability,
|
|
33
57
|
> deterministic root fingerprints, sustained warm-path performance and closure-provenance
|
|
@@ -46,13 +46,13 @@ CLI commands — impact, endpoints, spring-audit, explain, … each a pro
|
|
|
46
46
|
The key idea: the extraction is **content-addressed**. Commands reuse the parse cache and,
|
|
47
47
|
where their analysed scope matches, the shared Canonical IR; `ask cache model` names what a
|
|
48
48
|
warm buys for each command rather than implying that every projection costs the same. In
|
|
49
|
-
5.8.
|
|
49
|
+
5.8.31, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
|
|
50
50
|
model across all declared label seeds. (The extraction and consumption contract is fixed in
|
|
51
51
|
the architecture ADRs 0001–0004 under `docs/architecture/`.)
|
|
52
52
|
|
|
53
53
|
The current external pack audit intake is tracked in
|
|
54
54
|
[`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md);
|
|
55
|
-
the two pack fixes are included in release 5.8.
|
|
55
|
+
the two pack fixes are included in release 5.8.31, with release-artifact verification
|
|
56
56
|
remaining for detached execution and pack evidence.
|
|
57
57
|
|
|
58
58
|
---
|
|
@@ -183,7 +183,7 @@ pipx install sourcecode # isolated install, no venv needed
|
|
|
183
183
|
|
|
184
184
|
# Verify
|
|
185
185
|
ask version
|
|
186
|
-
# ask 5.8.
|
|
186
|
+
# ask 5.8.31
|
|
187
187
|
```
|
|
188
188
|
|
|
189
189
|
Requires Python 3.9+.
|
|
@@ -82,6 +82,12 @@ CORE_SCHEMA_VERSION: str = "1"
|
|
|
82
82
|
ANALYZER_CACHE_VERSION: str = "1"
|
|
83
83
|
|
|
84
84
|
|
|
85
|
+
def _user_home() -> Path:
|
|
86
|
+
"""Honor an explicit HOME override before Windows' USERPROFILE fallback."""
|
|
87
|
+
configured = os.environ.get("HOME")
|
|
88
|
+
return Path(configured) if configured else Path.home()
|
|
89
|
+
|
|
90
|
+
|
|
85
91
|
def analyzer_fingerprint() -> str:
|
|
86
92
|
"""Content hash of the analysis code, memoised for the process.
|
|
87
93
|
|
|
@@ -325,7 +331,7 @@ def cache_dir(repo_root: Path) -> Path:
|
|
|
325
331
|
Override the base via ``SOURCECODE_CACHE_DIR``.
|
|
326
332
|
"""
|
|
327
333
|
env_base = os.environ.get("SOURCECODE_CACHE_DIR", "")
|
|
328
|
-
base: Path = Path(env_base) if env_base else
|
|
334
|
+
base: Path = Path(env_base) if env_base else _user_home() / ".sourcecode" / "cache"
|
|
329
335
|
return base / repo_id(repo_root)
|
|
330
336
|
|
|
331
337
|
|
|
@@ -3415,7 +3415,6 @@ COMMANDS_WITHOUT_PROGRESS: "frozenset[str]" = frozenset({
|
|
|
3415
3415
|
"baseline trend", # same command under the group name
|
|
3416
3416
|
"regress", # reads two named JSON files; analyses no repository
|
|
3417
3417
|
"pack list", # fixed local catalog
|
|
3418
|
-
"pack assessment", # child progress is captured for aggregate JSON
|
|
3419
3418
|
"pack gate", # child progress is captured for aggregate JSON
|
|
3420
3419
|
})
|
|
3421
3420
|
|
|
@@ -4332,6 +4331,11 @@ def pack_assessment_cmd(
|
|
|
4332
4331
|
help="Deployment artefact for posture evidence (repeatable: k8s, Compose, Dockerfile, WebLogic, dotenv or launch script).",
|
|
4333
4332
|
),
|
|
4334
4333
|
compact: bool = typer.Option(False, "--compact", help="Keep component reports bounded where supported."),
|
|
4334
|
+
only: Optional[str] = typer.Option(
|
|
4335
|
+
None,
|
|
4336
|
+
"--only",
|
|
4337
|
+
help="Comma-separated assessment components to run; audit-report requires risk.",
|
|
4338
|
+
),
|
|
4335
4339
|
output_dir: Optional[Path] = typer.Option(
|
|
4336
4340
|
None,
|
|
4337
4341
|
"--output-dir",
|
|
@@ -4340,13 +4344,14 @@ def pack_assessment_cmd(
|
|
|
4340
4344
|
format: str = _format_option(help="Output format: json, yaml or markdown."),
|
|
4341
4345
|
copy: bool = _copy_option(),
|
|
4342
4346
|
output_path: Optional[Path] = _output_option(),
|
|
4347
|
+
progress_mode: Optional[str] = _progress_option(),
|
|
4343
4348
|
) -> None:
|
|
4344
4349
|
"""Modernization and Risk Assessment pack.
|
|
4345
4350
|
|
|
4346
4351
|
Composes existing commands into one consumable report. Individual commands
|
|
4347
4352
|
remain available and are the source of truth for every artifact.
|
|
4348
4353
|
"""
|
|
4349
|
-
from sourcecode.packs import render_assessment_markdown, run_assessment
|
|
4354
|
+
from sourcecode.packs import assessment_components, render_assessment_markdown, run_assessment
|
|
4350
4355
|
|
|
4351
4356
|
root = _admit_path(path)
|
|
4352
4357
|
if profile and deployment:
|
|
@@ -4357,10 +4362,16 @@ def pack_assessment_cmd(
|
|
|
4357
4362
|
)
|
|
4358
4363
|
raise typer.Exit(code=2)
|
|
4359
4364
|
_enforce_format("pack-assessment", format)
|
|
4365
|
+
try:
|
|
4366
|
+
selected_components = assessment_components(only.split(",") if only is not None else None)
|
|
4367
|
+
except ValueError as exc:
|
|
4368
|
+
_emit_error_json(INVALID_INPUT_CODE, str(exc))
|
|
4369
|
+
raise typer.Exit(code=2)
|
|
4360
4370
|
_progress = Progress().start("pack assessment")
|
|
4361
4371
|
try:
|
|
4362
4372
|
data = run_assessment(
|
|
4363
4373
|
root, profile=profile, deployment=deployment, compact=compact, output_dir=output_dir,
|
|
4374
|
+
selected_components=selected_components,
|
|
4364
4375
|
progress=lambda done, total, component: _progress.work(
|
|
4365
4376
|
done, total, stage=f"pack assessment: {component}",
|
|
4366
4377
|
unit="components", estimate=False,
|
|
@@ -4390,7 +4401,12 @@ def pack_assessment_cmd(
|
|
|
4390
4401
|
@pack_app.command("gate")
|
|
4391
4402
|
def pack_gate_cmd(
|
|
4392
4403
|
path: Path = typer.Argument(Path("."), help="Repository path (default: current directory)."),
|
|
4393
|
-
since: str = typer.Option(
|
|
4404
|
+
since: Optional[str] = typer.Option(None, "--since", help="Local Git ref used as the comparison base."),
|
|
4405
|
+
pr: Optional[int] = typer.Option(
|
|
4406
|
+
None,
|
|
4407
|
+
"--pr",
|
|
4408
|
+
help="GitHub pull request number; resolves changed files and requires its base commit locally.",
|
|
4409
|
+
),
|
|
4394
4410
|
profile: Optional[str] = typer.Option(None, "--profile", help="Profile set used for posture evidence."),
|
|
4395
4411
|
compact: bool = typer.Option(False, "--compact", help="Omit component payload bodies from the aggregate."),
|
|
4396
4412
|
allow_unverified: bool = typer.Option(False, "--allow-unverified", help="Allow an unverified component to exit 0."),
|
|
@@ -4416,7 +4432,37 @@ def pack_gate_cmd(
|
|
|
4416
4432
|
from sourcecode.packs import run_gate
|
|
4417
4433
|
|
|
4418
4434
|
root = _admit_path(path, exit_code=2)
|
|
4419
|
-
|
|
4435
|
+
if since is not None and pr is not None:
|
|
4436
|
+
_emit_error_json(
|
|
4437
|
+
INVALID_INPUT_CODE,
|
|
4438
|
+
"--since and --pr describe mutually exclusive comparison bases.",
|
|
4439
|
+
hint="Use --since REF for a local comparison or --pr NUMBER for GitHub pull-request mode.",
|
|
4440
|
+
)
|
|
4441
|
+
raise typer.Exit(code=2)
|
|
4442
|
+
if since is None and pr is None:
|
|
4443
|
+
_emit_error_json(
|
|
4444
|
+
INVALID_INPUT_CODE,
|
|
4445
|
+
"pack gate requires --since REF or --pr NUMBER.",
|
|
4446
|
+
hint="Use --since origin/main, or --pr 123 when the GitHub base commit is available locally.",
|
|
4447
|
+
)
|
|
4448
|
+
raise typer.Exit(code=2)
|
|
4449
|
+
comparison_ref = since
|
|
4450
|
+
if pr is not None:
|
|
4451
|
+
try:
|
|
4452
|
+
from sourcecode.github_diff import pull_request_base_ref
|
|
4453
|
+
|
|
4454
|
+
comparison_ref, _description = pull_request_base_ref(root, pr)
|
|
4455
|
+
except Exception as exc:
|
|
4456
|
+
from sourcecode.github_diff import GitHubDiffError
|
|
4457
|
+
|
|
4458
|
+
if isinstance(exc, GitHubDiffError):
|
|
4459
|
+
_emit_error_json(INVALID_INPUT_CODE, str(exc), pr=pr)
|
|
4460
|
+
raise typer.Exit(code=2)
|
|
4461
|
+
raise
|
|
4462
|
+
data = run_gate(
|
|
4463
|
+
root, since=comparison_ref or "", pr=pr, profile=profile,
|
|
4464
|
+
allow_unverified=allow_unverified, compact=compact, output_dir=output_dir,
|
|
4465
|
+
)
|
|
4420
4466
|
if format in {"github-actions", "gitlab"}:
|
|
4421
4467
|
from sourcecode.ci_output import render_pack_gate_github_actions, render_pack_gate_gitlab
|
|
4422
4468
|
output = (render_pack_gate_github_actions(data)
|
|
@@ -18682,7 +18728,6 @@ def cache_warm_cmd(
|
|
|
18682
18728
|
this command reports. Cache ~/.sourcecode/cache and ~/.sourcecode between jobs,
|
|
18683
18729
|
or budget the cold run explicitly.
|
|
18684
18730
|
"""
|
|
18685
|
-
import shutil as _shutil
|
|
18686
18731
|
import subprocess as _sub
|
|
18687
18732
|
import time as _warm_time
|
|
18688
18733
|
# Warm exactly the path given. Resolving up to the enclosing git root warmed
|
|
@@ -18714,7 +18759,11 @@ def cache_warm_cmd(
|
|
|
18714
18759
|
f"(scoped to {target}; the enclosing git repository is {_git_root} — "
|
|
18715
18760
|
"git-derived signals are computed within the scope above)"
|
|
18716
18761
|
)
|
|
18717
|
-
|
|
18762
|
+
# Launch the worker through this interpreter rather than resolving a second
|
|
18763
|
+
# console script from PATH. A stale global script can otherwise warm one
|
|
18764
|
+
# package installation while the caller reads another one, leaving a view
|
|
18765
|
+
# apparently fresh even though its cache entry was never written.
|
|
18766
|
+
_sc_bin = [sys.executable, "-m", "sourcecode"]
|
|
18718
18767
|
|
|
18719
18768
|
# AUD-600-R01: which views a warm builds is `cache_model`'s fact, not a pair
|
|
18720
18769
|
# of literals here. The warm used to run one child with `--compact` and an
|
|
@@ -18763,7 +18812,7 @@ def cache_warm_cmd(
|
|
|
18763
18812
|
# stderr: the line above says it started, the spinner says it is still going.
|
|
18764
18813
|
_warmed_ids: list[str] = []
|
|
18765
18814
|
for _view in _selected:
|
|
18766
|
-
cmd = [_sc_bin, str(target), *_warm_view_flags(_view.id)]
|
|
18815
|
+
cmd = [*_sc_bin, str(target), *_warm_view_flags(_view.id)]
|
|
18767
18816
|
_prog = Progress()
|
|
18768
18817
|
_prog.start(f"running full analysis ({_view.id} view)")
|
|
18769
18818
|
try:
|
|
@@ -81,7 +81,7 @@ def _tree_state(target: Path) -> "tuple[str, str, str]":
|
|
|
81
81
|
return "", "", ""
|
|
82
82
|
# Git for Windows emits forward slashes while Path resolves to native
|
|
83
83
|
# separators. Restore the platform-native spelling for this path contract.
|
|
84
|
-
root =
|
|
84
|
+
root = portable_path(Path(root))
|
|
85
85
|
prefix = _git(["rev-parse", "--show-prefix"], target)
|
|
86
86
|
head = _git(["rev-parse", "HEAD"], target) or "no-commit"
|
|
87
87
|
dirty = _git(["status", "--porcelain"], target)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Optional GitHub CLI adapter for obtaining a pull-request file list."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import json
|
|
5
|
+
import subprocess
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class GitHubDiffError(RuntimeError):
|
|
10
|
+
"""The optional ``gh`` adapter could not provide a PR diff."""
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def pull_request_files(root: Path, number: int) -> tuple[list[str], str]:
|
|
14
|
+
"""Read changed paths through local ``gh`` auth, without fetching or writing."""
|
|
15
|
+
if number < 1:
|
|
16
|
+
raise GitHubDiffError("pull request number must be a positive integer")
|
|
17
|
+
command = ["gh", "pr", "diff", str(number), "--name-only"]
|
|
18
|
+
try:
|
|
19
|
+
result = subprocess.run(
|
|
20
|
+
command, cwd=root, capture_output=True, text=True, check=False,
|
|
21
|
+
)
|
|
22
|
+
except FileNotFoundError as exc:
|
|
23
|
+
raise GitHubDiffError(
|
|
24
|
+
"GitHub PR mode requires the `gh` CLI; install it or use --since/--files"
|
|
25
|
+
) from exc
|
|
26
|
+
except OSError as exc:
|
|
27
|
+
raise GitHubDiffError(f"could not start `gh`: {exc}") from exc
|
|
28
|
+
if result.returncode != 0:
|
|
29
|
+
detail = result.stderr.strip() or "GitHub CLI returned a non-zero status"
|
|
30
|
+
raise GitHubDiffError(
|
|
31
|
+
f"could not read pull request #{number}: {detail}. "
|
|
32
|
+
"Check `gh auth status` and the repository remote."
|
|
33
|
+
)
|
|
34
|
+
paths = [line.strip() for line in result.stdout.splitlines() if line.strip()]
|
|
35
|
+
return paths, f"gh pr diff {number} --name-only"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def pull_request_base_ref(root: Path, number: int) -> tuple[str, str]:
|
|
39
|
+
"""Return the exact local comparison commit for a GitHub pull request.
|
|
40
|
+
|
|
41
|
+
The gate's posture component compares two repository states, unlike
|
|
42
|
+
`pr-impact`, which only needs GitHub's changed-file list. Resolve the base
|
|
43
|
+
SHA through `gh`, then require that the checkout actually has that object;
|
|
44
|
+
a missing base is an actionable CI checkout problem, not a reason to compare
|
|
45
|
+
against an arbitrary branch name.
|
|
46
|
+
"""
|
|
47
|
+
if number < 1:
|
|
48
|
+
raise GitHubDiffError("pull request number must be a positive integer")
|
|
49
|
+
command = ["gh", "pr", "view", str(number), "--json", "baseRefName,baseRefOid"]
|
|
50
|
+
try:
|
|
51
|
+
result = subprocess.run(
|
|
52
|
+
command, cwd=root, capture_output=True, text=True, check=False,
|
|
53
|
+
)
|
|
54
|
+
except FileNotFoundError as exc:
|
|
55
|
+
raise GitHubDiffError(
|
|
56
|
+
"GitHub PR mode requires the `gh` CLI; install it or use --since"
|
|
57
|
+
) from exc
|
|
58
|
+
except OSError as exc:
|
|
59
|
+
raise GitHubDiffError(f"could not start `gh`: {exc}") from exc
|
|
60
|
+
if result.returncode != 0:
|
|
61
|
+
detail = result.stderr.strip() or "GitHub CLI returned a non-zero status"
|
|
62
|
+
raise GitHubDiffError(
|
|
63
|
+
f"could not read pull request #{number}: {detail}. "
|
|
64
|
+
"Check `gh auth status` and the repository remote."
|
|
65
|
+
)
|
|
66
|
+
try:
|
|
67
|
+
payload = json.loads(result.stdout)
|
|
68
|
+
except json.JSONDecodeError as exc:
|
|
69
|
+
raise GitHubDiffError("GitHub CLI returned invalid pull-request metadata") from exc
|
|
70
|
+
base_oid = payload.get("baseRefOid")
|
|
71
|
+
base_name = payload.get("baseRefName")
|
|
72
|
+
if not isinstance(base_oid, str) or not base_oid:
|
|
73
|
+
raise GitHubDiffError("GitHub pull-request metadata did not include baseRefOid")
|
|
74
|
+
check = subprocess.run(
|
|
75
|
+
["git", "cat-file", "-e", f"{base_oid}^{{commit}}"],
|
|
76
|
+
cwd=root, capture_output=True, text=True, check=False,
|
|
77
|
+
)
|
|
78
|
+
if check.returncode != 0:
|
|
79
|
+
label = base_name if isinstance(base_name, str) and base_name else base_oid
|
|
80
|
+
raise GitHubDiffError(
|
|
81
|
+
f"pull request #{number} base {label} ({base_oid}) is not present in this checkout. "
|
|
82
|
+
"Fetch the base commit first (for GitHub Actions, use actions/checkout with fetch-depth: 0), "
|
|
83
|
+
"or use --since with an available local ref."
|
|
84
|
+
)
|
|
85
|
+
return base_oid, f"gh pr view {number} base {base_name or base_oid} ({base_oid})"
|
|
@@ -89,11 +89,20 @@ if _SUPABASE_URL != _DEFAULT_SUPABASE_URL:
|
|
|
89
89
|
# which case prompts point to the documented Pro plans instead of a placeholder link.
|
|
90
90
|
_PURCHASE_URL: str = os.environ.get("SOURCECODE_PURCHASE_URL", "").strip()
|
|
91
91
|
|
|
92
|
+
|
|
93
|
+
def _user_home() -> Path:
|
|
94
|
+
"""Honor HOME overrides used by isolated subprocesses on every host."""
|
|
95
|
+
configured = os.environ.get("HOME") or os.environ.get("USERPROFILE")
|
|
96
|
+
if configured:
|
|
97
|
+
return Path(configured)
|
|
98
|
+
return Path.home()
|
|
99
|
+
|
|
100
|
+
|
|
92
101
|
# Config home: ~/.ask is canonical (product = ASK Engine). The legacy ~/.sourcecode
|
|
93
102
|
# stays READABLE so no existing user loses their license — reads prefer ~/.ask and
|
|
94
103
|
# fall back to ~/.sourcecode; writes always land in ~/.ask. Backward-compatible.
|
|
95
|
-
_LICENSE_DIR: Path =
|
|
96
|
-
_LEGACY_LICENSE_DIR: Path =
|
|
104
|
+
_LICENSE_DIR: Path = _user_home() / ".ask"
|
|
105
|
+
_LEGACY_LICENSE_DIR: Path = _user_home() / ".sourcecode"
|
|
97
106
|
_LICENSE_FILE: Path = _LICENSE_DIR / "license.json"
|
|
98
107
|
_DELTA_RUNS_FILE: Path = _LICENSE_DIR / "delta_runs.json"
|
|
99
108
|
|
|
@@ -18,11 +18,21 @@ Exit code of the calling command is unaffected.
|
|
|
18
18
|
"""
|
|
19
19
|
from __future__ import annotations
|
|
20
20
|
|
|
21
|
+
import os
|
|
21
22
|
import sys
|
|
22
23
|
from pathlib import Path
|
|
23
24
|
|
|
25
|
+
|
|
26
|
+
def _home_dir() -> Path:
|
|
27
|
+
"""Resolve the configured home even in minimal Windows subprocess envs."""
|
|
28
|
+
configured = os.environ.get("HOME") or os.environ.get("USERPROFILE")
|
|
29
|
+
if configured:
|
|
30
|
+
return Path(configured)
|
|
31
|
+
return Path.home()
|
|
32
|
+
|
|
33
|
+
|
|
24
34
|
# Stable path used as a session-level "already shown" sentinel.
|
|
25
|
-
_FLAG: Path =
|
|
35
|
+
_FLAG: Path = _home_dir() / ".sourcecode" / "nudge_shown"
|
|
26
36
|
|
|
27
37
|
_MSG = (
|
|
28
38
|
"→ Claude Desktop detected. "
|
|
@@ -3008,6 +3008,10 @@ def _scan_file(
|
|
|
3008
3008
|
*,
|
|
3009
3009
|
declared_types: "Optional[frozenset[str]]" = None,
|
|
3010
3010
|
) -> list[MigrationFinding]:
|
|
3011
|
+
# Findings are a portable payload contract. Callers may have obtained the
|
|
3012
|
+
# relative path with ``str(Path)`` on Windows, but the same repository file
|
|
3013
|
+
# must retain one identity across hosts and subprocess boundaries.
|
|
3014
|
+
rel_path = rel_path.replace("\\", "/")
|
|
3011
3015
|
findings: list[MigrationFinding] = []
|
|
3012
3016
|
type_deprecated = _primary_type_is_deprecated(source)
|
|
3013
3017
|
|